o
    )Zh-                     @   s  d dl Z d dlmZ 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	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 d dlmZmZmZ d dlmZ zd dlZW n eyg   dZY nw d dlZejrwd d	lm Z m!Z! G d
d deZ"G dd deZ#G dd deZ$G dd deZ%G dd deZ&G dd deZ'G dd deZ(G dd deZ)G dd deZ*G dd deZ+G dd deZ,edure-d Z.e	/edu d!G d"d# d#eZ0e1d$kre	2  dS dS )%    N)futures)Future)app_log)AsyncHTTPTestCaseAsyncTestCase	ExpectLoggen_test)skipOnTravisskipNotCPython)ApplicationRequestHandler	HTTPError)gen)ListOptionalc                   @   s0  e Zd Zejdd Zejdd Zejdd Zejdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zeedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zd/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;S )<GenBasicTestc                 c   s"    t |D ]}tjV  qt|)z0Returns arg after a number of IOLoop iterations.)ranger   momentReturn)selfZ
iterationsargi r   L/var/www/html/lang_env/lib/python3.10/site-packages/tornado/test/gen_test.pydelay   s   

zGenBasicTest.delayc                 c   s    t jV  |S Nr   r   r   resultr   r   r   async_future&      zGenBasicTest.async_futurec                 c   s    t jV  |r   r   )r   er   r   r   async_exception+   r    zGenBasicTest.async_exceptionc                 c   s    t jV  t |d N   r   r   r   r   xr   r   r   add_one_async0   s   zGenBasicTest.add_one_asyncc                 C      t jdd }| j| d S )Nc                   S      d S r   r   r   r   r   r   f6      z%GenBasicTest.test_no_yield.<locals>.fr   	coroutineio_looprun_syncr   r+   r   r   r   test_no_yield5      
zGenBasicTest.test_no_yieldc                 C   $   t jdd }| t| jj| d S )Nc                   S      dd  d S Nr$   r   r   r   r   r   r   r+   =      z-GenBasicTest.test_exception_phase1.<locals>.fr   r.   assertRaisesZeroDivisionErrorr/   r0   r1   r   r   r   test_exception_phase1<   s   
z"GenBasicTest.test_exception_phase1c                 C   r4   )Nc                   s       t jV  dd  d S r6   r   r   r   r   r   r+   D      z-GenBasicTest.test_exception_phase2.<locals>.fr8   r1   r   r   r   test_exception_phase2C   s   
z"GenBasicTest.test_exception_phase2c                 C   &   t jdd }| t j| jj| d S )Nc                   s       dV  d S N*   r   r   r   r   r   r+   L      
z(GenBasicTest.test_bogus_yield.<locals>.fr   r.   r9   ZBadYieldErrorr/   r0   r1   r   r   r   test_bogus_yieldK      
zGenBasicTest.test_bogus_yieldc                 C   r?   )Nc                   s   r@   Nr$      r   r   r   r   r   r+   S   rC   z.GenBasicTest.test_bogus_yield_tuple.<locals>.frD   r1   r   r   r   test_bogus_yield_tupleR   rF   z#GenBasicTest.test_bogus_yield_tuplec                 C   s*   t jdd }| j| | j| d S )Nc                   s       t jV  d S r   r   r   r   r   r   r+   Z      z"GenBasicTest.test_reuse.<locals>.fr-   r1   r   r   r   
test_reuseY   s   
zGenBasicTest.test_reusec                 C   r)   )Nc                   s   s    d V  d S r   r   r   r   r   r   r+   b   rC   z!GenBasicTest.test_none.<locals>.fr-   r1   r   r   r   	test_nonea   r3   zGenBasicTest.test_nonec                    "   t j fdd} j| d S )Nc                  3   s,      d  dgV }  | ddg d S )Nr$   rI      )r(   assertEqualresultsr   r   r   r+   i      z"GenBasicTest.test_multi.<locals>.fr-   r1   r   rT   r   
test_multih      zGenBasicTest.test_multic                    rO   )Nc                  3   s4    t  d ddV }  | t ddd d S )Nr$   rI   ZfoobarrP   )dictr(   rQ   rR   rT   r   r   r+   q      z'GenBasicTest.test_multi_dict.<locals>.fr-   r1   r   rT   r   test_multi_dictp   rW   zGenBasicTest.test_multi_dictc                    rO   )Nc                  3   s6    t  dd ddgV }  | ddg d S )NrP   v1r$   v2)r   multi_futurer   rQ   	responsesrT   r   r   r+   y   s
   z*GenBasicTest.test_multi_delayed.<locals>.fr-   r1   r   rT   r   test_multi_delayedx      zGenBasicTest.test_multi_delayedc                    rO   )Nc                  3   s>    t t dd dddV }  | tddd d S )NrP   r]   r$   r^   rX   )r   r_   rZ   r   rQ   r`   rT   r   r   r+      s
   z/GenBasicTest.test_multi_dict_delayed.<locals>.fr-   r1   r   rT   r   test_multi_dict_delayed   rc   z$GenBasicTest.test_multi_dict_delayedc                 c   s:    t   }dd tdD V  t   }| || d d S )Nc                 S   s   g | ]}t jqS r   r   ).0r   r   r   r   
<listcomp>   s    z7GenBasicTest.test_multi_performance.<locals>.<listcomp>i  g      ?)timer   Z
assertLess)r   startendr   r   r   test_multi_performance   s
   z#GenBasicTest.test_multi_performancec                 c   s2    g V }|  t|t i V }|  t|t d S r   )
assertTrue
isinstancelistrZ   )r   r'   yr   r   r   test_multi_empty   s
   zGenBasicTest.test_multi_emptyc                 c   s    |  dV }| |d d S r#   r   rQ   r   r   r   r   test_future   s   zGenBasicTest.test_futurec                 c   s,    |  d|  dgV }| |ddg d S )Nr$   rI   rp   r   rS   r   r   r   test_multi_future   rU   zGenBasicTest.test_multi_futurec                 c   s:    |  d}|  d||  d|gV }| |g d d S )NrI   r$   rP   )r$   rI   rP   rI   rp   )r   r+   rS   r   r   r   test_multi_future_duplicate   s   
z(GenBasicTest.test_multi_future_duplicatec                 c   s4    t | d| ddV }| |t ddd d S )Nr$   rI   rX   )rZ   r   rQ   rr   r   r   r   test_multi_dict_future   r[   z#GenBasicTest.test_multi_dict_futurec              	   c   s.   t td/ | t}t| td| tdgV  W d    n1 s)w   Y  W d    n1 s8w   Y  | t|j	d | t t| td| 
dgV  W d    n1 sfw   Y  | t tj| td| tdgtdV  W d    d S 1 sw   Y  d S Nz!Multiple exceptions in yield listzerror 1zerror 2rI   )Zquiet_exceptions)r   r   r9   RuntimeErrorr   ZMultir"   rQ   str	exceptionr   r   cmr   r   r   test_multi_exceptions   s2   
"z"GenBasicTest.test_multi_exceptionsc              	   c   s"   t td, | t}| td| tdgV  W d    n1 s&w   Y  W d    n1 s5w   Y  | t|jd | t | td| dgV  W d    n1 s`w   Y  | t t	j
| td| tdgtdV  W d    d S 1 sw   Y  d S rv   )r   r   r9   rw   r"   rQ   rx   ry   r   r   r_   rz   r   r   r   test_multi_future_exceptions   s*   
"z)GenBasicTest.test_multi_future_exceptionsc                 C   r)   )Nc                   S   s   t  r   r   r   r   r   r   r   r+         z.GenBasicTest.test_sync_raise_return.<locals>.fr-   r1   r   r   r   test_sync_raise_return   r3   z#GenBasicTest.test_sync_raise_returnc                 C   r)   )Nc                   s   s    t jV  t  r   r%   r   r   r   r   r+         z/GenBasicTest.test_async_raise_return.<locals>.fr-   r1   r   r   r   test_async_raise_return   s   
z$GenBasicTest.test_async_raise_returnc                 C   &   t jdd }| d| j| d S )Nc                   S   
   t drA   r~   r   r   r   r   r+         
