
    Xhs.                     R   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZ	d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ  G d	 d
e      Z G d dej6                        Z G d dej6                        Z G d dej6                        Z G d de      Zy)    N)ThreadPoolExecutor)gen)IOLoop)AsyncIOLoopto_asyncio_futureAddThreadSelectorEventLoop)AsyncTestCasegen_testsetup_with_context_managerAsyncHTTPTestCase)ignore_deprecation)ApplicationRequestHandlerc                   N    e Zd Zed        Zd Zed        Zed        Zd Z	d Z
y)AsyncIOLoopTestc                 .    | j                   j                  S N)io_loopasyncio_loopselfs    M/var/www/html/myenv/lib/python3.12/site-packages/tornado/test/asyncio_test.pyr   zAsyncIOLoopTest.asyncio_loop(   s    ||(((    c                 p      fd} j                   j                   |               j                          y )Nc                  h   K   t        j                         j                   j                         y wr   )asyncioget_event_loop	call_soonstopr   s   r   add_callbackz;AsyncIOLoopTest.test_asyncio_callback.<locals>.add_callback.   s"     ""$..tyy9s   /2)r   run_until_completewait)r   r    s   ` r   test_asyncio_callbackz%AsyncIOLoopTest.test_asyncio_callback,   s)    	: 	,,\^<		r   c              #      K   t        j                  t        j                         j                  d d             }| j	                  |d       y w)Nc                       yN*    r(   r   r   <lambda>z5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>9       r   r'   )r   ensure_futurer   run_in_executorassertEqual)r   xs     r   test_asyncio_futurez#AsyncIOLoopTest.test_asyncio_future4   sH      ''""$44T:F
 
 	Bs   AAc              #   n   K   t         j                  d        } |       }| j                  |d       y w)Nc               3   p   K   t        j                         } | j                  d d       E d {   }|S 7 w)Nc                       yr&   r(   r(   r   r   r)   zDAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>B   r*   r   )r   r   r,   )
event_loopr.   s     r   fz2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.f?   s4      //1J%55dJGGAH Hs   +646r'   )r   	coroutiner-   )r   r4   results      r   test_asyncio_yield_fromz'AsyncIOLoopTest.test_asyncio_yield_from=   s7     		 
	
 s$s   35c                 t   t         j                  d        fdfd}fd}| j                  | j                  j	                        d       | j                  | j                  j	                  |      d       | j                  | j                  j	                  |      d       | j                  | j
                  j                                d       | j                  | j
                  j                   |             d       | j                  | j
                  j                   |             d       y )Nc               3   X   K   t         j                   t        j                  d      wr&   )r   momentReturnr(   r   r   tornado_coroutinez?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutineM   s     ****R. s   (*c                  .   K             d {   S 7 wr   r(   r<   s   r    native_coroutine_without_adapterzNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterR   s     *,,,,s   c                  @   K   t                        d {   S 7 wr   r   r>   s   r   native_coroutine_with_adapterzKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterU   s     *+<+>????   c                  @   K   t                        d {   S 7 wr   rA   )r?   s   r   native_coroutine_with_adapter2zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2Y   s     *+K+MNNNNrC   r'   )r   r5   r-   r   run_syncr   r!   )r   rB   rE   r?   r<   s      @@r   test_asyncio_adapterz$AsyncIOLoopTest.test_asyncio_adapterH   s   
 
	! 
	!	-	@	O 	../OPRTU../LMrR../MNPRS 	001Q1ST	
 	001N1PQ	
 	001O1QR	
r   c                 ~    t        t        j                               }|j                          |j                          y r   )r   r   r   closer   loops     r    test_add_thread_close_idempotentz0AsyncIOLoopTest.test_add_thread_close_idempotentp   s'    )'*@*@*BC



r   N)__name__
__module____qualname__propertyr   r#   r
   r/   r7   rG   rL   r(   r   r   r   r   '   sL    ) )     % %&
Pr   r   c                   $    e Zd Zd Zd Zd Zd Zy)LeakTestc                 8    t        d      j                          y )NFmake_current)r   rI   r   s    r   setUpzLeakTest.setUpw   s    '--/r   c                     	 t        j                         j                         }|j                          y # t        $ r Y y w xY wr   )r   get_event_loop_policyr   rI   	ExceptionrJ   s     r   tearDownzLeakTest.tearDown{   s=    	002AACD
 JJL	  		s   "5 	A Ac                 l   t        t        j                        }t        d      D ]S  }t	        j
                         5  t	        j                  dt               t               }|j                          d d d        U t        t        j                        |z
  }| j                  |d       y # 1 sw Y   xY w)N
   ignorer   )lenr   _ioloop_for_asynciorangewarningscatch_warningssimplefilterDeprecationWarningr   rI   r-   r   
