예제 #1
0
    def test_edge_label(self):
        node = transformers.ParentNodeTransformer().visit(ast.parse('x = 1'))

        self.visitor.visit(node)

        dot_edge = self.visitor.graph.get_edge(str(node), str(node.body[0]))[0]
        self.assertEqual(dot_edge.get_label(), 'body[0]')
예제 #2
0
    def test_node_label(self):
        node = transformers.ParentNodeTransformer().visit(ast.parse('x = 1'))

        self.visitor.visit(node)

        dot_node = self.visitor.graph.get_node(str(node.body[0].value))[0]
        self.assertEqual(dot_node.get_label(), 'ast.Num(n=1)')
예제 #3
0
    def test_does_not_have_edge(self):
        node = transformers.ParentNodeTransformer().visit(ast.parse('x = 1'))

        self.visitor.visit(node)

        self.assertFalse(
            self.visitor.graph.get_edge(str(node), str(node.body[0].value)))
예제 #4
0
    def test_has_edge(self):
        node = transformers.ParentNodeTransformer().visit(ast.parse('x = 1'))

        self.visitor.visit(node)

        self.assertTrue(
            self.visitor.graph.get_edge(str(node), str(node.body[0])))
예제 #5
0
    def test_multi_parents_node_label(self):
        node = transformers.ParentNodeTransformer().visit(
            ast.parse('x = 1\nx = 2'))

        self.visitor.visit(node)

        dot_node = self.visitor.graph.get_node(str(node.body[0].targets[0]))[0]
        self.assertEqual(dot_node.get_label(),
                         "ast.Name(id='x', ctx=ast.Store())")
예제 #6
0
def __tests():
    import ast
    with open('tests/function_def_test.py') as test_code:
        test_node = ast.parse(test_code.read())
        node = transformers.ParentNodeTransformer().visit(test_node)
        visitor = visitors.GraphNodeVisitor()
        visitor.visit(node)

        visitor.graph.write_png('graph.png')
예제 #7
0
def test():
    
    path = '../../apps/blur_two_stage/blur_two_stage.py'
    s_orig = open(path, 'rt').read()
    
    head = re.compile(r'#!\/.*\n|#.*coding[:=]\s*(?P<enc>[-\w.]+).*')
    source = head.sub('', s_orig)
    node = ast.parse(source)
    node = transformers.ParentNodeTransformer().visit(node)
    
    graph = build_graph(node)
    
    varname = 'a'
    line = 5
    col = 4
    
    start = programslice.graph.Edge(varname, line, col)
    result = programslice.graph.Slice(graph)(start)
    
    print(s_orig)
    
    print('--------------------------------')
    
    print('variables dependent on a at position (5, 4):')
    print()
    
    test_result = programslice.formatter.VimOutPutFormatter(result, path)()
    
    for i in range(1, len(test_result)):
        print(test_result[i])
    
    find_for_node = dependency_util.FindForNode()
    find_for_node.visit(node)
    
    print('--------------------------------')
    print('original defnode:')
    print(node.body[1].body)
    print('--------------------------------')
    add_annotation(find_for_node.fornode)
    print('defnode after adding annotation:')
    print(node.body[1].body)
    
    return
예제 #8
0
    def test_non_docstring_node(self):
        node = transformers.ParentNodeTransformer().visit(ast.parse(''))

        self.assertFalse(utils.is_docstring(node))
예제 #9
0
    def test_class_docstring_node(self):
        node = transformers.ParentNodeTransformer().visit(
            ast.parse('class X:\n\t"""doc"""'))

        self.assertTrue(utils.is_docstring(node.body[0].body[0].value))
예제 #10
0
import ast
from astmonkey import utils, transformers

node = ast.parse('def foo(x):\n\t"""doc"""')
node = transformers.ParentNodeTransformer().visit(node)

docstring_node = node.body[0].body[0].value
assert(not utils.is_docstring(node))
assert(utils.is_docstring(docstring_node))
예제 #11
0
 def setUp(self):
     self.transformer = transformers.ParentNodeTransformer()