Beispiel #1
0
class SignalsTest(AsyncTestCase):

    def setUp(self):
        self.bus = EventBus()
        super().setUp()

    @gen_test(timeout=0.2)
    def test_basic_signal(self):
        res = []
        hit = lambda x: res.append(True)
        listener = Listener('pp.found', hit, async=False)

        res2 = []
        hit2 = lambda x: res2.append(True)
        listener2 = Listener('pp.found', hit2, async=True)

        self.bus.register_listener(listener)
        self.bus.register_listener(listener2)

        self.assertEqual(len(res), 0)
        signal = Event('pp.something-else')

        self.bus.trigger_signal(signal)
        self.assertEqual(len(res), 0)

        signal = Event('pp.found')
        self.bus.trigger_signal(signal)
        self.assertEqual(len(res), 1)
        self.assertEqual(len(res2), 0)
        yield gen.Task(self.io_loop.current().add_timeout, timedelta(milliseconds=2))
        self.assertEqual(len(res2), 1)

    def test_with_obj(self):
        obj = 1
        res = []
        hit = lambda x: res.append(True)
        signal = Event('pp', obj=obj)
        listener = Listener('pp', hit, obj=obj, async=False)

        obj2='foo'
        res2 = []
        hit2 = lambda x: res2.append(True)
        signal2 = Event('pp', obj=obj2)
        listener2 = Listener('pp', hit2, obj=obj2,  async=False)

        self.bus.register_listener(listener)
        self.bus.register_listener(listener2)

        self.bus.trigger_signal(signal)
        self.bus.trigger_signal(signal2)

        self.assertEqual(len(res), 1)
        self.assertEqual(len(res2), 1)

    def test_removal(self):
        res = []
        hit = lambda x:res.append(True)
        listener = Listener('pp.found', hit, async=False)
        self.bus.register_listener(listener)
        signal = Event('pp.found')
        self.bus.trigger_signal(signal)
        self.bus.remove_listener(listener)
        self.assertEqual(len(res), 1)
        self.bus.trigger_signal(signal)
        self.assertEqual(len(res), 1)

    @gen_test(timeout=0.2)
    def test_basic_mixin_and_decorator(self):
        tc = TestClass()
        self.assertEqual(tc.observed, 0)
        tc.ping()

        yield gen.Task(self.io_loop.current().add_timeout, timedelta(milliseconds=2))
        self.assertEqual(tc.observed, 1)