Exemplo n.º 1
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"))
Exemplo 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)
Exemplo n.º 3
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))
Exemplo n.º 4
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")
Exemplo n.º 5
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))
Exemplo n.º 6
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)
Exemplo n.º 7
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)
Exemplo n.º 8
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()
Exemplo n.º 9
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")
Exemplo n.º 10
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")
Exemplo n.º 11
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()
Exemplo n.º 12
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"))
Exemplo n.º 13
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)