z4GenBasicTest.test_sync_raise_return_value.<locals>.frB   r   r.   rQ   r/   r0   r1   r   r   r   test_sync_raise_return_value   rF   z)GenBasicTest.test_sync_raise_return_valuec                 C   r   )Nc                   S   r   rG   r~   r   r   r   r   r+     r   z:GenBasicTest.test_sync_raise_return_value_tuple.<locals>.frH   r   r1   r   r   r   "test_sync_raise_return_value_tuple  rF   z/GenBasicTest.test_sync_raise_return_value_tuplec                 C   r   )Nc                   s       t jV  t drA   r%   r   r   r   r   r+   
     
z5GenBasicTest.test_async_raise_return_value.<locals>.frB   r   r1   r   r   r   test_async_raise_return_value	     
z*GenBasicTest.test_async_raise_return_valuec                 C   r   )Nc                   s   r   rG   r%   r   r   r   r   r+     r   z;GenBasicTest.test_async_raise_return_value_tuple.<locals>.frH   r   r1   r   r   r   #test_async_raise_return_value_tuple  r   z0GenBasicTest.test_async_raise_return_value_tupleN)$__name__
__module____qualname__r   r.   r   r   r"   r(   r2   r;   r>   rE   rJ   rM   rN   rV   r\   rb   rd   r	   r   rj   ro   rq   rs   rt   ru   r|   r}   r   r   r   r   r   r   r   r   r   r   r      sV    



	






