def test_handle_class_scope(self):
     tree = ast.parse('class SomeClass:\n\tdef some_method():\n\t\tpass')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_class_scope(tree.body[0].body[0], tracker)
     self.assertTrue(
         len(tracker.definitions['classes']['SomeClass']['methods']), 1)
 def test_handle_function_scope(self):
     tree = ast.parse(
         'def global_function():\n\tdef function_function():\n\t\tpass')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_function_scope(tree.body[0].body[0], tracker)
     pass
Пример #3
0
 def test_handle_function_scope_outside(self):
     tree = ast.parse('def some_function():\n\tpass\na = 42')
     add_parents(tree)
     tree = FunctionDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_function_scope(tree.body[1].targets[0], tracker)
     self.assertEqual(handled_node, tree.body[1].targets[0])
Пример #4
0
 def test_handle_global_scope(self):
     tree = ast.parse('a = "some string"')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_global_scope(tree.body[0].targets[0], tracker)
     self.assertEqual(handled_node.id, '_0x61')
     self.assertEqual(len(tracker.definitions['variables']), 1)
 def test_handle_global_scope_outside(self):
     tree = ast.parse(
         'def global_function():\n\tdef function_function():\n\t\tpass')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_global_scope(tree.body[0].body[0], tracker)
     self.assertEqual(len(tracker.definitions['functions']), 0)
Пример #6
0
 def test_handle_calls_class(self):
     tree = ast.parse(
         'class SomeClass:\n\tpass\nsome_variable = SomeClass()')
     add_parents(tree)
     tree = ClassDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_calls(tree.body[1].value.func, tracker)
     self.assertEqual(handled_node.id, '_0x38a')
Пример #7
0
 def test_handle_args(self):
     tree = ast.parse(
         'def some_function(param_1, param_2, param_3):\n\tpass')
     add_parents(tree)
     self.functiondef_handler.handle(tree)
     handled_node = handle_args(tree.body[0].args.args[0],
                                DefinitionTracker.get_instance())
     self.assertEqual(handled_node.arg, '_0x2a1')
Пример #8
0
 def test_handle_global_scope_outside(self):
     tree = ast.parse('def some_function():\n\tsome_variable = 42')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_global_scope(tree.body[0].body[0].targets[0],
                                        tracker)
     self.assertEqual(handled_node, tree.body[0].body[0].targets[0])
     self.assertEqual(len(tracker.definitions['variables']), 0)
Пример #9
0
 def setUp(self):
     self.fixture = ConstantHandler()
     self.source = 'a = "a string literal"\n' \
                   'b = 42\n' \
                   'c = 100.0'
     self.tree = ast.parse(self.source)
     add_parents(self.tree)
     self.tree = self.fixture.handle(self.tree)
Пример #10
0
 def test_handle_calls_function(self):
     tree = ast.parse(
         'def some_function():\n\tpass\nsome_variable = some_function()')
     add_parents(tree)
     tree = FunctionDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_calls(tree.body[1].value.func, tracker)
     self.assertEqual(handled_node.id, '_0x579')
Пример #11
0
 def test_handle_str(self):
     tree = ast.parse('a = "literal"')
     add_parents(tree)
     tree = handle_str(tree.body[0].value)
     source = ast.unparse(tree)
     self.assertEqual(
         source,
         "''.join([chr(x) for x in [108, 105, 116, 101, 114, 97, 108]])")
 def test_handle_class_scope_outside(self):
     tree = ast.parse(
         'def some_function():\n\tpass\nclass SomeClass:\n\tpass')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_class_scope(tree.body[0], tracker)
     self.assertTrue('some_function' not in tracker.definitions['classes']
                     ['SomeClass']['methods'])
Пример #13
0
 def setUp(self):
     self.fixture = AttributeHandler()
     self.classdef_handler = ClassDefHandler()
     self.functiondef_handler = FunctionDefHandler()
     self.tracker = DefinitionTracker.get_instance()
     self.source = 'class SomeClass:\n\tdef __init__():\n\t\tself.property = 42\n\t\tself.property2 = 84'
     self.tree = ast.parse(self.source)
     add_parents(self.tree)
     self.tree = self.classdef_handler.handle(self.tree)
Пример #14
0
 def test_visit_arg(self):
     tree = ast.parse(
         'def some_function(param_1, param_2, param_3):\n\tpass')
     add_parents(tree)
     tree = self.functiondef_handler.handle(tree)
     tree = self.fixture.handle(tree)
     self.assertEqual(tree.body[0].args.args[0].arg, '_0x2a1')
     self.assertEqual(tree.body[0].args.args[1].arg, '_0x2a2')
     self.assertEqual(tree.body[0].args.args[2].arg, '_0x2a3')
Пример #15
0
 def test_handle_class_scope_outside(self):
     tree = ast.parse('class SomeClass:\n\tpass\nvariable = 42')
     add_parents(tree)
     tree = ClassDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_class_scope(tree.body[1].targets[0], tracker)
     self.assertEqual(handled_node, tree.body[1].targets[0])
     self.assertEqual(
         len(tracker.definitions['classes']['SomeClass']['variables']), 0)
Пример #16
0
 def test_handle_class_properties_outside_init(self):
     tree = ast.parse(
         'class SomeClass:\n\tdef some_method():\n\t\tself.new_property = 42'
     )
     add_parents(tree)
     tree = self.classdef_handler.handle(tree)
     handled_node = handle_class_properties(
         tree.body[0].body[0].body[0].targets[0], self.tracker)
     self.assertEqual(handled_node.attr, '_0x52e')
