
    [4%e                          d dl Z d dlZd dlZd dlm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  G d de          Z G d	 d
ej                  Z G d dej                  ZdS )    N)ThreadPoolExecutor)gen)IOLoop)AsyncIOLoopto_asyncio_futureAnyThreadEventLoopPolicy)AsyncTestCasegen_testc                   \    e Zd Zed             Zd Zed             Zed             Zd Z	dS )AsyncIOLoopTestc                     | j         j        S N)io_loopasyncio_loopselfs    9lib/python3.11/site-packages/tornado/test/asyncio_test.pyr   zAsyncIOLoopTest.asyncio_loop   s    |((    c                 ~      fd} j                              |                                                         d S )Nc                  b   K   t          j                                         j                   d S r   )asyncioget_event_loop	call_soonstopr   s   r   add_callbackz;AsyncIOLoopTest.test_asyncio_callback.<locals>.add_callback#   s,      "$$..ty99999r   )r   run_until_completewait)r   r   s   ` r   test_asyncio_callbackz%AsyncIOLoopTest.test_asyncio_callback!   sL    	: 	: 	: 	: 	: 	,,\\^^<<<		r   c              #   
  K   t          t          d          rt          j        }nt          t          d          } |t          j                                        d d                     V }|                     |d           d S )Nensure_futureasyncc                      dS N*    r%   r   r   <lambda>z5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>5   s    2 r   r$   )hasattrr   r    getattrr   run_in_executorassertEqual)r   r    xs      r   test_asyncio_futurez#AsyncIOLoopTest.test_asyncio_future)   s      
 7O,, 	6#1MM $GW55M-"$$44T::FF
 
 
 
 	Br   c              #   x   K   t           j        d             } |            V }|                     |d           d S )Nc               3   j   K   t          j                    } |                     d d           E d {V }|S )Nc                      dS r#   r%   r%   r   r   r&   zDAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>>   s    B r   )r   r   r)   )
event_loopr+   s     r   fz2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.f;   sB       /11J%55dJJGGGGGGGGAHr   r$   )r   	coroutiner*   )r   r1   results      r   test_asyncio_yield_fromz'AsyncIOLoopTest.test_asyncio_yield_from9   sN      		 	 
	
 qss$$$$$r   c                    t           j        d             fdfd}fd}|                     | j                                      d           |                     | j                            |          d           |                     | j                            |          d           |                     | j                                                   d           |                     | j                             |                      d           |                     | j                             |                      d           d S )Nc               3   J   K   t           j        V  t          j        d          r#   )r   momentReturnr%   r   r   tornado_coroutinez?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutineI   s"      **R.. r   c                  (   K                  d {V S r   r%   r9   s   r    native_coroutine_without_adapterzNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterN   s(      **,,,,,,,,,r   c                  B   K   t                                   d {V S r   r   r;   s   r   native_coroutine_with_adapterzKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterQ   s1      *+<+<+>+>?????????r   c                  B   K   t                                   d {V S r   r>   )r<   s   r   native_coroutine_with_adapter2zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2U   s1      *+K+K+M+MNNNNNNNNNr   r$   )r   r2   r*   r   run_syncr   r   )r   r?   rA   r<   r9   s      @@r   test_asyncio_adapterz$AsyncIOLoopTest.test_asyncio_adapterD   s   
 
	! 	! 
	!	- 	- 	- 	- 	-	@ 	@ 	@ 	@ 	@	O 	O 	O 	O 	O 	../OPPRTUUU../LMMrRRR../MNNPRSSS 	001Q1Q1S1STT	
 	
 	
 	001N1N1P1PQQ	
 	
 	
 	001O1O1Q1QRR	
 	
 	
 	
 	
r   N)
__name__
__module____qualname__propertyr   r   r
   r,   r4   rC   r%   r   r   r   r      s        ) ) X)       X  % % X%&
 &
 &
 &
 &
