Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 4
0
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
Exemplo n.º 12
0
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
Exemplo n.º 14
0
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