o
    )ªZhñ(  ã                   @   s¾   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mZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZ G dd„ deƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZdS )é    N)ÚThreadPoolExecutor)Úgen)ÚIOLoop)ÚAsyncIOLoopÚto_asyncio_futureÚAnyThreadEventLoopPolicyÚAddThreadSelectorEventLoop)ÚAsyncTestCaseÚgen_testc                   @   sH   e Zd Zedd„ ƒZdd„ Zedd„ ƒZedd„ ƒZd	d
„ Z	dd„ Z
dS )ÚAsyncIOLoopTestc                 C   s   | j jS ©N)Úio_loopÚasyncio_loop©Úself© r   úP/var/www/html/lang_env/lib/python3.10/site-packages/tornado/test/asyncio_test.pyr       s   zAsyncIOLoopTest.asyncio_loopc                    s&   ‡ fdd„}ˆ j  |ƒ ¡ ˆ  ¡  d S )Nc                   “   s   t  ¡  ˆ j¡ d S r   )ÚasyncioÚget_event_loopÚ	call_soonÚstopr   r   r   r   Úadd_callback&   s   €z;AsyncIOLoopTest.test_asyncio_callback.<locals>.add_callback)r   Úrun_until_completeÚwait)r   r   r   r   r   Útest_asyncio_callback$   s   z%AsyncIOLoopTest.test_asyncio_callbackc                 c   s.    t  t  ¡  d dd„ ¡¡V }|  |d¡ d S )Nc                   S   ó   dS ©Né*   r   r   r   r   r   Ú<lambda>1   ó    z5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>r   )r   Zensure_futurer   Úrun_in_executorÚassertEqual)r   Úxr   r   r   Útest_asyncio_future,   s
   €ÿz#AsyncIOLoopTest.test_asyncio_futurec                 c   s(    t jdd„ ƒ}|ƒ V }|  |d¡ d S )Nc                  s   s$    t  ¡ } |  d dd„ ¡E d H }|S )Nc                   S   r   r   r   r   r   r   r   r   :   r   zDAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>)r   r   r    )Z
event_loopr"   r   r   r   Úf7   s   €z2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.fr   )r   Ú	coroutiner!   )r   r$   Úresultr   r   r   Útest_asyncio_yield_from5   s
   €
z'AsyncIOLoopTest.test_asyncio_yield_fromc                    s´   t jdd„ ƒ‰‡fdd„‰ ‡fdd„}‡ fdd„}|  | j ˆ ¡d	¡ |  | j |¡d	¡ |  | j |¡d	¡ |  | j ˆ ƒ ¡d	¡ |  | j |ƒ ¡d	¡ |  | j |ƒ ¡d	¡ d S )
Nc                   s   s    t jV  t  d¡‚r   )r   ZmomentÚReturnr   r   r   r   Útornado_coroutineE   s   €
z?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutinec                   “   s   ˆ ƒ I d H S r   r   r   ©r)   r   r   Ú native_coroutine_without_adapterJ   s   €zNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterc                   “   ó   t ˆ ƒ ƒI d H S r   ©r   r   r*   r   r   Únative_coroutine_with_adapterM   ó   €zKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterc                   “   r,   r   r-   r   )r+   r   r   Únative_coroutine_with_adapter2Q   r/   zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2r   )r   r%   r!   r   Úrun_syncr   r   )r   r.   r0   r   )r+   r)   r   Útest_asyncio_adapter@   s(   
þþþz$AsyncIOLoopTest.test_asyncio_adapterc                 C   s    t t ¡ ƒ}| ¡  | ¡  d S r   )r   r   r   Úclose©r   Úloopr   r   r   Ú test_add_thread_close_idempotenth   s   z0AsyncIOLoopTest.test_add_thread_close_idempotentN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r
   r#   r'   r2   r6   r   r   r   r   r      s    



(r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLeakTestc                 C   s*   t dd ¡  t ¡ | _t t ¡ ¡ d S )NF©Zmake_current)r   r3   r   Úget_event_loop_policyÚorig_policyÚset_event_loop_policyZDefaultEventLoopPolicyr   r   r   r   ÚsetUpo   s   
zLeakTest.setUpc                 C   s<   zt  ¡  ¡ }W n	 ty   Y nw | ¡  t  | j¡ d S r   )r   r=   r   Ú	Exceptionr3   r?   r>   r4   r   r   r   ÚtearDownw   s   þzLeakTest.tearDownc              	   C   sx   t tjƒ}tdƒD ]#}t ¡  t dt¡ tƒ }| 	¡  W d   ƒ n1 s'w   Y  q	t tjƒ| }|  
|d¡ d S )Né
   Úignorer   )Úlenr   Ú_ioloop_for_asyncioÚrangeÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr   r3   r!   ©r   Z
orig_countÚir5   Z	new_countr   r   r   Útest_ioloop_close_leak   s   


ý€zLeakTest.test_ioloop_close_leakc                 C   sf   t tjƒ}tdƒD ]}t ¡ }| tj¡ | |j¡ | 	¡  | 
¡  q	t tjƒ| }|  |d¡ d S )NrC   é   )rE   r   rF   rG   r   Únew_event_loopr   Úcurrentr   Zrun_foreverr3   r!   rL   r   r   r   Útest_asyncio_close_leakŒ   s   