r   c                       sR  e Zd Z fddZ fddZdd Zdd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zeed-ej  k od.k n  d/d0d1 Zd2d3 Z ed4d5 Z!  Z"S )6GenCoroutineTestc                    s   d| _ t   d S )NF)finishedsupersetUprT   	__class__r   r   r     s   zGenCoroutineTest.setUpc                    s   t    | js
J d S r   )r   tearDownr   rT   r   r   r   r   "  s   
zGenCoroutineTest.tearDownc                 C   sJ   d| _ dd }t|}| |j|j | |j|j | |j| d S )NTc                   s   rK   r   r   r   r   r   r   r+   )     z+GenCoroutineTest.test_attributes.<locals>.f)r   r   r.   rQ   r   r   assertIs__wrapped__r   r+   coror   r   r   test_attributes&  s   
z GenCoroutineTest.test_attributesc                 C   sN   d| _ dd }t|}| t| | t| | t|  d S )NTc                   s   rK   r   r   r   r   r   r   r+   4  r   z6GenCoroutineTest.test_is_coroutine_function.<locals>.f)r   r   r.   ZassertFalseZis_coroutine_functionrk   r   r   r   r   test_is_coroutine_function1  s   
z+GenCoroutineTest.test_is_coroutine_functionc                 c   .    t jdd }| V }| |d d| _d S )Nc                   S   r   rA   r~   r   r   r   r   r+   >  r   z0GenCoroutineTest.test_sync_gen_return.<locals>.frB   Tr   r.   rQ   r   r   r+   r   r   r   r   test_sync_gen_return<     

z%GenCoroutineTest.test_sync_gen_returnc                 c   r   )Nc                   s   r   rA   r%   r   r   r   r   r+   H  r   z1GenCoroutineTest.test_async_gen_return.<locals>.frB   Tr   r   r   r   r   test_async_gen_returnF     

z&GenCoroutineTest.test_async_gen_returnc                 c   r   )Nc                   S   s   dS rA   r   r   r   r   r   r+   S  r,   z,GenCoroutineTest.test_sync_return.<locals>.frB   Tr   r   r   r   r   test_sync_returnQ  r   z!GenCoroutineTest.test_sync_returnc                 c   r   )Nc                   s   s    t jV  dS rA   r   r   r   r   r   r+   ]  r    z-GenCoroutineTest.test_async_return.<locals>.frB   Tr   r   r   r   r   test_async_return[  r   z"GenCoroutineTest.test_async_returnc                 #   s2    t j fdd}| V } |d d _d S )Nc                   3   s    	 dS )NTrB   )r   Taskr/   add_callbackr   rT   r   r   r+   k  s   z3GenCoroutineTest.test_async_early_return.<locals>.frB   Tr   r   r   rT   r   test_async_early_returnf  s   
z(GenCoroutineTest.test_async_early_returnc                 #   s:    t jdd   fdd}| V }| |d d| _d S )Nc                   s   r   rA   r%   r   r   r   r   f1w  r   z-GenCoroutineTest.test_async_await.<locals>.f1c                     s     I d H } | S r   r   r   r   r   r   f2     z-GenCoroutineTest.test_async_await.<locals>.f2rB   Tr   r   r   r   r   r   r   test_async_awaitu  s   

z!GenCoroutineTest.test_async_awaitc                 c   s(    dd }| V }|  |d d| _d S )Nc                     s   dd l } | dI d H  dS )Nr   rB   )asynciosleep)r   r   r   r   r+     s   z3GenCoroutineTest.test_asyncio_sleep_zero.<locals>.frB   T)rQ   r   r   r   r   r   test_asyncio_sleep_zero  s
   
z(GenCoroutineTest.test_asyncio_sleep_zeroc                 #   sR    t jdd   fdd}t jdd }| | gV }| |ddg d	| _d S )
Nc                   s   rK   r   r   r   r   r   r   r     rL   zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f1c                      s     I d H  dS rA   r   r   r   r   r   r     r   zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f2c                   s   r   )N+   r%   r   r   r   r   f3  r   zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f3rB   r   Tr   )r   r   r   rS   r   r   r   *test_async_await_mixed_multi_native_future  s   


