class PointCutTC(unittest.TestCase): """Tests PointCut objects' behaviour""" def setUp(self): """just build an empty pointcut, and a basic object""" self.pointcut = PointCut() self.an_obj = object() def test_add_method(self): """tests PointCut.add_method()""" self.pointcut.add_method(self.an_obj, "method1") self.assertEquals(self.pointcut.items(), [(self.an_obj, ["method1"])]) self.pointcut.add_method(self.an_obj, "method2") self.assertEquals(self.pointcut.items(), [(self.an_obj, ["method1", "method2"])]) def test_remove_method(self): """tests PointCut.remove_method()""" # We know this statement works thanks to test_add_method() self.pointcut.add_method(self.an_obj, "method1") self.pointcut.add_method(self.an_obj, "method2") self.pointcut.remove_method(self.an_obj, "method1") self.assertEquals(self.pointcut.items(), [(self.an_obj, ["method2"])]) self.pointcut.remove_method(self.an_obj, "method2") self.assertEquals(self.pointcut.items(), [(self.an_obj, [])]) def test_remove_unadded_method(self): """ensures PointCut.remove_method() raises a KeyError""" self.assertRaises(KeyError, self.pointcut.remove_method, self.an_obj, "foo") self.assertRaises(KeyError, self.pointcut.remove_method, object, "foo") def test_remove_class_method(self): """tests the try...except statement of remove_method() FIXME : Do we really want this behaviour ?! """ self.pointcut.add_method(object, "method1") self.pointcut.remove_method(self.an_obj, "method1") self.assertEquals(self.pointcut.items(), [(object, [])]) def test_remove_obj(self): """tests PointCut.remove_obj()""" method_names = ['method1', 'method2', 'method3'] for name in method_names: self.pointcut.add_method(self.an_obj, name) removed_methods = self.pointcut.remove_obj(self.an_obj) self.assertEquals(method_names, removed_methods) self.assertEquals(len(self.pointcut), 0) def test_remove_unadded_obj(self): """ensures removing unadded object returns None""" removed_methods = self.pointcut.remove_obj(self.an_obj) self.assertEquals(removed_methods, None) def test_pointcut_update(self): """tests PointCut.update()""" other = PointCut() other.add_method(self.an_obj, "method2") self.pointcut.add_method(self.an_obj, "method1") self.pointcut.update(other) self.assertEquals(self.pointcut.values(), [["method1", "method2"]]) def test_pointcut_update_notdict(self): """tests PointCut.update() when arg is not a dict""" # Test updating with a list other = [] self.assertEquals(self.pointcut.update([]), None) self.assertEquals(len(self.pointcut), 0) def test_pointcut_difference(self): """tests PointCut.difference()""" method_names = ['method1', 'method2', 'method3'] for name in method_names: self.pointcut.add_method(self.an_obj, name) other = PointCut() other.add_method(self.an_obj, "method1") result = self.pointcut - other self.assertEquals(result.values(), [["method2", "method3"]]) def test_same_pointcut_difference(self): """tests pcut - pcut == {} """ self.assertEquals(self.pointcut - self.pointcut, {}) def test_pointcut_difference_notpointcut(self): """ensures __sub__ raises a TypeError when not used with PointCut""" other = [] self.assertRaises(TypeError, self.pointcut.difference, other) def test_create_from_object(self): """tests PointCut.create_from_object()""" pointcut = PointCut.create_from_object(Test) keys = pointcut.keys() values = pointcut.values() values.sort() self.assertEquals(keys, [Test]) self.assertEquals(values, [["foo", "bar"]]) def test_create_from_object_module(self): """tests PointCut.create_from_object when it's a module""" pointcut = PointCut.create_from_object(module_test) keys = Set([obj.__name__ for obj in pointcut.keys()]) self.assertEquals(keys, Set(['Stack', 'StackImpl', 'Sorter'])) stack_methods = Set(pointcut[module_test.Stack]) stackimpl_methods = Set(pointcut[module_test.Stack]) sorter_methods = Set(pointcut[module_test.Sorter]) self.assertEquals(stack_methods, Set(['is_empty', 'is_full', 'pop', 'push', 'size', 'top'])) self.assertEquals(stackimpl_methods, Set(['is_empty', 'is_full', 'pop', 'push', 'size', 'top'])) self.assertEquals(sorter_methods, Set(['sort']))
class PointCutTC(unittest.TestCase): """Tests PointCut objects' behaviour""" def setUp(self): """just build an empty pointcut, and a basic object""" self.pointcut = PointCut() self.an_obj = object() def test_add_method(self): """tests PointCut.add_method()""" self.pointcut.add_method(self.an_obj, "method1") self.assertEquals(self.pointcut.items(), [(self.an_obj, ["method1"])]) self.pointcut.add_method(self.an_obj, "method2") self.assertEquals(self.pointcut.items(), [(self.an_obj, ["method1", "method2"])]) def test_remove_method(self): """tests PointCut.remove_method()""" # We know this statement works thanks to test_add_method() self.pointcut.add_method(self.an_obj, "method1") self.pointcut.add_method(self.an_obj, "method2") self.pointcut.remove_method(self.an_obj, "method1") self.assertEquals(self.pointcut.items(), [(self.an_obj, ["method2"])]) self.pointcut.remove_method(self.an_obj, "method2") self.assertEquals(self.pointcut.items(), [(self.an_obj, [])]) def test_remove_unadded_method(self): """ensures PointCut.remove_method() raises a KeyError""" self.assertRaises(KeyError, self.pointcut.remove_method, self.an_obj, "foo") self.assertRaises(KeyError, self.pointcut.remove_method, object, "foo") def test_remove_class_method(self): """tests the try...except statement of remove_method() FIXME : Do we really want this behaviour ?! """ self.pointcut.add_method(object, "method1") self.pointcut.remove_method(self.an_obj, "method1") self.assertEquals(self.pointcut.items(), [(object, [])]) def test_remove_obj(self): """tests PointCut.remove_obj()""" method_names = ['method1', 'method2', 'method3'] for name in method_names: self.pointcut.add_method(self.an_obj, name) removed_methods = self.pointcut.remove_obj(self.an_obj) self.assertEquals(method_names, removed_methods) self.assertEquals(len(self.pointcut), 0) def test_remove_unadded_obj(self): """ensures removing unadded object returns None""" removed_methods = self.pointcut.remove_obj(self.an_obj) self.assertEquals(removed_methods, None) def test_pointcut_update(self): """tests PointCut.update()""" other = PointCut() other.add_method(self.an_obj, "method2") self.pointcut.add_method(self.an_obj, "method1") self.pointcut.update(other) self.assertEquals(self.pointcut.values(), [["method1", "method2"]]) def test_pointcut_update_notdict(self): """tests PointCut.update() when arg is not a dict""" # Test updating with a list other = [] self.assertEquals(self.pointcut.update([]), None) self.assertEquals(len(self.pointcut), 0) def test_pointcut_difference(self): """tests PointCut.difference()""" method_names = ['method1', 'method2', 'method3'] for name in method_names: self.pointcut.add_method(self.an_obj, name) other = PointCut() other.add_method(self.an_obj, "method1") result = self.pointcut - other self.assertEquals(result.values(), [["method2", "method3"]]) def test_same_pointcut_difference(self): """tests pcut - pcut == {} """ self.assertEquals(self.pointcut - self.pointcut, {}) def test_pointcut_difference_notpointcut(self): """ensures __sub__ raises a TypeError when not used with PointCut""" other = [] self.assertRaises(TypeError, self.pointcut.difference, other) def test_create_from_object(self): """tests PointCut.create_from_object()""" pointcut = PointCut.create_from_object(Test) keys = pointcut.keys() values = pointcut.values() values.sort() self.assertEquals(keys, [Test]) self.assertEquals(values, [["foo", "bar"]]) def test_create_from_object_module(self): """tests PointCut.create_from_object when it's a module""" pointcut = PointCut.create_from_object(module_test) keys = Set([obj.__name__ for obj in pointcut.keys()]) self.assertEquals(keys, Set(['Stack', 'StackImpl', 'Sorter'])) stack_methods = Set(pointcut[module_test.Stack]) stackimpl_methods = Set(pointcut[module_test.Stack]) sorter_methods = Set(pointcut[module_test.Sorter]) self.assertEquals( stack_methods, Set(['is_empty', 'is_full', 'pop', 'push', 'size', 'top'])) self.assertEquals( stackimpl_methods, Set(['is_empty', 'is_full', 'pop', 'push', 'size', 'top'])) self.assertEquals(sorter_methods, Set(['sort']))