
[XMc           @   s\  d  Z  d d l Z d d l Z d d l m Z d d l m Z m Z d d l m	 Z	 d d l
 m Z m Z d d l m Z d e f d	     YZ d
 e j f d     YZ d e j f d     YZ d e j f d     YZ d e j f d     YZ d e j f d     YZ d e j f d     YZ d e j f d     YZ d e j f d     YZ d S(   s   
Test cases for defer module.
iN(   t   unittest(   t   reactort   defer(   t   Clock(   t   failuret   log(   t
   unsignedIDt   GenericErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR      s   t   DeferredTestCasec           B   s  e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d    Z" d!   Z# d"   Z$ d#   Z% d$   Z& d%   Z' d&   Z( d'   Z) d(   Z* d)   Z+ d*   Z, d+   Z- d,   Z. d-   Z/ d.   Z0 d/   Z1 d0   Z2 RS(1   c         C   s   d  |  _ d  |  _ d  |  _ d  S(   N(   t   Nonet   callbackResultst   errbackResultst   callback2Results(   t   self(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   setUp   s    		c         O   s   | | f |  _  | d S(   Ni    (   R   (   R   t   argst   kw(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   _callback   s    c         O   s   | | f |  _  d  S(   N(   R   (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt
   _callback2    s    c         O   s   | | f |  _  d  S(   N(   R   (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _errback#   s    c         C   sY   t  j   } | j |  j  | j d  |  j |  j d   |  j |  j d i  f  d  S(   Nt   hello(   R   (	   R   t   Deferredt   addCallbackR   t   callbackt   failUnlessEqualR   R   R   (   R   t   deferred(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testCallbackWithoutArgs&   s
    c         C   s\   t  j   } | j |  j d  | j d  |  j |  j d   |  j |  j d i  f  d  S(   Nt   worldR   (   s   hellos   world(	   R   R   R   R   R   R   R   R   R   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testCallbackWithArgs-   s
    c         C   sf   t  j   } | j |  j d d | j d  |  j |  j d   |  j |  j d i d d 6f  d  S(   NR   R   (   s   hello(	   R   R   R   R   R   R   R   R   R   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testCallbackWithKwArgs4   s    c         C   s   t  j   } | j |  j  | j |  j  | j d  |  j |  j d   |  j |  j	 d i  f  |  j |  j
 d i  f  d  S(   NR   (   s   hello(   s   hello(   R   R   R   R   R   R   R   R   R   R   R   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testTwoCallbacks<   s    c         C   s	  t  j   } t  j   } t  j   } t  j | | | g  } g  } | d  } d   } | j | |  | j d  | j |  | j t d   | j d  |  j | d | d d t	 | d d j
  f | d g t  j d f t  j d f t  j d f g  d  S(	   Nc         S   s   | j  |   d  S(   N(   t   extend(   t
   resultListt   result(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   cbM   s    c         S   s   d  S(   N(   R   (   t   err(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   catchO   s    t   1t   2t   3i    i   i   (   R   R   t   DeferredListt   addCallbacksR   t
   addErrbackt   errbackR   R   t   strt   valuet   SUCCESSt   FAILURE(   R   t   defr1t   defr2t   defr3t   dlR#   R$   R&   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testDeferredListG   s$    	"
c         C   s~   g  } | d  } t  j g   } | j |  |  j | g  g  g  | (t  j g  d d } | j |  |  j | g   d  S(   Nc         S   s   | j  |   d  S(   N(   t   append(   R"   R#   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$   g   s    t   fireOnOneCallbacki   (   R   R*   R+   R   (   R   R#   R$   R5   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testEmptyDeferredListe   s    c   	      C   s6  t  j   } t  j   } t  j   } t  j | | | g d d } g  } | j | j  d   } | j |  | j d  |  j | g   | j t d   |  j t	 |  d  | d } |  j
 t | j t  j  d | j f  | j } |  j | j j t  |  j | j j j d  |  j | j d  d  S(	   Nt   fireOnOneErrbacki   c         S   s   d  S(   N(   R   (   R%   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR&   }   s    R'   s	   from def2i    sH   issubclass(aFailure.type, defer.FirstError) failed: failure's type is %r(   s	   from def2(   R   R   R*   R,   R7   R   R   R-   R   t   lent
   failUnlesst
   issubclasst   typet
   FirstErrorR/   t
   subFailureR   t   index(	   R   R2   R3   R4   R5   R#   R&   t   aFailuret
   firstError(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testDeferredListFireOnOneErrors   s(    	
	c         C   s   t  j   } t  j | g  } g  } | j | j  g  } | j | j  | j t d   |  j d | d j	 j
 d  |  j d t |   |  j d | d d d j	 j
 d  d  S(   Nt   Bangi    i   (   R   R   R*   R,   R7   R   R-   R   R   R/   R   R;   (   R   t   d1R5   t	   errorTrapR#   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt!   testDeferredListDontConsumeErrors   s    c         C   s   t  j   } t  j | g d t } g  } | j | j  g  } | j | j  | j t d   |  j	 g  |  |  j	 d t
 |   |  j	 d | d d d j j d  d  S(   Nt   consumeErrorsRE   i   i    (   R   R   R*   t   TrueR,   R7   R   R-   R   R   R;   R/   R   (   R   RF   R5   RG   R#   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testDeferredListConsumeErrors   s    c         C   s   t  j   } t  j   } | j t d   t  j | | g d t } g  } | j | j  |  j d t	 |   | j d    d  S(   NRE   R:   i   c         S   s   d  S(   N(   R   (   t   e(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   <lambda>   s    (
   R   R   R-   R   R*   RJ   R,   R7   R   R;   (   R   RF   t   d2R5   R#   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt7   testDeferredListFireOnOneErrorWithAlreadyFiredDeferreds   s    c         C   s   t  j   } t  j   } | j t d   | j d  t  j | | g  } g  } | j | j  |  j d t	 |   | j
 d    d  S(   NRE   i   i   c         S   s   d  S(   N(   R   (   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM      s    (   R   R   R-   R   R   R*   R   R7   R   R;   R,   (   R   RF   RN   R5   R#   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt)   testDeferredListWithAlreadyFiredDeferreds   s    c         C   s<   g  } t  j d  } | j | j  |  j | d g  d  S(   Nt   success(   R   t   succeedR   R7   t   assertEquals(   R   t   lt   d(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testImmediateSuccess   s    c         C   sL   g  } t  j t d   } | j | j  |  j t | d j  d  d  S(   Nt   faili    (   R   RW   R   R,   R7   RS   R.   R/   (   R   RT   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testImmediateFailure   s    c         C   sp   g  } t  j t d   } | j   | j | j  |  j | g   | j   |  j t | d j	  d  d  S(   NRW   i    (
   R   RW   R   t   pauseR,   R7   RS   t   unpauseR.   R/   (   R   RT   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testPausedFailure   s    

c         C   s   g  } t  j   j d    j | j  } | j d  |  j t | d j t	   g  } t  j   j d    j | j  } | j d  |  j t | d j t	   d  S(   Nc         S   s   d d S(   Ni   i    (    (   t   _(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM      s    i   i    c         S   s   t  j t    S(   N(   R   t   Failuret   ZeroDivisionError(   R\   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM      s    (
   R   R   R   R,   R7   R   t   assert_t
   isinstanceR/   R^   (   R   RT   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testCallbackErrors   s    $c         C   s4   t  j   } | j   | j |  j  | j   d  S(   N(   R   R   RY   R   R   RZ   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testUnpauseBeforeCallback   s    
c         C   s   t  j   } t  j   } | j   | j | d   | j |  j  | j d  |  j d  k sj t d  | j d  |  j d  k s t d  | j	   |  j d d d k s t d |  j f  d  S(   Nc         S   s   | S(   N(    (   t   rRN   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i   s    Should not have been called yet.i   s&   Still should not have been called yet.i    s/   Result should have been from second deferred:%s(
   R   R   RY   R   R   R   R   R   t   AssertionErrorRZ   (   R   RU   RN   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testReturnDeferred   s    

c            s   t    } t j       j |    j   t j   } | j   f d    | j d  g  } | j | j  |  j | g     j	   |  j | | g  d S(   s   
        When a paused Deferred with a result is returned from a callback on
        another Deferred, the other Deferred is chained to the first and waits
        for it to be unpaused.
        c            s     S(   N(    (   t   ignored(   t   paused(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    N(
   t   objectR   R   R   RY   R   R   R7   RS   RZ   (   R   t   expectedt   chainedR#   (    (   Rg   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt$   test_chainedPausedDeferredWithResult  s    	

c            s   t  j   } t  j     | j   f d    | j d  | j     j d  g  }   j | j  |  j | d g  d S(   s   
        A paused Deferred encountered while pushing a result forward through a
        chain does not prevent earlier Deferreds from continuing to execute
        their callbacks.
        c            s     S(   N(    (   Rf   (   t   second(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   +  s    N(   R   R   R   R   R   RY   R7   RS   (   R   t   firstR#   (    (   Rl   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_pausedDeferredChained#  s    
c         C   s   g  } t  j t  j d  t  j d  g  j | j  |  j | d d g g  g  } t  j d  t  j t  g } t  j |  j | j  |  j t	 |  d  |  j
 t | d t j   | d j d    d  S(   Ni   i   i    c         S   s   d S(   Ni   (    (   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   @  s    (   R   t   gatherResultsRR   R   R7   RS   RW   t
   ValueErrorR,   R;   R_   R`   R   R]   (   R   RT   R5   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testGatherResults4  s    1c         C   s_   g  g  } } t  j d   d  } | j | j | j  |  j | g   |  j | d g  | S(   s   
        L{defer.maybeDeferred} should retrieve the result of a synchronous
        function and pass it to its resulting L{defer.Deferred}.
        c         S   s   |  d S(   Ni   (    (   t   x(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   I  s    i
   i   (   R   t   maybeDeferredR+   R7   RS   (   R   t   St   ERU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_maybeDeferredSyncC  s    c         C   s   g  g  } } y d d Wn t  k
 r: } t |  } n Xt j d   d  } | j | j | j  |  j | g   |  j t |  d  |  j t | d j  |  | S(   s   
        L{defer.maybeDeferred} should catch exception raised by a synchronous
        function and errback its resulting L{defer.Deferred} with it.
        t   10i   c         S   s   |  d S(   Ni   (    (   Rr   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   Z  s    i   i    (	   t	   TypeErrorR.   R   Rs   R+   R7   RS   R;   R/   (   R   Rt   Ru   RL   Ri   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_maybeDeferredSyncErrorP  s    c            sD   t  j     t  j   f d    }   j d  | j |  j d  S(   s   
        L{defer.maybeDeferred} should let L{defer.Deferred} instance pass by
        so that original result is the same.
        c              s     S(   N(    (    (   RU   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   h  s    t   Success(   R   R   Rs   R   R   RS   (   R   RN   (    (   RU   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_maybeDeferredAsyncb  s    c            sM   t  j     t  j   f d    }   j t j t     |  j | t  S(   s   
        L{defer.maybeDeferred} should let L{defer.Deferred} instance pass by
        so that L{failure.Failure} returned by the original instance is the
        same.
        c              s     S(   N(    (    (   RU   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   t  s    (   R   R   Rs   R-   R   R]   t   RuntimeErrort   assertFailure(   R   RN   (    (   RU   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_maybeDeferredAsyncErrorm  s    c            s   g    g   t  j        f d   } t  j d  } | j |   j d  | j   j   j  j  | j  j  |  j g    |  j   d
 d d d g  d	 S(   s  
        When a L{Deferred} encounters a result which is another L{Deferred}
        which is waiting on a third L{Deferred}, the middle L{Deferred}'s
        callbacks are executed after the third L{Deferred} fires and before the
        first receives a result.
        c            sm     j  d |  f  t j d  }    f d   }   f d   } | j |  j |  | j  j   | S(   Ns   start-of-cbt   innerc            s    j  d    S(   Nt   firstCallbackR   (   s   firstCallbacks   inner(   R7   (   R#   (   R   t   results(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s     j  d |  f  |  d S(   Nt   secondCallbacki   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    (   R7   R   RR   R   R,   (   R#   RU   R   R   (   R   t   failuresR   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$     s    t   outert   oranges   start-of-cbR   R   R   t   orangeorangeN(   s   start-of-cbs   outer(   s   firstCallbacks   inner(   s   secondCallbackR   (   R   R   RR   R   R   R7   R,   t   assertEqual(   R   R$   R   (    (   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_innerCallbacksPreservedy  s"    c            s   g   g   t  j         f d   } t  j d  } | j |  | j  j  |  j d d	 g     j d  |  j g    |  j  d
 d d d g f g  d S(   s   
        The continue callback of a L{Deferred} waiting for another L{Deferred}
        is not necessarily the first one. This is somewhat a whitebox test
        checking that we search for that callback among the whole list of
        callbacks.
        c            s{    j  d |  f  t j   }    f d   }  f d   } | j |  | j |  | j  j   | j d   | S(   NR$   c            s#    j  d |  f  t j   g  S(   NR   (   R7   R   Ro   (   Rf   (   t   aR   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s     j  d |  f  d  S(   NR   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    (   R7   R   R   R   R,   R   R   (   R#   RU   R   R   (   R   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$     s    R   R$   R   t   withersR   N(   s   cbs   outer(   s   firstCallbackN(   s   cbs   outer(   s   firstCallbackN(	   R   R   RR   R   R,   R7   RS   R   R   (   R   R$   R   (    (   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_continueCallbackNotFirst  s    c            s   g   g   t  j         f d   } t  j   } | j |  | j  f d    | j  j  | j d  |  j d
 d g     j d  |  j g    |  j  d d d d g f d g  d	 S(   s   
        A callback added to a L{Deferred} after a previous callback attached
        another L{Deferred} as a result is run after the callbacks of the other
        L{Deferred} are run.
        c            s{    j  d |  f  t j   }    f d   }  f d   } | j |  | j |  | j  j   | j d   | S(   NR$   c            s#    j  d |  f  t j   g  S(   NR   (   R7   R   Ro   (   Rf   (   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s     j  d |  f  d  S(   NR   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    (   R7   R   R   R   R,   R   R   (   R#   RU   R   R   (   R   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$     s    c            s     j  d  S(   Nt   final(   R7   (   Rr   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    R   R$   R   R   R   R   N(   s   cbs   outer(   s   firstCallbackN(   s   cbs   outer(   s   firstCallbackN(   R   R   R   R,   R7   R   RS   R   (   R   R$   R   (    (   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_callbackOrderPreserved  s"    c            s   t  j    g    f d      f d   }     f d   }  j |   j |   j d  |  j  d d d g  d S(   s   
        A callback added to a L{Deferred} by a callback on that L{Deferred}
        should be added to the end of the callback chain.
        c            s     j  d  d  S(   Ni   (   R7   (   R#   (   t   called(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   callback3  s    c            s     j  d  d  S(   Ni   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   callback2  s    c            s    j  d    j   d  S(   Ni   (   R7   R   (   R#   (   R   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   callback1  s    i   i   i   N(   R   R   R   R   R   R   (   R   R   R   (    (   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_reentrantRunCallbacks  s    c            sm   t  j    g    f d         f d   }  j |   j d    j  d d g  d S(   s   
        A callback added to a L{Deferred} by a callback on that L{Deferred}
        should not be executed until the running callback returns.
        c            s     j  d  d  S(   Ni   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s1    j  d   j     j  d g  d  S(   Ni   (   R7   R   RS   (   R#   (   R   R   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    i   i   N(   R   R   R   R   R   R   (   R   R   (    (   R   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_nonReentrantCallbacks  s    c            s   d   t  j      f d      f d   }  j |   j d   j  t     f d   }  j |   S(   s   
        After an exception is raised by a callback which was added to a
        L{Deferred} by a callback on that L{Deferred}, the L{Deferred} should
        call the first errback with a L{Failure} wrapping that exception.
        s   callback raised exceptionc            s   t      d  S(   N(   t	   Exception(   R#   (   t   exceptionMessage(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s    j     d  S(   N(   R   (   R#   (   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   !  s    c            s    j  |  j   f  d  S(   N(   R   R   (   t	   exception(   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   cbFailed&  s    N(   R   R   R   R   R   R}   R   (   R   R   R   (    (   R   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt%   test_reentrantRunCallbacksWithFailure  s    c            s   t    } t j |    t j   } | j   f d    | j d  g  }   j | j  |  j | d d  | j | j  |  j | d |  d S(   s  
        If a first L{Deferred} with a result is returned from a callback on a
        second L{Deferred}, the result of the second L{Deferred} becomes the
        result of the first L{Deferred} and the result of the first L{Deferred}
        becomes C{None}.
        c            s     S(   N(    (   t   ign(   Rm   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   6  s    i    i   N(	   Rh   R   RR   R   R   R   R   R7   t   assertIdentical(   R   R#   Rl   R   (    (   Rm   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_synchronousImplicitChain,  s    	c            s   t  j     t  j   } | j   f d    | j d  g  }   j | j  g  } | j | j  |  j | g   |  j | g   t   }   j |  |  j | d g  |  j | | g  d S(   s9  
        If a first L{Deferred} without a result is returned from a callback on
        a second L{Deferred}, the result of the second L{Deferred} becomes the
        result of the first L{Deferred} as soon as the first L{Deferred} has
        one and the result of the first L{Deferred} becomes C{None}.
        c            s     S(   N(    (   R   (   Rm   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   I  s    N(   R   R   R   R   R   R7   RS   Rh   (   R   Rl   t   firstResultt   secondResultR#   (    (   Rm   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_asynchronousImplicitChain@  s    	c         C   s   t  j t d   } t  j   } | j | d   |  j | t  | j d  g  } | j | j  |  j	 | d d  | S(   s  
        If a first L{Deferred} with a L{Failure} result is returned from a
        callback on a second L{Deferred}, the first L{Deferred}'s result is
        converted to L{None} and no unhandled error is logged when it is
        garbage collected.
        s   First Deferred's Failurec         S   s   | S(   N(    (   R   Rm   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   d  s    i    N(
   R   RW   R|   R   R   R}   R   R   R7   R   (   R   Rm   Rl   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt"   test_synchronousImplicitErrorChain[  s    c            s   t  j     t  j   } | j   f d    | j d  |  j | t  g  }   j | j  g  } | j | j  |  j | g   |  j | g     j	 t d   |  j | d g  |  j t
 |  d  d S(   sP  
        Let C{a} and C{b} be two L{Deferred}s.

        If C{a} has no result and is returned from a callback on C{b} then when
        C{a} fails, C{b}'s result becomes the L{Failure} that was C{a}'s result,
        the result of C{a} becomes C{None} so that no unhandled error is logged
        when it is garbage collected.
        c            s     S(   N(    (   R   (   Rm   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   x  s    s   First Deferred's Failurei   N(   R   R   R   R   R   R}   R|   R7   RS   R-   R;   (   R   Rl   R   R   (    (   Rm   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt#   test_asynchronousImplicitErrorChainm  s    	c            s   t  j    t  j       j  f d    t  j   } | j   f d    g  } | j | j  t   }   j d  | j d  |  j | g    j |  |  j | | g  d S(   s   
        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.
        c            s     S(   N(    (   R   (   Rm   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    c            s     S(   N(    (   R   (   Rl   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    N(   R   R   R   R7   Rh   R   R   RS   (   R   t   thirdt   thirdResultR#   (    (   Rl   Rm   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt'   test_doubleAsynchronousImplicitChaining  s    	c            s   g    g   t  j        f d   } t  j d  } | j |  | j   j  |  j   d d g   j d   j  j  | j  j  |  j g   d  |  j   d d d d	 g  d
 S(   s   
        L{Deferred}s can have callbacks that themselves return L{Deferred}s.
        When these "inner" L{Deferred}s fire (even asynchronously), the
        callback chain continues.
        c            sm     j  d |  f  t j d  }    f d   }   f d   } | j |  j |  | j  j   | S(   Ns   start-of-cbR   c            s    j  d    S(   NR   R   (   s   firstCallbacks   inner(   R7   (   R#   (   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s     j  d |  f  |  d S(   NR   i   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    (   R7   R   RR   R   R,   (   R#   RU   R   R   (   R   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$     s    R   s   start-of-cbR   R   R   s&   Got errbacks but wasn't expecting any.R   R   N(   s   start-of-cbs   outer(   s   firstCallbacks   inner(   s   start-of-cbs   outer(   s   firstCallbacks   inner(   s   secondCallbacks   orange(   R   R   RR   R   R7   RS   R   R,   (   R   R$   R   (    (   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt'   test_nestedAsynchronousChainedDeferreds  s(    c            s   g    g   t  j        f d   } t  j d  } | j |  | j   j  |  j   d
 d g   j d  | j  j   j  j  |  j g   d  |  j   d d d d g f d d g g  d	 S(   sK  
        L{Deferred}s can have callbacks that themselves return L{Deferred}s.
        These L{Deferred}s can have other callbacks added before they are
        returned, which subtly changes the callback chain. When these "inner"
        L{Deferred}s fire (even asynchronously), the outer callback chain
        continues.
        c            sq     j  d |  f  t j d  }    f d   }   f d   } | j |  | j |  | j  j   | S(   Ns   start-of-cbR   c            s#     j  d |  f   j d    S(   NR   c         S   s   |  g S(   N(    (   Rr   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    (   R7   R   (   Rf   (   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            s     j  d |  f  |  d S(   NR   i   (   R7   (   R#   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR      s    (   R7   R   RR   R   R,   (   R#   RU   R   R   (   R   R   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$     s    R   s   start-of-cbR   R   R   s&   Got errbacks but wasn't expecting any.R   N(   s   start-of-cbs   outer(   s   firstCallbacks   inner(   s   start-of-cbs   outer(   s   firstCallbacks   inner(   R   R   RR   R   R7   RS   R   R,   (   R   R$   R   (    (   R   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt9   test_nestedAsynchronousChainedDeferredsWithExtraCallbacks  s(    c         C   s<   t  j   } t  j   } | j |  |  j | j |  d S(   sT   
        When we chain a L{Deferred}, that chaining is recorded explicitly.
        N(   R   R   t   chainDeferredR   t
   _chainedTo(   R   R   t   b(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt&   test_chainDeferredRecordsExplicitChain&  s    c         C   sI   t  j   } t  j   } | j |  | j d  |  j | j d  d S(   sR  
        Any recorded chaining is cleared once the chaining is resolved, since
        it no longer exists.

        In other words, if one L{Deferred} is recorded as depending on the
        result of another, and I{that} L{Deferred} has fired, then the
        dependency is resolved and we no longer benefit from recording it.
        N(   R   R   R   R   R   R   R   (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt%   test_explicitChainClearedWhenResolved0  s
    	c            sR   t  j   } t  j     | j   f d    | j d  |  j | j    d S(   s   
        We can chain L{Deferred}s implicitly by adding callbacks that return
        L{Deferred}s. When this chaining happens, we record it explicitly as
        soon as we can find out about it.
        c            s     S(   N(    (   Rf   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   H  s    N(   R   R   R   R   R   R   R   (   R   R   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt&   test_chainDeferredRecordsImplicitChain@  s
    c         C   s?   t  j   } t t |   } |  j t |  d | f  d S(   s   
        The C{repr()} of a L{Deferred} contains the class name and a
        representation of the internal Python ID.
        s   <Deferred at %s>N(   R   R   t   hexR   RS   t   repr(   R   RU   t   address(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   test_reprM  s    c         C   sC   t  j   } | j d  |  j t |  d t t |    d S(   sb   
        If a L{Deferred} has been fired, then its C{repr()} contains its
        result.
        R   s)   <Deferred at %s current result: 'orange'>N(   R   R   R   RS   R   R   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_reprWithResultX  s
    c         C   sa   t  j   } t  j   } | j |  |  j t |  d t t |   t t |   f  d S(   s   
        If a L{Deferred} C{a} has been fired, but is waiting on another
        L{Deferred} C{b} that appears in its callback chain, then C{repr(a)}
        says that it is waiting on C{b}.
        s*   <Deferred at %s waiting on Deferred at %s>N(   R   R   R   RS   R   R   R   (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_reprWithChainingd  s    c            s/     f d   }   j  | d  | d   d S(   sw   
        The depth of the call stack does not grow as more L{Deferred} instances
        are chained together.
        c            s  g    f d   } t  j   } g  t |   D] } t  j   ^ q. } | } t  j     | j   } | j | d   | j |  x/ | r | j   } | j | d   | } q W| j   f d    | j d   x | D] } | j d   q W j  g     j d    d S(   Nc            s     j  t t j     d  S(   N(   R7   R;   t	   tracebackt   extract_stack(   Rf   (   t   stack(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   recordStackDepthy  s    c         S   s   | S(   N(    (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    c         S   s   | S(   N(    (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    c            s     S(   N(    (   R   (   t   last(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i    (   R   R   t   ranget   popR   R   R   RS   (   t   howManyR   t   topRf   t   innerDeferredst   originalInnersR   t   newInner(   R   (   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   chainDeferredsw  s(    %	
i   i   N(   RS   (   R   R   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_boundedStackDepthr  s    #c            s   t  j   } t  j    t  j     | j  f d     j   f d     j d  | j d    j d  g  }  j | j  |  j | d g  d S(   s  
        Given three Deferreds, one chained to the next chained to the next,
        callbacks on the middle Deferred which are added after the chain is
        created are called once the last Deferred fires.

        This is more of a regression-style test.  It doesn't exercise any
        particular code path through the current implementation of Deferred, but
        it does exercise a broken codepath through one of the variations of the
        implementation proposed as a resolution to ticket #411.
        c            s     S(   N(    (   Rf   (   Rl   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    c            s     S(   N(    (   Rf   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    N(   R   R   R   R   R   R7   RS   (   R   Rm   t   L(    (   R   Rl   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt:   test_resultOfDeferredResultOfDeferredOfFiredDeferredCalled  s    (3   R   R	   R   R   R   R   R   R   R   R    R6   R9   RD   RH   RK   RO   RP   RV   RX   R[   Ra   Rb   Re   Rk   Rn   Rq   Rv   Ry   R{   R~   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR
      sb   											(																			%	)	*								 	;	A	
						+t   FirstErrorTestsc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s"   
    Tests for L{FirstError}.
    c         C   se   t  d  } y
 |  Wn t j   } n Xt j | d  } |  j t |  d t |  f  d S(   s   
        The repr of a L{FirstError} instance includes the repr of the value of
        the sub-failure and the index which corresponds to the L{FirstError}.
        s	   some texti   s   FirstError[#3, %s]N(   Rp   R   R]   R   R?   R   R   (   R   t   exct   ft   error(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    
	c         C   se   t  d  } y
 |  Wn t j   } n Xt j | d  } |  j t |  d t |  f  d S(   s   
        The str of a L{FirstError} instance includes the str of the
        sub-failure and the index which corresponds to the L{FirstError}.
        s	   some texti   s   FirstError[#5, %s]N(   Rp   R   R]   R   R?   R   R.   (   R   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_str  s    
	c         C   s   y d d Wn t  j   } n Xt j | d  } t j | d  } y t d   Wn t  j   } n Xt j | d  } |  j | | k  |  j | | k  |  j | | k  |  j | | k  |  j | d k  d S(   s   
        L{FirstError} instances compare equal to each other if and only if
        their failure and index compare equal.  L{FirstError} instances do not
        compare equal to instances of other types.
        i   i    i   t   bari	   i
   N(   R   R]   R   R?   Rp   t
   assertTruet   assertFalse(   R   t   firstFailuret   onet
   anotherOnet   secondFailuret   another(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_comparison  s     (   R   R	   t   __doc__R   R   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s   		t   AlreadyCalledTestCasec           B   s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s    t  j   |  _ t  j t  d  S(   N(   R   t   getDebuggingt   _deferredWasDebuggingt   setDebuggingRJ   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s   t  j |  j  d  S(   N(   R   R   R   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   tearDown  s    c         O   s   d  S(   N(    (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         O   s   d  S(   N(    (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s   | j  d  d  S(   NR   (   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _call_1  s    c         C   s   | j  d  d  S(   Nt   twice(   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _call_2	  s    c         C   s   | j  t j t     d  S(   N(   R-   R   R]   R|   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _err_1  s    c         C   s   | j  t j t     d  S(   N(   R-   R   R]   R|   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _err_2  s    c         C   sL   t  j   } | j |  j |  j  |  j |  |  j t  j |  j |  d  S(   N(	   R   R   R+   R   R   R   t   failUnlessRaisest   AlreadyCalledErrorR   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testAlreadyCalled_CC  s    c         C   sL   t  j   } | j |  j |  j  |  j |  |  j t  j |  j |  d  S(   N(	   R   R   R+   R   R   R   R   R   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testAlreadyCalled_CE  s    c         C   sL   t  j   } | j |  j |  j  |  j |  |  j t  j |  j |  d  S(   N(	   R   R   R+   R   R   R   R   R   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testAlreadyCalled_EE  s    c         C   sL   t  j   } | j |  j |  j  |  j |  |  j t  j |  j |  d  S(   N(	   R   R   R+   R   R   R   R   R   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testAlreadyCalled_EC"  s    c         C   sa   d } xA | D]9 } | j  d |  r | j d |  r | d 7} q q W|  j | | k  d  S(   Ni    s    %s:s    %si   (   t
   startswitht   endswithR<   (   R   t   linetypet   funct   linesRi   t   countt   line(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _count)  s    c         C   s   | j  d j d  } |  j d | | d  |  j d d | d  |  j d d | d  |  j d d | d  |  j d d | d  |  j d	 | | d  |  j d	 | | d  d  S(
   Ni    s   
t   Ci   R   R   R   R   t   I(   R   t   splitR   (   R   RL   t   callert   invoker1t   invoker2R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _check1  s    c         C   s   t  j   } | j |  j |  j  |  j |  y |  j |  Wn, t  j k
 rn } |  j | d d d  n X|  j	 d  d  S(   Nt   testAlreadyCalledDebug_CCR   R   s2   second callback failed to raise AlreadyCalledError(
   R   R   R+   R   R   R   R   R   R   RW   (   R   RU   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   ?  s    c         C   s   t  j   } | j |  j |  j  |  j |  y |  j |  Wn, t  j k
 rn } |  j | d d d  n X|  j	 d  d  S(   Nt   testAlreadyCalledDebug_CER   R   s1   second errback failed to raise AlreadyCalledError(
   R   R   R+   R   R   R   R   R   R   RW   (   R   RU   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   J  s    c         C   s   t  j   } | j |  j |  j  |  j |  y |  j |  Wn, t  j k
 rn } |  j | d d d  n X|  j	 d  d  S(   Nt   testAlreadyCalledDebug_ECR   R   s2   second callback failed to raise AlreadyCalledError(
   R   R   R+   R   R   R   R   R   R   RW   (   R   RU   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   U  s    c         C   s   t  j   } | j |  j |  j  |  j |  y |  j |  Wn, t  j k
 rn } |  j | d d d  n X|  j	 d  d  S(   Nt   testAlreadyCalledDebug_EER   R   s1   second errback failed to raise AlreadyCalledError(
   R   R   R+   R   R   R   R   R   R   RW   (   R   RU   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   `  s    c         C   s   t  j t  t  j   } | j |  j |  j  |  j |  y |  j |  Wn& t  j	 k
 ru } |  j
 | j  n X|  j d  d  S(   Ns2   second callback failed to raise AlreadyCalledError(   R   R   t   FalseR   R+   R   R   R   R   R   t   failIfR   RW   (   R   RU   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testNoDebuggingk  s    c         C   s   t  j t  t  j   } | j d    t  j t  | j d   t  j t  t  j   } | j d   t  j t  | j d    d  S(   Nc         S   s   d  S(   N(   R   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   }  s    c         S   s   d  S(   N(   R   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    (   R   R   R   R   t   addBothRJ   R   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testSwitchDebuggingx  s    (   R   R	   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s(   																			t   DeferredCancellerTestc           B   s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s(   d  |  _ d  |  _ d  |  _ d |  _ d  S(   Ni    (   R   R   R   R   t   cancellerCallCount(   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    			c         C   s   |  j  |  j d k  d  S(   Ni    i   (   i    i   (   R   R   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s   | |  _  | S(   N(   R   (   R   t   data(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    	c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s\   t  j   } | j |  j |  j  | j   |  j |  j j t  j	  |  j |  j
 d  d S(   s   
        A L{defer.Deferred} without a canceller must errback with a
        L{defer.CancelledError} and not callback.
        N(   R   R   R+   R   R   t   cancelRS   R   R>   t   CancelledErrorR   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_noCanceller  s
    
c         C   sr   t  j   } | j |  j |  j  | j   | j d  |  j t  j	 | j d  |  j t  j	 | j
 t    d S(   s   
        A L{defer.Deferred} without a canceller, when cancelled must allow
        a single extra call to callback, and raise
        L{defer.AlreadyCalledError} if callbacked or errbacked thereafter.
        N(   R   R   R+   R   R   R   R   R   t   assertRaisesR   R-   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt!   test_raisesAfterCancelAndCallback  s    
c         C   su   t  j   } | j |  j |  j  | j   | j t    |  j t  j	 | j
 d  |  j t  j	 | j t    d S(   s   
        A L{defer.Deferred} without a canceller, when cancelled must allow
        a single extra call to errback, and raise
        L{defer.AlreadyCalledError} if callbacked or errbacked thereafter.
        N(   R   R   R+   R   R   R   R-   R   R   R   R   R   (   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt    test_raisesAfterCancelAndErrback  s    
c         C   sc   t  j   } | j |  j |  j  | j   |  j } | j d  | j   |  j	 | |  j  d S(   s   
        A L{Deferred} without a canceller, when cancelled and then
        callbacked, ignores multiple cancels thereafter.
        N(
   R   R   R+   R   R   R   R   R   R   R   (   R   RU   t   currentFailure(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt5   test_noCancellerMultipleCancelsAfterCancelAndCallback  s    
	
c         C   s   t  j   } | j |  j |  j  | j   |  j |  j j t  j	  |  j } | j
 t    |  j |  j j t  j	  | j   |  j | |  j  d S(   s   
        A L{defer.Deferred} without a canceller, when cancelled and then
        errbacked, ignores multiple cancels thereafter.
        N(   R   R   R+   R   R   R   RS   R   R>   R   R-   R   R   (   R   RU   R  (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt4   test_noCancellerMultipleCancelsAfterCancelAndErrback  s    
	
c         C   so   t  j   } | j |  j |  j  | j   |  j |  j j t  j	  |  j } | j   |  j
 | |  j  d S(   s   
        Calling cancel multiple times on a deferred with no canceller
        results in a L{defer.CancelledError}. Subsequent calls to cancel
        do not cause an error.
        N(   R   R   R+   R   R   R   RS   R   R>   R   R   (   R   RU   R  (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_noCancellerMultipleCancel  s    
	
c            s     f d   } t  j d |  } | j   j   j  | j     j   j j t  j	    j } | j     j
 |   j    j   j d  d S(   s,  
        Verify that calling cancel multiple times on a deferred with a
        canceller that does not errback results in a
        L{defer.CancelledError} and that subsequent calls to cancel do not
        cause an error and that after all that, the canceller was only
        called once.
        c            s     j  d 7_  d  S(   Ni   (   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    t	   cancelleri   N(   R   R   R+   R   R   R   RS   R   R>   R   R   R   (   R   R   RU   R  (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancellerMultipleCancel  s    
	
c            s     f d   } t  j d |  } | j   j   j  | j     j   j d    j   j j	 t  j
    j t  j | j d    j t  j | j t    d S(   s   
        Verify that a L{defer.Deferred} calls its specified canceller when
        it is cancelled, and that further call/errbacks raise
        L{defer.AlreadyCalledError}.
        c            s     j  d 7_  d  S(   Ni   (   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    R  i   N(   R   R   R+   R   R   R   RS   R   R   R>   R   R   R   R   R   R-   R   (   R   R   RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_simpleCanceller  s    
c            sH      f d   } t  j d |    j   j   j   j   d S(   sQ   
        Verify that a canceller is given the correct deferred argument.
        c            s     j  |    d  S(   N(   R   (   RF   (   R   RU   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   1  s    R  N(   R   R   R+   R   R   R   (   R   R   (    (   R   RU   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancellerArg-  s    c            s     f d   } t  j d |  } | j   j   j  | j d  | j     j   j d    j   j	 d    j   j d  d S(   so   
        Test that cancelling a deferred after it has been callbacked does
        not cause an error.
        c            s#     j  d 7_  |  j t    d  S(   Ni   (   R   R-   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   =  s    R  s   biff!i    N(   R   R   R+   R   R   R   R   RS   R   R   R   R   (   R   R   RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancelAfterCallback8  s    
c            s     f d   } t  j d |  } | j   j   j  | j t    | j     j   j	 d    j   j
 j t    j   j d  d S(   s   
        Test that cancelling a L{Deferred} after it has been errbacked does
        not result in a L{defer.CancelledError}.
        c            s#     j  d 7_  |  j t    d  S(   Ni   (   R   R-   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   N  s    R  i    N(   R   R   R+   R   R   R-   R   R   RS   R   R   R>   R   R   (   R   R   RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancelAfterErrbackI  s    
c            sn     f d   } t  j d |  } | j   j   j  | j     j   j d    j   j j	 t
  d S(   s?   
        Test a canceller which errbacks its deferred.
        c            s#     j  d 7_  |  j t    d  S(   Ni   (   R   R-   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   ^  s    R  i   N(   R   R   R+   R   R   R   RS   R   R   R>   R   (   R   R   RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancellerThatErrbacksZ  s    
c            s~     f d   } t  j d |  } | j   j   j  | j     j   j d    j   j d    j   j	 d  d S(   s<   
        Test a canceller which calls its deferred.
        c            s      j  d 7_  |  j d  d  S(   Ni   s   hello!(   R   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   l  s    R  i   s   hello!N(   R   R   R+   R   R   R   RS   R   R   R   R   (   R   R   RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancellerThatCallbacksh  s    
c            s    f d   }  f d   } t  j d |    t  j d |  } | j d  | j   f d    | j   | j  j  j   j	  j
 d   j	  j j t  j  d S(   s   
        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.
        c            s     j  d 7_  d  S(   Ni   (   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   innerCancel}  s    c            s     j  t  d  S(   N(   R_   R   (   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    R  c            s     S(   N(    (   R   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i   N(   R   R   R   R   R   R   R+   R   R   RS   R   R   R>   R   (   R   R  R   R   (    (   R   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancelNestedDeferredw  s    
(   R   R	   R   R   R   R   R   R   R   R  R  R  R  R  R  R	  R
  R  R  R  R  (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s&   																		t   LogTestCasec           B   s_   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   s+   
    Test logging of unhandled errors.
    c         C   s    g  |  _  t j |  j  j  d S(   s<   
        Add a custom observer to observer logging.
        N(   t   cR   t   addObserverR7   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    	c         C   s   t  j |  j j  d S(   s&   
        Remove the observer.
        N(   R   t   removeObserverR  R7   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s$   g  |  j  D] } | d r
 | ^ q
 S(   Nt   isError(   R  (   R   RL   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _loggedErrors  s    c         C   sH   |  j    } |  j t |  d  | d d j t  |  j t  d S(   sV   
        Check the output of the log observer to see if the error is present.
        i   i   R   N(   R  RS   R;   t   trapR^   t   flushLoggedErrors(   R   t   c2(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s7   t  j   j d    j d  t j   |  j   d S(   s   
        Verify that when a L{Deferred} with no references to it is fired,
        and its final result (the one not handled by any callback) is an
        exception, that exception will be logged immediately.
        c         S   s   d d S(   Ni   i    (    (   Rr   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i   N(   R   R   R   R   t   gct   collectR   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_errorLog  s    
c         C   s(   d   } |   t  j   |  j   d S(   sD   
        Same as L{test_errorLog}, but with an inner frame.
        c          S   s-   t  j   }  |  j d    |  j d  d  S(   Nc         S   s   d d S(   Ni   i    (    (   Rr   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i   (   R   R   R   R   (   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _subErrorLogWithInnerFrameRef  s    N(   R  R  R   (   R   R  (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_errorLogWithInnerFrameRef  s    	
c         C   s(   d   } |   t  j   |  j   d S(   sQ   
        Same as L{test_errorLogWithInnerFrameRef}, plus create a cycle.
        c          S   s9   t  j   }  |  j |  d   |  |  _ |  j d  d  S(   Nc         S   s   d d S(   Ni   i    (    (   Rr   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i   (   R   R   R   t   _dR   (   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _subErrorLogWithInnerFrameCycle  s    	N(   R  R  R   (   R   R  (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt    test_errorLogWithInnerFrameCycle  s    	
c         C   s   t  j   } | j d    | j d  g  } g  } | j | j | j  |  j | g   |  j t |  d  | d j	 t
  ~ ~ ~ t j   |  j |  j   g   d S(   s   
        If one Deferred with an error result is returned from a callback on
        another Deferred, when the first Deferred is garbage collected it does
        not log its error.
        c         S   s   t  j t d   S(   Nt   zoop(   R   RW   R|   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    i   i    N(   R   R   R   R   R   R+   R7   RS   R;   R  R   R  R  R  (   R   RU   R   t   errors(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_chainedErrorCleanup  s    	
c            se   t  j t d   } t  j     | j   f d    d   } t j   |  j |  j	   g   d S(   s   
        If a Deferred with a failure result has an errback which chains it to
        another Deferred, the initial failure is cleared by the errback so it is
        not logged.
        s   oh noc            s     S(   N(    (   Rf   (   t   good(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM     s    N(
   R   RW   R   R   R,   R   R  R  RS   R  (   R   t   bad(    (   R$  s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_errorClearedByChaining  s    

(   R   R	   R   R   R   R  R   R  R  R   R#  R&  (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR    s   						
			t   DeferredTestCaseIIc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   d |  _  d  S(   Ni    (   t   callbackRan(   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c         C   s#   t  j g   } | j |  j  d S(   s   Testing empty DeferredList.N(   R   R*   R   t   cb_empty(   R   R5   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testDeferredListEmpty
  s    c         C   s   d |  _  |  j g  |  d  S(   Ni   (   R(  R   (   R   t   res(    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR)    s    	c         C   s   |  j  |  j d  d  S(   Ns   Callback was never run.(   R<   R(  (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    (   R   R	   R   R*  R)  R   (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR'    s   			t   OtherPrimitivesc           B   st   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z RS(   c         C   s   |  j  d 7_  d  S(   Ni   (   t   counter(   R   R#   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _incr  s    c         C   s   d |  _  d  S(   Ni    (   R-  (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR     s    c            sG  t  j   } | j   j   j    j | j    j   j d  | j   j   j    j | j    j   j d  | j	     j | j    j   j d  | j	     j
 | j    j   j d    j t | j  t   } t   } t  j     f d   } | j | d   d | }   j | j    j   j |  | j   f d    | j   j   j    j | j    j   j d   j |    j   j |    j | j    j   j d  | j   j   f d    } | j     j   j j t  j  | j	     j
 | j  d  S(	   Ni   i   c            s   | |  _    S(   N(   R   (   R   R   (   t   controlDeferred(    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   helper5  s    	R   R   c            s   t    d |   S(   NR#   (   t   setattr(   Rr   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   =  s    i   c            s   t    d |   S(   NR#   (   R1  (   Rr   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRM   H  s    (   R   t   DeferredLockt   acquireR   R.  R<   t   lockedRS   R-  t   releaseR   R   Rx   t   runRh   R   R   R   R#   R   R   R>   R   (   R   t   lockt   firstUniquet   secondUniqueR0  t   resultDeferredRU   (    (   R   R/  s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testLock  sD    

		

c            sB     f d   } t  j   } | j   } | j |  | j   d S(   s   
        When canceling a L{Deferred} from a L{DeferredLock} that already
        has the lock, the cancel should have no effect.
        c            s     j  d  d  S(   Ns   Unexpected errback call!(   RW   (   R\   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   _failOnErrbackU  s    N(   R   R2  R3  R,   R   (   R   R<  R7  RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancelLockAfterAcquiredP  s
    c         C   sC   t  j   } | j   | j   } |  j | t  j  | j   d S(   s   
        When canceling a L{Deferred} from a L{DeferredLock} that does not
        yet have the lock (i.e., the L{Deferred} has not fired), the cancel
        should cause a L{defer.CancelledError} failure.
        N(   R   R2  R3  R}   R   R   (   R   R7  RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancelLockBeforeAcquired]  s
    
c            s	  d } t  j |  } t  j     f d   } g  } t   } | j | d |  d | } | j | j  | j |  j  |  j | g   |  j |  j	 |   j
 d   |  j | j   d   |  j |  j d  d |  _ xD t d d |  D]/ } | j   j |  j  |  j |  j |  q Wg      f d   }   f d   }	 | j   j | |	  }
 |
 j   |  j   t g  | j   j |  j  |  j |  j |  | j   |  j |  j | d  x< t d d |  D]' } | j   |  j |  j | d  qWd  S(	   Ni   c            s   | |  _    S(   N(   t   arg(   R   R?  (   R/  (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR0  o  s    	R   R?  i   i    c            s     j  t  d  S(   N(   R7   R   (   Rc   (   RQ   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRW     s    c            s     j  t  d  S(   N(   R7   RJ   (   Rc   (   RQ   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRR     s    (   R   t   DeferredSemaphoreR   Rh   R6  R   R7   R.  RS   R?  R   R   R   R-  R   R3  R+   R   RJ   R5  (   R   t   Nt   semR0  R   t   uniqueObjectR:  t   iRW   RR   RU   (    (   RQ   R/  s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   testSemaphorej  s>    		


c         C   s0   |  j  t t j d  |  j  t t j d  d S(   sz   
        If the token count passed to L{DeferredSemaphore} is less than one
        then L{ValueError} is raised.
        i    iN(   R   Rp   R   R@  (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_semaphoreInvalidTokens  s    c            sE     f d   } t  j d  } | j   } | j |  | j   d S(   s   
        When canceling a L{Deferred} from a L{DeferredSemaphore} that
        already has the semaphore, the cancel should have no effect.
        c            s     j  d  d  S(   Ns   Unexpected errback call!(   RW   (   R\   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR<    s    i   N(   R   R@  R3  R,   R   (   R   R<  RB  RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt!   test_cancelSemaphoreAfterAcquired  s
    c         C   sF   t  j d  } | j   | j   } |  j | t  j  | j   | S(   s   
        When canceling a L{Deferred} from a L{DeferredSemaphore} that does
        not yet have the semaphore (i.e., the L{Deferred} has not fired),
        the cancel should cause a L{defer.CancelledError} failure.
        i   (   R   R@  R3  R}   R   R   (   R   RB  RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt"   test_cancelSemaphoreBeforeAcquired  s    

c         C   s   d \ } } t  j | |  } g  } x* t |  D] } | j   j | j  q1 W|  j t  j | j  x; t |  D]- } | j |  |  j	 | t | d   qt Wx; t |  D]- } | j | |  |  j	 | t |   q W|  j t  j
 | j d   g  } xK t |  D]= } | j   j | j  |  j	 | t | | | d   qWt  j   } g  } x* t |  D] } | j   j | j  qoWx! t |  D] } | j |  qW|  j	 | t |   t  j d d  } |  j t  j
 | j d   t  j d d  } |  j t  j | j  d  S(   Ni   i   t   sizei    t   backlog(   i   i   (   R   t   DeferredQueueR   t   getR   R7   R   t   QueueUnderflowt   putRS   t   QueueOverflowR   (   R   RA  t   Mt   queuet   gottenRD  (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   testQueue  s8    %c            sO     f d   } t  j   } | j   } | j |  | j d  | j   d S(   s   
        When canceling a L{Deferred} from a L{DeferredQueue} that already has
        a result, the cancel should have no effect.
        c            s     j  d  d  S(   Ns   Unexpected errback call!(   RW   (   R\   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR<    s    N(   R   RK  RL  R,   RN  R   R   (   R   R<  RQ  RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt#   test_cancelQueueAfterSynchronousGet  s    c            sT   t  j       j   }  j | t  j  | j      f d   } | j |  S(   s  
        When canceling a L{Deferred} from a L{DeferredQueue} that does not
        have a result (i.e., the L{Deferred} has not fired), the cancel
        causes a L{defer.CancelledError} failure. If the queue has a result
        later on, it doesn't try to fire the deferred.
        c            s&     j  d     j   j  j d   S(   N(   RN  R   RL  R   R   (   t   ignore(   RQ  R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR$     s    (   R   RK  RL  R}   R   R   R   (   R   RU   R$   (    (   RQ  R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_cancelQueueAfterGet  s    
(   R   R	   R.  R   R;  R=  R>  RE  RF  RG  RH  RS  RT  RV  (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR,    s   			3			.					&	t   DeferredFilesystemLockTestCasec           B   sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s8   
    Test the behavior of L{DeferredFilesystemLock}
    c         C   s1   t    |  _ t j |  j   d |  j |  _ d  S(   Nt	   scheduler(   R   t   clockR   t   DeferredFilesystemLockt   mktempR7  (   R   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyR   
  s    c         C   s   |  j  j d d  } | S(   sI   
        Test that the lock can be acquired when no lock is held
        t   timeouti   (   R7  t   deferUntilLocked(   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_waitUntilLockedWithNoLock  s    c         C   sY   |  j  |  j j    |  j j d d  } |  j | t j  |  j j d g d  | S(   ss   
        Test that the lock can not be acquired when the lock is held
        for longer than the timeout.
        R\  g      @i   i
   (   R<   R7  R]  R}   R   t   TimeoutErrorRY  t   pump(   R   RU   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt%   test_waitUntilLockedWithTimeoutLocked  s
    c            s{     f d   }   j    j j      j j d   j j    j j d d  } | j |    j j d g d  | S(   s|   
        Test that a lock can be acquired while a lock is held
        but the lock is unlocked before our timeout.
        c            s!   |  j  t j    j d  d  S(   Ns   Should not have timed out(   R  R   R_  RW   (   R   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt	   onTimeout-  s    i   R\  i
   (   R<   R7  RY  t	   callLatert   unlockR]  R,   R`  (   R   Rb  RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt'   test_waitUntilLockedWithTimeoutUnlocked(  s    c         C   s,   t  j |  j    } |  j | j t  d S(   sE   
        Test that the default scheduler is set up properly.
        N(   R   RZ  R[  RS   t
   _schedulerR   (   R   R7  (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_defaultScheduler<  s    c         C   sk   |  j  j    |  j j d |  j  j  |  j  j   } |  j  j   } |  j | t j  |  j j d  | S(   s|   
        Test that an appropriate exception is raised when attempting
        to use deferUntilLocked concurrently.
        i   (	   R7  RY  Rc  Rd  R]  R}   R   t   AlreadyTryingToLockErrort   advance(   R   RU   RN   (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_concurrentUsageE  s    c            se     f d   }   j  j      j j d   j  j    j  j   } | j |    j j d  | S(   sO   
        Test that a DeferredFilesystemLock can be used multiple times
        c            s      j  j     j  j   } | S(   N(   R7  Rd  R]  (   R   RU   (   R   (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   lockAquired[  s    i   (   R7  RY  Rc  Rd  R]  R   Ri  (   R   Rk  RU   (    (   R   s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   test_multipleUsagesW  s    (
   R   R	   R   R   R^  Ra  Re  Rg  Rj  Rl  (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyRW    s   								(   R   R  R   t   twisted.trialR    t   twisted.internetR   R   t   twisted.internet.taskR   t   twisted.pythonR   R   t   twisted.python.utilR   R   R   t   TestCaseR
   R   R   R   R  R'  R,  RW  (    (    (    s;   /usr/lib/python2.7/dist-packages/twisted/test/test_defer.pyt   <module>   s&      D v