import pytest from core.sheerka.services.SheerkaRuleManager 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=0, 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=1, value="long_key3", debug=True), FormatAstVariable('__value', index="key2", value="value2", 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'}"""