
    R?g(                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJrJrJrJr  S SKJrJr   " S S\5      r " S	 S
\R(                  5      r " S S\R(                  5      r " S S\R(                  5      rg)    N)ThreadPoolExecutor)gen)IOLoop)AsyncIOLoopto_asyncio_futureAnyThreadEventLoopPolicyAddThreadSelectorEventLoop)AsyncTestCasegen_testc                   V    \ rS rSr\S 5       rS r\S 5       r\S 5       r	S r
S rSrg	)
AsyncIOLoopTest   c                 .    U R                   R                  $ N)io_loopasyncio_loopselfs    ;/usr/lib/python3/dist-packages/tornado/test/asyncio_test.pyr   AsyncIOLoopTest.asyncio_loop    s    ||(((    c                 r   ^  U 4S jnT R                   R                  U" 5       5        T R                  5         g )Nc                  j   >#    [         R                  " 5       R                  T R                  5        g 7fr   )asyncioget_event_loop	call_soonstopr   s   r   add_callback;AsyncIOLoopTest.test_asyncio_callback.<locals>.add_callback&   s!     ""$..tyy9s   03)r   run_until_completewait)r   r   s   ` r   test_asyncio_callback%AsyncIOLoopTest.test_asyncio_callback$   s)    	: 	,,\^<		r   c              #      #    [         R                  " [         R                  " 5       R                  S S 5      5      v nU R	                  US5        g 7f)Nc                      gN*    r(   r   r   <lambda>5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>1   s    2r   r'   )r   ensure_futurer   run_in_executorassertEqual)r   xs     r   test_asyncio_future#AsyncIOLoopTest.test_asyncio_future,   sG      ''""$44T:F
 
 	Bs   AAc              #   n   #    [         R                  S 5       nU" 5       v nU R                  US5        g 7f)Nc               3   r   #    [         R                  " 5       n U R                  S S 5       S h  vN nU$  N7f)Nc                      gr&   r(   r(   r   r   r)   DAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>:   s    Br   )r   r   r,   )
event_loopr.   s     r   f2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.f7   s3      //1J%55dJGGAH Hs   ,757r'   )r   	coroutiner-   )r   r6   results      r   test_asyncio_yield_from'AsyncIOLoopTest.test_asyncio_yield_from5   s6     		 
	
 s$s   35c                 z  ^^ [         R                  S 5       mU4S jmU4S jnU4S jnU R                  U R                  R	                  T5      S5        U R                  U R                  R	                  U5      S5        U R                  U R                  R	                  U5      S5        U R                  U R
                  R                  T" 5       5      S5        U R                  U R
                  R                  U" 5       5      S5        U R                  U R
                  R                  U" 5       5      S5        g )Nc               3   Z   #    [         R                  v   [         R                  " S5      e7fr&   )r   momentReturnr(   r   r   tornado_coroutine?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutineE   s     ****R. s   )+c                  .   >#    T " 5       I S h  vN $  N7fr   r(   r@   s   r    native_coroutine_without_adapterNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterJ   s     *,,,,s   c                  @   >#    [        T " 5       5      I S h  vN $  N7fr   r   rC   s   r   native_coroutine_with_adapterKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterM   s     *+<+>????   c                  @   >#    [        T " 5       5      I S h  vN $  N7fr   rG   )rD   s   r   native_coroutine_with_adapter2LAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2Q   s     *+K+MNNNNrJ   r'   )r   r8   r-   r   run_syncr   r    )r   rH   rL   rD   r@   s      @@r   test_asyncio_adapter$AsyncIOLoopTest.test_asyncio_adapter@   s   
 
	! 
	!	-	@	O 	../OPRTU../LMrR../MNPRS 	001Q1ST	
 	001N1PQ	
 	001O1QR	
r   c                     [        [        R                  " 5       5      nUR                  5         UR                  5         g r   )r	   r   r   closer   loops     r    test_add_thread_close_idempotent0AsyncIOLoopTest.test_add_thread_close_idempotenth   s'    )'*@*@*BC



r   r(   N)__name__
__module____qualname____firstlineno__propertyr   r"   r   r/   r:   rO   rU   __static_attributes__r(   r   r   r   r      sL    ) )     % %&
Pr   r   c                   ,    \ rS rSrS rS rS rS rSrg)LeakTestn   c                     [        SS9R                  5         [        R                  " 5       U l        [        R
                  " [        R                  " 5       5        g )NFmake_current)r   rR   r   get_event_loop_policyorig_policyset_event_loop_policyDefaultEventLoopPolicyr   s    r   setUpLeakTest.setUpo   s=    '--/ #88:%%g&D&D&FGr   c                      [         R                  " 5       R                  5       nUR                  5         [         R
                  " U R                  5        g ! [         a     N-f = fr   )r   rc   r   rR   	Exceptionre   rd   rS   s     r   tearDownLeakTest.tearDownw   sQ    	002AACD
 JJL%%d&6&67  		s   #A 
A#"A#c                    [        [        R                  5      n[        S5       HV  n[        R
                  " 5          [        R                  " S[        5        [        5       nUR                  5         S S S 5        MX     [        [        R                  5      U-
  nU R                  US5        g ! , (       d  f       M  = f)N
   ignorer   )lenr   _ioloop_for_asynciorangewarningscatch_warningssimplefilterDeprecationWarningr   rR   r-   r   
orig_countirT   	new_counts        r   test_ioloop_close_leakLeakTest.test_ioloop_close_leak   s    334
rA((*%%h0BC"}

 +*  223j@	A& +*s   6B..
B=	c                    [        [        R                  5      n[        S5       Hr  n[        R
                  " 5       nUR                  [        R                  5        UR                  UR                  5        UR                  5         UR                  5         Mt     [        [        R                  5      U-
  nU R                  US5        g )Nrn      )rp   r   rq   rr   r   new_event_loopr   currentr   run_foreverrR   r-   rw   s        r   test_asyncio_close_leak LeakTest.test_asyncio_close_leak   s    334
rA))+DNN6>>*NN499%JJL  223j@	 	A&r   )rd   N)	rW   rX   rY   rZ   rg   rk   r{   r   r\   r(   r   r   r^   r^   n   s    H8	''r   r^   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
SelectorThreadLeakTest   c                     [         R                  " U R                  5       5        [        R                  " 5       U l        g r   )r   rundummy_tornado_coroutine	threadingactive_countorig_thread_countr   s    r   rg   SelectorThreadLeakTest.setUp   s*     	D0023!*!7!7!9r   c                    [         R                   " 5       S-   n[         R                   " 5       U:  ai  [        [        R                  " 5       5      n[	        U5      U R
                  ::  a  O1[         R                  " S5        [         R                   " 5       U:  a  Mi  U R                  [	        W5      U R
                  U5        g )Nr~   g?)timelistr   	enumeraterp   r   sleepassertLessEqual)r   deadlinethreadss      r   assert_no_thread_leak,SelectorThreadLeakTest.assert_no_thread_leak   s     99;?iikH$9..01G7|t555JJsO	 iikH$
 	S\4+A+A7Kr   c                 6   #    [         R                  " 5         g 7fr   )r   r   r   s    r   r   .SelectorThreadLeakTest.dummy_tornado_coroutine   s     s   c                     [        S5       H'  n[        R                  " U R                  5       5        M)     U R	                  5         g Nrn   )rr   r   r   r   r   )r   ry   s     r   test_asyncio_run'SelectorThreadLeakTest.test_asyncio_run   s3    rAKK4467  	""$r   c                    [        S5       Hf  n[        R                  " 5       nUR                  U R	                  5       5        UR                  UR                  5       5        UR                  5         Mh     U R                  5         g r   )rr   r   r   r    r   shutdown_asyncgensrR   r   r   ry   rT   s      r   test_asyncio_manual*SelectorThreadLeakTest.test_asyncio_manual   sc    rA))+D##D$@$@$BC##D$;$;$=>JJL  	""$r   c                     [        S5       H7  n[        SS9nUR                  U R                  5        UR	                  5         M9     U R                  5         g )Nrn   Fra   )rr   r   rN   r   rR   r   r   s      r   test_tornado#SelectorThreadLeakTest.test_tornado   sE    rA u-DMM$667JJL  	""$r   )r   N)rW   rX   rY   rZ   rg   r   r   r   r   r   r\   r(   r   r   r   r      s!    :L%%%r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	AnyThreadEventLoopPolicyTest   c                 X    [         R                  " 5       U l        [        S5      U l        g )Nr~   )r   rc   rd   r   executorr   s    r   rg   "AnyThreadEventLoopPolicyTest.setUp   s    "88:*1-r   c                 x    [         R                  " U R                  5        U R                  R	                  5         g r   )r   re   rd   r   shutdownr   s    r   rk   %AnyThreadEventLoopPolicyTest.tearDown   s&    %%d&6&67 r   c                 ^    S nU R                   R                  U5      nUR                  5       $ )Nc                  P    [         R                  " 5       n U R                  5         U $ )zGet the event loop. Close it if one is returned.

Returns the (closed) event loop. This is a silly thing
to do and leaves the thread in a broken state, but it's
enough for this test. Closing the loop avoids resource
leak warnings.
r   r   rR   )rT   s    r   get_and_close_event_loopWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop   s      ))+DJJLKr   )r   submitr9   )r   r   futures      r   get_event_loop_on_thread5AnyThreadEventLoopPolicyTest.get_event_loop_on_thread   s*    
	 %%&>?}}r   c                 `   [         R                  " 5          [         R                  " S[        5        U R	                  [
        U R                  R                  [        R                  5      R                  5        [        R                  " [        5       5        U R                  U R                  R                  [        R                  5      R                  5       [        R                  5        U R                  R                  S 5      R                  5         S S S 5        g ! , (       d  f       g = f)Nro   c                  H    [         R                  " 5       R                  5       $ r   r   r(   r   r   r)   DAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>       )?)?)A)G)G)Ir   )rs   rt   ru   rv   assertRaisesRuntimeErrorr   r   r   r   r9   re   r   assertIsInstanceAbstractEventLoopr   s    r   test_asyncio_accessor2AnyThreadEventLoopPolicyTest.test_asyncio_accessor   s    $$&!!(,>? dmm2273I3IJQQ ))*B*DE!!$$W%;%;<CCE)) MM  !IJQQS '&&s   D D