z;GenCoroutineTest.test_async_await_mixed_multi_native_futurec                 c   s8    dd }t tjdd| V }| |d d| _d S )Nc                      s   dS rA   r   r   r   r   r   r     s   z4GenCoroutineTest.test_async_with_timeout.<locals>.f1r$   )hoursrB   T)r   with_timeoutdatetime	timedeltarQ   r   )r   r   r   r   r   r   test_async_with_timeout  s
   
z(GenCoroutineTest.test_async_with_timeoutc                 c   .    t jdd }| V }| |d  d| _d S )Nc                   S   r*   r   r   r   r   r   r   r+     r,   z5GenCoroutineTest.test_sync_return_no_value.<locals>.fTr   r   r   r   r   test_sync_return_no_value  r   z*GenCoroutineTest.test_sync_return_no_valuec                 c   r   )Nc                   s   rK   r   r   r   r   r   r   r+     r    z6GenCoroutineTest.test_async_return_no_value.<locals>.fTr   r   r   r   r   test_async_return_no_value  s   

z+GenCoroutineTest.test_async_return_no_valuec                 c   P    t jdd }| }| t |V  W d    n1 sw   Y  d| _d S )Nc                   S   r5   r6   r   r   r   r   r   r+     r7   z+GenCoroutineTest.test_sync_raise.<locals>.fTr   r.   r9   r:   r   r   r+   futurer   r   r   test_sync_raise  s   

z GenCoroutineTest.test_sync_raisec                 c   r   )Nc                   s   r<   r6   r   r   r   r   r   r+     r=   z,GenCoroutineTest.test_async_raise.<locals>.fTr   r   r   r   r   test_async_raise  s   

z!GenCoroutineTest.test_async_raisec                 #   sb    t jdd  t j fdd}| }| t |V  W d    n1 s'w   Y  d| _d S )Nc                   S   r5   r6   r   r   r   r   r   r     r7   z>GenCoroutineTest.test_replace_yieldpoint_exception.<locals>.f1c                   3   s&    z  V  W d S  t y   t w r   )r:   KeyErrorr   r   r   r   r        z>GenCoroutineTest.test_replace_yieldpoint_exception.<locals>.f2T)r   r.   r9   r   r   )r   r   r   r   r   r   !test_replace_yieldpoint_exception  s   

z2GenCoroutineTest.test_replace_yieldpoint_exceptionc                 #   s@    t jdd  t j fdd}| V }| |d d| _d S )Nc                   S   r5   r6   r   r   r   r   r   r     r7   z>GenCoroutineTest.test_swallow_yieldpoint_exception.<locals>.f1c                   3   s*    z  V  W d S  t y   tdw rA   )r:   r   r   r   r   r   r   r     s   
z>GenCoroutineTest.test_swallow_yieldpoint_exception.<locals>.f2rB   Tr   r   r   r   r   !test_swallow_yieldpoint_exception  s   

z2GenCoroutineTest.test_swallow_yieldpoint_exceptionc                 #   s    g  t j fdd}t }|d  |d||d|gV  | d d g  |dt j|dt jgV  | d d d| _g  |dt j|d|gV  | d d	 d S )
Nc                 3   s$    t dD ]
} |  |V  qd S )N   )r   append)nameZ	yieldabler   Zcallsr   r   r+     s
   
z'GenCoroutineTest.test_moment.<locals>.fab Z
aaaaabbbbbZ
abababababTZ
abbbbbaaaa)r   r.   r   
set_resultrQ   joinr   r   )r   r+   Z	immediater   r   r   test_moment  s   
zGenCoroutineTest.test_momentc                 c   s    t dV  d| _d S )N{Gz?T)r   r   r   rT   r   r   r   
test_sleep#  s   
zGenCoroutineTest.test_sleepc              
   #   s    G dd dt  tj fdd}z|dV  W n   y9 } z| t|d | |j W Y d }~nd }~ww z|dV  W n   ya } z| t|d | |j W Y d }~nd }~ww d	| _d S )
