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
|
|
|
|
2017-12-15 14:43:35 -05:00
|
|
|
from xonsh.wizard import (Node, Wizard, Pass, PrettyFormatter,
|
2018-05-23 16:36:05 -04:00
|
|
|
Message, Question, StateVisitor, FileInserter)
|
2016-01-02 02:15:37 -08:00
|
|
|
|
|
|
|
|
|
|
|
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()
|
2016-06-22 23:20:37 +03:00
|
|
|
assert exp == obs
|
|
|
|
assert exp == str(TREE0)
|
|
|
|
assert exp.replace('\n', '') == repr(TREE0)
|
2016-01-02 02:15:37 -08:00
|
|
|
|
|
|
|
|
|
|
|
def test_pretty_format_tree1():
|
|
|
|
exp = ('Question(\n'
|
|
|
|
" question='wakka?',\n"
|
|
|
|
' responses={\n'
|
|
|
|
" 'jawaka': Pass()\n"
|
|
|
|
' }\n'
|
|
|
|
')')
|
|
|
|
obs = PrettyFormatter(TREE1).visit()
|
2016-06-22 23:20:37 +03:00
|
|
|
assert exp == obs
|
|
|
|
assert exp == str(TREE1)
|
|
|
|
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():
|
|
|
|
exp = {'rick': [{}, {}, {'and': 'morty'}]}
|
|
|
|
sv = StateVisitor()
|
|
|
|
sv.store('/rick/2/and', 'morty')
|
|
|
|
obs = sv.state
|
2016-06-22 23:20:37 +03:00
|
|
|
assert exp == obs
|
2016-01-02 11:28:36 -08: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
|
|
|
|
|
|
|
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
|
2018-05-23 16:36:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
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
|