def setUp(self): super(ElementDispatcherTestCase, self).setUp() self.events = [] self.dispatcher = ElementDispatcher() self.dispatcher.init(Application)
class ElementDispatcherTestCase(TestCase): def setUp(self): super(ElementDispatcherTestCase, self).setUp() self.events = [] self.dispatcher = ElementDispatcher() self.dispatcher.init(Application) def tearDown(self): self.dispatcher.shutdown() super(ElementDispatcherTestCase, self).tearDown() def _handler(self, event): self.events.append(event) def test_register_handler(self): dispatcher = self.dispatcher element = UML.Class() dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') assert len(dispatcher._handlers) == 1 assert dispatcher._handlers.keys()[0] == (element, UML.Class.ownedOperation) # Add some properties: # 1: element.ownedOperation = UML.Operation() # 2: p = element.ownedOperation[0].formalParameter = UML.Parameter() # 3: p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(3, len(self.events)) self.assertEquals(3, len(dispatcher._handlers)) def test_register_handler_twice(self): """ Multiple registrations have no effect. """ dispatcher = self.dispatcher element = UML.Class() # Add some properties: element.ownedOperation = UML.Operation() p = element.ownedOperation[0].formalParameter = UML.Parameter() dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') n_handlers = len(dispatcher._handlers) self.assertEquals(0, len(self.events)) dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(n_handlers, len(dispatcher._handlers)) dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(n_handlers, len(dispatcher._handlers)) dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(n_handlers, len(dispatcher._handlers)) p.name = 'func' self.assertEquals(1, len(self.events)) def test_unregister_handler(self): # First some setup: dispatcher = self.dispatcher element = UML.Class() o = element.ownedOperation = UML.Operation() p = element.ownedOperation[0].formalParameter = UML.Parameter() p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') assert len(dispatcher._handlers) == 3 assert dispatcher._handlers[element, UML.Class.ownedOperation] assert dispatcher._handlers[o, UML.Operation.parameter] assert dispatcher._handlers[p, UML.Parameter.name] dispatcher.unregister_handler(self._handler) assert len(dispatcher._handlers) == 0, dispatcher._handlers assert len(dispatcher._reverse) == 0, dispatcher._reverse #assert dispatcher._handlers.keys()[0] == (element, UML.Class.ownedOperation) # Should not fail here too: dispatcher.unregister_handler(self._handler) def test_notification(self): """ Test notifications with Class object. """ dispatcher = self.dispatcher element = UML.Class() o = element.ownedOperation = UML.Operation() p = element.ownedOperation[0].formalParameter = UML.Parameter() p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') assert len(dispatcher._handlers) == 3 assert not self.events element.ownedOperation = UML.Operation() assert len(self.events) == 1, self.events assert len(dispatcher._handlers) == 4 p.name = 'othername' assert len(self.events) == 2, self.events del element.ownedOperation[o] assert len(dispatcher._handlers) == 2 def test_notification_2(self): """ Test notifications with Transition object. """ dispatcher = self.dispatcher element = UML.Transition() g = element.guard = UML.Constraint() s = g.specification = UML.LiteralSpecification() dispatcher.register_handler(self._handler, element, 'guard.specification<LiteralSpecification>.value') assert len(dispatcher._handlers) == 3 assert not self.events assert (element.guard, UML.Constraint.specification) in dispatcher._handlers.keys(), dispatcher._handlers.keys() s.value = 'x' assert len(self.events) == 1, self.events element.guard = UML.Constraint() assert len(self.events) == 2, self.events assert len(dispatcher._handlers) == 2, len(dispatcher._handlers) assert (element.guard, UML.Constraint.specification) in dispatcher._handlers.keys() element.guard.specification = UML.LiteralSpecification() assert len(self.events) == 3, self.events assert len(dispatcher._handlers) == 3, len(dispatcher._handlers) def test_notification_of_change(self): """ Test notifications with Transition object. """ dispatcher = self.dispatcher element = UML.Transition() g = element.guard = UML.Constraint() s = g.specification = UML.LiteralSpecification() dispatcher.register_handler(self._handler, element, 'guard.specification<LiteralSpecification>.value') assert len(dispatcher._handlers) == 3 assert not self.events s.value = 'x' assert len(self.events) == 1, self.events element.guard = UML.Constraint() assert len(self.events) == 2, self.events def test_notification_with_composition(self): """ Test unregister with composition. Use Class.ownedOperation.precondition. """ dispatcher = self.dispatcher element = UML.Class() o = element.ownedOperation = UML.Operation() p = element.ownedOperation[0].precondition = UML.Constraint() p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.precondition.name') assert len(dispatcher._handlers) == 3 assert not self.events del element.ownedOperation[o] assert len(dispatcher._handlers) == 1 def test_notification_with_incompatible_elements(self): """ Test unregister with composition. Use Class.ownedOperation.precondition. """ dispatcher = self.dispatcher element = UML.Transition() g = element.guard = UML.Constraint() s = g.specification = UML.LiteralSpecification() dispatcher.register_handler(self._handler, element, 'guard.specification<LiteralSpecification>.value') assert len(dispatcher._handlers) == 3 assert not self.events assert (element.guard, UML.Constraint.specification) in dispatcher._handlers.keys(), dispatcher._handlers.keys() s.value = 'x' assert len(self.events) == 1, self.events element.guard.specification = UML.ValueSpecification() assert len(self.events) == 2, self.events s.value = 'a' assert len(self.events) == 2, self.events
class ElementDispatcherTestCase(TestCase): def setUp(self): super(ElementDispatcherTestCase, self).setUp() self.events = [] self.dispatcher = ElementDispatcher() self.dispatcher.init(Application) def tearDown(self): self.dispatcher.shutdown() super(ElementDispatcherTestCase, self).tearDown() def _handler(self, event): self.events.append(event) def test_register_handler(self): dispatcher = self.dispatcher element = UML.Class() dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') assert len(dispatcher._handlers) == 1 assert list( dispatcher._handlers.keys())[0] == (element, UML.Class.ownedOperation) # Add some properties: # 1: element.ownedOperation = UML.Operation() # 2: p = element.ownedOperation[0].formalParameter = UML.Parameter() # 3: p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(3, len(self.events)) self.assertEquals(3, len(dispatcher._handlers)) def test_register_handler_twice(self): """ Multiple registrations have no effect. """ dispatcher = self.dispatcher element = UML.Class() # Add some properties: element.ownedOperation = UML.Operation() p = element.ownedOperation[0].formalParameter = UML.Parameter() dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') n_handlers = len(dispatcher._handlers) self.assertEquals(0, len(self.events)) dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(n_handlers, len(dispatcher._handlers)) dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(n_handlers, len(dispatcher._handlers)) dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') self.assertEquals(n_handlers, len(dispatcher._handlers)) p.name = 'func' self.assertEquals(1, len(self.events)) def test_unregister_handler(self): # First some setup: dispatcher = self.dispatcher element = UML.Class() o = element.ownedOperation = UML.Operation() p = element.ownedOperation[0].formalParameter = UML.Parameter() p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') assert len(dispatcher._handlers) == 3 assert dispatcher._handlers[element, UML.Class.ownedOperation] assert dispatcher._handlers[o, UML.Operation.parameter] assert dispatcher._handlers[p, UML.Parameter.name] dispatcher.unregister_handler(self._handler) assert len(dispatcher._handlers) == 0, dispatcher._handlers assert len(dispatcher._reverse) == 0, dispatcher._reverse #assert dispatcher._handlers.keys()[0] == (element, UML.Class.ownedOperation) # Should not fail here too: dispatcher.unregister_handler(self._handler) def test_notification(self): """ Test notifications with Class object. """ dispatcher = self.dispatcher element = UML.Class() o = element.ownedOperation = UML.Operation() p = element.ownedOperation[0].formalParameter = UML.Parameter() p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.parameter.name') assert len(dispatcher._handlers) == 3 assert not self.events element.ownedOperation = UML.Operation() assert len(self.events) == 1, self.events assert len(dispatcher._handlers) == 4 p.name = 'othername' assert len(self.events) == 2, self.events del element.ownedOperation[o] assert len(dispatcher._handlers) == 2 def test_notification_2(self): """ Test notifications with Transition object. """ dispatcher = self.dispatcher element = UML.Transition() g = element.guard = UML.Constraint() dispatcher.register_handler(self._handler, element, 'guard.specification') assert len(dispatcher._handlers) == 2 assert not self.events assert (element.guard, UML.Constraint.specification) in list( dispatcher._handlers.keys()), list(dispatcher._handlers.keys()) g.specification = 'x' assert len(self.events) == 1, self.events element.guard = UML.Constraint() assert len(self.events) == 2, self.events assert len(dispatcher._handlers) == 2, len(dispatcher._handlers) assert (element.guard, UML.Constraint.specification) in list( dispatcher._handlers.keys()) def test_notification_of_change(self): """ Test notifications with Transition object. """ dispatcher = self.dispatcher element = UML.Transition() g = element.guard = UML.Constraint() dispatcher.register_handler(self._handler, element, 'guard.specification') assert len(dispatcher._handlers) == 2 assert not self.events g.specification = 'x' assert len(self.events) == 1, self.events element.guard = UML.Constraint() assert len(self.events) == 2, self.events def test_notification_with_composition(self): """ Test unregister with composition. Use Class.ownedOperation.precondition. """ dispatcher = self.dispatcher element = UML.Class() o = element.ownedOperation = UML.Operation() p = element.ownedOperation[0].precondition = UML.Constraint() p.name = 'func' dispatcher.register_handler(self._handler, element, 'ownedOperation.precondition.name') assert len(dispatcher._handlers) == 3 assert not self.events del element.ownedOperation[o] assert len(dispatcher._handlers) == 1 def test_notification_with_incompatible_elements(self): """ Test unregister with composition. Use Class.ownedOperation.precondition. """ dispatcher = self.dispatcher element = UML.Transition() g = element.guard = UML.Constraint() dispatcher.register_handler(self._handler, element, 'guard.specification') assert len(dispatcher._handlers) == 2 assert not self.events assert (element.guard, UML.Constraint.specification) in list( dispatcher._handlers.keys()), list(dispatcher._handlers.keys()) g.specification = 'x' assert len(self.events) == 1, self.events g.specification = 'a' assert len(self.events) == 2, self.events
class ElementDispatcherTestCase(TestCase): def setUp(self): super().setUp() self.events = [] self.dispatcher = ElementDispatcher() self.dispatcher.init(Application) def tearDown(self): self.dispatcher.shutdown() super().tearDown() def _handler(self, event): self.events.append(event) def test_register_handler(self): dispatcher = self.dispatcher element = self.element_factory.create(UML.Class) dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) assert len(dispatcher._handlers) == 1 assert list(dispatcher._handlers.keys())[0] == ( element, UML.Class.ownedOperation, ) # Add some properties: # 1: element.ownedOperation = self.element_factory.create(UML.Operation) # 2: p = element.ownedOperation[0].formalParameter = self.element_factory.create( UML.Parameter ) # 3: p.name = "func" dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) self.assertEqual(3, len(self.events)) self.assertEqual(3, len(dispatcher._handlers)) def test_register_handler_twice(self): """ Multiple registrations have no effect. """ dispatcher = self.dispatcher element = self.element_factory.create(UML.Class) # Add some properties: element.ownedOperation = self.element_factory.create(UML.Operation) p = element.ownedOperation[0].formalParameter = self.element_factory.create( UML.Parameter ) dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) n_handlers = len(dispatcher._handlers) self.assertEqual(0, len(self.events)) dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) self.assertEqual(n_handlers, len(dispatcher._handlers)) dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) self.assertEqual(n_handlers, len(dispatcher._handlers)) dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) self.assertEqual(n_handlers, len(dispatcher._handlers)) p.name = "func" self.assertEqual(1, len(self.events)) def test_unregister_handler(self): # First some setup: dispatcher = self.dispatcher element = self.element_factory.create(UML.Class) o = element.ownedOperation = self.element_factory.create(UML.Operation) p = element.ownedOperation[0].formalParameter = self.element_factory.create( UML.Parameter ) p.name = "func" dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) assert len(dispatcher._handlers) == 3 assert dispatcher._handlers[element, UML.Class.ownedOperation] assert dispatcher._handlers[o, UML.Operation.parameter] assert dispatcher._handlers[p, UML.Parameter.name] dispatcher.unregister_handler(self._handler) assert len(dispatcher._handlers) == 0, dispatcher._handlers assert len(dispatcher._reverse) == 0, dispatcher._reverse # assert dispatcher._handlers.keys()[0] == (element, UML.Class.ownedOperation) # Should not fail here too: dispatcher.unregister_handler(self._handler) def test_notification(self): """ Test notifications with Class object. """ dispatcher = self.dispatcher element = self.element_factory.create(UML.Class) o = element.ownedOperation = self.element_factory.create(UML.Operation) p = element.ownedOperation[0].formalParameter = self.element_factory.create( UML.Parameter ) p.name = "func" dispatcher.register_handler( self._handler, element, "ownedOperation.parameter.name" ) assert len(dispatcher._handlers) == 3 assert not self.events element.ownedOperation = self.element_factory.create(UML.Operation) assert len(self.events) == 1, self.events assert len(dispatcher._handlers) == 4 p.name = "othername" assert len(self.events) == 2, self.events del element.ownedOperation[o] assert len(dispatcher._handlers) == 2 def test_notification_2(self): """ Test notifications with Transition object. """ dispatcher = self.dispatcher element = self.element_factory.create(UML.Transition) g = element.guard = self.element_factory.create(UML.Constraint) dispatcher.register_handler(self._handler, element, "guard.specification") assert len(dispatcher._handlers) == 2 assert not self.events assert (element.guard, UML.Constraint.specification) in list( dispatcher._handlers.keys() ), list(dispatcher._handlers.keys()) g.specification = "x" assert len(self.events) == 1, self.events element.guard = self.element_factory.create(UML.Constraint) assert len(self.events) == 2, self.events assert len(dispatcher._handlers) == 2, len(dispatcher._handlers) assert (element.guard, UML.Constraint.specification) in list( dispatcher._handlers.keys() ) def test_notification_of_change(self): """ Test notifications with Transition object. """ dispatcher = self.dispatcher element = self.element_factory.create(UML.Transition) g = element.guard = self.element_factory.create(UML.Constraint) dispatcher.register_handler(self._handler, element, "guard.specification") assert len(dispatcher._handlers) == 2 assert not self.events g.specification = "x" assert len(self.events) == 1, self.events element.guard = self.element_factory.create(UML.Constraint) assert len(self.events) == 2, self.events def test_notification_with_composition(self): """ Test unregister with composition. Use Class.ownedOperation.precondition. """ dispatcher = self.dispatcher element = self.element_factory.create(UML.Class) o = element.ownedOperation = self.element_factory.create(UML.Operation) p = element.ownedOperation[0].precondition = self.element_factory.create( UML.Constraint ) p.name = "func" dispatcher.register_handler( self._handler, element, "ownedOperation.precondition.name" ) assert len(dispatcher._handlers) == 3 assert not self.events del element.ownedOperation[o] assert len(dispatcher._handlers) == 1 def test_notification_with_incompatible_elements(self): """ Test unregister with composition. Use Class.ownedOperation.precondition. """ dispatcher = self.dispatcher element = self.element_factory.create(UML.Transition) g = element.guard = self.element_factory.create(UML.Constraint) dispatcher.register_handler(self._handler, element, "guard.specification") assert len(dispatcher._handlers) == 2 assert not self.events assert (element.guard, UML.Constraint.specification) in list( dispatcher._handlers.keys() ), list(dispatcher._handlers.keys()) g.specification = "x" assert len(self.events) == 1, self.events g.specification = "a" assert len(self.events) == 2, self.events