def test_propagation(): dispatcher = EventDispatcher() for event_id in ( STRING_EVENT_ID, OBJECT_EVENT_ID, NUMERIC_EVENT_ID, ): listener1 = mock.MagicMock() def listener2(event): event.stop_propagation() listener3 = mock.MagicMock() dispatcher.add_listener(event_id, listener1) dispatcher.add_listener(event_id, listener2) dispatcher.add_listener(event_id, listener3) assert listener1.call_count == 0 assert listener3.call_count == 0 e = dispatcher.dispatch(event_id) assert listener1.call_count == 1 assert listener3.call_count == 0 assert e.propagation_stopped e = dispatcher.dispatch(event_id) assert listener1.call_count == 2 assert listener3.call_count == 0 assert e.propagation_stopped assert dispatcher.get_listeners(event_id) == [ listener1, listener2, listener3 ] listeners = dispatcher.get_listeners() assert len(listeners) == 3 for event_id in ( STRING_EVENT_ID, OBJECT_EVENT_ID, NUMERIC_EVENT_ID, ): assert len(listeners[event_id]) == 3
def test_register_unregister(): plugin = ConsoleOutputPlugin() dispatcher = EventDispatcher() plugin.register(dispatcher) assert plugin.setup in dispatcher.get_listeners(events.START) assert plugin.tick in dispatcher.get_listeners(events.TICK) assert plugin.teardown in dispatcher.get_listeners(events.STOPPED) plugin.unregister(dispatcher) assert plugin.setup not in dispatcher.get_listeners(events.START) assert plugin.tick not in dispatcher.get_listeners(events.TICK) assert plugin.teardown not in dispatcher.get_listeners(events.STOPPED)