File: test_wizard.py

package info (click to toggle)
xonsh 0.13.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,024 kB
  • sloc: python: 46,350; makefile: 136; sh: 41; xml: 17
file content (97 lines) | stat: -rw-r--r-- 2,351 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""Tests the xonsh lexer."""
import os

import pytest  # noqa F401

from xonsh.wizard import (
    FileInserter,
    Message,
    Pass,
    PrettyFormatter,
    Question,
    StateVisitor,
    Wizard,
)

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 f"${name} = {value!r}"


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