o
    E¾±hs.  ã                   @   sþ   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
„ d
eƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZdS )é    N)ÚThreadPoolExecutor)Úgen)ÚIOLoop)ÚAsyncIOLoopÚto_asyncio_futureÚAddThreadSelectorEventLoop)ÚAsyncTestCaseÚgen_testÚsetup_with_context_managerÚAsyncHTTPTestCase)Úignore_deprecation)ÚApplicationÚRequestHandlerc                   @   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   úZ/var/www/html/Persson_Maskin/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>9   ó    z5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>r!   )r   Úensure_futurer   Úrun_in_executorÚassertEqual)r   Úxr   r   r   Útest_asyncio_future4   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"   B   r#   zDAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>)r   r   r%   )Ú
event_loopr'   r   r   r   Úf?   s   €z2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.fr!   )r   Ú	coroutiner&   )r   r*   Úresultr   r   r   Útest_asyncio_yield_from=   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_coroutineM   s   €
z?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutinec                   “   s   ˆ ƒ I d H S r   r   r   ©r0   r   r   Ú native_coroutine_without_adapterR   s   €zNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterc                   “   ó   t ˆ ƒ ƒI d H S r   ©r   r   r1   r   r   Únative_coroutine_with_adapterU   ó   €zKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterc                   “   r3   r   r4   r   )r2   r   r   Únative_coroutine_with_adapter2Y   r6   zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2r!   )r   r+   r&   r   Úrun_syncr   r   )r   r5   r7   r   )r2   r0   r   Útest_asyncio_adapterH   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_idempotentp   s   z0AsyncIOLoopTest.test_add_thread_close_idempotentN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r	   r(   r-   r9   r=   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 ¡  d S )NF©Úmake_current)r   r:   r   r   r   r   ÚsetUpw   s   zLeakTest.setUpc                 C   s2   zt  ¡  ¡ }W n
 ty   Y d S w | ¡  d S r   )r   Úget_event_loop_policyr   Ú	Exceptionr:   r;   r   r   r   ÚtearDown{   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   r:   r&   ©r   Ú
orig_countÚir<   Ú	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 )NrI   é   )rK   r   rL   rM   r   Únew_event_loopr   Úcurrentr   Úrun_foreverr:   r&   rR   r   r   r   Útest_asyncio_close_leak   s   

z LeakTest.test_asyncio_close_leakN)r>   r?   r@   rE   rH   rV   r[   r   r   r   r   rB   v   s
    	rB   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 )NrW   gš™™™™™¹?)ÚtimeÚlistr_   Ú	enumeraterK   ra   ÚsleepÚassertLessEqual)r   ÚdeadlineÚthreadsr   r   r   Úassert_no_thread_leak¦   s   
üz,SelectorThreadLeakTest.assert_no_thread_leakc                 Ã   s   t  ¡  d S r   )r   rY   r   r   r   r   r^   ´   s   €z.SelectorThreadLeakTest.dummy_tornado_coroutinec                 C   s(   t dƒD ]	}t |  ¡ ¡ q|  ¡  d S ©NrI   )rM   r   r]   r^   ri   )r   rT   r   r   r   Útest_asyncio_run¸   s   z'SelectorThreadLeakTest.test_asyncio_runc                 C   sF   t dƒD ]}t ¡ }| |  ¡ ¡ | | ¡ ¡ | ¡  q|  ¡  d S rj   )rM   r   rX   r   r^   Úshutdown_asyncgensr:   ri   ©r   rT   r<   r   r   r   Útest_asyncio_manual¾   s   
z*SelectorThreadLeakTest.test_asyncio_manualc                 C   s8   t dƒD ]}tdd}| | j¡ | ¡  q|  ¡  d S )NrI   FrC   )rM   r   r8   r^   r:   ri   rm   r   r   r   Útest_tornadoÇ   s
   

