o
    h-                     @   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)self
iterationsargi r   I/var/www/vscode/kcb/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ZeroDivisionErrorr0   r1   r2   r   r   r   test_exception_phase1<   s   
z"GenBasicTest.test_exception_phase1c                 C   r5   )Nc                   s       t jV  dd  d S r7   r   r   r   r   r   r,   D      z-GenBasicTest.test_exception_phase2.<locals>.fr9   r2   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/   r:   BadYieldErrorr0   r1   r2   r   r   r   test_bogus_yieldK      
zGenBasicTest.test_bogus_yieldc                 C   r@   )Nc                   s   rA   Nr%      r   r   r   r   r   r,   S   rD   z.GenBasicTest.test_bogus_yield_tuple.<locals>.frE   r2   r   r   r   test_bogus_yield_tupleR   rH   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.   r2   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   rD   z!GenBasicTest.test_none.<locals>.fr.   r2   r   r   r   	test_nonea   r4   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%   rK      )r)   assertEqualresultsr   r   r   r,   i      z"GenBasicTest.test_multi.<locals>.fr.   r2   r   rV   r   
test_multih      zGenBasicTest.test_multic                    rQ   )Nc                  3   s4    t  d ddV }  | t ddd d S )Nr%   rK   foobarrR   )dictr)   rS   rT   rV   r   r   r,   q      z'GenBasicTest.test_multi_dict.<locals>.fr.   r2   r   rV   r   test_multi_dictp   rY   zGenBasicTest.test_multi_dictc                    rQ   )Nc                  3   s6    t  dd ddgV }  | ddg d S )NrR   v1r%   v2)r   multi_futurer   rS   	responsesrV   r   r   r,   y   s
   z*GenBasicTest.test_multi_delayed.<locals>.fr.   r2   r   rV   r   test_multi_delayedx      zGenBasicTest.test_multi_delayedc                    rQ   )Nc                  3   s>    t t dd dddV }  | tddd d S )NrR   r`   r%   ra   rZ   )r   rb   r]   r   rS   rc   rV   r   r   r,      s
   z/GenBasicTest.test_multi_dict_delayed.<locals>.fr.   r2   r   rV   r   test_multi_dict_delayed   rf   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   
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listr]   )r   r(   yr   r   r   test_multi_empty   s
   zGenBasicTest.test_multi_emptyc                 c   s    |  dV }| |d d S r$   r    rS   r   r   r   r   test_future   s   zGenBasicTest.test_futurec                 c   s,    |  d|  dgV }| |ddg d S )Nr%   rK   rt   r   rU   r   r   r   test_multi_future   rW   zGenBasicTest.test_multi_futurec                 c   s:    |  d}|  d||  d|gV }| |g d d S )NrK   r%   rR   )r%   rK   rR   rK   rt   )r   r,   rU   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%   rK   rZ   )r]   r    rS   rv   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 2rK   )quiet_exceptions)r   r   r:   RuntimeErrorr   Multir#   rS   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 rz   )r   r   r:   r|   r#   rS   r~   r   r    r   rb   r   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.   r2   r   r   r   test_sync_raise_return   r4   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.   r2   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rB   r   r   r   r   r   r,         
z4GenBasicTest.test_sync_raise_return_value.<locals>.frC   r   r/   rS   r0   r1   r2   r   r   r   test_sync_raise_return_value   rH   z)GenBasicTest.test_sync_raise_return_valuec                 C   r   )Nc                   S   r   rI   r   r   r   r   r   r,     r   z:GenBasicTest.test_sync_raise_return_value_tuple.<locals>.frJ   r   r2   r   r   r   "test_sync_raise_return_value_tuple  rH   z/GenBasicTest.test_sync_raise_return_value_tuplec                 C   r   )Nc                   s       t jV  t drB   r&   r   r   r   r   r,   
     
z5GenBasicTest.test_async_raise_return_value.<locals>.frC   r   r2   r   r   r   test_async_raise_return_value	     
z*GenBasicTest.test_async_raise_return_valuec                 C   r   )Nc                   s   r   rI   r&   r   r   r   r   r,     r   z;GenBasicTest.test_async_raise_return_value_tuple.<locals>.frJ   r   r2   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)   r3   r<   r?   rG   rL   rO   rP   rX   r_   re   rg   r	   r   rn   rs   ru   rw   rx   ry   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setUprV   	__class__r   r   r     s   zGenCoroutineTest.setUpc                    s   t    | js
J d S r   )r   tearDownr   rV   r   r   r   r   "  s   
zGenCoroutineTest.tearDownc                 C   sJ   d| _ dd }t|}| |j|j | |j|j | |j| d S )NTc                   s   rM   r   r   r   r   r   r   r,   )     z+GenCoroutineTest.test_attributes.<locals>.f)r   r   r/   rS   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   rM   r   r   r   r   r   r   r,   4  r   z6GenCoroutineTest.test_is_coroutine_function.<locals>.f)r   r   r/   assertFalseis_coroutine_functionro   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   rB   r   r   r   r   r   r,   >  r   z0GenCoroutineTest.test_sync_gen_return.<locals>.frC   Tr   r/   rS   r   r   r,   r   r   r   r   test_sync_gen_return<     

z%GenCoroutineTest.test_sync_gen_returnc                 c   r   )Nc                   s   r   rB   r&   r   r   r   r   r,   H  r   z1GenCoroutineTest.test_async_gen_return.<locals>.frC   Tr   r   r   r   r   test_async_gen_returnF     

z&GenCoroutineTest.test_async_gen_returnc                 c   r   )Nc                   S   s   dS rB   r   r   r   r   r   r,   S  r-   z,GenCoroutineTest.test_sync_return.<locals>.frC   Tr   r   r   r   r   test_sync_returnQ  r   z!GenCoroutineTest.test_sync_returnc                 c   r   )Nc                   s   s    t jV  dS rB   r   r   r   r   r   r,   ]  r!   z-GenCoroutineTest.test_async_return.<locals>.frC   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 )NTrC   )r   Taskr0   add_callbackr   rV   r   r   r,   k  s   z3GenCoroutineTest.test_async_early_return.<locals>.frC   Tr   r   r   rV   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   rB   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>.f2rC   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   rC   )asynciosleep)r   r   r   r   r,     s   z3GenCoroutineTest.test_asyncio_sleep_zero.<locals>.frC   T)rS   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   rM   r   r   r   r   r   r   r     rN   zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f1c                      s     I d H  dS rB   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>.f3rC   r   Tr   )r   r   r   rU   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 rB   r   r   r   r   r   r     s   z4GenCoroutineTest.test_async_with_timeout.<locals>.f1r%   )hoursrC   T)r   with_timeoutdatetime	timedeltarS   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   rM   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   r6   r7   r   r   r   r   r   r,     r8   z+GenCoroutineTest.test_sync_raise.<locals>.fTr   r/   r:   r;   r   r   r,   futurer   r   r   test_sync_raise  s   

z GenCoroutineTest.test_sync_raisec                 c   r   )Nc                   s   r=   r7   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   r6   r7   r   r   r   r   r   r     r8   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/   r:   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   r6   r7   r   r   r   r   r   r     r8   z>GenCoroutineTest.test_swallow_yieldpoint_exception.<locals>.f1c                   3   s*    z  V  W d S  t y   tdw rB   )r;   r   r   r   r   r   r   r     s   
z>GenCoroutineTest.test_swallow_yieldpoint_exception.<locals>.f2rC   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)name	yieldabler   callsr   r   r,     s
   
z'GenCoroutineTest.test_moment.<locals>.fab 
aaaaabbbbb
abababababT
abbbbbaaaa)r   r/   r   
set_resultrS   joinr   r   )r   r,   	immediater   r   r   test_moment  s   
zGenCoroutineTest.test_momentc                 c   s    t dV  d| _d S )N{Gz?T)r   r   r   rV   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%   1rK   2T)	Exceptionr   r/   rS   r~   assertIsNone__context__r   )r   r   r"   r   r   r   test_py3_leak_exception_context(  s&   
z0GenCoroutineTest.test_py3_leak_exception_contextrR   )rR      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   	local_varr   rV   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>.inner2rR   )timeoutT)r   r/   r0   r1   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   rM   r   r   r   r   r   r   r,   g  r   z:GenCoroutineTest.test_asyncio_future_debug_info.<locals>.fzcreated at %s:%drR   )r   r   get_event_loop
addCleanup	set_debug	get_debugr   r/   assertIsInstancer   __file____code__co_firstlinenoreprassertIn)r   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   gatherrS   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finishrV   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  rV   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   rV   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   rV   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   rV   r   r   r   r!    r   z AsyncPrepareErrorHandler.preparec                 C   s   |  d d S )Nok)r  rV   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  rV   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&  rV   r   r   r   get_app  s   zGenWebTest.get_appc                 C      |  d}| |jd d S )Nr(     123fetchrS   bodyr   responser   r   r   test_coroutine_sequence_handler     
z*GenWebTest.test_coroutine_sequence_handlerc                 C   r.  )Nr)  r/  r0  r3  r   r   r   *test_coroutine_unfinished_sequence_handler  r6  z5GenWebTest.test_coroutine_unfinished_sequence_handlerc                 C   r.  )Nr*  r/  r0  r3  r   r   r   test_undecorated_coroutines  r6  z&GenWebTest.test_undecorated_coroutinesc                 C   r.  )Nr+  r$  )r1  rS   coder3  r   r   r    test_async_prepare_error_handler  r6  z+GenWebTest.test_async_prepare_error_handlerc                 C   s*   |  d}| |jd | |jd d S )Nr,     s   ok)r1  rS   r9  r2  r3  r   r   r   test_native_coroutine_handler  s   
z(GenWebTest.test_native_coroutine_handlerN)	r   r   r   r-  r5  r7  r8  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)r:   r   TimeoutErrorr   r   r   r   rV   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>  rC  )r   r0   add_timeoutr   r   r   r   rS   r   r   rD  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   rD  r   r   rE    s    z;WithTimeoutTest.test_fails_before_timeout.<locals>.<lambda>rG  )	r   r0   rH  r   r   r:   r;   r   r   rV   r   rD  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 )NrC  rG  r?  )r   r   r   r   r   r   rS   )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   ThreadPoolExecutorr:   r   rA  r   r0   rj   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>.dummyrG  r?  )r   rM  rN  r   r   r   r   r   )r   rP  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%   rG  r?  c                   S   s
   t dS )Nr   )rj   r   r   r   r   r   rE    rF  z?WithTimeoutTest.test_normal_concurrent_future.<locals>.<lambda>)r   rM  r   r   r   r   rN  rO  r   r   r   test_normal_concurrent_future  s   
"z-WithTimeoutTest.test_normal_concurrent_futureN)r   r   r   r   rB  rI  rK  rL  rQ  rR  rS  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)r\   bad nil current indexbad nil current future)
r   WaitIteratorro   doner:   r   r   rS   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   rC   T   r   r%   rK   rU  rV  )r   r   r   z"WaitIterator dict status incorrectr   zgot bad WaitIterator index {})r   r   r   rW  rX  nextrS   rY  r   rZ  ro   failformat)	r   r   r   r   r[  r   rdg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 )
NrR   rK   r]  r   r      r%   rC   r^  )r   rJ  r;   r0   r   finish_coroutines)r   r   r   r   r   r   rg  _  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 invalidr]  iterator value incorrectrK   wrong indexrC   r%   rR   r^  )r   rg  r   rW  rX  r_  r;   r   rZ  rS   rY  )r   r   r[  r   rb  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   r]  rh  rK   ri  z!expected exception on iteration 1r%   rC   rR   r^  zdidn't expect iteration %dT)r   rW  rS   rY  r   r;   r   )r   r[  rb  r   r   r   r   r,     s2   




z5WaitIteratorTest.test_iterator_async_await.<locals>.f)r   rg  r   ro   r2   r   rk  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   rW  r   r_  rV   r   r   r   test_no_ref  s   
zWaitIteratorTest.test_no_refN)
r   r   r   r   r\  re  rg  rj  rl  rm  r   r   r   r   rT    s    


5

$rT  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  rV   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 )NrK   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   r0   r   futrw  r   rv  r   r   tester  s
   
z$RunnerGCTest.test_gc.<locals>.tester皙?r?  )r   r/   r   r   r   )r   r{  r   rz  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 Nr|  )	_refcycler   r   r   r   r   rx  )r  wfutr   r   do_something  s
   z8RunnerGCTest.test_gc_infinite_coro.<locals>.do_somethingr   rK   )get_new_ioloopr   r/   r1   closert  ru  r   assertGreaterEquallenrr  r   loopr  r   )r  r   r  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 r~  r  r   r   r   r   r    s   
z@RunnerGCTest.test_gc_infinite_async_await.<locals>.infinite_coroc                  3   s:       } | | _t|  tdV  d S r  )r   create_taskr  r   r   r   r   r   rx  r   r  r   r  r   r   r    s
   z?RunnerGCTest.test_gc_infinite_async_await.<locals>.do_somethingr   z$Task was destroyed but it is pendingrK   r  )r   r  r   r/   r1   r   r  rt  ru  r   r  r  rr  r  r   r  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/   r  r1   rS   )r   r  r  r   r   r   r   test_multi_moment  s
   

zRunnerGCTest.test_multi_momentN)	r   r   r   rr  r   r}  r  r  r  r   r   r   r   rn    s    
$$rn  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   r  setr   r'   r   r   r   native_root'  s   
zContextVarsTest.native_rootc                 c   s"    t | d V  | |V  d S r   r  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   rE  8      z'ContextVarsTest.inner.<locals>.<lambda>c                      r  r   r  r   r  r   r   rE  =  r  )
rS   r  r  	gen_innercontextvarscopy_contextr0   run_in_executorr   r   r'   r   r  r   r   1  s    
zContextVarsTest.innerc                 c   s,    |  t | d V  |  t | d S r   rS   r  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%   rK   rR      )r  r  rV   r   r   r   test_propagateJ  s   
zContextVarsTest.test_propagatec                 c   s     t d}d V  t | d S r$   )r  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)r  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   r  %  s    




r  __main__)3r   
concurrentr   rt  r   rp  r  rj   r   r  tornado.concurrentr   tornado.logr   tornado.testingr   r   r   r   tornado.test.utilr	   r
   tornado.webr   r   r   tornador   r  ImportErrortypingTYPE_CHECKINGr   r   r   r   r  r  r  r#  r&  r'  r=  rT  rn  
ContextVarr  r  r  r   mainr   r   r   r   <module>   sZ     }  h
%@ l
B