Nc                   @      e Zd ZdS )zIGenCoroutineTest.test_py3_leak_exception_context.<locals>.LeakedExceptionNr   r   r   r   r   r   r   LeakedException*      r   c                    s    | r   r   )	iterationr   r   r   inner-  r   z?GenCoroutineTest.test_py3_leak_exception_context.<locals>.innerr$   1rI   2T)	Exceptionr   r.   rQ   rx   ZassertIsNone__context__r   )r   r   r!   r   r   r   test_py3_leak_exception_context(  s&   
z0GenCoroutineTest.test_py3_leak_exception_contextrP   )rP      z#asyncio.Future has reference cyclesc                    sN   t jfdd t j fdd}jj|dd  d  d_d S )Nc                  3   sB    G dd dt } |  }t| _dd }t| V  td)Nc                   @   r   )zGGenCoroutineTest.test_coroutine_refcounting.<locals>.inner.<locals>.FooNr   r   r   r   r   FooH  r   r   c                   S   r*   r   r   r   r   r   r   dummyN     zIGenCoroutineTest.test_coroutine_refcounting.<locals>.inner.<locals>.dummyz
Some error)objectweakrefref	local_refr   r.   
ValueError)r   Z	local_varr   rT   r   r   r   F  s   z:GenCoroutineTest.test_coroutine_refcounting.<locals>.innerc                   3   s&    z  V  W d S  t y   Y d S w r   )r   r   )r   r   r   inner2T  r   z;GenCoroutineTest.test_coroutine_refcounting.<locals>.inner2rP   )timeoutT)r   r.   r/   r0   r   r   r   )r   r   r   )r   r   r   test_coroutine_refcounting?  s   
z+GenCoroutineTest.test_coroutine_refcountingc                 C   sx   d| _ t }| |j|  |d dd }t| }| |tj	 dt
|jjd f }t|}| || d S )NTc                   s   rK   r   r   r   r   r   r   r+   g  r   z:GenCoroutineTest.test_asyncio_future_debug_info.<locals>.fzcreated at %s:%drP   )r   r   get_event_loopZ
addCleanupZ	set_debugZ	get_debugr   r.   ZassertIsInstancer   __file____code__co_firstlinenoreprZassertIn)r   Zasyncio_loopr+   r   expectedactualr   r   r   test_asyncio_future_debug_info`  s   
z/GenCoroutineTest.test_asyncio_future_debug_infoc                 c   s<    t jdd }t| | V }| |ddg d| _d S )Nc                   s   r   r#   r%   r   r   r   r   r+   v  r   z/GenCoroutineTest.test_asyncio_gather.<locals>.fr$   T)r   r.   r   ZgatherrQ   r   )r   r+   retr   r   r   test_asyncio_gatherr  s   

z$GenCoroutineTest.test_asyncio_gather)#r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   unittestskipIfsysversion_infor   r   r   __classcell__r   r   r   r   r     sb    
	


	







	







r   c                   @      e Zd Zejdd ZdS )GenCoroutineSequenceHandlerc                 c   s<    t jV  | d t jV  | d t jV  | d d S Nr   r   3)r   r   writefinishrT   r   r   r   get  s   

zGenCoroutineSequenceHandler.getNr   r   r   r   r.   r  r   r   r   r   r         r   c                   @   r   )%GenCoroutineUnfinishedSequenceHandlerc                 c   s<    t jV  | d t jV  | d t jV  | d d S r   )r   r   r  rT   r   r   r   r    s   

z)GenCoroutineUnfinishedSequenceHandler.getNr  r   r   r   r   r    r  r  c                   @   s(   e Zd Zejdd Zejdd ZdS )UndecoratedCoroutinesHandlerc                 c   s     g | _ tjV  | j d d S )Nr   )chunksr   r   r   rT   r   r   r   prepare  s   z$UndecoratedCoroutinesHandler.preparec                 c   s@    | j d tjV  | j d tjV  | d| j  d S )Nr   r  r   )r	  r   r   r   r  r   rT   r   r   r   r    s   z UndecoratedCoroutinesHandler.getNr   r   r   r   r.   r
  r  r   r   r   r   r    s
    
r  c                   @   s"   e Zd Zejdd Zdd ZdS )AsyncPrepareErrorHandlerc                 c   s    t jV  td)N  )r   r   r   rT   r   r   r   r
    r   z AsyncPrepareErrorHandler.preparec                 C   s   |  d d S )Nok)r  rT   r   r   r   r    s   zAsyncPrepareErrorHandler.getNr  r   r   r   r   r    s    
r  c                   @   s   e Zd Zdd ZdS )NativeCoroutineHandlerc                    s    t dI d H  | d d S )Nr   r  )r   r   r  rT   r   r   r   r    s   zNativeCoroutineHandler.getN)r   r   r   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	d
 Zdd ZdS )
GenWebTestc                 C   s&   t dtfdtfdtfdtfdtfgS )N/coroutine_sequence/coroutine_unfinished_sequence/undecorated_coroutine/async_prepare_error/native_coroutine)r   r   r  r  r  r  rT   r   r   r   get_app  s   zGenWebTest.get_appc                 C      |  d}| |jd d S )Nr     123fetchrQ   bodyr   responser   r   r   test_coroutine_sequence_handler     
z*GenWebTest.test_coroutine_sequence_handlerc                 C   r  )Nr  r  r  r  r   r   r   *test_coroutine_unfinished_sequence_handler  r  z5GenWebTest.test_coroutine_unfinished_sequence_handlerc                 C   r  )Nr  r  r  r  r   r   r   test_undecorated_coroutines  r  z&GenWebTest.test_undecorated_coroutinesc                 C   r  )Nr  r  )r  rQ   coder  r   r   r    test_async_prepare_error_handler  r  z+GenWebTest.test_async_prepare_error_handlerc                 C   s*   |  d}| |jd | |jd d S )Nr     s   ok)r  rQ   r"  r  r  r   r   r   test_native_coroutine_handler  s   
z(GenWebTest.test_native_coroutine_handlerN)	r   r   r   r  r  r   r!  r#  r%  r   r   r   r   r    s    r  c                   @   s`   e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
dS )WithTimeoutTestc                 c   sL    |  tj ttjddt V  W d    d S 1 sw   Y  d S )N皙?seconds)r9   r   TimeoutErrorr   r   r   r   rT   r   r   r   test_timeout  s   "zWithTimeoutTest.test_timeoutc                 #   sL    t   | jtjdd fdd ttjdd V }| |d d S )Nr'  r(  c                      s
     dS )Nasdf)r   r   r   r   r   <lambda>     
 z?WithTimeoutTest.test_completes_before_timeout.<locals>.<lambda>  r,  )r   r/   add_timeoutr   r   r   r   rQ   r   r   r-  r   test_completes_before_timeout  s   z-WithTimeoutTest.test_completes_before_timeoutc                 #   sl    t   | jtjdd fdd | t ttjdd V  W d    d S 1 s/w   Y  d S )Nr'  r(  c                      s     t S r   )set_exceptionr:   r   r-  r   r   r.    s    z;WithTimeoutTest.test_fails_before_timeout.<locals>.<lambda>r0  )	r   r/   r1  r   r   r9   r:   r   r   rT   r   r-  r   test_fails_before_timeout  s   

