Ejemplo n.º 1
0
    def test_instance_is_accesible_from_the_moment_it_is_created(self):
        project = EmptyProject()
        mod = Module(project=project, subpath='module.py')
        ct = CodeTree(None)
        project.remember_code_tree(ct, mod)

        assert_equal(ct, CodeTree.of(mod))
Ejemplo n.º 2
0
    def test_when_clearing_cache_code_tree_currently_in_cache_is_saved_to_the_filesystem(self):
        code_tree = CodeTree(None)
        code_tree.save = Mock()
        self.manager.remember_code_tree(code_tree, "module.py")
        self.assert_cache("module.py")

        self.assert_calls_once(code_tree.save, self.manager.clear_cache)
Ejemplo n.º 3
0
    def test_removal_of_a_module_removes_its_code_tree(self):
        project = EmptyProject()
        mod = project.create_module('module.py')
        ct = CodeTree(None)
        project.remember_code_tree(ct, mod)

        project.remove_module(mod.subpath)

        assert_raises(CodeTreeNotFound, lambda: CodeTree.of(mod))
Ejemplo n.º 4
0
    def test_remembered_and_forgotten_code_trees_cannot_be_recalled(self):
        code_tree = CodeTree(None)
        self.manager.remember_code_tree(code_tree, "module.py")
        self.manager.forget_code_tree("module.py")

        assert_raises(CodeTreeNotFound,
                      lambda: self.manager.recall_code_tree("module.py"))
Ejemplo n.º 5
0
    def test_instance_is_accesible_from_the_moment_it_is_created(self):
        project = EmptyProject()
        mod = Module(project=project, subpath='module.py')
        ct = CodeTree(None)
        project.remember_code_tree(ct, mod)

        assert_equal(ct, CodeTree.of(mod))
Ejemplo n.º 6
0
class TestCodeOf:
    def setUp(self):
        project = EmptyProject()
        self.code = object()  # A unique fake object.
        self.module = Module(project=project, subpath='module.py')
        self.code_tree = CodeTree(self.code)
        project.remember_code_tree(self.code_tree, self.module)

    def test_code_of_module(self):
        assert_equal(self.code, code_of(self.module))

    def test_code_of_function(self):
        function = Function('fun', module=self.module)
        function_code = object()
        self.code_tree.add_object(function, function_code)

        assert_equal(function_code, code_of(function))

    def test_code_of_class(self):
        klass = Class('Class', module=self.module)
        class_code = object()
        self.code_tree.add_object(klass, class_code)

        assert_equal(class_code, code_of(klass))

    def test_code_of_method(self):
        klass = Class('Class', module=self.module)
        method = Method('method', klass=klass)
        method_code = object()
        self.code_tree.add_object(method, method_code)

        assert_equal(method_code, code_of(method))

    def test_code_of_test_class(self):
        test_class = TestClass('TestClass', parent=self.module)
        test_class_code = object()
        self.code_tree.add_object(test_class, test_class_code)

        assert_equal(test_class_code, code_of(test_class))

    def test_code_of_test_method(self):
        test_class = TestClass('TestClass', parent=self.module)
        test_method = TestMethod('test_method', parent=test_class)
        test_method_code = object()
        self.code_tree.add_object(test_method, test_method_code)

        assert_equal(test_method_code, code_of(test_method))
Ejemplo n.º 7
0
class TestCodeOf:
    def setUp(self):
        project = EmptyProject()
        self.code = object() # A unique fake object.
        self.module = Module(project=project, subpath='module.py')
        self.code_tree = CodeTree(self.code)
        project.remember_code_tree(self.code_tree, self.module)

    def test_code_of_module(self):
        assert_equal(self.code, code_of(self.module))

    def test_code_of_function(self):
        function = Function('fun', module=self.module)
        function_code = object()
        self.code_tree.add_object(function, function_code)

        assert_equal(function_code, code_of(function))

    def test_code_of_class(self):
        klass = Class('Class', module=self.module)
        class_code = object()
        self.code_tree.add_object(klass, class_code)

        assert_equal(class_code, code_of(klass))

    def test_code_of_method(self):
        klass = Class('Class', module=self.module)
        method = Method('method', klass=klass)
        method_code = object()
        self.code_tree.add_object(method, method_code)

        assert_equal(method_code, code_of(method))

    def test_code_of_test_class(self):
        test_class = TestClass('TestClass', parent=self.module)
        test_class_code = object()
        self.code_tree.add_object(test_class, test_class_code)

        assert_equal(test_class_code, code_of(test_class))

    def test_code_of_test_method(self):
        test_class = TestClass('TestClass', parent=self.module)
        test_method = TestMethod('test_method', parent=test_class)
        test_method_code = object()
        self.code_tree.add_object(test_method, test_method_code)

        assert_equal(test_method_code, code_of(test_method))
