a
    xd-                     @   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y   dZY n0 d dlZejrd 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 )%    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|dS )z0Returns arg after a number of IOLoop iterations.N)ranger   momentReturn)selfZ
iterationsargi r   M/var/www/html/Ranjet/env/lib/python3.9/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&   s    zGenBasicTest.async_futurec                 c   s   t jV  |d S r   r   )r   er   r   r   async_exception+   s    zGenBasicTest.async_exceptionc                 c   s   t jV  t |d d S N   r   r   r   r   xr   r   r   add_one_async0   s    zGenBasicTest.add_one_asyncc                 C   s   t jdd }| j| d S )Nc                   S   s   d S r   r   r   r   r   r   f6   s    z%GenBasicTest.test_no_yield.<locals>.fr   	coroutineio_looprun_syncr   r(   r   r   r   test_no_yield5   s    
zGenBasicTest.test_no_yieldc                 C   s$   t jdd }| t| jj| d S )Nc                   S   s   dd  d S Nr#   r   r   r   r   r   r   r(   =   s    z-GenBasicTest.test_exception_phase1.<locals>.fr   r*   assertRaisesZeroDivisionErrorr+   r,   r-   r   r   r   test_exception_phase1<   s    
z"GenBasicTest.test_exception_phase1c                 C   s$   t jdd }| t| jj| d S )Nc                   s   s   t jV  dd  d S r/   r   r   r   r   r   r(   D   s    z-GenBasicTest.test_exception_phase2.<locals>.fr0   r-   r   r   r   test_exception_phase2C   s    
z"GenBasicTest.test_exception_phase2c                 C   s&   t jdd }| t j| jj| d S )Nc                   s   s
   dV  d S N*   r   r   r   r   r   r(   L   s    z(GenBasicTest.test_bogus_yield.<locals>.fr   r*   r1   ZBadYieldErrorr+   r,   r-   r   r   r   test_bogus_yieldK   s    
zGenBasicTest.test_bogus_yieldc                 C   s&   t jdd }| t j| jj| d S )Nc                   s   s
   dV  d S Nr#      r   r   r   r   r   r(   S   s    z.GenBasicTest.test_bogus_yield_tuple.<locals>.fr7   r-   r   r   r   test_bogus_yield_tupleR   s    
z#GenBasicTest.test_bogus_yield_tuplec                 C   s*   t jdd }| j| | j| d S )Nc                   s   s   t jV  d S r   r   r   r   r   r   r(   Z   s    z"GenBasicTest.test_reuse.<locals>.fr)   r-   r   r   r   
test_reuseY   s    
zGenBasicTest.test_reusec                 C   s   t jdd }| j| d S )Nc                   s   s
   d V  d S r   r   r   r   r   r   r(   b   s    z!GenBasicTest.test_none.<locals>.fr)   r-   r   r   r   	test_nonea   s    