"z)WithTimeoutTest.test_fails_before_timeoutc                 c   s8    t  }|d ttjdd|V }| |d d S )Nr,  r0  r(  )r   r   r   r   r   r   rQ   )r   r   r   r   r   r   test_already_resolved  s
   
z%WithTimeoutTest.test_already_resolvedc              	   c   s    t d6}| tj t| j |tj	dV  W d    n1 s'w   Y  W d    d S W d    d S 1 s?w   Y  d S )Nr$   r'  )
r   ThreadPoolExecutorr9   r   r*  r   r/   rg   submitr   r   executorr   r   r   test_timeout_concurrent_future  s   "z.WithTimeoutTest.test_timeout_concurrent_futurec                 c   sb    t d!}dd }||}|  ttjdd|V  W d    d S 1 s*w   Y  d S )Nr$   c                   S   r*   r   r   r   r   r   r   r     r   z?WithTimeoutTest.test_completed_concurrent_future.<locals>.dummyr0  r(  )r   r6  r7  r   r   r   r   r   )r   r9  r   r+   r   r   r    test_completed_concurrent_future  s   
"z0WithTimeoutTest.test_completed_concurrent_futurec                 c   sR    t d}ttjdd|dd V  W d    d S 1 s"w   Y  d S )Nr$   r0  r(  c                   S   s
   t dS )Nr   )rg   r   r   r   r   r   r.    r/  z?WithTimeoutTest.test_normal_concurrent_future.<locals>.<lambda>)r   r6  r   r   r   r   r7  r8  r   r   r   test_normal_concurrent_future  s   
"z-WithTimeoutTest.test_normal_concurrent_futureN)r   r   r   r   r+  r2  r4  r5  r:  r;  r<  r   r   r   r   r&    s    


	


r&  c                   @   sP   e Zd Zedd Zedd Zdd Zedd Zed	d
 Zedd Z	dS )WaitIteratorTestc                 C   sx   t  }| | d | t t jt t d}W d    n1 s%w   Y  | |jd d | |j	d d d S )Nzempty generator iterated)rY   bad nil current indexbad nil current future)
