ó
¨œž[c           @` s%  d  d l  m Z m Z m 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 m Z m Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k r!e j ƒ  n  d S(   i    (   t   absolute_importt   divisiont   print_function(   t	   timedelta(   t   gent   locks(   t   TimeoutError(   t   gen_testt   AsyncTestCase(   t   unittestt   skipBefore35t	   exec_testt   ConditionTestc           B` s°   e  Z d  „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   c         C` s    t  t |  ƒ j ƒ  g  |  _ d  S(   N(   t   superR   t   setUpt   history(   t   self(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR      s    c         ` s&   ‡  ‡ ‡ f d †  } ˆ  j  | ƒ d S(   s=   Record the resolution of a Future returned by Condition.wait.c         ` s3   ˆ  j  ƒ  s ˆ j j d ƒ n ˆ j j ˆ ƒ d  S(   Nt   timeout(   t   resultR   t   append(   t   _(   t   futuret   keyR   (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   callback   s    N(   t   add_done_callback(   R   R   R   R   (    (   R   R   R   s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   record_done   s    c         C` s!   |  j  j |  j ƒ |  j ƒ  d S(   sË   Run all queued callbacks on the IOLoop.

        In these tests, this method is used after calling notify() to
        preserve the pre-5.0 behavior in which callbacks ran
        synchronously.
        N(   t   io_loopt   add_callbackt   stopt   wait(   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   loop_briefly&   s    c         C` s\   t  j ƒ  } |  j d t | ƒ ƒ |  j d t | ƒ ƒ | j ƒ  |  j d t | ƒ ƒ d  S(   Nt	   Conditiont   waiters(   R   R   t   assertInt   reprt   assertNotInR   (   R   t   c(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt	   test_repr0   s
    
c         c` s1   t  j ƒ  } |  j j d | j ƒ | j ƒ  Vd  S(   Ng{®Gáz„?(   R   R   R   t
   call_latert   notifyR   (   R   R$   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_notify7   s    c         C` s©   t  j ƒ  } |  j | j ƒ  d ƒ |  j | j ƒ  d ƒ | j d ƒ |  j ƒ  |  j j d ƒ | j d ƒ |  j ƒ  |  j j d ƒ |  j d d d d g |  j ƒ d  S(   Nt   wait1t   wait2i   t   notify1t   notify2(	   R   R   R   R   R'   R   R   R   t   assertEqual(   R   R$   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_notify_1=   s    

c         C` sß   t  j ƒ  } x* t d ƒ D] } |  j | j ƒ  | ƒ q W| j d ƒ |  j ƒ  |  j t t d ƒ ƒ |  j	 ƒ | j d ƒ |  j ƒ  |  j t t d ƒ ƒ |  j	 ƒ | j d ƒ |  j ƒ  |  j t t d ƒ ƒ |  j	 ƒ d  S(   Ni   i   i   i   i   (
   R   R   t   rangeR   R   R'   R   R-   t   listR   (   R   R$   t   i(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_notify_nJ   s    


c         C` s‡   t  j ƒ  } x* t d ƒ D] } |  j | j ƒ  | ƒ q W| j ƒ  |  j ƒ  |  j j d ƒ |  j	 t
 t d ƒ ƒ d g |  j ƒ d  S(   Ni   t
   notify_all(   R   R   R/   R   R   R3   R   R   R   R-   R0   (   R   R$   R1   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_notify_all[   s    

c         c` sZ   t  j ƒ  } | j t d d ƒ ƒ } |  j j d | j ƒ t j d ƒ V|  j	 | Vƒ d  S(   Nt   secondsg{®Gáz„?g{®Gáz”?g¸…ëQ¸ž?(
   R   R   R   R   R   R&   R'   R   t   sleept   assertFalse(   R   R$   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_wait_timeouti   s
    c         c` sQ   t  j ƒ  } |  j j d | j ƒ | j t d d ƒ ƒ } t j d ƒ V| Vd  S(   Ng{®Gáz„?R5   g{®Gáz”?g¸…ëQ¸ž?(	   R   R   R   R&   R'   R   R   R   R6   (   R   R$   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_wait_timeout_preemptedq   s
    c         c` s  t  j ƒ  } |  j | j ƒ  d ƒ |  j | j t d d ƒ ƒ d ƒ |  j | j ƒ  d ƒ |  j | j ƒ  d ƒ t j d ƒ V|  j d g |  j ƒ | j	 d ƒ t j d ƒ V|  j d d d g |  j ƒ |  j d d d g |  j ƒ | j	 ƒ  d  V|  j d d d d g |  j ƒ d  S(	   Ni    R5   g{®Gáz„?i   i   i   g{®Gáz”?R   (
   R   R   R   R   R   R   R6   R-   R   R'   (   R   R$   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_notify_n_with_timeout{   s    "
c         c` s­   t  j ƒ  } |  j | j ƒ  d ƒ |  j | j t d d ƒ ƒ d ƒ |  j | j ƒ  d ƒ t j d ƒ V|  j d g |  j ƒ | j	 ƒ  d  V|  j d d d g |  j ƒ d  S(   Ni    R5   g{®Gáz„?i   i   g{®Gáz”?R   (
   R   R   R   R   R   R   R6   R-   R   R3   (   R   R$   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_notify_all_with_timeout“   s    "
c         #` s~   t  j ƒ  ‰  g  t d ƒ D] } ˆ  j ƒ  ^ q } | d j ‡  f d †  ƒ ˆ  j d ƒ d  V|  j t d „  | Dƒ ƒ ƒ d  S(   Ni   i   c         ` s
   ˆ  j  ƒ  S(   N(   R'   (   R   (   R$   (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   <lambda>­   s    i   c         s` s   |  ] } | j  ƒ  Vq d  S(   N(   t   done(   t   .0t   f(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pys	   <genexpr>°   s    (   R   R   R/   R   R   R'   t
   assertTruet   all(   R   R   t   futures(    (   R$   s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_nested_notify¢   s    %c         c` s¹   t  j ƒ  } x* t d ƒ D] } | j t d d ƒ ƒ q W| j ƒ  } |  j d t | j ƒ ƒ t j	 d ƒ V|  j d t | j ƒ ƒ |  j
 | j ƒ  ƒ | j ƒ  |  j | j ƒ  ƒ d  S(   Nie   R5   g{®Gáz„?if   g{®Gáz”?i   (   R   R   R/   R   R   R-   t   lent   _waitersR   R6   R7   R=   R'   R@   (   R   R$   R   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_garbage_collection²   s    
(   t   __name__t
   __module__R   R   R   R%   R   R(   R.   R2   R4   R8   R9   R:   R;   RC   RF   (    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR      s   		
	
				
t	   EventTestc           B` s;   e  Z d  „  Z d „  Z e d „  ƒ Z d „  Z d „  Z RS(   c         C` s~   t  j ƒ  } |  j d t | ƒ k ƒ |  j d t | ƒ k ƒ | j ƒ  |  j d t | ƒ k ƒ |  j d t | ƒ k ƒ d  S(   Nt   cleart   set(   R   t   EventR@   t   strR7   RK   (   R   t   event(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR%   Ç   s    
c         C` s   t  j ƒ  } | j ƒ  } | j ƒ  | j ƒ  } | j ƒ  | j ƒ  } |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  ƒ d  S(   N(   R   RL   R   RK   RJ   R@   R=   R7   (   R   t   et   future_0t   future_1t   future_2(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt
   test_eventÏ   s    

c         c` ss   t  j ƒ  } |  j t ƒ  | j t d d ƒ ƒ VWd  QX|  j j t d d ƒ | j ƒ | j t d d ƒ ƒ Vd  S(   NR5   g{®Gáz„?i   (	   R   RL   t   assertRaisesR   R   R   R   t   add_timeoutRK   (   R   RO   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_event_timeoutÛ   s
    c         C` s7   t  j ƒ  } | j ƒ  | j ƒ  |  j | j ƒ  ƒ d  S(   N(   R   RL   RK   R@   t   is_set(   R   RO   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_event_set_multipleå   s    

c         C` sb   t  j ƒ  } | j ƒ  } | j ƒ  | j ƒ  } | j ƒ  |  j | j ƒ  ƒ |  j | j ƒ  ƒ d  S(   N(   R   RL   R   RJ   RK   R@   R=   (   R   RO   t   f0t   f1(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_event_wait_clearë   s    

(   RG   RH   R%   RS   R   RV   RX   R[   (    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyRI   Æ   s
   		
	t   SemaphoreTestc           B` sY   e  Z d  „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z e d „  ƒ Z	 RS(   c         C` s   |  j  t t j d d ƒd  S(   Nt   valueiÿÿÿÿ(   RT   t
   ValueErrorR   t	   Semaphore(   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_negative_valueö   s    c         C` s’   t  j ƒ  } |  j d t | ƒ ƒ |  j d t | ƒ ƒ | j ƒ  |  j d t | ƒ ƒ |  j d t | ƒ ƒ | j ƒ  |  j d t | ƒ ƒ d  S(   NR_   s   unlocked,value:1t   lockedR    (   R   R_   R!   R"   t   acquireR#   (   R   t   sem(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR%   ù   s    

c         C` sã   t  j ƒ  } | j ƒ  } |  j | j ƒ  ƒ | j ƒ  } |  j | j ƒ  ƒ | j ƒ  } | j ƒ  |  j | j ƒ  ƒ |  j | j ƒ  ƒ | j ƒ  |  j | j ƒ  ƒ | j ƒ  |  j | j ƒ  j ƒ  ƒ |  j d t | j	 ƒ ƒ d  S(   Ni    (
   R   R_   Rb   R@   R=   R7   t   releaseR-   RD   RE   (   R   Rc   RY   RZ   t   f2(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_acquire  s    


c         c` sÉ   t  j d ƒ } | j ƒ  V| j ƒ  V| j t d d ƒ ƒ } |  j j d | j ƒ t j d ƒ V|  j	 t j
 ƒ 
 | VWd  QX| j ƒ  | j ƒ  } |  j | j ƒ  ƒ | j ƒ  |  j | j ƒ  ƒ d  S(   Ni   R5   g{®Gáz„?g{®Gáz”?g333333Ó?(   R   R_   Rb   R   R   R&   Rd   R   R6   RT   R   R7   R=   R@   (   R   Rc   Rb   R?   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_acquire_timeout  s    

c         c` s_   t  j d ƒ } | j ƒ  V|  j j d | j ƒ | j t d d ƒ ƒ } t j d ƒ V| Vd  S(   Ni   g{®Gáz„?R5   g{®Gáz”?g¸…ëQ¸ž?(	   R   R_   Rb   R   R&   Rd   R   R   R6   (   R   Rc   Rb   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_acquire_timeout_preempted(  s    c         C` sˆ   t  j ƒ  } | j ƒ  | j ƒ  |  j | j ƒ  j ƒ  ƒ |  j | j ƒ  j ƒ  ƒ |  j | j ƒ  j ƒ  ƒ |  j | j ƒ  j ƒ  ƒ d  S(   N(   R   R_   Rd   R@   Rb   R=   R7   (   R   Rc   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_release_unacquired3  s    

c         c` sç   t  j d d ƒ } g  t d ƒ D] } | j t d d ƒ ƒ ^ q } | j ƒ  } |  j d t | j ƒ ƒ t j	 d ƒ V|  j d t | j ƒ ƒ |  j
 | j ƒ  ƒ | j ƒ  |  j | j ƒ  ƒ x! | D] } |  j t | j ƒ qÆ Wd  S(	   NR]   i    ie   R5   g{®Gáz„?if   g{®Gáz”?i   (   R   R_   R/   Rb   R   R-   RD   RE   R   R6   R7   R=   Rd   R@   RT   R   R   (   R   Rc   R   RB   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyRF   ?  s    1
(
   RG   RH   R`   R%   Rf   R   Rg   Rh   Ri   RF   (    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR\   õ   s   		
		t   SemaphoreContextManagerTestc           B` s€   e  Z e d  „  ƒ Z e e d „  ƒ ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 d „  Z RS(   c         c` sR   t  j ƒ  } | j ƒ  V } |  j | d  k ƒ Wd  QX|  j | j ƒ  j ƒ  ƒ d  S(   N(   R   R_   Rb   R@   t   NoneR=   (   R   Rc   t   yielded(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_context_managerW  s    c         c` sM   t  j ƒ  } t t ƒ  t ƒ  d ƒ } | d ƒ  V|  j | j ƒ  j ƒ  ƒ d  S(   Nsx   
        async def f():
            async with sem as yielded:
                self.assertTrue(yielded is None)
        R?   (   R   R_   R   t   globalst   localsR@   Rb   R=   (   R   Rc   t	   namespace(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt    test_context_manager_async_await`  s
    	c      
   c` s[   t  j ƒ  } |  j t ƒ ! | j ƒ  V d d Wd  QXWd  QX|  j | j ƒ  j ƒ  ƒ d  S(   Ni   i    (   R   R_   RT   t   ZeroDivisionErrorRb   R@   R=   (   R   Rc   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_context_manager_exceptionp  s
    c         c` sI   t  j ƒ  } | j t d d ƒ ƒ V Wd  QX|  j | j ƒ  j ƒ  ƒ d  S(   NR5   g{®Gáz„?(   R   R_   Rb   R   R@   R=   (   R   Rc   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_context_manager_timeoutz  s    c      	   c` sh   t  j d d ƒ } |  j t j ƒ % | j t d d ƒ ƒ V Wd  QXWd  QX|  j | j ƒ  j ƒ  ƒ d  S(   NR]   i    R5   g{®Gáz„?(	   R   R_   RT   R   R   Rb   R   R7   R=   (   R   Rc   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt"   test_context_manager_timeout_errorƒ  s
    c         #` s   t  j ƒ  ‰ g  ‰  t j ‡  ‡ f d †  ƒ } g  t d ƒ D] } | | ƒ ^ q: Vg  } x/ t d ƒ D]! } | j d | d | g ƒ qd W|  j | ˆ  ƒ d  S(   Nc         3` sH   ˆ j  ƒ  V5 ˆ  j d |  ƒ t j d ƒ Vˆ  j d |  ƒ Wd  QXd  S(   Ns   acquired %dg{®Gáz„?s
   release %d(   Rb   R   R   R6   (   t   index(   R   Rc   (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR?   ’  s    i   s   acquired %ds
   release %d(   R   R_   R   t	   coroutineR/   t   extendR-   (   R   R?   R1   t   expected_history(    (   R   Rc   s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_context_manager_contended  s    $c      	   c` s1   |  j  t j ƒ  t j ƒ  V Wd  QXWd  QXd  S(   N(   RT   R   t   BadYieldErrorR   R_   (   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_yield_sem¡  s    c      	   C` s-   |  j  t ƒ  t j ƒ   Wd  QXWd  QXd  S(   N(   RT   t   RuntimeErrorR   R_   (   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_context_manager_misuse©  s    (   RG   RH   R   Rm   R
   Rq   Rs   Rt   Ru   Rz   R|   R~   (    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyRj   V  s   	
	
t   BoundedSemaphoreTestc           B` s   e  Z d  „  Z RS(   c         C` s†   t  j ƒ  } |  j t | j ƒ | j ƒ  | j ƒ  } |  j | j ƒ  ƒ | j ƒ  |  j | j ƒ  ƒ | j ƒ  |  j t | j ƒ d  S(   N(	   R   t   BoundedSemaphoreRT   R^   Rd   Rb   R7   R=   R@   (   R   Rc   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyRi   ²  s    


(   RG   RH   Ri   (    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR   ±  s   t	   LockTestsc           B` sn   e  Z d  „  Z d „  Z e d „  ƒ Z e e d „  ƒ ƒ Z e d „  ƒ Z d „  Z	 e d „  ƒ Z
 d „  Z RS(   c         C` s.   t  j ƒ  } t | ƒ | j ƒ  t | ƒ d  S(   N(   R   t   LockR"   Rb   (   R   t   lock(    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR%   Â  s    

c         C` se   t  j ƒ  } |  j | j ƒ  j ƒ  ƒ | j ƒ  } |  j | j ƒ  ƒ | j ƒ  |  j | j ƒ  ƒ d  S(   N(   R   R‚   R@   Rb   R=   R7   Rd   (   R   Rƒ   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_acquire_releaseÉ  s    
c         #` s½   t  j ƒ  ‰ |  j ˆ j ƒ  j ƒ  ƒ d } g  ‰  t j ‡  ‡ f d †  ƒ } g  t | ƒ D] } | | ƒ ^ qY } |  j t	 d „  | Dƒ ƒ ƒ ˆ j
 ƒ  | V|  j t t | ƒ ƒ ˆ  ƒ d  S(   Ni   c         3` s%   ˆ j  ƒ  V ˆ  j |  ƒ Wd  QXd  S(   N(   Rb   R   (   t   idx(   R   Rƒ   (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR?   Ø  s    c         s` s   |  ] } | j  ƒ  Vq d  S(   N(   R=   (   R>   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pys	   <genexpr>Þ  s    (   R   R‚   R@   Rb   R=   R   Rw   R/   R7   t   anyRd   R-   R0   (   R   t   NR?   R1   RB   (    (   R   Rƒ   s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_acquire_fifoÑ  s    %
c         c` s¡   t  j ƒ  } |  j | j ƒ  j ƒ  ƒ d } g  } t t ƒ  t ƒ  d ƒ } g  t | ƒ D] } | d | ƒ ^ qV } | j	 ƒ  | V|  j
 t t | ƒ ƒ | ƒ d  S(   Ni   sd   
        async def f(idx):
            async with lock:
                history.append(idx)
        R?   (   R   R‚   R@   Rb   R=   R   Rn   Ro   R/   Rd   R-   R0   (   R   Rƒ   R‡   R   Rp   R1   RB   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_acquire_fifo_async_withã  s    	)
c      	   c` sf   t  j ƒ  } | j ƒ  |  j t j ƒ  | j d t d d ƒ ƒ VWd  QX|  j | j ƒ  j ƒ  ƒ d  S(   NR   R5   g{®Gáz„?(	   R   R‚   Rb   RT   R   R   R   R7   R=   (   R   Rƒ   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyRg   ÷  s
    
 c         C` sJ   t  j ƒ  } |  j t | j ƒ | j ƒ  | j ƒ  |  j t | j ƒ d  S(   N(   R   R‚   RT   R}   Rd   Rb   (   R   Rƒ   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_multi_release  s
    

c      	   c` s1   |  j  t j ƒ  t j ƒ  V Wd  QXWd  QXd  S(   N(   RT   R   R{   R   R‚   (   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   test_yield_lock  s    c      	   C` s-   |  j  t ƒ  t j ƒ   Wd  QXWd  QXd  S(   N(   RT   R}   R   R‚   (   R   (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR~     s    (   RG   RH   R%   R„   R   Rˆ   R
   R‰   Rg   RŠ   R‹   R~   (    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyR   Á  s   		
	t   __main__N(   t
   __future__R    R   R   t   datetimeR   t   tornadoR   R   t   tornado.genR   t   tornado.testingR   R   t   tornado.test.utilR	   R
   R   R   RI   R\   Rj   R   R   RG   t   main(    (    (    s6   lib/python2.7/site-packages/tornado/test/locks_test.pyt   <module>   s   ¯/a[W