zGenBasicTest.test_nonec                    s"   t j fdd} j| d S )Nc                  3   s*     d  dgV }  | ddg d S )Nr#   r;      )r'   assertEqualresultsr   r   r   r(   i   s    z"GenBasicTest.test_multi.<locals>.fr)   r-   r   rC   r   
test_multih   s    zGenBasicTest.test_multic                    s"   t j fdd} j| d S )Nc                  3   s2   t  d ddV }  | t ddd d S )Nr#   r;   Zfoobarr?   )dictr'   r@   rA   rC   r   r   r(   q   s    z'GenBasicTest.test_multi_dict.<locals>.fr)   r-   r   rC   r   test_multi_dictp   s    zGenBasicTest.test_multi_dictc                    s"   t j fdd} j| d S )Nc                  3   s4   t  dd ddgV }  | ddg d S )Nr?   v1r#   v2)r   multi_futurer   r@   	responsesrC   r   r   r(   y   s    z*GenBasicTest.test_multi_delayed.<locals>.fr)   r-   r   rC   r   test_multi_delayedx   s    zGenBasicTest.test_multi_delayedc                    s"   t j fdd} j| d S )Nc                  3   s<   t t dd dddV }  | tddd d S )Nr?   rI   r#   rJ   rE   )r   rK   rG   r   r@   rL   rC   r   r   r(      s    z/GenBasicTest.test_multi_dict_delayed.<locals>.fr)   r-   r   rC   r   test_multi_dict_delayed   s    z$GenBasicTest.test_multi_dict_delayedc                 c   s8   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>       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   s0   g V }|  t|t i V }|  t|t d S r   )
assertTrue
isinstancelistrG   )r   r&   yr   r   r   test_multi_empty   s    zGenBasicTest.test_multi_emptyc                 c   s   |  dV }| |d d S r"   r   r@   r   r   r   r   test_future   s    zGenBasicTest.test_futurec                 c   s*   |  d|  dgV }| |ddg d S )Nr#   r;   r\   r   rB   r   r   r   test_multi_future   s    zGenBasicTest.test_multi_futurec                 c   s8   |  d}|  d||  d|gV }| |g d d S )Nr;   r#   r?   )r#   r;   r?   r;   r\   )r   r(   rB   r   r   r   test_multi_future_duplicate   s    
z(GenBasicTest.test_multi_future_duplicatec                 c   s2   t | d| ddV }| |t ddd d S )Nr#   r;   rE   )rG   r   r@   r^   r   r   r   test_multi_dict_future   s    z#GenBasicTest.test_multi_dict_futurec              	   c   s,  t td^ | t4}t| td| tdgV  W d    n1 sP0    Y  W d    n1 sn0    Y  | t|j	d | t0 t| td| 
dgV  W d    n1 s0    Y  | t8 tj| td| tdgtdV  W d    n1 s0    Y  d S Nz!Multiple exceptions in yield listzerror 1zerror 2r;   )Zquiet_exceptions)r   r   r1   RuntimeErrorr   ZMultir!   r@   str	exceptionr   r   cmr   r   r   test_multi_exceptions   s&    B$z"GenBasicTest.test_multi_exceptionsc              	   c   s   t tdX | t.}| td| tdgV  W d    n1 sJ0    Y  W d    n1 sh0    Y  | t|jd | t* | td| dgV  W d    n1 s0    Y  | t8 t	j
| td| tdgtdV  W d    n1 s0    Y  d S rb   )r   r   r1   rc   r!   r@   rd   re   r   r   rK   rf   r   r   r   test_multi_future_exceptions   s    B8z)GenBasicTest.test_multi_future_exceptionsc                 C   s   t jdd }| j| d S )Nc                   S   s   t  d S r   r   r   r   r   r   r   r(      s    z.GenBasicTest.test_sync_raise_return.<locals>.fr)   r-   r   r   r   test_sync_raise_return   s    
z#GenBasicTest.test_sync_raise_returnc                 C   s   t jdd }| j| d S )Nc                   s   s   t jV  t  d S r   r$   r   r   r   r   r(      s    z/GenBasicTest.test_async_raise_return.<locals>.fr)   r-   r   r   r   test_async_raise_return   s    
z$GenBasicTest.test_async_raise_returnc                 C   s&   t jdd }| d| j| d S )Nc                   S   s   t dd S r5   rj   r   r   r   r   r(      s    z4GenBasicTest.test_sync_raise_return_value.<locals>.fr6   r   r*   r@   r+   r,   r-   r   r   r   test_sync_raise_return_value   s    
z)GenBasicTest.test_sync_raise_return_valuec                 C   s&   t jdd }| d| j| d S )Nc                   S   s   t dd S r9   rj   r   r   r   r   r(     s    z:GenBasicTest.test_sync_raise_return_value_tuple.<locals>.fr:   rm   r-   r   r   r   "test_sync_raise_return_value_tuple  s    
z/GenBasicTest.test_sync_raise_return_value_tuplec                 C   s&   t jdd }| d| j| d S )Nc                   s   s   t jV  t dd S r5   r$   r   r   r   r   r(   
  s    z5GenBasicTest.test_async_raise_return_value.<locals>.fr6   rm   r-   r   r   r   test_async_raise_return_value	  s    
z*GenBasicTest.test_async_raise_return_valuec                 C   s&   t jdd }| d| j| d S )Nc                   s   s   t jV  t dd S r9   r$   r   r   r   r   r(     s    z;GenBasicTest.test_async_raise_return_value_tuple.<locals>.fr:   rm   r-   r   r   r   #test_async_raise_return_value_tuple  s    
z0GenBasicTest.test_async_raise_return_value_tupleN)$__name__
__module____qualname__r   r*   r   r   r!   r'   r.   r3   r4   r8   r<   r=   r>   rD   rH   rN   rO   r	   r   rV   r[   r]   r_   r`   ra   rh   ri   rk   rl   rn   ro   rp   rq   r   r   r   r   r      sT   



	