z LeakTest.test_asyncio_close_leakN)r7   r8   r9   r@   rB   rN   rR   r   r   r   r   r;   n   s
    
r;   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSelectorThreadLeakTestc                 C   s   t  |  ¡ ¡ t ¡ | _d S r   )r   ÚrunÚdummy_tornado_coroutineÚ	threadingÚactive_countÚorig_thread_countr   r   r   r   r@      s   zSelectorThreadLeakTest.setUpc                 C   sb   t   ¡ d }t   ¡ |k r%tt ¡ ƒ}t|ƒ| jkrnt  d¡ t   ¡ |k s|  t|ƒ| j|¡ d S )NrO   gš™™™™™¹?)ÚtimeÚlistrV   Ú	enumeraterE   rX   ÚsleepZassertLessEqual)r   ÚdeadlineÚthreadsr   r   r   Úassert_no_thread_leak£   s   
üz,SelectorThreadLeakTest.assert_no_thread_leakc                 Ã   s   t  ¡  d S r   )r   rQ   r   r   r   r   rU   ±   s   €z.SelectorThreadLeakTest.dummy_tornado_coroutinec                 C   s(   t dƒD ]	}t |  ¡ ¡ q|  ¡  d S ©NrC   )rG   r   rT   rU   r_   )r   rM   r   r   r   Útest_asyncio_runµ   s   z'SelectorThreadLeakTest.test_asyncio_runc                 C   sF   t dƒD ]}t ¡ }| |  ¡ ¡ | | ¡ ¡ | ¡  q|  ¡  d S r`   )rG   r   rP   r   rU   Zshutdown_asyncgensr3   r_   ©r   rM   r5   r   r   r   Útest_asyncio_manual»   s   
z*SelectorThreadLeakTest.test_asyncio_manualc                 C   s8   t dƒD ]}tdd}| | j¡ | ¡  q|  ¡  d S )NrC   Fr<   )rG   r   r1   rU   r3   r_   rb   r   r   r   Útest_tornadoÄ   s
   

z#SelectorThreadLeakTest.test_tornadoN)	r7   r8   r9   r@   r_   rU   ra   rc   rd   r   r   r   r   rS   ›   s    	rS   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚAnyThreadEventLoopPolicyTestc                 C   s   t  ¡ | _tdƒ| _d S )NrO   )r   r=   r>   r   Úexecutorr   r   r   r   r@   Ï   s   
z"AnyThreadEventLoopPolicyTest.setUpc                 C   s   t  | j¡ | j ¡  d S r   )r   r?   r>   rf   Úshutdownr   r   r   r   rB   Ó   s   z%AnyThreadEventLoopPolicyTest.tearDownc                 C   s   dd„ }| j  |¡}| ¡ S )Nc                  S   s   t  ¡ } |  ¡  | 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   r3   )r5   r   r   r   Úget_and_close_event_loopØ   s   zWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop)rf   Úsubmitr&   )r   ri   Úfuturer   r   r   Úget_event_loop_on_thread×   s   z5AnyThreadEventLoopPolicyTest.get_event_loop_on_threadc                 C   sŽ   t  ¡ 9 t  dt¡ |  t| j tj	¡j
¡ t tƒ ¡ |  | j tj	¡ 
¡ tj¡ | j dd„ ¡ 
¡  W d   ƒ d S 1 s@w   Y  d S )NrD   c                   S   ó   t  ¡  ¡ S r   rh   r   r   r   r   r   ÷   ó    zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>)rH   rI   rJ   rK   ZassertRaisesÚRuntimeErrorrf   rj   r   r   r&   r?   r   ÚassertIsInstanceZAbstractEventLoopr   r   r   r   Útest_asyncio_accessorç   s   
ÿþ"ñz2AnyThreadEventLoopPolicyTest.test_asyncio_accessorc                 C   s¢   t  ¡ C t  dt¡ |  | j tj¡ 	¡ t¡ | j dd„ ¡ 	¡  t
 tƒ ¡ |  | j tj¡ 	¡ t¡ | j dd„ ¡ 	¡  W d   ƒ d S 1 sJw   Y  d S )NrD   c                   S   rm   r   rh   r   r   r   r   r     rn   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>c                   S   rm   r   rh   r   r   r   r   r     rn   )rH   rI   rJ   rK   rp   rf   rj   r   rQ   r&   r   r?   r   r   r   r   r   Útest_tornado_accessorù   s   
"÷z2AnyThreadEventLoopPolicyTest.test_tornado_accessorN)r7   r8   r9   r@   rB   rl   rq   rr   r   r   r   r   re   Î   s    re   )r   rV   rY   ZunittestrH   Úconcurrent.futuresr   Útornador   Ztornado.ioloopr   Ztornado.platform.asyncior   r   r   r   Ztornado.testingr	   r
   r   ZTestCaser;   rS   re   r   r   r   r   Ú<module>   s   O-3