r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )LeakTestc                     t          d                                           t          j                    | _        t          j        t          j                               d S )NF)make_current)r   closer   get_event_loop_policyorig_policyset_event_loop_policyDefaultEventLoopPolicyr   s    r   setUpzLeakTest.setUpn   sR    '''--/// #8::%g&D&F&FGGGGGr   c                     	 t          j                                                    }|                                 n# t          $ r Y nw xY wt          j        | j                   d S r   )r   rM   r   rL   	ExceptionrO   rN   )r   loops     r   tearDownzLeakTest.tearDownv   sp    	022AACCD
 JJLLLL	  	 	 	D	
 	%d&677777s   %< 
A	A	c                    t          t          j                  }t          d          D ]i}t	          j                    5  t	          j        dt                     t                      }|	                                 d d d            n# 1 swxY w Y   jt          t          j                  |z
  }| 
                    |d           d S )N
   ignorer   )lenr   _ioloop_for_asynciorangewarningscatch_warningssimplefilterDeprecationWarningr   rL   r*   r   
orig_countirT   	new_counts        r   test_ioloop_close_leakzLeakTest.test_ioloop_close_leak   s    344
r 	 	A(**  %h0BCCC"}}

               233j@	A&&&&&s   =BB	B	c                    t          t          j                  }t          d          D ]v}t	          j                    }|                    t          j                   |                    |j                   |	                                 |
                                 wt          t          j                  |z
  }|                     |d           d S )NrW      )rY   r   rZ   r[   r   new_event_loopr   currentr   run_foreverrL   r*   r`   s        r   test_asyncio_close_leakz LeakTest.test_asyncio_close_leak   s    344
r 	 	A)++DNN6>***NN49%%%JJLLLL233j@	 	A&&&&&r   N)rD   rE   rF   rQ   rU   rd   rj   r%   r   r   rI   rI   m   sS        H H H8 8 8	' 	' 	'' ' ' ' 'r   rI   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )AnyThreadEventLoopPolicyTestc                 ^    t          j                    | _        t          d          | _        d S )Nrf   )r   rM   rN   r   executorr   s    r   rQ   z"AnyThreadEventLoopPolicyTest.setUp   s&    "8::*1--r   c                 j    t          j        | j                   | j                                         d S r   )r   rO   rN   rn   shutdownr   s    r   rU   z%AnyThreadEventLoopPolicyTest.tearDown   s0    %d&6777     r   c                 d    d }| j                             |          }|                                S )Nc                  T    t          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   rL   )rT   s    r   get_and_close_event_loopzWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop   s$     )++DJJLLLKr   )rn   submitr3   )r   rt   futures      r   get_event_loop_on_threadz5AnyThreadEventLoopPolicyTest.get_event_loop_on_thread   s7    
	 
	 
	 %%&>??}}r   c                 X   t          j                    5  t          j        dt                     |                     t
          | j                            t          j	                  j
                   t          j        t                                 |                     | j                            t          j	                  
                                t          j                   | j                            d           
                                 d d d            d S # 1 swxY w Y   d S )NrX   c                  L    t          j                                                    S r   rs   r%   r   r   r&   zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>       )?)A)A)G)G)I)I r   )r\   r]   r^   r_   assertRaisesRuntimeErrorrn   ru   r   r   r3   rO   r   assertIsInstanceAbstractEventLoopr   s    r   test_asyncio_accessorz2AnyThreadEventLoopPolicyTest.test_asyncio_accessor   sT   $&& 	T 	T!(,>??? dm2273IJJQ   )*B*D*DEEE!!$$W%;<<CCEE)   M  !I!IJJQQSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts   C>DD#&D#c                    t          j                    5  t          j        dt                     |                     | j                            t          j                  	                                t                     | j                            d           	                                 t          j        t                                 |                     | j                            t          j                  	                                t                     | j                            d           	                                 d d d            d S # 1 swxY w Y   d S )NrX   c                  L    t          j                                                    S r   rs   r%   r   r   r&   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>   rz   r   c                  L    t          j                                                    S r   rs   r%   r   r   r&   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>   rz   r   )r\   r]   r^   r_   r}   rn   ru   r   rh   r3   r   rO   r   r   s    r   test_tornado_accessorz2AnyThreadEventLoopPolicyTest.test_tornado_accessor   so    $&& 		T 		T!(,>???!!$-"6"6v~"F"F"M"M"O"OQWXXX M  !I!IJJQQSSS)*B*D*DEEE!!$-"6"6v~"F"F"M"M"O"OQWXXXM  !I!IJJQQSSS		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		T 		Ts   D3EEEN)rD   rE   rF   rQ   rU   rw   r   r   r%   r   r   rl   rl      sg        . . .! ! !   T T T$T T T T Tr   rl   )r   unittestr\   concurrent.futuresr   tornador   tornado.ioloopr   tornado.platform.asyncior   r   r   tornado.testingr	   r
   r   TestCaserI   rl   r%   r   r   <module>r      sF      1 1 1 1 1 1       ! ! ! ! ! !         
 4 3 3 3 3 3 3 3N
 N
 N
 N
 N
m N
 N
 N
b*' *' *' *' *'x  *' *' *'Z7T 7T 7T 7T 7T8#4 7T 7T 7T 7T 7Tr   