'L{Deferred} chaining is transitive.
In other words, let A, B, and C be Deferreds.  If C is returned from a
callback on B and B is returned from a callback on A then when C fires,
A fires.'

def test_doubleAsynchronousImplicitChaining(self):

    first = defer.Deferred()
    second = defer.Deferred()
    second.addCallback((lambda ign: first))
    third = defer.Deferred()
    third.addCallback((lambda ign: second))
    thirdResult = []
    third.addCallback(thirdResult.append)
    result = object()
    second.callback(None)
    third.callback(None)
    self.assertEqual(thirdResult, [])
    first.callback(result)
    self.assertEqual(thirdResult, [result])
