Files
Sheerka-Old/tests/out/test_AsStrVisitor.py
kodjo 7dcaa9c111 Fixed #29: Parsers: Implement parsing memoization
Fixed #77 : Parser: ShortTermMemoryParser should be called separately
Fixed #78 : Remove VariableNode usage
Fixed #79 : ConceptManager: Implement compile caching
Fixed #80 : SheerkaExecute : parsers_key is not correctly computed
Fixed #81 : ValidateConceptEvaluator : Validate concept's where and pre clauses right after the parsing
Fixed #82 : SheerkaIsAManager: isa() failed when the set as a body
Fixed #83 : ValidateConceptEvaluator : Support BNF and SYA Concepts
Fixed #84 : ExpressionParser: Implement the parser as a standard parser
Fixed #85 : Services: Give order to services
Fixed #86 : cannot manage smart_get_attr(the short, color)
2021-06-07 21:14:03 +02:00

177 lines
7.6 KiB
Python

import pytest
from parsers.FormatRuleActionParser import FormatAstRawText, FormatAstVariable, FormatAstVariableNotFound, \
FormatAstSequence, FormatAstList, FormatAstDict
from out.AsStrVisitor import AsStrVisitor
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
class TestAsStrVisitor(TestUsingMemoryBasedSheerka):
@pytest.mark.parametrize("format_text, expected", [
(FormatAstRawText("hello word"), "hello word"),
(FormatAstVariable('xxx', value="hello word"), "hello word"),
(FormatAstVariable('xxx', value=1), "1"),
(FormatAstVariable('xxx', value=1.5), "1.5"),
(FormatAstVariable('xxx', value="hello word", debug=True), "'hello word'"),
(FormatAstVariable('xxx', value=1, debug=True), "1"),
(FormatAstVariable('xxx', value=1.5, debug=True), "1.5"),
(FormatAstVariable('xxx', value=False, debug=True), "False"),
(FormatAstVariableNotFound('va_name'), "\x1b[31mva_name\x1b[0m"),
])
def test_i_can_print_simple_ast(self, format_text, expected):
visitor = AsStrVisitor()
res = visitor.visit(format_text)
assert res == expected
def test_i_can_print_sequence(self, capsys):
visitor = AsStrVisitor()
sequence = FormatAstSequence([
FormatAstRawText("hello word"),
FormatAstVariable('xxx', value=1),
FormatAstVariableNotFound('va_name'),
FormatAstVariable('xxx', value="hello word", debug=True)
])
res = visitor.visit(sequence)
assert res == "hello word1\x1b[31mva_name\x1b[0m'hello word'"
def test_i_can_print_list(self, capsys):
visitor = AsStrVisitor()
lst = FormatAstList("xxx", items=[
FormatAstVariable('__item', index=0, value="first element"),
FormatAstVariable('__item', index=1, value="second element", debug=True),
])
res = visitor.visit(lst)
assert res == "first element\n'second element'"
def test_i_can_print_list_with_sub_items(self, capsys):
visitor = AsStrVisitor()
lst = FormatAstList("xxx", items=[
FormatAstVariable('__item', index=0, value="first element"),
FormatAstList("__sub", items=[
FormatAstVariable('__item', index=0, value="sub item 1"),
FormatAstVariable('__item', index=1, value="sub item 2"),
]),
FormatAstVariable('__item', index=1, value="second element", debug=True),
])
res = visitor.visit(lst)
assert res == "first element\nsub item 1\nsub item 2\n'second element'"
def test_i_can_print_list_in_debug_mode(self, capsys):
visitor = AsStrVisitor()
lst = FormatAstList("xxx", debug=True, prefix="[", suffix="]", items=[
FormatAstVariable('__item', index=0, value="first element", debug=True),
FormatAstVariable('__item', index=1, value="second element", debug=True),
])
res = visitor.visit(lst)
assert res == "['first element', 'second element']"
def test_i_can_print_expanded_list_in_debug_mode(self):
visitor = AsStrVisitor(expand=True)
lst = FormatAstList("xxx", debug=True, prefix="[", suffix="]", items=[
FormatAstVariable('__item', index=0, value="first element", debug=True),
FormatAstVariable('__item', index=1, value="second element", debug=True),
])
res = visitor.visit(lst)
assert res == "['first element',\n'second element']"
def test_i_can_print_list_with_index(self):
visitor = AsStrVisitor()
lst = FormatAstList("xxx", show_index=True, items=[
FormatAstVariable('__item', index=0, value="first element"),
FormatAstVariable('__item', index=1, value="second element", debug=True),
])
res = visitor.visit(lst)
assert res == "[0] first element\n[1] 'second element'"
def test_i_can_print_dict(self, capsys):
visitor = AsStrVisitor()
bag = FormatAstDict("xxx", items=[
(FormatAstVariable('__key', index=0, value="key1"),
FormatAstVariable('__value', index="key1", value=1)),
(FormatAstVariable('__key', index=1, value="long_key2"),
FormatAstVariable('__value', index="key2", value="value2")),
])
res = visitor.visit(bag)
assert res == "key1 : 1\nlong_key2: value2"
def test_i_can_print_dict_in_debug_mode(self, capsys):
visitor = AsStrVisitor()
bag = FormatAstDict("xxx", debug=True, prefix="{", suffix="}", items=[
(FormatAstVariable('__key', index=0, value="key1", debug=True),
FormatAstVariable('__value', index="key1", value=1, debug=True)),
(FormatAstVariable('__key', index=1, value="long_key2", debug=True),
FormatAstVariable('__value', index="key2", value="value2", debug=True)),
])
res = visitor.visit(bag)
assert res == "{'key1': 1, 'long_key2': 'value2'}"
def test_i_can_print_expanded_dict_in_debug_mode(self):
visitor = AsStrVisitor(expand=True)
bag = FormatAstDict("xxx", debug=True, prefix="{", suffix="}", items=[
(FormatAstVariable('__key', index=0, value="key1", debug=True),
FormatAstVariable('__value', index="key1", value=1, debug=True)),
(FormatAstVariable('__key', index=1, value="long_key2", debug=True),
FormatAstVariable('__value', index="key2", value="value2", debug=True)),
])
res = visitor.visit(bag)
assert res == "{'key1' : 1,\n'long_key2': 'value2'}"
def test_i_can_print_sub_level_of_dict_in_expand_mode(self):
visitor = AsStrVisitor(expand=True)
bag = FormatAstDict("xxx", debug=True, prefix="{", suffix="}", items=[
(FormatAstVariable('__key', index=0, value="key1", debug=True),
FormatAstVariable('__value', index="key1", value=1, debug=True)),
(FormatAstVariable('__key', index=1, value="key2", debug=True),
FormatAstDict("__value", debug=True, prefix="{", suffix="}", items=[
(FormatAstVariable('__key', index=0, value="sub_key1", debug=True),
FormatAstVariable('__value', index="sub_key1", value=1, debug=True)),
(FormatAstVariable('__key', index=1, value="sub_long_key2", debug=True),
FormatAstDict("__value", debug=True, prefix="{", suffix="}", items=[
(FormatAstVariable('__key', index=0, value="sub_sub_key1", debug=True),
FormatAstVariable('__value', index="sub_sub_key1", value=1, debug=True)),
(FormatAstVariable('__key', index=1, value="sub_sub_key2", debug=True),
FormatAstVariable('__value', index="sub_sub_key2", value="sub_sub_value", debug=True)),
])),
])),
(FormatAstVariable('__key', index=2, value="long_key3", debug=True),
FormatAstVariable('__value', index="key2", value="value2", debug=True)),
(FormatAstVariable('__key', index=3, value="key3", debug=True),
FormatAstList("__value", debug=True, prefix="[", suffix="]", items=[
FormatAstVariable('__item', index=0, value="first element", debug=True),
FormatAstVariable('__item', index=1, value="second element", debug=True),
])),
])
res = visitor.visit(bag)
assert res == """{'key1' : 1,
'key2' : {'sub_key1' : 1,
'sub_long_key2': {'sub_sub_key1': 1,
'sub_sub_key2': 'sub_sub_value'}},
'long_key3': 'value2',
'key3' : ['first element',
'second element']}"""