r   c                       sT  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 o$d.k n  d/d0d1 Zd2d3 Z ed4d5 Z!  Z"S )6GenCoroutineTestc                    s   d| _ t   d S )NF)finishedsupersetUprC   	__class__r   r   rx     s    zGenCoroutineTest.setUpc                    s   t    | jsJ d S r   )rw   tearDownrv   rC   ry   r   r   r{   "  s    
zGenCoroutineTest.tearDownc                 C   sJ   d| _ dd }t|}| |j|j | |j|j | |j| d S )NTc                   s   s   t jV  d S r   r   r   r   r   r   r(   )  s    z+GenCoroutineTest.test_attributes.<locals>.f)rv   r   r*   r@   rr   rs   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   s   t jV  d S r   r   r   r   r   r   r(   4  s    z6GenCoroutineTest.test_is_coroutine_function.<locals>.f)rv   r   r*   ZassertFalseZis_coroutine_functionrW   r~   r   r   r   test_is_coroutine_function1  s    
z+GenCoroutineTest.test_is_coroutine_functionc                 c   s,   t jdd }| V }| |d d| _d S )Nc                   S   s   t dd S r5   rj   r   r   r   r   r(   >  s    z0GenCoroutineTest.test_sync_gen_return.<locals>.fr6   Tr   r*   r@   rv   r   r(   r   r   r   r   test_sync_gen_return<  s
    
z%GenCoroutineTest.test_sync_gen_returnc                 c   s,   t jdd }| V }| |d d| _d S )Nc                   s   s   t jV  t dd S r5   r$   r   r   r   r   r(   H  s    z1GenCoroutineTest.test_async_gen_return.<locals>.fr6   Tr   r   r   r   r   test_async_gen_returnF  s
    
z&GenCoroutineTest.test_async_gen_returnc                 c   s,   t jdd }| V }| |d d| _d S )Nc                   S   s   dS r5   r   r   r   r   r   r(   S  s    z,GenCoroutineTest.test_sync_return.<locals>.fr6   Tr   r   r   r   r   test_sync_returnQ  s
    
z!GenCoroutineTest.test_sync_returnc                 c   s,   t jdd }| V }| |d d| _d S )Nc                   s   s   t jV  dS r5   r   r   r   r   r   r(   ]  s    z-GenCoroutineTest.test_async_return.<locals>.fr6   Tr   r   r   r   r   test_async_return[  s
    
z"GenCoroutineTest.test_async_returnc                 #   s0   t j fdd}| V } |d d _d S )Nc                   3   s   dS r5   )r   ZTaskr+   add_callbackr   rC   r   r   r(   k  s    z3GenCoroutineTest.test_async_early_return.<locals>.fr6   Tr   r   r   rC   r   test_async_early_returnf  s
    z(GenCoroutineTest.test_async_early_returnc                 #   s8   t jdd   fdd}| V }| |d d| _d S )Nc                   s   s   t jV  t dd S r5   r$   r   r   r   r   f1w  s    z-GenCoroutineTest.test_async_await.<locals>.f1c                     s     I d H } | S r   r   r   r   r   r   f2  s    z-GenCoroutineTest.test_async_await.<locals>.f2r6   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   r6   )asynciosleep)r   r   r   r   r(     s    z3GenCoroutineTest.test_asyncio_sleep_zero.<locals>.fr6   T)r@   rv   r   r   r   r   test_asyncio_sleep_zero  s    z(GenCoroutineTest.test_asyncio_sleep_zeroc                 #   sP   t jdd   fdd}t jdd }| | gV }| |ddg d	| _d S )
Nc                   s   s   t jV  d S r   r   r   r   r   r   r     s    zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f1c                      s     I d H  dS r5   r   r   r   r   r   r     s    zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f2c                   s   s   t jV  t dd S )N+   r$   r   r   r   r   f3  s    zGGenCoroutineTest.test_async_await_mixed_multi_native_future.<locals>.f3r6   r   Tr   )r   r   r   rB   r   r   r   *test_async_await_mixed_multi_native_future  s    