r   WaitIteratorrk   doner9   r   r   rQ   current_indexcurrent_future)r   gr   r   r   test_empty_iterator  s   z$WaitIteratorTest.test_empty_iteratorc           	      c   s   t  }t  }t  }|d |d |d t|||}d}| s}| V }|dkrD| |jd | |j	| | |d n1|dkr]| |jd | |j	| | |d n|dkru| |jd | |j	| | |d |d7 }| r&| |jd d | |j	d d tj||d	}| s| V }|jd
kr| 
|j	|ko|dkd n|jdkr| 
|j	|ko|dkd n	| d|j |d7 }| r| |jd d | |j	d d d S )N   rB   T   r   r$   rI   r>  r?  )r   r   r   z"WaitIterator dict status incorrectr   zgot bad WaitIterator index {})r   r   r   r@  rA  nextrQ   rB  r   rC  rk   Zfailformat)	r   r   r   r   rD  r   rdgZdrr   r   r   test_already_done)  sZ   






z"WaitIteratorTest.test_already_donec                 C   s|   |dkr|d  d n|dkr|d t  n|dkr+|d  d |d  d	 |dk r<| j| j|d | d S d S )
NrP   rI   rF  r   r      r$   rB   rG  )r   r3  r:   r/   r   finish_coroutines)r   r   r   r   r   r   rN  _  s   z"WaitIteratorTest.finish_coroutinesc                 c   s    t  t  t  t  g}| d| tj| }d}| s|z| V }W n ty6   | |j|d d Y n<w |dkrK| 	|dd | 	|j
dd n'|dkr_| 	|dd | 	|j
dd n|d	krr| 	|d
d | 	|j
d	d |d7 }| rd S d S )Nr   zexception future invalidrF  iterator value incorrectrI   wrong indexrB   r$   rP   rG  )r   rN  r   r@  rA  rH  r:   r   rC  rQ   rB  )r   r   rD  r   rJ  r   r   r   test_iteratork  s,   
zWaitIteratorTest.test_iteratorc                 #   sN    t  t  t  t  g d  d_ fdd}| V  j d S )Nr   Fc                     s   d} t j  }z(|2 z"3 d H W }| dkr%|dd |jdd ntd| d7 } q6 W n ty=   | d7 } Y nw |2 z83 d H W }| dkrZ|dd |jdd n| d	krn|d
d |jd	d ntd|  | d7 } q@6 d_d S )Nr   rF  rO  rI   rP  z!expected exception on iteration 1r$   rB   rP   rG  zdidn't expect iteration %dT)r   r@  rQ   rB  r   r:   r   )r   rD  rJ  r   r   r   r   r+     s2   




z5WaitIteratorTest.test_iterator_async_await.<locals>.f)r   rN  r   rk   r1   r   rR  r   test_iterator_async_await  s   z*WaitIteratorTest.test_iterator_async_awaitc                 c   s,    t tjddt t d V  d S )Nr'  r(  r   )r   r   r   r   r@  r   rH  rT   r   r   r   test_no_ref  s   
zWaitIteratorTest.test_no_refN)
r   r   r   r   rE  rL  rN  rQ  rS  rT  r   r   r   r   r=    s    


5

$r=  c                   @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )RunnerGCTestc                 C   s   t  dko
tjdkS )NPyPyr   )platformpython_implementationr   r   rT   r   r   r   is_pypy3  s   zRunnerGCTest.is_pypy3c                 #   sF    d gfdd t j fdd}t tjdd| V  d S )Nc                      s   t d  d  d d S )NrI   r   {   )gccollectr   r   )weakref_scoper   r   callback  s   
z&RunnerGCTest.test_gc.<locals>.callbackc                  3   s,    t  } t| d< j  | V  d S )Nr   )r   r   r   r/   r   Zfutr^  r   r]  r   r   tester  s
   