Пример #17
0
 def test_handle_returns_variable(self):
     tree = ast.parse(
         'def some_function():\n\tsome_variable = 42\n\treturn some_variable'
     )
     add_parents(tree)
     tree = FunctionDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_returns(tree.body[0].body[1].value, tracker)
     self.assertEqual(handled_node.id, '_0x559')
Пример #18
0
 def test_handle_returns_func_in_func(self):
     tree = ast.parse(
         'def some_function():\n\tdef inside_function():\n\t\tpass\n\treturn inside_function()'
     )
     add_parents(tree)
     tree = FunctionDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_returns(tree.body[0].body[1].value.func, tracker)
     self.assertEqual(handled_node.id, '_0x641')
Пример #19
0
 def test_handle_returns_class(self):
     tree = ast.parse(
         'class SomeClass:\n\tpass\ndef some_function():\n\treturn SomeClass()'
     )
     add_parents(tree)
     tree = ClassDefHandler().handle(tree)
     tree = FunctionDefHandler().handle(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_returns(tree.body[1].body[0].value.func, tracker)
     self.assertEqual(handled_node.id, '_0x38a')
Пример #20
0
 def test_handle_class_method_calls(self):
     tree = ast.parse(
         'class SomeClass:\n\tdef some_method():\n\t\tpass\na = SomeClass()\na.some_method()'
     )
     add_parents(tree)
     tree = self.classdef_handler.handle(tree)
     tree = self.functiondef_handler.handle(tree)
     handled_node = handle_class_method_calls(tree.body[2].value.func,
                                              self.tracker)
     self.assertEqual(handled_node.attr, '_0x494')
Пример #21
0
    def set_tree(self, filepath):
        """Sets the tree property to the parsed abstract syntax tree of source in the filepath provided

        Args:
            **filepath (str)**: File path of which to get the tree
        """
        self.logger.info('Setting the tree')
        text = load_file(filepath)
        self.tree = ast.parse(text)
        add_parents(self.tree)
 def setUp(self):
     self.fixture = FunctionDefHandler()
     self.classdef_handler = ClassDefHandler()
     self.tracker = DefinitionTracker.get_instance()
     self.source = 'def FirstFunction(param_1, param_2):\n\t' \
                   'first_variable = 42\n\t' \
                   'second_variable = param_1 + param_2\n\t' \
                   'return second_variable\n' \
                   'class SomeClass():\n\t' \
                   'def some_method():\n\t\t' \
                   'pass'
     self.tree = ast.parse(self.source)
     add_parents(self.tree)
     self.tree = self.classdef_handler.handle(self.tree)
Пример #23
0
 def setUp(self):
     self.fixture = load_handlers(False, False)
     self.tracker = DefinitionTracker.get_instance()
     self.source = 'class FirstClass:\n\tpass\n\n' \
                   'class SecondClass:\n\tpass\n\n' \
                   'def FirstFunction():\n\tc = "a literal"\n\n' \
                   'def SecondFunction():\n\tpass\n\n' \
                   'a = FirstClass()\n\n' \
                   'b = SecondClass()\n\n' \
                   'FirstFunction()\n\n' \
                   'SecondFunction()\n\n' \
                   'a = SecondClass()\n\n' \
                   'c = 42'
     self.tree = ast.parse(self.source)
     add_parents(self.tree)
Пример #24
0
    def handle(self, tree):
        """Executes the visit method inherited from ast.NodeTransformer and calls handle on the next handler

        Args:
            **tree (:obj: `ast.Module`)**: A root ast node

        Returns:
            The modified tree
        """
        self.logger.info('Handling tree')
        tree = self.visit(tree)
        add_parents(tree)

        if self.next is not None:
            return self.next.handle(tree)

        return tree
Пример #25
0
 def test_obscure_class_bases(self):
     tree = ast.parse('class SomeClass(Base1, Base2):\n\tpass')
     add_parents(tree)
     bases = []
     tracker = DefinitionTracker.get_instance()
     tracker.definitions['classes']['Base1'] = {
         'prev_name': 'Base1',
         'new_name': 'ObscuredBase1'
     }
     tracker.definitions['classes']['Base2'] = {
         'prev_name': 'Base2',
         'new_name': 'ObscuredBase2'
     }
     for base in tree.body[0].bases:
         bases.append(obscure_class_bases(base, tracker))
     self.assertEqual(bases[0].id, 'ObscuredBase1')
     self.assertEqual(bases[1].id, 'ObscuredBase2')
Пример #26
0
    def setUp(self):
        self.fixture = NameHandler()
        self.classdef_handler = ClassDefHandler()
        self.source = 'class Base1:\n\t' \
                      'pass\n\n' \
                      'class Base2:\n\t' \
                      'pass\n\n' \
                      'class SomeClass(Base1, Base2):\n\t' \
                      'pass\n' \
                      'def first_function():\n\t' \
                      'pass\n' \
                      'def some_function():\n\t' \
                      'a = "a literal"\n\t' \
                      'b = first_function()\n\t' \
                      'return b'

        self.tree = ast.parse(self.source)
        add_parents(self.tree)
 def test_handle_global_scope(self):
     tree = ast.parse('def global_function():\n\tpass')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_global_scope(tree.body[0], tracker)
     self.assertTrue('global_function' in tracker.definitions['functions'])
Пример #28
0
 def test_handle_calls_outside(self):
     tree = ast.parse('a = 42')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_calls(tree.body[0].targets[0], tracker)
     self.assertEqual(handled_node, tree.body[0].targets[0])
Пример #29
0
 def test_handle_returns_none(self):
     tree = ast.parse('def some_function():\n\tsome_variable = 42')
     add_parents(tree)
     tracker = DefinitionTracker.get_instance()
     handled_node = handle_returns(tree.body[0].body[0].targets[0], tracker)
     self.assertEqual(handled_node, tree.body[0].body[0].targets[0])