z;GenCoroutineTest.test_async_await_mixed_multi_native_futurec                 c   s6   dd }t tjdd| V }| |d d| _d S )Nc                      s   dS r5   r   r   r   r   r   r     s    z4GenCoroutineTest.test_async_with_timeout.<locals>.f1r#   )hoursr6   T)r   with_timeoutdatetime	timedeltar@   rv   )r   r   r   r   r   r   test_async_with_timeout  s    z(GenCoroutineTest.test_async_with_timeoutc                 c   s,   t jdd }| V }| |d  d| _d S )Nc                   S   s   d S r   r   r   r   r   r   r(     s    z5GenCoroutineTest.test_sync_return_no_value.<locals>.fTr   r   r   r   r   test_sync_return_no_value  s
    
z*GenCoroutineTest.test_sync_return_no_valuec                 c   s,   t jdd }| V }| |d  d| _d S )Nc                   s   s   t jV  d S r   r   r   r   r   r   r(     s    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   sN   t jdd }| }| t |V  W d    n1 s:0    Y  d| _d S )Nc                   S   s   dd  d S r/   r   r   r   r   r   r(     s    z+GenCoroutineTest.test_sync_raise.<locals>.fTr   r*   r1   r2   rv   r   r(   futurer   r   r   test_sync_raise  s    
$z GenCoroutineTest.test_sync_raisec                 c   sN   t jdd }| }| t |V  W d    n1 s:0    Y  d| _d S )Nc                   s   s   t jV  dd  d S r/   r   r   r   r   r   r(     s    z,GenCoroutineTest.test_async_raise.<locals>.fTr   r   r   r   r   test_async_raise  s    
$z!GenCoroutineTest.test_async_raisec                 #   s`   t jdd  t j fdd}| }| t |V  W d    n1 sL0    Y  d| _d S )Nc                   S   s   dd  d S r/   r   r   r   r   r   r     s    z>GenCoroutineTest.test_replace_yieldpoint_exception.<locals>.f1c                   3   s*   z  V  W n t y$   t Y n0 d S r   )r2   KeyErrorr   r   r   r   r     s    z>GenCoroutineTest.test_replace_yieldpoint_exception.<locals>.f2T)r   r*   r1   r   rv   )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   s   dd  d S r/   r   r   r   r   r   r     s    z>GenCoroutineTest.test_swallow_yieldpoint_exception.<locals>.f1c                   3   s.   z  V  W n t y(   tdY n0 d S r5   )r2   r   r   r   r   r   r   r     s    z>GenCoroutineTest.test_swallow_yieldpoint_exception.<locals>.f2r6   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_resultr@   joinr   rv   )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   rv   rC   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@  yp } z(| t|d | |j W Y d }~n
d }~0 0 z|dV  W n@  y } z(| t|d | |j W Y d }~n
d }~0 0 d	| _d S )
Nc                   @   s   e Zd ZdS )zIGenCoroutineTest.test_py3_leak_exception_context.<locals>.LeakedExceptionNrr   rs   rt   r   r   r   r   LeakedException*  s   r   c                    s    | d S r   r   )	iterationr   r   r   inner-  s    z?GenCoroutineTest.test_py3_leak_exception_context.<locals>.innerr#   1r;   2T)	Exceptionr   r*   r@   rd   ZassertIsNone__context__rv   )r   r   r    r   r   r   test_py3_leak_exception_context(  s    ""z0GenCoroutineTest.test_py3_leak_exception_contextr?   )r?      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   sD   G dd dt } |  }t| _dd }t| V  tdd S )Nc                   @   s   e Zd ZdS )zGGenCoroutineTest.test_coroutine_refcounting.<locals>.inner.<locals>.FooNr   r   r   r   r   FooH  s   r   c                   S   s   d S r   r   r   r   r   r   dummyN  s    zIGenCoroutineTest.test_coroutine_refcounting.<locals>.inner.<locals>.dummyz
Some error)objectweakrefref	local_refr   r*   
ValueError)r   Z	local_varr   rC   r   r   r   F  s    z:GenCoroutineTest.test_coroutine_refcounting.<locals>.innerc                   3   s$   z  V  W n t y   Y n0 d S r   )r   r   )r   r   r   inner2T  s    z;GenCoroutineTest.test_coroutine_refcounting.<locals>.inner2r?   )timeoutT)r   r*   r+   r,   r|   r   rv   )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   s   t jV  d S r   r   r   r   r   r   r(   g  s    z:GenCoroutineTest.test_asyncio_future_debug_info.<locals>.fzcreated at %s:%dr?   )rv   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   s   t jV  t dd S r"   r$   r   r   r   r   r(   v  s    z/GenCoroutineTest.test_asyncio_gather.<locals>.fr#   T)r   r*   r   Zgatherr@   rv   )r   r(   retr   r   r   test_asyncio_gatherr  s
    
