Example #1
0
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']))