orig_countirK   	new_counts        r   test_ioloop_close_leakzLeakTest.test_ioloop_close_leak   s    334
r 	A((* %%h0BC"}

 	 223j@	A& s   5B**B3	c                    t        t        j                        }t        d      D ]p  }t	        j
                         }|j                  t        j                         |j                  |j                         |j                          |j                          r t        t        j                        |z
  }| j                  |d       y )Nr\      )r^   r   r_   r`   r   new_event_loopr   currentr   run_foreverrI   r-   re   s        r   test_asyncio_close_leakz LeakTest.test_asyncio_close_leak   s    334
r 	A))+DNN6>>*NN499%JJL	 223j@	 	A&r   N)rM   rN   rO   rV   rZ   ri   ro   r(   r   r   rR   rR   v   s    0	''r   rR   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)SelectorThreadLeakTestc                 |    t        j                  | j                                t        j                         | _        y r   )r   rundummy_tornado_coroutine	threadingactive_countorig_thread_countr   s    r   rV   zSelectorThreadLeakTest.setUp   s*     	D0023!*!7!7!9r   c                 r   t        j                          dz   }t        j                          |k  rct        t        j                               }t	        |      | j
                  k  rn-t        j                  d       t        j                          |k  rc| j                  t	              | j
                  |       y )Nrk   g?)timelistru   	enumerater^   rw   sleepassertLessEqual)r   deadlinethreadss      r   assert_no_thread_leakz,SelectorThreadLeakTest.assert_no_thread_leak   s     99;?iikH$9..01G7|t555JJsO	 iikH$
 	S\4+A+A7Kr   c                 4   K   t        j                          y wr   )r   rm   r   s    r   rt   z.SelectorThreadLeakTest.dummy_tornado_coroutine   s     s   c                     t        d      D ]%  }t        j                  | j                                ' | j	                          y Nr\   )r`   r   rs   rt   r   )r   rg   s     r   test_asyncio_runz'SelectorThreadLeakTest.test_asyncio_run   s8    r 	8AKK4467	8 	""$r   c                    t        d      D ]d  }t        j                         }|j                  | j	                                |j                  |j                                |j                          f | j                          y r   )r`   r   rl   r!   rt   shutdown_asyncgensrI   r   r   rg   rK   s      r   test_asyncio_manualz*SelectorThreadLeakTest.test_asyncio_manual   sh    r 	A))+D##D$@$@$BC##D$;$;$=>JJL	 	""$r   c                     t        d      D ]9  }t        d      }|j                  | j                         |j	                          ; | j                          y )Nr\   FrT   )r`   r   rF   rt   rI   r   r   s      r   test_tornadoz#SelectorThreadLeakTest.test_tornado   sJ    r 	A u-DMM$667JJL	 	""$r   N)	rM   rN   rO   rV   r   rt   r   r   r   r(   r   r   rq   rq      s!    :L%%%r   rq   c                   *    e Zd Zd Zd Zd Zd Zd Zy)AnyThreadEventLoopPolicyTestc                     t        | t                      t        j                  j                  j
                  | _        t	        j                         | _        t        d      | _	        y )Nrk   )