z$GenCoroutineTest.test_asyncio_gather)#rr   rs   rt   rx   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   ry   r   ru     s`   
	


	







	







ru   c                   @   s   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finishrC   r   r   r   get  s    

zGenCoroutineSequenceHandler.getNrr   rs   rt   r   r*   r   r   r   r   r   r     s   r   c                   @   s   e Zd Zejdd ZdS )%GenCoroutineUnfinishedSequenceHandlerc                 c   s:   t jV  | d t jV  | d t jV  | d d S r   )r   r   r   rC   r   r   r   r     s    

z)GenCoroutineUnfinishedSequenceHandler.getNr   r   r   r   r   r     s   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   rC   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   rC   r   r   r   r     s
    z UndecoratedCoroutinesHandler.getNrr   rs   rt   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d S )N  )r   r   r   rC   r   r   r   r     s    z AsyncPrepareErrorHandler.preparec                 C   s   |  d d S )Nok)r   rC   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   rC   r   r   r   r     s    zNativeCoroutineHandler.getN)rr   rs   rt   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   rC   r   r   r   get_app  s    zGenWebTest.get_appc                 C   s   |  d}| |jd d S )Nr      123fetchr@   bodyr   responser   r   r   test_coroutine_sequence_handler  s    
z*GenWebTest.test_coroutine_sequence_handlerc                 C   s   |  d}| |jd d S )Nr   r   r   r   r   r   r   *test_coroutine_unfinished_sequence_handler  s    
z5GenWebTest.test_coroutine_unfinished_sequence_handlerc                 C   s   |  d}| |jd d S )Nr   r   r   r   r   r   r   test_undecorated_coroutines  s    
z&GenWebTest.test_undecorated_coroutinesc                 C   s   |  d}| |jd d S )Nr   r   )r   r@   coder   r   r   r    test_async_prepare_error_handler  s    
z+GenWebTest.test_async_prepare_error_handlerc                 C   s*   |  d}| |jd | |jd d S )Nr      s   ok)r   r@   r   r   r   r   r   r   test_native_coroutine_handler  s    
z(GenWebTest.test_native_coroutine_handlerN)	rr   rs   rt   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   sH   |  tj( ttjddt V  W d    n1 s:0    Y  d S )N皙?seconds)r1   r   TimeoutErrorr   r   r   r   rC   r   r   r   test_timeout  s    zWithTimeoutTest.test_timeoutc                 #   sJ   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>  rR   z?WithTimeoutTest.test_completes_before_timeout.<locals>.<lambda>  r   )r   r+   add_timeoutr   r   r   r   r@   r   r   r  r   test_completes_before_timeout  s    z-WithTimeoutTest.test_completes_before_timeoutc                 #   sh   t   | jtjdd fdd | t& ttjdd V  W d    n1 sZ0    Y  d S )Nr   r   c                      s     t S r   )set_exceptionr2   r   r  r   r   r    rR   z;WithTimeoutTest.test_fails_before_timeout.<locals>.<lambda>r  )	r   r+   r  r   r   r1   r2   r   r   rC   r   r  r   test_fails_before_timeout  s    

