Beispiel #1
0
    def test_observerlist(self):
        ol = observer.ObserverList()
        l1 = []
        l2 = []
        l3 = []
        ol.subscribe(l1.append)
        ol.notify(1)
        ol.subscribe(l2.append)
        ol.notify(2)
        ol.unsubscribe(l1.append)
        ol.notify(3)

        def _check(res):
            self.failUnlessEqual(l1, [1, 2])
            self.failUnlessEqual(l2, [2, 3])

        d = nextTurn()
        d.addCallback(_check)

        def _step2(res):
            def _add(a, b, c=None):
                l3.append((a, b, c))

            ol.unsubscribe(l2.append)
            ol.subscribe(_add)
            ol.notify(4, 5, c=6)
            return nextTurn()

        def _check2(res):
            self.failUnlessEqual(l3, [(4, 5, 6)])

        d.addCallback(_step2)
        d.addCallback(_check2)
        return d
Beispiel #2
0
    def test_observer_list_propagate_keyboardinterrupt(self):
        """
        ``KeyboardInterrupt`` escapes ``ObserverList.notify``.
        """
        def observer_one():
            raise KeyboardInterrupt()

        obs = observer.ObserverList()
        obs.subscribe(observer_one)

        with self.assertRaises(KeyboardInterrupt):
            obs.notify()
Beispiel #3
0
    def test_observer_list_reentrant(self):
        """
        ``ObserverList`` is reentrant.
        """
        observed = []

        def observer_one():
            obs.unsubscribe(observer_one)

        def observer_two():
            observed.append(None)

        obs = observer.ObserverList()
        obs.subscribe(observer_one)
        obs.subscribe(observer_two)
        obs.notify()

        self.assertEqual([None], observed)
Beispiel #4
0
    def test_observer_list_observer_errors(self):
        """
        An error in an earlier observer does not prevent notification from being
        delivered to a later observer.
        """
        observed = []

        def observer_one():
            raise Exception("Some problem here")

        def observer_two():
            observed.append(None)

        obs = observer.ObserverList()
        obs.subscribe(observer_one)
        obs.subscribe(observer_two)
        obs.notify()

        self.assertEqual([None], observed)
        self.assertEqual(1, len(self.flushLoggedErrors(Exception)))