# -*- coding: utf-8 -*- """Tests the xonsh lexer.""" from __future__ import unicode_literals, print_function import os import pytest from xonsh.wizard import ( Node, Wizard, Pass, PrettyFormatter, Message, Question, StateVisitor, FileInserter, ) TREE0 = Wizard(children=[Pass(), Message(message="yo")]) TREE1 = Question("wakka?", {"jawaka": Pass()}) def test_pretty_format_tree0(): exp = "Wizard(children=[\n" " Pass(),\n" " Message('yo')\n" "])" obs = PrettyFormatter(TREE0).visit() assert exp == obs assert exp == str(TREE0) assert exp.replace("\n", "") == repr(TREE0) def test_pretty_format_tree1(): exp = ( "Question(\n" " question='wakka?',\n" " responses={\n" " 'jawaka': Pass()\n" " }\n" ")" ) obs = PrettyFormatter(TREE1).visit() assert exp == obs assert exp == str(TREE1) assert exp.replace("\n", "") == repr(TREE1) def test_state_visitor_store(): exp = {"rick": [{}, {}, {"and": "morty"}]} sv = StateVisitor() sv.store("/rick/2/and", "morty") obs = sv.state assert exp == obs exp["rick"][1]["mr"] = "meeseeks" sv.store("/rick/-2/mr", "meeseeks") assert exp == obs 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", } flat_obs = sv.flatten() assert flat_exp == flat_obs def dump_xonfig_env_mock(path, value): name = os.path.basename(path.rstrip("/")) return "${name} = {val!r}".format(name=name, val=value) def test_tuple_store_and_write(): # setup sv = StateVisitor() 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 exp = ( "# XONSH WIZARD START\n" "$XONSH_HISTORY_SIZE = (1073741824, 'b')\n" "# XONSH WIZARD END\n" ) obs = fi.dumps(sv.flatten()) assert exp == obs