o
    u3bN„  ã                   @   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rØe -d ¡Z.e	 /edu d!¡G d"d#„ d#eƒƒZ0e1d$kròe	 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   ú7/usr/lib/python3/dist-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 s�w   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 sŠw   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 o‘d.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ç{®Gáz„?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>.testerr%   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 ©NTgü©ñÒMbP?©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 ©Ngš™™™™™É?)Ú	_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                   @   sX   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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  ;  ó    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ê   4  s   € 
ÿzContextVarsTest.innerc                 c   s,   � |   t ¡ |¡ d V  |   t ¡ |¡ d S r   ©rS   r’  r  r'   r   r   r   rŸ  D  s   €zContextVarsTest.gen_innerc                 C   s   |   t ¡ |¡ d S r   r£  r'   r   r   r   r›  J  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_propagateM  s   €
üzContextVarsTest.test_propagatec                 c   s    � t  d¡}d V  t  |¡ d S r$   )r’  r•  Úreset)r   Útokenr   r   r   Ú
test_resetX  s   €
zContextVarsTest.test_resetN)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
%@ o
8ÿ