z)WithTimeoutTest.test_fails_before_timeoutc                 c   s6   t  }|d ttjdd|V }| |d d S )Nr   r  r   )r   r   r   r   r   r   r@   )r   r   r   r   r   r   test_already_resolved  s    
z%WithTimeoutTest.test_already_resolvedc              	   c   sx   t dZ}| tj. t| j |tj	dV  W d    n1 sL0    Y  W d    n1 sj0    Y  d S )Nr#   r   )
r   ThreadPoolExecutorr1   r   r   r   r+   rS   submitr   r   executorr   r   r   test_timeout_concurrent_future  s
    z.WithTimeoutTest.test_timeout_concurrent_futurec                 c   s^   t d@}dd }||}|  ttjdd|V  W d    n1 sP0    Y  d S )Nr#   c                   S   s   d S r   r   r   r   r   r   r     s    z?WithTimeoutTest.test_completed_concurrent_future.<locals>.dummyr  r   )r   r	  r
  r   r   r   r   r   )r   r  r   r(   r   r   r    test_completed_concurrent_future  s
    
z0WithTimeoutTest.test_completed_concurrent_futurec                 c   sN   t d0}ttjdd|dd V  W d    n1 s@0    Y  d S )Nr#   r  r   c                   S   s
   t dS )Nr   )rS   r   r   r   r   r   r    rR   z?WithTimeoutTest.test_normal_concurrent_future.<locals>.<lambda>)r   r	  r   r   r   r   r
  r  r   r   r   test_normal_concurrent_future  s
    
z-WithTimeoutTest.test_normal_concurrent_futureN)rr   rs   rt   r   r   r  r  r  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 sJ0    Y  | |jd d | |j	d d d S )Nzempty generator iterated)rF   bad nil current indexbad nil current future)
r   WaitIteratorrW   doner1   r   r   r@   current_indexcurrent_future)r   gr   r   r   test_empty_iterator  s    0z$WaitIteratorTest.test_empty_iteratorc           	      c   s  t  }t  }t  }|d |d |d t|||}d}| s| V }|dkr| |jd | |j	| | |d nb|dkr| |jd | |j	| | |d n0|dkr| |jd | |j	| | |d |d7 }qB| |jd d | |j	d d tj||d	}| s| V }|jd
kr^| 
|j	|koV|dkd n<|jdkr| 
|j	|ko|dkd n| d|j |d7 }q | |jd d | |j	d d d S )N   r6   T   r   r#   r;   r  r  )r   r   r   z"WaitIterator dict status incorrectr   zgot bad WaitIterator index {})r   r   r   r  r  nextr@   r  r|   r  rW   Zfailformat)	r   r   r   r   r  r   rZdgZdrr   r   r   test_already_done)  sT    






z"WaitIteratorTest.test_already_donec                 C   sx   |dkr|d  d n>|dkr2|d t  n$|dkrV|d  d |d  d	 |dk rt| j| j|d | d S )
Nr?   r;   r  r   r      r#   r6   r  )r   r  r2   r+   r   finish_coroutines)r   r   r   r   r   r   r   _  s    z"WaitIteratorTest.finish_coroutinesc                 c   s   t  t  t  t  g}| d| tj| }d}| sz| V }W n& tyj   | |j|d d Y nx0 |dkr| 	|dd | 	|j
dd nN|dkr| 	|dd | 	|j
dd n&|d	kr| 	|d
d | 	|j
d	d |d7 }q.d S )Nr   zexception future invalidr  iterator value incorrectr;   wrong indexr6   r#   r?   r  )r   r   r   r  r  r  r2   r|   r  r@   r  )r   r   r  r   r  r   r   r   test_iteratork  s&    
zWaitIteratorTest.test_iteratorc                 #   sL   t  t  t  t  g d  d_ fdd}| V  j d S )Nr   Fc                     s   d} t j  }zP|2 zD3 d H W }| dkrH|dd |jdd ntd| d7 } q6 W n tyx   | d7 } Y n0 |2 zp3 d H W }| dkr|dd |jdd n4| d	krڈ|d
d |jd	d ntd|  | d7 } q~6 d_d S )Nr   r  r!  r;   r"  z!expected exception on iteration 1r#   r6   r?   r  zdidn't expect iteration %dT)r   r  r@   r  r   r2   rv   )r   r  r  r   r   r   r   r(     s*    
z5WaitIteratorTest.test_iterator_async_await.<locals>.f)r   r   rv   rW   r-   r   r$  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   r  rC   r   r   r   test_no_ref  s    zWaitIteratorTest.test_no_refN)
rr   rs   rt   r   r  r  r   r#  r%  r&  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   rC   r   r   r   is_pypy3  s    zRunnerGCTest.is_pypy3c                 #   sD   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 )Nr;   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r0  r   r/  r   r   tester  s    z$RunnerGCTest.test_gc.<locals>.tester皙?r   )r   r*   r   r   r   )r   r3  r   r2  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 | 
 s| d d  d S )Nc                	   3   s8   z&t dV   d qW  d  n d  0 d S NgMbP?T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 Nr4  )	_refcycler   r   r   r   r   r1  )r8  wfutr   r   do_something  s    z8RunnerGCTest.test_gc_infinite_coro.<locals>.do_somethingr   r;   )get_new_ioloopr   r*   r,   closer-  r.  r|   assertGreaterEquallenr+  r   loopr<  r   )r8  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 sr0    Y  | 	d  d  | 