z$RunnerGCTest.test_gc.<locals>.tester皙?r(  )r   r.   r   r   r   )r   ra  r   r`  r   test_gc  s   zRunnerGCTest.test_gcc                    s   |   }g g tjfdd tj fdd}|| |  t  | d  d  | t	d | 
 sG| d d  d S d S )Nc                	   3   s*    z	 t dV   d q d  w NTgMbP?r   r   r   r   r   r   r   infinite_coro  s   
z9RunnerGCTest.test_gc_infinite_coro.<locals>.infinite_coroc                  3   s.      } | | _ t|  tdV  d S Nrb  )	_refcycler   r   r   r   r   r_  )rf  wfutr   r   do_something  s
   z8RunnerGCTest.test_gc_infinite_coro.<locals>.do_somethingr   rI   )get_new_ioloopr   r.   r0   closer[  r\  r   assertGreaterEquallenrY  r   looprj  r   )rf  r   ri  r   test_gc_infinite_coro  s   	
z"RunnerGCTest.test_gc_infinite_coroc                    s   dd l  dd |  }g g tj fdd}|| tdd |  t  W d    n1 s9w   Y  | 	d  d  | 
td |  s]| 	d	 d  d S d S )
Nr   c              	      s.   z	 t dI d H  | d q| d  w rd  re  r   r   r   r   rf    s   
z@RunnerGCTest.test_gc_infinite_async_await.<locals>.infinite_coroc                  3   s:       } | | _t|  tdV  d S rg  )r   Zcreate_taskrh  r   r   r   r   r   r_  r   rf  r   ri  r   r   rj    s
   z?RunnerGCTest.test_gc_infinite_async_await.<locals>.do_somethingr   z$Task was destroyed but it is pendingrI   rk  )r   rl  r   r.   r0   r   rm  r[  r\  r   rn  ro  rY  rp  r   rs  r   test_gc_infinite_async_await  s"   	

z)RunnerGCTest.test_gc_infinite_async_awaitc                 C   s4   t jdd }|  }||}| |d d g d S )Nc                  s   s     t t jt jgV } t | r   )r   multir   r   r   r   r   r   wait_a_moment  s   
z5RunnerGCTest.test_multi_moment.<locals>.wait_a_moment)r   r.   rl  r0   rQ   )r   rv  rq  r   r   r   r   test_multi_moment  s
   

zRunnerGCTest.test_multi_momentN)	r   r   r   rY  r   rc  rr  rt  rw  r   r   r   r   rU    s    
$$rU  ctx_varzcontextvars module not presentc                   @   sd   e Zd Zdd Zejdd Zdd Zejdd Zd	d
 Z	e
dd Ze
dd Ze
dd ZdS )ContextVarsTestc                    s    t | | |I d H  d S r   rx  setr   r&   r   r   r   native_root'  s   
zContextVarsTest.native_rootc                 c   s"    t | d V  | |V  d S r   rz  r&   r   r   r   gen_root+  s   
zContextVarsTest.gen_rootc                    s    t  I d H   t  t  jd  fddI d H   t  t	 d  fddI d H   t  d S )Nc                           jS r   runthread_innerr   ctxr   r'   r   r   r.  8      z'ContextVarsTest.inner.<locals>.<lambda>c                      r~  r   r  r   r  r   r   r.  =  r  )
rQ   rx  r  	gen_innercontextvarsZcopy_contextr/   Zrun_in_executorr   r   r&   r   r  r   r   1  s    
zContextVarsTest.innerc                 c   s,    |  t | d V  |  t | d S r   rQ   rx  r  r&   r   r   r   r  A  s   zContextVarsTest.gen_innerc                 C   s   |  t | d S r   r  r&   r   r   r   r  G  s   zContextVarsTest.thread_innerc                 c   s,    |  d|  d| d| dgV  d S )Nr$   rI   rP      )r|  r}  rT   r   r   r   test_propagateJ  s   
zContextVarsTest.test_propagatec                 c   s     t d}d V  t | d S r#   )rx  r{  reset)r   tokenr   r   r   
test_resetU  s   
zContextVarsTest.test_resetc                 #   s*    d fdd}t  | V  d S )N
   c                      s     t  d S r   r  r   r&   r   r   native_async_functiona  s   zgContextVarsTest.test_propagate_to_first_yield_with_native_async_function.<locals>.native_async_function)rx  r{  )r   r  r   r&   r   8test_propagate_to_first_yield_with_native_async_function]  s
   
zHContextVarsTest.test_propagate_to_first_yield_with_native_async_functionN)r   r   r   r|  r   r.   r}  r   r  r  r   r  r  r  r   r   r   r   ry  %  s    




ry  __main__)3r   Z
concurrentr   r[  r   rW  r   rg   r   r   Ztornado.concurrentr   Ztornado.logr   Ztornado.testingr   r   r   r   Ztornado.test.utilr	   r
   Ztornado.webr   r   r   tornador   r  ImportErrortypingTYPE_CHECKINGr   r   r   r   r   r  r  r  r  r  r&  r=  rU  Z
ContextVarrx  r   ry  r   mainr   r   r   r   <module>   sZ     }  h
%@ l
B