r   r   tornadoplatformr   AnyThreadEventLoopPolicyrX   orig_policyr   executorr   s    r   rV   z"AnyThreadEventLoopPolicyTest.setUp   sN    "4);)=> $$== 	% #88:*1-r   c                 v    t        j                  | j                         | j                  j	                          y r   )r   set_event_loop_policyr   r   shutdownr   s    r   rZ   z%AnyThreadEventLoopPolicyTest.tearDown   s&    %%d&6&67 r   c                 ^    d }| j                   j                  |      }|j                         S )Nc                  N    t        j                         } | j                          | S )a#  Get 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   rI   )rK   s    r   get_and_close_event_loopzWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop   s      ))+DJJLKr   )r   submitr6   )r   r   futures      r   get_event_loop_on_threadz5AnyThreadEventLoopPolicyTest.get_event_loop_on_thread   s*    
	 %%&>?}}r   c                 \   t        j                         5  t        j                  dt               | j	                  t
        | j                  j                  t        j                        j                         t        j                  | j                                | j                  | j                  j                  t        j                        j                         t        j                         | j                  j                  d       j                          d d d        y # 1 sw Y   y xY w)Nr]   c                  F    t        j                         j                         S r   r   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>       )?)?)A)G)G)I r   )ra   rb   rc   rd   assertRaisesRuntimeErrorr   r   r   r   r6   r   r   assertIsInstanceAbstractEventLoopr   s    r   test_asyncio_accessorz2AnyThreadEventLoopPolicyTest.test_asyncio_accessor   s    $$& 	T!!(,>? dmm2273I3IJQQ ))$*G*G*IJ!!$$W%;%;<CCE)) MM  !IJQQS	T 	T 	Ts   DD""D+c                    t        j                         5  t        j                  dt               | j	                  | j
                  j                  t        j                        j                         t               | j
                  j                  d       j                          t        j                  | j                                | j	                  | j
                  j                  t        j                        j                         t               | j
                  j                  d       j                          d d d        y # 1 sw Y   y xY w)Nr]   c                  F    t        j                         j                         S r   r   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>
  r   r   c                  F    t        j                         j                         S r   r   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>  r   r   )ra   rb   rc   rd   r   r   r   r   rm   r6   r   r   r   r   s    r   test_tornado_accessorz2AnyThreadEventLoopPolicyTest.test_tornado_accessor  s     $$& 		T!!(,>?!!$--"6"6v~~"F"M"M"OQWX MM  !IJQQS))$*G*G*IJ!!$--"6"6v~~"F"M"M"OQWXMM  !IJQQS		T 		T 		Ts   D(EEN)rM   rN   rO   rV   rZ   r   r   r   r(   r   r   r   r      s    .! T$Tr   r   c                   p    e Zd ZdZdZ ej                  dd      Zej                  e       de	fdZ
d Zy	)
SelectorThreadContextvarsTestfoo/tornado_test_ctxdefault)r   returnc                 n    | j                    G fddt              }t        | j                  |fg      S )Nc                       e Zd Z fdZy)6SelectorThreadContextvarsTest.get_app.<locals>.Handlerc                 L   K   | j                  j                                y wr   )writeget)r   r   s    r   r   z:SelectorThreadContextvarsTest.get_app.<locals>.Handler.get  s      

+//12s   !$N)rM   rN   rO   r   )r   s   r   Handlerr     s    
3r   r   )r   r   r   test_endpoint)r   r   r   s     @r   get_appz%SelectorThreadContextvarsTest.get_app  s6    00	3n 	3 T//9:;;r   c                     | j                  | j                  | j                  | j                        j                  j                                y r   )r-   	ctx_valuefetchr   bodydecoder   s    r   test_context_varsz/SelectorThreadContextvarsTest.test_context_vars)  s4    D4F4F)G)L)L)S)S)UVr   N)rM   rN   rO   r   r   contextvars
ContextVarr   setr   r   r   r(   r   r   r   r     sB    IM-{--.@)T#< <$Wr   r   ) r   r   ru   ry   unittestra   concurrent.futuresr   tornado.platform.asyncior   r   tornado.ioloopr   r   r   r   tornado.testingr	   r
   r   r   tornado.test.utilr   tornado.webr   r   r   TestCaserR   rq   r   r   r(   r   r   <module>r      s          1   ! 
  1 3Lm L^%'x   %'P0%X.. 0%f=T8#4#4 =T@W$5 Wr   