td |  s| 	d	 d  d S )
Nr   c              	      s<   z*t dI d H  | d qW | d  n| d  0 d S r6  r7  r   r   r   r   r8    s    z@RunnerGCTest.test_gc_infinite_async_await.<locals>.infinite_coroc                  3   s8      } | | _t|  tdV  d S r9  )r   Zcreate_taskr:  r   r   r   r   r   r1  r   r8  r   r;  r   r   r<    s    z?RunnerGCTest.test_gc_infinite_async_await.<locals>.do_somethingr   z$Task was destroyed but it is pendingr;   r=  )r   r>  r   r*   r,   r   r?  r-  r.  r|   r@  rA  r+  rB  r   rE  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 | d S r   )r   Zmultir   r   r   r   r   r   wait_a_moment  s    z5RunnerGCTest.test_multi_moment.<locals>.wait_a_moment)r   r*   r>  r,   r@   )r   rG  rC  r   r   r   r   test_multi_moment  s
    

zRunnerGCTest.test_multi_momentN)	rr   rs   rt   r+  r   r5  rD  rF  rH  r   r   r   r   r'    s   
$$r'  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   rI  setr   r%   r   r   r   native_root'  s    
zContextVarsTest.native_rootc                 c   s    t | d V  | |V  d S r   rK  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                      s     jS r   runthread_innerr   ctxr   r&   r   r   r  8  rR   z'ContextVarsTest.inner.<locals>.<lambda>c                      s     jS r   rO  r   rR  r   r   r  =  rR   )
r@   rI  r   	gen_innercontextvarsZcopy_contextr+   Zrun_in_executorr   r   r%   r   rR  r   r   1  s     
zContextVarsTest.innerc                 c   s*   |  t | d V  |  t | d S r   r@   rI  r   r%   r   r   r   rT  A  s    zContextVarsTest.gen_innerc                 C   s   |  t | d S r   rV  r%   r   r   r   rQ  G  s    zContextVarsTest.thread_innerc                 c   s*   |  d|  d| d| dgV  d S )Nr#   r;   r?      )rM  rN  rC   r   r   r   test_propagateJ  s
    zContextVarsTest.test_propagatec                 c   s   t d}d V  t | d S r"   )rI  rL  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   rV  r   r%   r   r   native_async_functiona  s    zgContextVarsTest.test_propagate_to_first_yield_with_native_async_function.<locals>.native_async_function)rI  rL  )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)rr   rs   rt   rM  r   r*   rN  r   rT  rQ  r   rX  r[  r^  r   r   r   r   rJ  %  s   




rJ  __main__)3r   Z
concurrentr   r-  r   r)  r   rS   r   r   Ztornado.concurrentr   Ztornado.logr   Ztornado.testingr   r   r   r   Ztornado.test.utilr	   r
   Ztornado.webr   r   r   Ztornador   rU  ImportErrortypingTYPE_CHECKINGr   r   r   ru   r   r   r   r   r   r   r   r  r'  Z
ContextVarrI  r   rJ  rr   mainr   r   r   r   <module>   sT   
 }  h
%@ l

B
