Esempio n. 1
0
def test_match(parse_ast_tree, data):
    def get_nodes_name(root):
        from collections import deque
        todo = deque([root])

        while todo:
            node = todo.popleft()

            todo.extendleft(node.children)

            yield node.ast_node.name

    assert [
        list(get_nodes_name(tree))
        for tree in am.match(pattern=data.pattern,
                             ast=parse_ast_tree(data.code))
    ] == [
        ['test_1', 'inner_1', 'inner3', 'inner4', 'inner_2', 'inner6'],
        ['test_1', 'inner_1', 'inner3', 'inner5', 'inner_2', 'inner6'],
        ['test_1', 'inner_1', 'inner4', 'inner5', 'inner_2', 'inner6'],
        ['test_1', 'inner_1', 'inner3', 'inner4', 'inner_2', 'inner7'],
        ['test_1', 'inner_1', 'inner3', 'inner5', 'inner_2', 'inner7'],
        ['test_1', 'inner_1', 'inner4', 'inner5', 'inner_2', 'inner7'],
    ]
Esempio n. 2
0
def test_has_name_match_ok(parse_ast_tree, data):
    assert bool(am.match(pattern=data.pattern, ast=parse_ast_tree(
        data.code))) is True
Esempio n. 3
0
def test_match_base_wrong(parse_ast_tree, data):
    assert bool(am.match(pattern=data.pattern, ast=parse_ast_tree(
        data.code))) is False
Esempio n. 4
0
                        def inner9(): ...
                    def inner4():
                        def inner10(): ...
                    def inner5(): ...
                def inner_2(): 
                    def inner6(): ...
                    def inner7(): ...
    '''

    pattern = FunctionDef(
        FunctionDef(
            FunctionDef(),
            FunctionDef(),
        ),
        FunctionDef(FunctionDef(), ),
    )

    matcher = match(pattern, ast.parse(dedent(code)))

    expected = [
        ['inner_1', 'inner3', 'inner8', 'inner9', 'inner4', 'inner10'],
        ['test_1', 'inner_1', 'inner3', 'inner4', 'inner_2', 'inner6'],
        ['test_1', 'inner_1', 'inner3', 'inner5', 'inner_2', 'inner6'],
        ['test_1', 'inner_1', 'inner4', 'inner5', 'inner_2', 'inner6'],
        ['test_1', 'inner_1', 'inner3', 'inner4', 'inner_2', 'inner7'],
        ['test_1', 'inner_1', 'inner3', 'inner5', 'inner_2', 'inner7'],
        ['test_1', 'inner_1', 'inner4', 'inner5', 'inner_2', 'inner7'],
    ]

    assert expected == [list(get_nodes_name(tree)) for tree in matcher]