def test_router_calls_all_app_phases(): class MockMsg(object): connection = None text = '' handled = False class MockApp(AppBase): start_phases = ["start"] incoming_phases = ["filter", "parse", "handle", "default", "cleanup"] outgoing_phases = ["outgoing"] stop_phases = ["stop"] called_phases = [] def _append_phase(self, phase, *args, **kwargs): self.called_phases.append(phase) return False def __init__(self, router): phases = self.start_phases + self.incoming_phases +\ self.outgoing_phases + self.stop_phases for phase in phases: setattr(self, phase, curry(self._append_phase, phase)) super(MockApp, self).__init__(router) router = BaseRouter() app = MockApp(router) router.apps.append(app) router.receive_incoming(MockMsg()) assert_equals(app.called_phases, app.incoming_phases) app.called_phases = [] router.send_outgoing(MockMsg()) assert_equals(app.called_phases, app.outgoing_phases) app.called_phases = [] router.start() assert_equals(app.called_phases, app.start_phases) app.called_phases = [] router.stop() assert_equals(app.called_phases, app.stop_phases)