2016-01-02 02:15:37 -08:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""Tests the xonsh lexer."""
|
|
|
|
from __future__ import unicode_literals, print_function
|
|
|
|
import os
|
|
|
|
|
2016-06-22 23:20:37 +03:00
|
|
|
import pytest
|
2016-01-02 02:15:37 -08:00
|
|
|
|
2018-08-30 09:18:49 -05:00
|
|
|
from xonsh.wizard import (
|
|
|
|
Node,
|
|
|
|
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
|
2018-05-23 16:36:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
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)
|
2018-05-23 16:36:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
)
|
2018-05-23 16:36:05 -04:00
|
|
|
# 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"
|
|
|
|
)
|
2018-05-23 16:36:05 -04:00
|
|
|
obs = fi.dumps(sv.flatten())
|
|
|
|
assert exp == obs
|