Ejemplo n.º 8
0
    def test_cache_contains_the_last_recalled_or_remembered_code_tree(self):
        # We use numbers to identify CodeTrees. We cannot use their id, because
        # pickling doesn't preserve those.
        cts = map(CodeTree, [0, 1, 2])
        for i, ct in enumerate(cts):
            self.manager.remember_code_tree(ct, "module%d.py" % i)

        # Checking all combinations of recall/remember calls.
        self.assert_recalled_tree("module0.py", 0)
        self.assert_cache("module0.py")
        self.assert_recalled_tree("module1.py", 1)
        self.assert_cache("module1.py")
        self.manager.remember_code_tree(CodeTree(3), "module3.py")
        self.assert_cache("module3.py")
        self.manager.remember_code_tree(CodeTree(4), "module4.py")
        self.assert_cache("module4.py")
        self.assert_recalled_tree("module2.py", 2)
        self.assert_cache("module2.py")
Ejemplo n.º 9
0
    def test_removal_of_a_module_removes_its_code_tree(self):
        project = EmptyProject()
        mod = project.create_module('module.py')
        ct = CodeTree(None)
        project.remember_code_tree(ct, mod)

        project.remove_module(mod.subpath)

        assert_raises(CodeTreeNotFound, lambda: CodeTree.of(mod))
Ejemplo n.º 10
0
    def test_code_tree_not_in_cache_can_be_garbage_collected(self):
        code_tree = CodeTree(None)
        self.manager.remember_code_tree(code_tree, "module.py")
        # Referred from the test and from the CodeTreesManager.
        assert_length(gc.get_referrers(code_tree), 2)

        self.manager.clear_cache()

        # No longer referred from the CodeTreesManager.
        assert_length(gc.get_referrers(code_tree), 1)
Ejemplo n.º 11
0
 def test_support_with_pickle(self):
     self.btracer.setup()
     self.btracer.teardown()
     # This can raise any number of exceptions.
     #
     # Under Python 2.3 with imputil it will raise
     #   PicklingError: Can't pickle <class 'pythoscope.store.CodeTree'>: attribute lookup pythoscope.store.CodeTree failed
     #
     # Under Python 2.6 with imputil it will raise
     #   TypeError: _import_hook() takes at most 5 arguments (6 given)
     cPickle.dumps(CodeTree(None), cPickle.HIGHEST_PROTOCOL)
Ejemplo n.º 12
0
 def test_support_with_pickle(self):
     self.btracer.setup()
     # This can raise any number of exceptions.
     #
     # Before I've copied imputil.py version from Python 2.6 sources over,
     # under Python 2.3 it would raise:
     #   PicklingError: Can't pickle <class 'pythoscope.store.CodeTree'>: attribute lookup pythoscope.store.CodeTree failed
     #
     # Before I added support for level argument of the __import__ hook,
     # under Python 2.6 it would raise:
     #   TypeError: _import_hook() takes at most 5 arguments (6 given)
     cPickle.dumps(CodeTree(None), cPickle.HIGHEST_PROTOCOL)
     self.btracer.teardown()
Ejemplo n.º 13
0
 def test_module_with_errors_doesnt_get_a_code_tree(self):
     module = self.project.create_module("module_with_errors.py", errors=[Exception()])
     assert_raises(CodeTreeNotFound, lambda: CodeTree.of(module))
Ejemplo n.º 14
0
    def test_forgetting_code_tree_removes_its_file_from_the_filesystem(self):
        code_tree = CodeTree(None)
        self.manager.remember_code_tree(code_tree, "module.py")

        self.manager.forget_code_tree("module.py")
        self.assert_code_tree_not_saved("module.py")
Ejemplo n.º 15
0
 def test_remembering_code_tree_saves_it_to_the_filesystem(self):
     code_tree = CodeTree(None)
     self.manager.remember_code_tree(code_tree, "module.py")
     self.assert_code_tree_saved("module.py")
Ejemplo n.º 16
0
    def test_cache_is_empty_after_clearing(self):
        code_tree = CodeTree(None)
        self.manager.remember_code_tree(code_tree, "module.py")
        self.manager.clear_cache()

        self.assert_empty_cache()
Ejemplo n.º 17
0
    def test_remembered_code_trees_can_be_recalled(self):
        code_tree = CodeTree(None)
        self.manager.remember_code_tree(code_tree, "module.py")

        assert_equal(code_tree, self.manager.recall_code_tree("module.py"))
Ejemplo n.º 18
0
 def setUp(self):
     project = EmptyProject()
     self.code = object()  # A unique fake object.
     self.module = Module(project=project, subpath='module.py')
     self.code_tree = CodeTree(self.code)
     project.remember_code_tree(self.code_tree, self.module)
Ejemplo n.º 19
0
 def test_module_with_errors_doesnt_get_a_code_tree(self):
     module = self.project.create_module("module_with_errors.py",
                                         errors=[Exception()])
     assert_raises(CodeTreeNotFound, lambda: CodeTree.of(module))
Ejemplo n.º 20
0
 def setUp(self):
     project = EmptyProject()
     self.code = object() # A unique fake object.
     self.module = Module(project=project, subpath='module.py')
     self.code_tree = CodeTree(self.code)
     project.remember_code_tree(self.code_tree, self.module)