U
    luf-                     @   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k
r   dZY nX 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k	re-d Z.e	/edk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   9/tmp/pip-unpacked-wheel-bmg6zs32/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>   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   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   s<   |  d}|  d||  d|gV }| |ddddg d S )Nr;   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*}t| td| tdgV  W 5 Q R X W 5 Q R X | t|j	d | t& t| td| 
dgV  W 5 Q R X | t. tj| td| tdgtdV  W 5 Q R X 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&    z"GenBasicTest.test_multi_exceptionsc              
   c   s   t td: | t$}| td| tdgV  W 5 Q R X W 5 Q R X | t|jd | t  | td| dgV  W 5 Q R X | t. t	j
| td| tdgtdV  W 5 Q R X d S ra   )r   r   r1   rb   r!   r@   rc   rd   r   r   rK   re   r   r   r   test_multi_future_exceptions   s    $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   ri   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   ri   r   r   r   r   r(     s    z:GenBasicTest.test_sync_raise_return_value_tuple.<locals>.fr:   rl   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   rl   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:   rl   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   rU   rZ   r\   r^   r_   r`   rg   rh   rj   rk   rm   rn   ro   rp   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   rw     s    zGenCoroutineTest.setUpc                    s   t    | jstd S r   )rv   tearDownru   AssertionErrorrC   rx   r   r   rz   "  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)ru   r   r*   r@   rq   rr   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)ru   r   r*   ZassertFalseZis_coroutine_functionrV   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   ri   r   r   r   r   r(   >  s    z0GenCoroutineTest.test_sync_gen_return.<locals>.fr6   Tr   r*   r@   ru   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@   ru   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@   ru   )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   s:   t jdd }| }| t |V  W 5 Q R X 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   ru   r   r(   futurer   r   r   test_sync_raise  s    
z GenCoroutineTest.test_sync_raisec              	   c   s:   t jdd }| }| t |V  W 5 Q R X 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              	   #   sL   t jdd  t j fdd}| }| t |V  W 5 Q R X 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 k
r&   t Y nX d S r   )r2   KeyErrorr   r   r   r   r     s    z>GenCoroutineTest.test_replace_yieldpoint_exception.<locals>.f2T)r   r*   r1   r   ru   )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   s0   z  V  W n t k
r*   tdY nX 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   ru   )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   ru   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>  k
rn } z | t|d | |j W 5 d }~X Y nX z|dV  W n>  k
r } z | t|d | |j W 5 d }~X Y nX d	| _d S )
Nc                   @   s   e Zd ZdS )zIGenCoroutineTest.test_py3_leak_exception_context.<locals>.LeakedExceptionNrq   rr   rs   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@   rc   ZassertIsNone__context__ru   )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 k
r    Y nX d S r   )r   r   )r   r   r   inner2T  s    z;GenCoroutineTest.test_coroutine_refcounting.<locals>.inner2r?   )timeoutT)r   r*   r+   r,   r|   r   ru   )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?   )ru   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@   ru   )r   r(   retr   r   r   test_asyncio_gatherr  s
    
z$GenCoroutineTest.test_asyncio_gather)#rq   rr   rs   rw   rz   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   rx   r   rt     sb   
	


	







	







 rt   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rq   rr   rs   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rq   rr   rs   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)rq   rr   rs   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)	rq   rr   rs   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   s4   |  tj ttjddt V  W 5 Q R X 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>      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              	   #   sT   t   | jtjdd fdd | t ttjdd V  W 5 Q R X d S )Nr   r   c                      s     t S r   )set_exceptionr2   r   r  r   r   r    r  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   sP   t d<}| tj$ t| j |tj	dV  W 5 Q R X W 5 Q R X d S )Nr#   r   )
r   ThreadPoolExecutorr1   r   r   r   r+   rR   submitr   r   executorr   r   r   test_timeout_concurrent_future  s     z.WithTimeoutTest.test_timeout_concurrent_futurec              	   c   sJ   t d6}dd }||}|  ttjdd|V  W 5 Q R X 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   s:   t d&}ttjdd|dd V  W 5 Q R X d S )Nr#   r  r   c                   S   s
   t dS )Nr   )rR   r   r   r   r   r   r    r  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)rq   rr   rs   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   sd   t  }| | d | t t jt t d}W 5 Q R X | |jd d | |j	d d d S )Nzempty generator iterated)rF   bad nil current indexbad nil current future)
r   WaitIteratorrV   doner1   r   r   r@   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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  rV   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k
rl   | |j|d d Y nxX |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k
rz   | d7 } Y nX |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 } q6 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   ru   )r   r  r  r   r   r   r   r(     s*    
z5WaitIteratorTest.test_iterator_async_await.<locals>.f)r   r!  ru   rV   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)
rq   rr   rs   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r1  r   r0  r   r   tester  s    z$RunnerGCTest.test_gc.<locals>.tester皙?r   )r   r*   r   r   r   )r   r4  r   r3  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   s.   ztdV    d qW 5   d  X 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 Nr5  )	_refcycler   r   r   r   r   r2  )r9  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   )r9  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 5 Q R X | 	d  d  | 
td |  s| 	d	 d  d S )
Nr   c              	      s2   z tdI d H  |  d qW 5 |  d  X d S r7  r8  r   r   r   r   r9    s    z@RunnerGCTest.test_gc_infinite_async_await.<locals>.infinite_coroc                  3   s8      } | | _t|  tdV  d S r:  )r   Zcreate_taskr;  r   r   r   r   r   r2  r   r9  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|   rA  rB  r,  rC  r   rF  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   rH  rD  r   r   r   r   test_multi_moment  s
    

zRunnerGCTest.test_multi_momentN)	rq   rr   rs   r,  r   r6  rE  rG  rI  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   rJ  setr   r%   r   r   r   native_root'  s    
zContextVarsTest.native_rootc                 c   s    t | d V  | |V  d S r   rL  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  r  z'ContextVarsTest.inner.<locals>.<lambda>c                      s     jS r   rP  r   rS  r   r   r  =  r  )
r@   rJ  r   	gen_innercontextvarsZcopy_contextr+   Zrun_in_executorr   r   r%   r   rS  r   r   1  s      
zContextVarsTest.innerc                 c   s*   |  t | d V  |  t | d S r   r@   rJ  r   r%   r   r   r   rU  A  s    zContextVarsTest.gen_innerc                 C   s   |  t | d S r   rW  r%   r   r   r   rR  G  s    zContextVarsTest.thread_innerc                 c   s*   |  d|  d| d| dgV  d S )Nr#   r;   r?      )rN  rO  rC   r   r   r   test_propagateJ  s
    zContextVarsTest.test_propagatec                 c   s   t d}d V  t | d S r"   )rJ  rM  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   rW  r   r%   r   r   native_async_functiona  s    zgContextVarsTest.test_propagate_to_first_yield_with_native_async_function.<locals>.native_async_function)rJ  rM  )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)rq   rr   rs   rN  r   r*   rO  r   rU  rR  r   rY  r\  r_  r   r   r   r   rK  %  s   




rK  __main__)3r   Z
concurrentr   r.  r   r*  r   rR   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   rV  ImportErrortypingTYPE_CHECKINGr   r   r   rt   r   r   r   r   r   r   r   r  r(  Z
ContextVarrJ  r   rK  rq   mainr   r   r   r   <module>   sT   
 }  h
%@ l

B
