o
    Ùñhñ(  ã                   @   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   úM/var/www/vscode/kcb/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   Ú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!   )Ú
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   Ú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   r0   r   )r.   r   r   Únative_coroutine_with_adapter2Q   r2   zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2r   )r   r'   r"   r   Úrun_syncr   r   )r   r1   r3   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)   r5   r9   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©Úmake_current)r   r6   r   Úget_event_loop_policyÚorig_policyÚset_event_loop_policyÚ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   rA   r   Ú	Exceptionr6   rC   rB   r7   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   r6   r"   ©r   Ú
orig_countÚir8   Ú	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 )NrH   é   )rJ   r   rK   rL   r   Únew_event_loopr   Úcurrentr   Úrun_foreverr6   r"   rQ   r   r   r   Útest_asyncio_close_leakŒ   s   

z LeakTest.test_asyncio_close_leakN)r:   r;   r<   rE   rG   rU   rZ   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   rE      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 )NrV   gš™™™™™¹?)ÚtimeÚlistr^   Ú	enumeraterJ   r`   ÚsleepÚassertLessEqual)r   ÚdeadlineÚthreadsr   r   r   Úassert_no_thread_leak£   s   
üz,SelectorThreadLeakTest.assert_no_thread_leakc                 Ã   s   t  ¡  d S r   )r   rX   r   r   r   r   r]   ±   s   €z.SelectorThreadLeakTest.dummy_tornado_coroutinec                 C   s(   t dƒD ]	}t |  ¡ ¡ q|  ¡  d S ©NrH   )rL   r   r\   r]   rh   )r   rS   r   r   r   Útest_asyncio_runµ   s   z'SelectorThreadLeakTest.test_asyncio_runc                 C   sF   t dƒD ]}t ¡ }| |  ¡ ¡ | | ¡ ¡ | ¡  q|  ¡  d S ri   )rL   r   rW   r   r]   Úshutdown_asyncgensr6   rh   ©r   rS   r8   r   r   r   Útest_asyncio_manual»   s   
z*SelectorThreadLeakTest.test_asyncio_manualc                 C   s8   t dƒD ]}tdd}| | j¡ | ¡  q|  ¡  d S )NrH   Fr?   )rL   r   r4   r]   r6   rh   rl   r   r   r   Útest_tornadoÄ   s
   

z#SelectorThreadLeakTest.test_tornadoN)	r:   r;   r<   rE   rh   r]   rj   rm   rn   r   r   r   r   r[   ›   s    	r[   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 )NrV   )r   rA   rB   r   Úexecutorr   r   r   r   rE   Ï   s   
z"AnyThreadEventLoopPolicyTest.setUpc                 C   s   t  | j¡ | j ¡  d S r   )r   rC   rB   rp   Úshutdownr   r   r   r   rG   Ó   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   r6   )r8   r   r   r   Úget_and_close_event_loopØ   s   zWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop)rp   Úsubmitr(   )r   rs   Ú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 )NrI   c                   S   ó   t  ¡  ¡ S r   rr   r   r   r   r   r   ÷   ó    zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>)rM   rN   rO   rP   ÚassertRaisesÚRuntimeErrorrp   rt   r   r   r(   rC   r   ÚassertIsInstanceÚ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 )NrI   c                   S   rw   r   rr   r   r   r   r   r     rx   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>c                   S   rw   r   rr   r   r   r   r   r     rx   )rM   rN   rO   rP   r{   rp   rt   r   rX   r(   r   rC   r   r   r   r   r   Útest_tornado_accessorù   s   
"÷z2AnyThreadEventLoopPolicyTest.test_tornado_accessorN)r:   r;   r<   rE   rG   rv   r}   r~   r   r   r   r   ro   Î   s    ro   )r   r^   ra   ÚunittestrM   Úconcurrent.futuresr   Útornador   Útornado.ioloopr   Útornado.platform.asyncior   r   r   r   Útornado.testingr	   r
   r   ÚTestCaser>   r[   ro   r   r   r   r   Ú<module>   s   O-3