D-c                    [         R                  " 5          [         R                  " S[        5        U R	                  U R
                  R                  [        R                  5      R                  5       [        5        U R
                  R                  S 5      R                  5         [        R                  " [        5       5        U R	                  U R
                  R                  [        R                  5      R                  5       [        5        U R
                  R                  S 5      R                  5         S S S 5        g ! , (       d  f       g = f)Nro   c                  H    [         R                  " 5       R                  5       $ r   r   r(   r   r   r)   DAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>  r   r   c                  H    [         R                  " 5       R                  5       $ r   r   r(   r   r   r)   r     r   r   )rs   rt   ru   rv   r   r   r   r   r   r9   r   re   r   r   s    r   test_tornado_accessor2AnyThreadEventLoopPolicyTest.test_tornado_accessor   s     $$&!!(,>?!!$--"6"6v~~"F"M"M"OQWX MM  !IJQQS))*B*DE!!$--"6"6v~~"F"M"M"OQWXMM  !IJQQS '&&s   D$E
E)r   rd   N)
rW   rX   rY   rZ   rg   rk   r   r   r   r\   r(   r   r   r   r      s    .! T$Tr   r   )r   r   r   unittestrs   concurrent.futuresr   tornador   tornado.ioloopr   tornado.platform.asyncior   r   r   r	   tornado.testingr
   r   r   TestCaser^   r   r   r(   r   r   <module>r      sw         1  !  4Lm L^*'x   *'Z0%X.. 0%f7T8#4#4 7Tr   