def test_variable(): data = "abc" expected = {"node": "variable", "name": "abc"} grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="var") assert output == expected data = "_4thing__something2_3__" expected = {"node": "variable", "name": "_4thing__something2_3__"} grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="var") assert output == expected
def test__function_signature__minimal(): data = "fn abc():" expected = {"node": "function", "name": "abc", "args": []} grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="func_signature") assert output == expected
def test__else_signature_basic(): data = "else:" expected = {"node": "else"} grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="else_signature") assert output == expected
def test__function_signature__multiple_args(): data = "fn abc(a, b, c):" expected = { "node": "function", "name": "abc", "args": [ { "name": "a", "node": "variable" }, { "name": "b", "node": "variable" }, { "name": "c", "node": "variable" }, ], } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="func_signature") assert output == expected
def test__addition_and_multiplication(): data = "a * b + c * d" expected = { "node": "+", "left": { "node": "*", "left": { "node": "variable", "name": "a" }, "right": { "node": "variable", "name": "b" }, }, "right": { "node": "*", "left": { "node": "variable", "name": "c" }, "right": { "node": "variable", "name": "d" }, }, } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="expr") assert output == expected
def test__if_signature__basic(): data = "if a:" expected = {"node": "if", "condition": {"name": "a", "node": "variable"}} grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="if_signature") assert output == expected
def test__elseif_block__basic(): data = "else if a:\n a = b" expected = { "node": "else if", "condition": { "name": "a", "node": "variable" }, "body": [{ "from": { "name": "b", "node": "variable" }, "node": "assign", "to": { "name": "a", "node": "variable" }, }], } data = pre.insert_brackets(data) grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="elseif_block") assert output == expected
def test__if__with_elseif(): data = "\n".join([ "if a:", " d = 1", "else if b:", " d = 2", "else:", " d = 4" ]) expected = { "node": "conditional", "if": { "condition": { "name": "a", "node": "variable" }, "body": [{ "from": { "node": "literal", "value": 1 }, "node": "assign", "to": { "name": "d", "node": "variable" }, }], }, "else if": [{ "body": [{ "from": { "node": "literal", "value": 2 }, "node": "assign", "to": { "name": "d", "node": "variable" }, }], "condition": { "name": "b", "node": "variable" }, }], "else": { "body": [{ "from": { "node": "literal", "value": 4 }, "node": "assign", "to": { "name": "d", "node": "variable" }, }] }, } data = pre.insert_brackets(data) grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="if") assert output == expected
def test__assign_to_string_complex(): data = """aaa, "bbb", ccc, "ddd", eee""" expected = { "node": "target_string", "elements": [ { "node": "variable", "name": "aaa" }, { "node": "literal", "value": "bbb" }, { "node": "variable", "name": "ccc" }, { "node": "literal", "value": "ddd" }, { "node": "variable", "name": "eee" }, ], } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="assign_target") assert output == expected
def test__assign_to_variable(): data = "abc" expected = {"name": "abc", "node": "variable"} grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="assign_target") assert output == expected
def test__integration(): _input, _ast, _output = load_testing_triple("a") grammar = parser.read_grammar() _ast2 = parser.parse(grammar, _input) _output2 = writer.scribe(_ast2) print("\n\n\n") pprint(_ast2) print("\n\n\n") print(_output2) print("\n\n\n") assert _ast == _ast2 assert _output == _output2
def test__for_signature__basic(): data = "for a in b:" expected = { "iterator": { "name": "b", "node": "variable" }, "node": "for", "var": { "name": "a", "node": "variable" }, } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="for_signature") assert output == expected
def test__addition__basic(): data = "a + b" expected = { "node": "+", "left": { "node": "variable", "name": "a" }, "right": { "node": "variable", "name": "b" }, } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="expr") assert output == expected
def test__func_def__basic(): data = "fn something(a):\n return 4" expected = { "node": "function", "name": "something", "args": [{ "name": "a", "node": "variable" }], "body": [{ "from": [{ "node": "literal", "value": 4 }], "node": "return" }], } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="func_def") assert output == expected
def test__assign_to_string(): data = '''"aaa", bbb, "ccc"''' expected = { "node": "target_string", "elements": [ { "node": "literal", "value": "aaa" }, { "node": "variable", "name": "bbb" }, { "node": "literal", "value": "ccc" }, ], } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="assign_target") assert output == expected
def test__assign_to_wildcard_list(): data = "[a, b, **c]" expected = { "node": "target_list", "elements": [ { "name": "a", "node": "variable" }, { "name": "b", "node": "variable" }, { "name": "c", "node": "wildcard" }, ], } grammar = parser.read_grammar() output = parser.parse(grammar, data, entry="assign_target") assert output == expected