xonsh/tests/test_wizard.py

101 lines
2.4 KiB
Python
Raw Normal View History

2016-01-02 02:15:37 -08:00
# -*- coding: utf-8 -*-
"""Tests the xonsh lexer."""
from __future__ import unicode_literals, print_function
import os
import pytest # noqa F401
2016-01-02 02:15:37 -08:00
2018-08-30 09:18:49 -05:00
from xonsh.wizard import (
Wizard,
Pass,
PrettyFormatter,
Message,
Question,
StateVisitor,
FileInserter,
)
2016-01-02 02:15:37 -08:00
2018-08-30 09:18:49 -05:00
TREE0 = Wizard(children=[Pass(), Message(message="yo")])
TREE1 = Question("wakka?", {"jawaka": Pass()})
2016-01-02 02:15:37 -08:00
def test_pretty_format_tree0():
2018-08-30 09:18:49 -05:00
exp = "Wizard(children=[\n" " Pass(),\n" " Message('yo')\n" "])"
2016-01-02 02:15:37 -08:00
obs = PrettyFormatter(TREE0).visit()
2016-06-22 23:20:37 +03:00
assert exp == obs
assert exp == str(TREE0)
2018-08-30 09:18:49 -05:00
assert exp.replace("\n", "") == repr(TREE0)
2016-01-02 02:15:37 -08:00
def test_pretty_format_tree1():
2018-08-30 09:18:49 -05:00
exp = (
"Question(\n"
" question='wakka?',\n"
" responses={\n"
" 'jawaka': Pass()\n"
" }\n"
")"
)
2016-01-02 02:15:37 -08:00
obs = PrettyFormatter(TREE1).visit()
2016-06-22 23:20:37 +03:00
assert exp == obs
assert exp == str(TREE1)
2018-08-30 09:18:49 -05:00
assert exp.replace("\n", "") == repr(TREE1)
2016-01-02 02:15:37 -08:00
2016-01-02 11:28:36 -08:00
def test_state_visitor_store():
2018-08-30 09:18:49 -05:00
exp = {"rick": [{}, {}, {"and": "morty"}]}
2016-01-02 11:28:36 -08:00
sv = StateVisitor()
2018-08-30 09:18:49 -05:00
sv.store("/rick/2/and", "morty")
2016-01-02 11:28:36 -08:00
obs = sv.state
2016-06-22 23:20:37 +03:00
assert exp == obs
2016-01-02 11:28:36 -08:00
2018-08-30 09:18:49 -05:00
exp["rick"][1]["mr"] = "meeseeks"
sv.store("/rick/-2/mr", "meeseeks")
2016-06-22 23:20:37 +03:00
assert exp == obs
2017-12-18 19:22:06 -08:00
2018-08-30 09:18:49 -05:00
flat_exp = {
"/": {"rick": [{}, {"mr": "meeseeks"}, {"and": "morty"}]},
"/rick/": [{}, {"mr": "meeseeks"}, {"and": "morty"}],
"/rick/0/": {},
"/rick/1/": {"mr": "meeseeks"},
"/rick/1/mr": "meeseeks",
"/rick/2/": {"and": "morty"},
"/rick/2/and": "morty",
}
2017-12-18 19:22:06 -08:00
flat_obs = sv.flatten()
assert flat_exp == flat_obs
def dump_xonfig_env_mock(path, value):
2018-08-30 09:18:49 -05:00
name = os.path.basename(path.rstrip("/"))
return "${name} = {val!r}".format(name=name, val=value)
def test_tuple_store_and_write():
# setup
sv = StateVisitor()
2018-08-30 09:18:49 -05:00
sv.store("/env/XONSH_HISTORY_SIZE", (1073741824, "b"))
dump_rules = {
"/": None,
"/env/": None,
"/env/*": dump_xonfig_env_mock,
"/env/*/[0-9]*": None,
}
fi = FileInserter(
prefix="# XONSH WIZARD START",
suffix="# XONSH WIZARD END",
dump_rules=dump_rules,
default_file=None,
check=False,
ask_filename=False,
)
# run test
2018-08-30 09:18:49 -05:00
exp = (
"# XONSH WIZARD START\n"
"$XONSH_HISTORY_SIZE = (1073741824, 'b')\n"
"# XONSH WIZARD END\n"
)
obs = fi.dumps(sv.flatten())
assert exp == obs