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))
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)
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))
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"))
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))
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))
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))
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")
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))
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)
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)
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()
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))
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")
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")
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()
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"))
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_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))
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)