z#SelectorThreadLeakTest.test_tornadoN)	r>   r?   r@   rE   ri   r^   rk   rn   ro   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   s0   t | tƒ ƒ tjjj| _t ¡ | _tdƒ| _	d S )NrW   )
r
   r   ÚtornadoÚplatformr   ÚAnyThreadEventLoopPolicyrF   Úorig_policyr   Úexecutorr   r   r   r   rE   Ò   s
   ÿ
z"AnyThreadEventLoopPolicyTest.setUpc                 C   s   t  | j¡ | j ¡  d S r   )r   Úset_event_loop_policyrt   ru   Úshutdownr   r   r   r   rH   Ü   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   r:   )r<   r   r   r   Úget_and_close_event_loopá   s   zWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loop)ru   Úsubmitr,   )r   ry   Úfuturer   r   r   Úget_event_loop_on_threadà   s   z5AnyThreadEventLoopPolicyTest.get_event_loop_on_threadc                 C   s   t  ¡ : t  dt¡ |  t| j tj	¡j
¡ t |  ¡ ¡ |  | j tj	¡ 
¡ tj¡ | j dd„ ¡ 
¡  W d   ƒ d S 1 sAw   Y  d S )NrJ   c                   S   ó   t  ¡  ¡ S r   rx   r   r   r   r   r"      ó    zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>)rN   rO   rP   rQ   ÚassertRaisesÚRuntimeErrorru   rz   r   r   r,   rv   rs   ÚassertIsInstanceÚAbstractEventLoopr   r   r   r   Útest_asyncio_accessorð   s   
ÿþ"ñz2AnyThreadEventLoopPolicyTest.test_asyncio_accessorc                 C   s¤   t  ¡ D t  dt¡ |  | j tj¡ 	¡ t¡ | j dd„ ¡ 	¡  t
 |  ¡ ¡ |  | j tj¡ 	¡ t¡ | j dd„ ¡ 	¡  W d   ƒ d S 1 sKw   Y  d S )NrJ   c                   S   r}   r   rx   r   r   r   r   r"   
  r~   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>c                   S   r}   r   rx   r   r   r   r   r"     r~   )rN   rO   rP   rQ   r   ru   rz   r   rY   r,   r   rv   rs   r   r   r   r   Útest_tornado_accessor  s   
"÷z2AnyThreadEventLoopPolicyTest.test_tornado_accessorN)r>   r?   r@   rE   rH   r|   rƒ   r„   r   r   r   r   rp   Ñ   s    
rp   c                   @   sB   e Zd ZdZdZejdddZe e¡ de	fdd„Z
d	d
„ ZdS )ÚSelectorThreadContextvarsTestÚfooú/Útornado_test_ctxÚdefault)r‰   Úreturnc                    s*   | j ‰ G ‡ fdd„dtƒ}t| j|fgƒS )Nc                       s   e Zd Z‡ fdd„ZdS )z6SelectorThreadContextvarsTest.get_app.<locals>.Handlerc                 “   s   |   ˆ  ¡ ¡ d S r   )ÚwriteÚgetr   ©rˆ   r   r   rŒ     s   €
z:SelectorThreadContextvarsTest.get_app.<locals>.Handler.getN)r>   r?   r@   rŒ   r   r   r   r   ÚHandler  s    rŽ   )rˆ   r   r   Útest_endpoint)r   rŽ   r   r   r   Úget_app  s   z%SelectorThreadContextvarsTest.get_appc                 C   s    |   | j|  | j¡j ¡ ¡ d S r   )r&   Ú	ctx_valueÚfetchr   ÚbodyÚdecoder   r   r   r   Útest_context_vars)  s    z/SelectorThreadContextvarsTest.test_context_varsN)r>   r?   r@   r‘   r   ÚcontextvarsÚ
ContextVarrˆ   Úsetr   r   r•   r   r   r   r   r…     s    
r…   ) r   r–   r_   rb   ÚunittestrN   Úconcurrent.futuresr   Útornado.platform.asynciorq   r   Útornado.ioloopr   r   r   r   Útornado.testingr   r	   r
   r   Útornado.test.utilr   Útornado.webr   r   r   ÚTestCaserB   r\   rp   r…   r   r   r   r   Ú<module>   s&   O(3@