def test_cancelNestedDeferred(self):
"""
Verify that a Deferred, a, which is waiting on another Deferred, b,
returned from one of its callbacks, will propagate
L{defer.CancelledError} when a is cancelled.
"""
def innerCancel(d):
self.cancellerCallCount += 1
def cancel(d):
self.assertTrue(False)
b = defer.Deferred(canceller=innerCancel)
a = defer.Deferred(canceller=cancel)
a.callback(None)
a.addCallback(lambda data: b)
a.cancel()
a.addCallbacks(self._callback, self._errback)
# The cancel count should be one (the cancellation done by B)
self.assertEqual(self.cancellerCallCount, 1)
# B's canceller didn't errback, so defer.py will have called errback
# with a CancelledError.
self.assertEqual(self.errbackResults.type, defer.CancelledError)
评论列表
文章目录