a
    	3j                    @   s  d 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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ZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ d
d Zdd Zejdd ZdSddZdd Z G dd dZ!G dd dZ"dZ#G dd dZ$dd Z%G dd dZ&e'e(ed o\e(ed!d"G d#d$ d$e$e&ej)Z*e'e(ed oe(ed!d"e%G d%d& d&e$ej)Z+e'e(ed!d"e%G d'd( d(e$ej)Z,e'e(ed d"e%G d)d* d*e$ej)Z-e'e(ed!d"G d+d, d,e$ej)Z.e'e(ed d"G d-d. d.e$ej)Z/G d/d0 d0e$e&ej)Z0e%G d1d2 d2e$ej)Z1e'e(ed!d"G d3d4 d4ej)Z2G d5d6 d6Z3G d7d8 d8ej)e3Z4e'e(ed9d"G d:d; d;ej)e3Z5G d<d= d=Z6G d>d? d?e6ej)Z7e'e(ed!d"G d@dA dAe6ej)Z8G dBdC dCej)Z9G dDdE dEZ:G dFdG dGe:ej)Z;G dHdI dIe:ej)Z<G dJdK dKej)Z=G dLdM dMej)Z>G dNdO dOej)Z?G dPdQ dQej)Z@eAdRkreB  dS )TzTests for tasks.py.    N)mock)
coroutines)futures)tasks)utils)support)assert_python_okc                   C   s   t d  d S N)asyncioZset_event_loop_policy r   r   X/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncio/test_tasks.pytearDownModule   s    r   c                      s   d S r	   r   r   r   r   r   coroutine_function    s    r   c                 c   s0   t j}|j}z| |_d V  W ||_n||_0 d S r	   )r
   r   _DEBUG)Zenabledr   Z	old_debugr   r   r   set_coroutine_debug$   s    r   Fc                 C   sR   |rd| }nd| }|d ur@|d }d| |||d |d f S d| ||f S d S )Nz%sz%s, definedz%coro=<%s() %s at %s> created at %s:%sr      zcoro=<%s() %s at %s>r   )qualnamestatesrcsource_traceback	generatorframer   r   r   format_coroutine0   s    
r   c                 C   s2   d}| j }|du rq"|} |d7 }qt| | j|fS )zP
    Return information about the innermost exception context in the chain.
    r   Nr   )__context__typeargs)excdepthcontextr   r   r   get_innermost_context=   s    
r    c                   @   s   e Zd Zdd Zdd ZdS )Dummyc                 C   s   dS )Nz<Dummy>r   selfr   r   r   __repr__O   s    zDummy.__repr__c                 G   s   d S r	   r   )r#   r   r   r   r   __call__R   s    zDummy.__call__N)__name__
__module____qualname__r$   r%   r   r   r   r   r!   M   s   r!   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CoroLikeObjectc                 C   s   t dd S N*   )StopIteration)r#   vr   r   r   sendW   s    zCoroLikeObject.sendc                 G   s   d S r	   r   )r#   r   r   r   r   throwZ   s    zCoroLikeObject.throwc                 C   s   d S r	   r   r"   r   r   r   close]   s    zCoroLikeObject.closec                 C   s   | S r	   r   r"   r   r   r   	__await__`   s    zCoroLikeObject.__await__N)r&   r'   r(   r.   r/   r0   r1   r   r   r   r   r)   V   s   r)   g-C6?c                       s0  e Zd ZdZdZdddZdd Z f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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?dydz Z@d{d| ZAd}d~ ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd ZdddĄ ZeddƄ ZfddȄ Zgddʄ Zhdd̄ Zidd΄ ZjddЄ Zkdd҄ ZlddԄ Zmenodաddׄ Zpenodءddڄ Zqdd܄ Zrddބ Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zyenodաdd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd  Z  ZS (  BaseTaskTestsNTestTaskc                 C   s   | j j|||dS )N)loopname)	__class__Task)r#   r4   coror5   r   r   r   new_tasko   s    zBaseTaskTests.new_taskc                 C   s   | j j|dS Nr4   )r6   Futurer#   r4   r   r   r   
new_futurer   s    zBaseTaskTests.new_futurec                    s6   t       _ j j  fdd j_d S )Nc                      s      jS r	   )r>   r4   r   r"   r   r   <lambda>y       z%BaseTaskTests.setUp.<locals>.<lambda>)supersetUpnew_test_loopr4   set_task_factoryr9   create_futurer"   r6   r"   r   rB   u   s    

zBaseTaskTests.setUpc                 C   s   dd }|  | j| }| t|d | |jd  |d | |jd | tj	 | j
| W d    n1 s|0    Y  d S )Nc                      s   d S r	   r   r   r   r   r   r8   |   s    z;BaseTaskTests.test_task_cancel_message_getter.<locals>.coro_cancel_message
my message)r9   r4   
assertTruehasattrassertEqualrG   cancelassertRaisesr
   CancelledErrorrun_until_completer#   r8   tr   r   r   test_task_cancel_message_getter{   s    
z-BaseTaskTests.test_task_cancel_message_getterc                 C   sr   dd }|  | j| }|d d|_| |jd | tj | j| W d    n1 sd0    Y  d S )Nc                      s   d S r	   r   r   r   r   r   r8      s    z;BaseTaskTests.test_task_cancel_message_setter.<locals>.cororH   zmy new message)	r9   r4   rL   rG   rK   rM   r
   rN   rO   rP   r   r   r   test_task_cancel_message_setter   s    
z-BaseTaskTests.test_task_cancel_message_setterc                    sD   G dd d  fddj tjfddtdD   d S )Nc                   @   s   e Zd Zdd ZdS )z1BaseTaskTests.test_task_del_collect.<locals>.Evilc                 S   s   t   d S r	   )gccollectr"   r   r   r   __del__   s    z9BaseTaskTests.test_task_del_collect.<locals>.Evil.__del__N)r&   r'   r(   rV   r   r   r   r   Evil   s   rW   c                      s     S r	   r   r   )rW   r   r   run   s    z0BaseTaskTests.test_task_del_collect.<locals>.runc                    s   g | ]} j  qS r   )r9   r4   ).0_)rX   r#   r   r   
<listcomp>   s   z7BaseTaskTests.test_task_del_collect.<locals>.<listcomp>d   )r4   rO   r
   gatherranger"   r   )rW   rX   r#   r   test_task_del_collect   s    z#BaseTaskTests.test_task_del_collectc                 C   sr   t  }| |}dd }zH| td  | j|| W d    n1 sN0    Y  W |  n
|  0 d S )Nc                    s   | I d H  d S r	   r   futr   r   r   rX      s    z1BaseTaskTests.test_other_loop_future.<locals>.runzTask .* got Future .* attached)r
   new_event_loopr>   assertRaisesRegexRuntimeErrorr4   rO   r0   )r#   
other_loopra   rX   r   r   r   test_other_loop_future   s    
0z$BaseTaskTests.test_other_loop_futurec                    sZ    fdd}t j| | jd | td | j  W d    n1 sL0    Y  d S )Nc                      s    I d H  d S r	   r   r   taskr   r   test   s    z6BaseTaskTests.test_task_awaits_on_itself.<locals>.testr;   zTask cannot await on itself)r
   ensure_futurer4   rc   rd   rO   )r#   ri   r   rg   r   test_task_awaits_on_itself   s    z(BaseTaskTests.test_task_awaits_on_itselfc                 C   s   dd }|  | j| }| j| | |  | | d | |j| j | |	 | j t
 }| | |  || }| |j| || |  d S )Nc                      s   dS Nokr   r   r   r   r   notmuch   s    z.BaseTaskTests.test_task_class.<locals>.notmuchrm   )r9   r4   rO   rI   donerK   resultassertIs_loopget_loopr
   rb   set_event_loopr0   r#   rn   rQ   r4   r   r   r   test_task_class   s    

zBaseTaskTests.test_task_classc                 C   s   |  t tjdd }W d    n1 s.0    Y  tj| | jd}| j| | |  | 	|
 d | |j| j t }| | tj| |d}| |j| || |  d S )Nc                   S   s   dS rl   r   r   r   r   r   rn      s    z;BaseTaskTests.test_ensure_future_coroutine.<locals>.notmuchr;   rm   )assertWarnsDeprecationWarningr
   	coroutinerj   r4   rO   rI   ro   rK   rp   rq   rr   rb   rt   r0   ru   r   r   r   test_ensure_future_coroutine   s    (

z*BaseTaskTests.test_ensure_future_coroutinec                 C   s   |  | j}|d t|}| j| | |  | |	 d | 
|| t }| | | t tj||d}W d    n1 s0    Y  |  tj|| jd}| 
|| d S )Nkor;   )r>   r4   
set_resultr
   rj   rO   rI   ro   rK   rp   rq   rb   rt   rM   
ValueErrorr0   )r#   Zf_origfr4   r   r   r   test_ensure_future_future   s    


,z'BaseTaskTests.test_ensure_future_futurec                 C   s   dd }|  | j| }t|}| j| | |  | | d | 	|| t
 }| | | t tj||d}W d    n1 s0    Y  |  tj|| jd}| 	|| d S )Nc                      s   dS rl   r   r   r   r   r   rn      s    z6BaseTaskTests.test_ensure_future_task.<locals>.notmuchrm   r;   )r9   r4   r
   rj   rO   rI   ro   rK   rp   rq   rb   rt   rM   r}   r0   )r#   rn   Zt_origrQ   r4   r   r   r   test_ensure_future_task   s    

,z%BaseTaskTests.test_ensure_future_taskc                 C   s   G dd d}|  t tjdd }W d    n1 s<0    Y  t }| | tj|| |d}|| | dksJ d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z6BaseTaskTests.test_ensure_future_awaitable.<locals>.Awc                 S   s
   || _ d S r	   r8   r#   r8   r   r   r   __init__  s    z?BaseTaskTests.test_ensure_future_awaitable.<locals>.Aw.__init__c                 s   s   | j E d H S r	   r   r"   r   r   r   r1   
  s    z@BaseTaskTests.test_ensure_future_awaitable.<locals>.Aw.__await__N)r&   r'   r(   r   r1   r   r   r   r   Aw  s   r   c                   S   s   dS rl   r   r   r   r   r   r8     s    z8BaseTaskTests.test_ensure_future_awaitable.<locals>.coror;   rm   )	rw   rx   r
   ry   rb   rt   rj   rO   rp   )r#   r   r8   r4   ra   r   r   r   test_ensure_future_awaitable  s    (

z*BaseTaskTests.test_ensure_future_awaitablec                 C   s8   |  t td W d    n1 s*0    Y  d S rl   )rM   	TypeErrorr
   rj   r"   r   r   r   test_ensure_future_neither  s    z(BaseTaskTests.test_ensure_future_neitherc                 C   sZ   t  }| | j}| td t j||d W d    n1 sD0    Y  |  d S )NzRThe future belongs to a different loop than the one specified as the loop argumentr;   )r
   rb   r>   r4   rc   r}   rj   r0   )r#   r4   r~   r   r   r   test_ensure_future_error_msg  s
    ,z*BaseTaskTests.test_ensure_future_error_msgc                    s@   d  fdd fdd fdd}j |  d S )Nc                      s     I d H  d S r	   r   r   )barr   r   foo(  s    z)BaseTaskTests.test_get_stack.<locals>.fooc                     sh    j dd} z| d jjd W d } nd } 0 t } jd|d |d | }	|d d S )Nr   )limitr   r   )r   filezfoo\(\) running)
Z	get_stackrK   f_codeco_nameioStringIOprint_stackseekreadassertRegex)r~   r   tb)Tr#   r   r   r   +  s    
z)BaseTaskTests.test_get_stack.<locals>.barc                      s    t j jd  I d H  d S r:   )r
   rj   r4   r   )r   r   r#   r   r   runner:  s    z,BaseTaskTests.test_get_stack.<locals>.runnerr4   rO   )r#   r   r   )r   r   r   r#   r   test_get_stack%  s
    zBaseTaskTests.test_get_stackc           	      C   sX  | j d dd }| |jd | |jd | |jt t|\}}d||f }| }d}| |jd | |j| | 	| j |}|
t  t|d||jdd	}| t|d
|  |  | t|d|  | tj| j j| t|d||j}| t|d|  | 	| j | }| j | t|d||j}| t|d|  d S )NFc                      s   dS Nabcr   r   r   r   r   rn   D  s    z-BaseTaskTests.test_task_repr.<locals>.notmuchrn   z#\w+.test_task_repr.<locals>.notmuch%s:%srunningTr   0<Task pending name='TestTask' %s cb=[<Dummy>()]>z3<Task cancelling name='TestTask' %s cb=[<Dummy>()]>ro   z#<Task cancelled name='TestTask' %s>z/<Task finished name='TestTask' %s result='abc'>)r4   	set_debugrK   r&   r   r(   r'   
test_utilsget_function_sourcer9   add_done_callbackr!   r   _source_tracebackreprrL   rM   r
   rN   rO   )	r#   rn   filenamelinenor   gencoro_qualnamerQ   r8   r   r   r   test_task_reprA  sT    



zBaseTaskTests.test_task_reprc                 C   s   dd }|  | j| d }|  | j| d }| t|t| tdt|}| | tdt|}| | | t|	dt|	d | j
| | j
| d S )Nc                      s   dS N{   r   r   r   r   r   rn   u  s    z;BaseTaskTests.test_task_repr_autogenerated.<locals>.notmuchz ^<Task pending name='Task-(\d+)'r   )r9   r4   ZassertNotEqualr   rematchassertIsNotNoneZ
assertLessintgrouprO   )r#   rn   t1t2Zmatch1Zmatch2r   r   r   test_task_repr_autogeneratedt  s    

 z*BaseTaskTests.test_task_repr_autogeneratedc                 C   sD   dd }|  | j| }|dh | | d | j| d S )Nc                      s   dS r   r   r   r   r   r   rn     s    z:BaseTaskTests.test_task_repr_name_not_str.<locals>.notmuch   z{6})r9   r4   set_namerK   get_namerO   )r#   rn   rQ   r   r   r   test_task_repr_name_not_str  s
    z)BaseTaskTests.test_task_repr_name_not_strc                 C   s  | j d | t tjdd }W d    n1 s:0    Y  | |jd | |j	d | |j
t | }d}d}| |j| | |j	| tjrtjrt|\}}|jd }d||||d |d	 f }n|j}	d
||	j|	jf }| t|d|  | | j |}
|
t  tjr8dt| }n|j}	d|	j|	jf }t|d||
jtj d}| t|
d|  | j |
 d S )NFc                   S   s   dS r   r   r   r   r   r   rn     s    z<BaseTaskTests.test_task_repr_coro_decorator.<locals>.notmuchrn   z4\w+.test_task_repr_coro_decorator\.<locals>\.notmuchr   z0%s() running, defined at %s:%s, created at %s:%sr   r   z%s() running at %s:%sz<CoroWrapper %s>r   r   r   r   )r4   r   rw   rx   r
   ry   rK   r&   r   r(   r'   r   r   r   r   r   gi_codeco_filenameco_firstlinenor   r9   r   r!   r   rO   )r#   rn   r   Z	coro_namer   r   r   r   r8   coderQ   r   r   r   r   test_task_repr_coro_decorator  sX    (

z+BaseTaskTests.test_task_repr_coro_decoratorc                 C   sv   | j d dd }| | j }| | j ||}t| j  | t|dt	t|  |
d  | j | d S )NFc                    s
   | I d H S r	   r   r`   r   r   r   wait_for  s    z7BaseTaskTests.test_task_repr_wait_for.<locals>.wait_forz<Task .* wait_for=%s>)r4   r   r>   r9   r   run_brieflyr   r   r   escaper|   rO   )r#   r   ra   rh   r   r   r   test_task_repr_wait_for  s    

z%BaseTaskTests.test_task_repr_wait_forc              	   C   s   t d | jd dd }| t" tt|d}W d    n1 sP0    Y  | j	|d}d|_
| |jj W d    n1 s0    Y  t|j}d}| || d S )NTc                    s   t dI d H  d S Nr   r
   sleep)xyr   r   r   func  s    z>BaseTaskTests.test_task_repr_partial_corowrapper.<locals>.funcr      FzL<coroutine object \w+\.test_task_repr_partial_corowrapper\.<locals>\.func at)r   r4   r   rw   rx   r
   ry   	functoolspartialcreate_task_log_destroy_pending
addCleanupZ_coror0   r   r   )r#   r   Zpartial_funcrh   Z	coro_reprexpectedr   r   r   "test_task_repr_partial_corowrapper  s    
0,
z0BaseTaskTests.test_task_repr_partial_corowrapperc                    s<    fdd}dd  dd | }|  | j|d d S )Nc                     s      I d H }  I d H }| | S r	   r   )abinner1inner2r   r   outer  s    z-BaseTaskTests.test_task_basics.<locals>.outerc                      s   dS r*   r   r   r   r   r   r     s    z.BaseTaskTests.test_task_basics.<locals>.inner1c                      s   dS )Ni  r   r   r   r   r   r     s    z.BaseTaskTests.test_task_basics.<locals>.inner2i  )rK   r4   rO   )r#   r   rQ   r   r   r   test_task_basics  s
    zBaseTaskTests.test_task_basicsc                    s^   t     dd  fdd}z$ | } | W    n
   0 d S )Nc                      s   t d S r	   r}   r   r   r   r   raise_error  s    zFBaseTaskTests.test_exception_chaining_after_await.<locals>.raise_errorc                     s   zt dW n ty }  z~  }z|I d H  W nT ty }  z<t| t | j}t||jft df W Y d } ~ n
d } ~ 0 0 W Y d } ~ n
d } ~ 0 0 d S )N   )r   )KeyError	Exceptionr9   rK   r   r}   r   r   )r   rh   chainedr4   r   r#   r   r   rX     s    z>BaseTaskTests.test_exception_chaining_after_await.<locals>.run)r
   rb   rt   r9   rO   r0   r#   rX   rh   r   r   r   #test_exception_chaining_after_await  s    
z1BaseTaskTests.test_exception_chaining_after_awaitc                    sp   d  t   dd  fdd}z$| }| W   n
  0  d d S )Nc                    s   | d S r	   r   )r   r   r   r   process_exc(  s    zYBaseTaskTests.test_exception_chaining_after_await_with_context_cycle.<locals>.process_excc                     s   zt dW nx ty }  z`| }z|I d H  W n4 tyn }  z| | ju  d | _W Y d } ~ n
d } ~ 0 0 W Y d } ~ n
d } ~ 0 0 d S )Nr   )r   r   r9   BaseExceptionr   )r   rh   Z	has_cycler4   r   r#   r   r   rX   +  s    
zQBaseTaskTests.test_exception_chaining_after_await_with_context_cycle.<locals>.runF)r
   rb   rt   r9   rO   r0   rK   r   r   r   r   6test_exception_chaining_after_await_with_context_cycle!  s    
zDBaseTaskTests.test_exception_chaining_after_await_with_context_cyclec                    s    fdd}  |}dd } || }||j  tj || W d    n1 sd0    Y   |	   |
   |  d S )Nc                  3   s   d V }   d|  dV  d S N      $@r   assertAlmostEqualZwhenr"   r   r   r   B  s    z&BaseTaskTests.test_cancel.<locals>.genc                      s   t dI d H  dS )Nr      r   r   r   r   r   rh   I  s    z'BaseTaskTests.test_cancel.<locals>.task)rC   r9   	call_soonrL   rM   r
   rN   rO   rI   ro   	cancelledassertFalse)r#   r   r4   rh   rQ   r   r"   r   test_cancel@  s    
(zBaseTaskTests.test_cancelc              
      s   g d}|D ]\ }j  d t  dd  fdd}| }tj}| W d    n1 s0    Y  |j}	|j
d t|}	|tj|df W d    q1 s0    Y  qd S )	N)r   r   )r	   r   )rH   r   )   r   cancel_argsc                      s   t dI d H  d S N
   r   r   r   r   r   r   c  s    zHBaseTaskTests.test_cancel_with_message_then_future_result.<locals>.sleepc                     sJ     } tdI d H  | j   t| gI d H \}}|   d S r   )r9   r
   r   rL   waitrp   rh   ro   pendingr   r4   r#   r   r   r   r8   f  s
    
zGBaseTaskTests.test_cancel_with_message_then_future_result.<locals>.coror   r   subTestr
   rb   rt   r9   rM   rN   rO   	exceptionrK   r   r    r#   casesexpected_argsr8   rh   cmr   actualr   r   r   +test_cancel_with_message_then_future_resultU  s     
(
z9BaseTaskTests.test_cancel_with_message_then_future_resultc              
      s   g d}|D ]\ }j  d t  dd  fdd}| }tj}| W d    n1 s0    Y  |j}	|j
d t|}	|tj|df W d    q1 s0    Y  qd S )	Nr   r   c                      s   t dI d H  d S r   r   r   r   r   r   r     s    zKBaseTaskTests.test_cancel_with_message_then_future_exception.<locals>.sleepc                     sJ     } tdI d H  | j   t| gI d H \}}|   d S r   r9   r
   r   rL   r   r   r   r   r   r   r8     s
    
zJBaseTaskTests.test_cancel_with_message_then_future_exception.<locals>.coror   r   r   r   r   r   r   .test_cancel_with_message_then_future_exceptionw  s     
(
z<BaseTaskTests.test_cancel_with_message_then_future_exceptionc                    s   t     dd  fdd} | }t j} | W d    n1 sd0    Y  |j}|j	d t
|}|t jddf d S )Nc                      s   t dI d H  d S r   r   r   r   r   r   r     s    zJBaseTaskTests.test_cancel_with_message_before_starting_task.<locals>.sleepc                     s:      } | d t| gI d H \}}|   d S )NrH   )r9   rL   r
   r   r   r   r4   r#   r   r   r   r8     s    
zIBaseTaskTests.test_cancel_with_message_before_starting_task.<locals>.coror   r   r   )r
   rb   rt   r9   rM   rN   rO   r   rK   r   r    )r#   r8   rh   r   r   r  r   r  r   -test_cancel_with_message_before_starting_task  s    
(
z;BaseTaskTests.test_cancel_with_message_before_starting_taskc                 C   s   |  t tjdd }W d    n1 s.0    Y  | | j| }t| j |  | 	tj
| jj| | |  | |  | |  d S )Nc                   s   s   d V  d V  dS Nr   r   r   r   r   r   rh     s    z-BaseTaskTests.test_cancel_yield.<locals>.task)rw   rx   r
   ry   r9   r4   r   r   rL   rM   rN   rO   rI   ro   r   r   r#   rh   rQ   r   r   r   test_cancel_yield  s    (zBaseTaskTests.test_cancel_yieldc                    s   |  | j  fdd}| | j| }t| j    | tj | j	| W d    n1 sj0    Y  | 
   | 
|  d S )Nc                      s    I d H  dS r  r   r   r~   r   r   rh     s    
z4BaseTaskTests.test_cancel_inner_future.<locals>.task)r>   r4   r9   r   r   rL   rM   r
   rN   rO   rI   r   r  r   r
  r   test_cancel_inner_future  s    *z&BaseTaskTests.test_cancel_inner_futurec                    s   |  | j  fdd}| | j| }t| j    |  | tj | j	| W d    n1 sr0    Y  | 
|  | 
   | 
|  d S )Nc                      s    I d H  dS r  r   r   r
  r   r   rh     s    
zBBaseTaskTests.test_cancel_both_task_and_inner_future.<locals>.task)r>   r4   r9   r   r   rL   rM   r
   rN   rO   rI   ro   r   r  r   r
  r   &test_cancel_both_task_and_inner_future  s    *z4BaseTaskTests.test_cancel_both_task_and_inner_futurec                    s   |  | j |  | j fdd}| | j| }t| j | |j   d  t| j | |j |  | 	
  | j|}| |d | |
  d S )Nc                      s4    I d H  zI d H  W n t jy.   Y dS 0 d S r*   r
   rN   r   fut1fut2r   r   rh     s
    
z5BaseTaskTests.test_cancel_task_catching.<locals>.taskr+   r>   r4   r9   r   r   rq   _fut_waiterr|   rL   rI   r   rO   rK   r   r#   rh   rQ   resr   r  r   test_cancel_task_catching  s    
z'BaseTaskTests.test_cancel_task_catchingc                    s   |  | j |  | j|  | j fdd}| | j| }t| j | |j   d  t| j | |j |  | 	
  t| j | |j d | j|}| |d | 
  | |
  d S )Nc                     s<    I d H  zI d H  W n t jy,   Y n0 I d H } | S r	   r  )r  r  r  Zfut3r   r   rh     s    

z5BaseTaskTests.test_cancel_task_ignoring.<locals>.taskr+   r  r  r   r  r   test_cancel_task_ignoring  s&    	

z'BaseTaskTests.test_cancel_task_ignoringc                    s   t  } |  fdd} ||     t j|j  	
   	   j    d S )Nc                      s(       j tdI d H  dS )Nr\   r   )rL   rI   _must_cancelr
   r   r   r#   rQ   r   r   rh     s    z4BaseTaskTests.test_cancel_current_task.<locals>.taskr
   rb   rt   r9   r   r   rM   rN   rO   rI   ro   r  rL   r#   r4   rh   r   r  r   test_cancel_current_task  s    

z&BaseTaskTests.test_cancel_current_taskc                    s   t  } |  fdd} ||     t j|j  	
   	   j    dS )z+coroutine end right after task is cancelledc                      s       j dS r  )rL   rI   r  r   r  r   r   rh   3  s    z.BaseTaskTests.test_cancel_at_end.<locals>.taskNr  r  r   r  r   test_cancel_at_end.  s    

z BaseTaskTests.test_cancel_at_endc                    s   t  fdd d    fddfdd}| t j  W d    n1 s0    Y  	  	   	  d S )Nc                      s      S r	   r0   r   r;   r   r   r?   I  r@   z8BaseTaskTests.test_cancel_awaited_task.<locals>.<lambda>c                      s    I d H  d S r	   r   r   r`   r   r   nestedN  s    z6BaseTaskTests.test_cancel_awaited_task.<locals>.nestedc                      s4      tdI d H    I d H  d S r   r9   r
   r   rL   r   )r4   r  nested_taskr#   rh   r   r   r8   Q  s    z4BaseTaskTests.test_cancel_awaited_task.<locals>.coro)
r
   rb   r   r>   r9   rM   rN   rO   rI   r   r   r   )ra   r4   r  r!  r#   rh   r   test_cancel_awaited_taskA  s    
(z&BaseTaskTests.test_cancel_awaited_taskc                 C   s"   ||vrt d|d| dd S )Nztext z not found in:
>>>z<<<rd   )r#   textsubstrr   r   r   assert_text_containse  s    z"BaseTaskTests.assert_text_containsc                    s   t     dd  fdd} | }z | W n4 t jyz   t }|d |d Y n0 	d d S )Nc                      s   t dI d H  d S r   r   r   r   r   r   r  o  s    zEBaseTaskTests.test_cancel_traceback_for_future_result.<locals>.nestedc                     s4      } tdI d H  |   | I d H  d S r   r   rg   r4   r  r#   r   r   r8   s  s    zCBaseTaskTests.test_cancel_traceback_for_future_result.<locals>.coroawait asyncio.sleep(10)zawait task  # search targetCancelledError did not occur
r
   rb   rt   r9   rO   rN   	traceback
format_excr&  failr#   r8   rh   r   r   r'  r   'test_cancel_traceback_for_future_resulti  s    
z5BaseTaskTests.test_cancel_traceback_for_future_resultc                    s   t     dd  fdd} | }z | W n4 t jyz   t }|d |d Y n0 	d d S )Nc                      s   t dI d H  d S r   r   r   r   r   r   r    s    zHBaseTaskTests.test_cancel_traceback_for_future_exception.<locals>.nestedc                     sH      } tdI d H  |   t| gI d H \}}|   d S r   r  r   r'  r   r   r8     s
    zFBaseTaskTests.test_cancel_traceback_for_future_exception.<locals>.coror(  z!task.exception()  # search targetr)  r*  r.  r   r'  r   *test_cancel_traceback_for_future_exception  s    

z8BaseTaskTests.test_cancel_traceback_for_future_exceptionc                    s   fdd} | d fdd} | }t} | W d    n1 s`0    Y  t|jd |	  d 
d   |  tj j| d S )	Nc                  3   s@   d V }   d|  dV }   d|  dV }   d|  dV  d S )N皙?皙?333333?r   r   r"   r   r   r     s    z:BaseTaskTests.test_stop_while_run_in_complete.<locals>.genr   c                      s6   dk r2t dI d H  d7 dkr    q d S )Nr   r1  r   r   )r
   r   stopr   )r4   r   r   r   rh     s
    z;BaseTaskTests.test_stop_while_run_in_complete.<locals>.taskz+Event loop stopped before Future completed.r   r3  )rC   r9   rM   rd   rO   rK   strr   r   ro   r   timerL   r
   rN   )r#   r   rh   rQ   r   r   )r4   r#   r   r   test_stop_while_run_in_complete  s    	
(z-BaseTaskTests.test_stop_while_run_in_completec                 C   sZ   dd }|  | j| }| td d|_W d    n1 s@0    Y  | j| d S )Nc                      s   d S r	   r   r   r   r   r   r8     s    z.BaseTaskTests.test_log_traceback.<locals>.corozcan only be set to FalseT)r9   r4   rc   r}   Z_log_tracebackrO   r#   r8   rh   r   r   r   test_log_traceback  s
    $z BaseTaskTests.test_log_tracebackc                    sj    fdd}  |} |}|d |t|d} |d  |   	d|
  d S )Nc                  3   s   d V }   d|  d S r   r   r   r"   r   r   r     s    zMBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_future_done.<locals>.genro   r   )rC   r>   r|   rO   r
   r   rK   rI   ro   r   r6  )r#   r   r4   ra   retr   r"   r   2test_wait_for_timeout_less_then_0_or_0_future_done  s    


z@BaseTaskTests.test_wait_for_timeout_less_then_0_or_0_future_donec                    s   fdd} |}d  fdd}tj$ |t| d W d    n1 s\0    Y  d|   d d S )Nc                  3   s   d V }   d|  d S r   r   r   r"   r   r   r     s    zZBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started.<locals>.genFc                      s   d d S NTr   r   )foo_startedr   r   r     s    zZBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started.<locals>.foor   )	rC   rM   r
   TimeoutErrorrO   r   r   r6  rK   r#   r   r4   r   r   )r=  r#   r   ?test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started  s    
2zMBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_startedc              
      s   fdd}dD ]}j |d |}d   fdd}|| }tj" |t|| W d    n1 s~0    Y  |	  |
  d|   d W d    q1 s0    Y  qd S )	Nc                  3   s(   d V }   d|  dV }   d|  d S )Nr2  r   r   r   r"   r   r   r     s    zABaseTaskTests.test_wait_for_timeout_less_then_0_or_0.<locals>.gen)r   r   timeoutc                      s(   d zt dI d H  W d nd 0 dS NTr2  Fro   r   r   foo_runningr   r   r     s
    zABaseTaskTests.test_wait_for_timeout_less_then_0_or_0.<locals>.foor   F)r   rC   r9   rM   r
   r>  rO   r   rI   ro   r   r   r6  rK   )r#   r   rB  r4   r   ra   r   rE  r#   r   &test_wait_for_timeout_less_then_0_or_0  s    
	0z4BaseTaskTests.test_wait_for_timeout_less_then_0_or_0c                    s   fdd} |}d   fdd}|| }tj" |t|d W d    n1 sh0    Y  |  |	  
d|   d d S )Nc                  3   s.   d V }   d|  dV }   d|  dV } d S )Nr2  r   r1  r   r   r"   r   r   r     s
    z(BaseTaskTests.test_wait_for.<locals>.genc                      s(   d zt dI d H  W d nd 0 dS rC  r   r   rD  r   r   r     s
    z(BaseTaskTests.test_wait_for.<locals>.foor1  F)rC   r9   rM   r
   r>  rO   r   rI   ro   r   r   r6  rK   r#   r   r4   r   ra   r   rF  r   test_wait_for  s    
	0zBaseTaskTests.test_wait_forc                 C   s6   |   }dd }|tj| d d}| |d d S )Nc                      s   dS )Nro   r   r   r   r   r   r8   3  s    z2BaseTaskTests.test_wait_for_blocking.<locals>.cororA  ro   )rC   rO   r
   r   rK   )r#   r4   r8   r  r   r   r   test_wait_for_blocking0  s    z$BaseTaskTests.test_wait_for_blockingc              	      s    fdd}  |}dd }t| zZ || } tj" |t|d W d    n1 sl0    Y  W td  ntd  0  d|	   
|   
|  d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )Nr2  r   {Gz?r   r   r"   r   r   r   ;  s
    z9BaseTaskTests.test_wait_for_with_global_loop.<locals>.genc                      s   t dI d H  dS )Nr2  ro   r   r   r   r   r   r   D  s    z9BaseTaskTests.test_wait_for_with_global_loop.<locals>.foorK  )rC   r
   rt   r9   rM   r>  rO   r   r   r6  rI   ro   r   rH  r   r"   r   test_wait_for_with_global_loop9  s    

2z,BaseTaskTests.test_wait_for_with_global_loopc                 C   sT   dd }|  |}| |}tj|dd}|d|jd ||}| |d d S )Nc                   s   s   dV  dV  dV  d S )Nr1  r   r   r   r   r   r   V  s    z7BaseTaskTests.test_wait_for_race_condition.<locals>.genr2  rA  r1  rm   )rC   r>   r
   r   
call_laterr|   rO   rK   )r#   r   r4   ra   rh   r  r   r   r   test_wait_for_race_conditionT  s    


z*BaseTaskTests.test_wait_for_race_conditionc                    s$   dd   fdd}t |  d S )Nc                      s@   t tj  tdI d H  W d    n1 s20    Y  dS Nr   )
contextlibsuppressr
   rN   r   r   r   r   r   innerd  s    .zFBaseTaskTests.test_wait_for_cancellation_race_condition.<locals>.innerc                     s&   t j  ddI d H } | dks"J d S )NrK  rA  r   )r
   r   rp   rR  r   r   maini  s    zEBaseTaskTests.test_wait_for_cancellation_race_condition.<locals>.main)r
   rX   r#   rU  r   rT  r   )test_wait_for_cancellation_race_conditionc  s    z7BaseTaskTests.test_wait_for_cancellation_race_conditionc                    s   t    j d fdd}t j} |  W d    n1 sV0    Y   |jj	}
t|t j d S )NFc                     s2   fdd}   |  }tj|tdI d H  d S )Nc                      sP   zDzt dI d H  W n& t jy<   t tI d H   Y n0 W d nd 0 d S )Nr2  Tr
   r   rN   _EPSILONr   	task_doner   r   rR  v  s    
zSBaseTaskTests.test_wait_for_waits_for_task_cancellation.<locals>.foo.<locals>.innerrA  r9   r
   r   rY  rR  
inner_taskr4   r#   r[  r   r   r   u  s    
zDBaseTaskTests.test_wait_for_waits_for_task_cancellation.<locals>.foor
   rb   r   r0   rM   r>  rO   rI   r   r   rK   r   rN   r#   r   r   r   r   r_  r   )test_wait_for_waits_for_task_cancellationo  s    *
z7BaseTaskTests.test_wait_for_waits_for_task_cancellationc                    s   t    j d fdd}t j} |  W d    n1 sV0    Y   |jj	}
t|t j d S )NFc                     sB   fdd}   |  }ttI d H  tj|ddI d H  d S )Nc                      sP   zDzt dI d H  W n& t jy<   t tI d H   Y n0 W d nd 0 d S )Nr   TrX  r   rZ  r   r   rR    s    
z_BaseTaskTests.test_wait_for_waits_for_task_cancellation_w_timeout_0.<locals>.foo.<locals>.innerr   rA  )r9   r
   r   rY  r   r]  r_  r   r   r     s    
zPBaseTaskTests.test_wait_for_waits_for_task_cancellation_w_timeout_0.<locals>.foor`  ra  r   r_  r   5test_wait_for_waits_for_task_cancellation_w_timeout_0  s    *
zCBaseTaskTests.test_wait_for_waits_for_task_cancellation_w_timeout_0c                    sn   t  j G dd dt  fdd}  |  W d    n1 s`0    Y  d S )Nc                   @   s   e Zd ZdS )zXBaseTaskTests.test_wait_for_reraises_exception_during_cancellation.<locals>.FooExceptionNr&   r'   r(   r   r   r   r   FooException  s   re  c                     s2    fdd}  |  }tj|tdI d H  d S )Nc                      s$   zt dI d H  W  n 0 d S Nr2  r   r   )re  r   r   rR    s    z^BaseTaskTests.test_wait_for_reraises_exception_during_cancellation.<locals>.foo.<locals>.innerrA  r\  r]  re  r4   r#   r   r   r     s    zOBaseTaskTests.test_wait_for_reraises_exception_during_cancellation.<locals>.foo)r
   rb   r   r0   r   rM   rO   r#   r   r   rg  r   4test_wait_for_reraises_exception_during_cancellation  s    zBBaseTaskTests.test_wait_for_reraises_exception_during_cancellationc                    s2   t    j  fdd} |  d S )Nc                     s   dd }   |  }tj|dd}  |}tdI d H  |  tj |I d H  W d    n1 st0    Y  |I d H d d S )Nc                      sh   zt dI d H  W nN t jyb   zt dI d H  W n$ t jy\   t dI d H  Y n0 Y n0 dS )Nr3  r+   )r
   r   rN   r   r   r   r   rR    s    zIBaseTaskTests.test_wait_for_self_cancellation.<locals>.foo.<locals>.innerr1  rA  r2  r+   )r9   r
   r   r   rL   rM   rN   rK   )rR  r^  r   rh   r4   r#   r   r   r     s    (z:BaseTaskTests.test_wait_for_self_cancellation.<locals>.foo)r
   rb   r   r0   rO   rh  r   rj  r   test_wait_for_self_cancellation  s    z-BaseTaskTests.test_wait_for_self_cancellationc                    s   fdd} |}|td |td fdd}||| }|d d|  ||| }d|  |d d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S Nr1  r   333333?r   r   r"   r   r   r     s
    z$BaseTaskTests.test_wait.<locals>.genr1  rm  c                     s>   t  gI d H \} }| t g |t  dS r*   r
   r   rK   setro   r   r   r   r#   r   r   r     s    z$BaseTaskTests.test_wait.<locals>.foor+   rC   r9   r
   r   rO   rK   r   r6  r#   r   r4   r   r  r   rq  r   	test_wait  s    
zBaseTaskTests.test_waitc                    sx   fdd} |}|td |td fdd}t| ||| }|d d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )NrK  r   Q?r   r   r"   r   r   r     s
    z5BaseTaskTests.test_wait_with_global_loop.<locals>.genrK  ru  c                     s>   t  gI d H \} }| t g |t  dS r*   rn  rp  rq  r   r   r     s    z5BaseTaskTests.test_wait_with_global_loop.<locals>.foor+   )rC   r9   r
   r   rt   rO   rK   rs  r   rq  r   test_wait_with_global_loop  s    

z(BaseTaskTests.test_wait_with_global_loopc              	   C   s   |  t tjdd }W d    n1 s.0    Y  |d}| | jt|||dg}|  t  | j|\}}W d    n1 s0    Y  | | | 	t
dd |D ddh d S )Nc                 S   s   | S r	   r   sr   r   r   r8     s    z:BaseTaskTests.test_wait_duplicate_coroutines.<locals>.corori   spamc                 s   s   | ]}|  V  qd S r	   rS  rY   r~   r   r   r   	<genexpr>#  r@   z?BaseTaskTests.test_wait_duplicate_coroutines.<locals>.<genexpr>)rw   rx   r
   ry   r9   r4   r   rO   r   rK   ro  )r#   r8   crh   ro   r   r   r   r   test_wait_duplicate_coroutines  s    (.
z,BaseTaskTests.test_wait_duplicate_coroutinesc                 C   sR   |  t| jjtt  td}tj|gdd}|  t| jj| |  d S )Nr   r   return_when)	rM   r}   r4   rO   r
   r   ro  r   r0   )r#   Z
sleep_coroZ	wait_coror   r   r   test_wait_errors%  s    

zBaseTaskTests.test_wait_errorsc                    s    fdd}  |} |td} |td} |tj||gtjd}||\}} |h|  |h|  |	   
|	   |   d|  |d |t||g d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )Nr   r   r1  r   r   r"   r   r   r   4  s
    z4BaseTaskTests.test_wait_first_completed.<locals>.genr   r1  r~  r   )rC   r9   r
   r   r   FIRST_COMPLETEDrO   rK   r   ro   rI   assertIsNonerp   r   r6  advance_time)r#   r   r4   r   r   rh   ro   r   r   r"   r   test_wait_first_completed2  s"    

z'BaseTaskTests.test_wait_first_completedc                 C   s   dd }dd }|  | j| }|  | j| }|  | jtj||gtjd}| j|\}}| ||h| | |  | 	|
  | |  | 	|
  d S )Nc                      s   t dI d H  d S r   r   r   r   r   r   coro1S  s    z2BaseTaskTests.test_wait_really_done.<locals>.coro1c                      s$   t dI d H  t dI d H  d S r   r   r   r   r   r   coro2V  s    z2BaseTaskTests.test_wait_really_done.<locals>.coro2r~  )r9   r4   r
   r   r  rO   rK   rI   ro   r  rp   )r#   r  r  r   r   rh   ro   r   r   r   r   test_wait_really_doneO  s    z#BaseTaskTests.test_wait_really_donec           	         s    fdd}  |} |td}dd } || } |tj||gtjd}||\}} |h|  |h|  d|	  |
d |t||g d S )	Nc                  3   s   d V }   d|  dV  d S r   r   r   r"   r   r   r   i  s    z4BaseTaskTests.test_wait_first_exception.<locals>.genr   c                      s   t dd S )Nerr)ZeroDivisionErrorr   r   r   r   r   s  s    z4BaseTaskTests.test_wait_first_exception.<locals>.excr~  r   r   rC   r9   r
   r   r   FIRST_EXCEPTIONrO   rK   r   r6  r  	r#   r   r4   r   r   r   rh   ro   r   r   r"   r   test_wait_first_exceptiong  s    

z'BaseTaskTests.test_wait_first_exceptionc           	         s    fdd}  |} |td}dd } || }tj||gtjd}||\}} |h|  |h|  d|	  |
d |t||g d S )	Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )Nr   r   rK  r   r   r"   r   r   r     s
    z<BaseTaskTests.test_wait_first_exception_in_wait.<locals>.genr   c                      s   t dI d H  tdd S )NrK  r  r
   r   r  r   r   r   r   r     s    z<BaseTaskTests.test_wait_first_exception_in_wait.<locals>.excr~  rK  r   r  r  r   r"   r   !test_wait_first_exception_in_wait  s    

z/BaseTaskTests.test_wait_first_exception_in_waitc                    s   fdd} |}|td dd }||  fdd}|||  d|  |||  d|  d S )	Nc                  3   s.   d V }   d|  dV }   d|  dV  d S rl  r   r   r"   r   r   r     s
    z3BaseTaskTests.test_wait_with_exception.<locals>.genr1  c                      s   t dI d H  tdd S )Nrm  Zreallyr  r   r   r   r   sleeper  s    z7BaseTaskTests.test_wait_with_exception.<locals>.sleeperc                     s\   t  gI d H \} }t| d |t  tdd | D }t|d d S )Nr   c                 s   s   | ]}|  d ur|V  qd S r	   )r   rz  r   r   r   r{    r@   zFBaseTaskTests.test_wait_with_exception.<locals>.foo.<locals>.<genexpr>r   )r
   r   rK   lenro  )ro   r   errorsrq  r   r   r     s
    z3BaseTaskTests.test_wait_with_exception.<locals>.foorm  )rC   r9   r
   r   rO   r   r6  )r#   r   r4   r  r   r   rq  r   test_wait_with_exception  s    
z&BaseTaskTests.test_wait_with_exceptionc                    s   fdd} |}|td |td fdd}|||  d|  |d |t g d S )	Nc                  3   s@   d V }   d|  dV }   d|  dV }   d|  dV  d S )Nr1  r   rm  )\(?r   r   r"   r   r   r     s    z1BaseTaskTests.test_wait_with_timeout.<locals>.genr1  rm  c                     sD   t j gddI d H \} }| t g |tg d S )Nr  rA  rn  rp  rq  r   r   r     s    z1BaseTaskTests.test_wait_with_timeout.<locals>.foor  r   )	rC   r9   r
   r   rO   r   r6  r  r   r?  r   rq  r   test_wait_with_timeout  s    	

z$BaseTaskTests.test_wait_with_timeoutc                    s    fdd}  |} |td} |td}|tj||gdd\}} |t|g  |t|g  d|	  |
d |t||g d S )Nc                  3   s@   d V }   d|  dV }   d|  dV }   d|  dV  d S rl  r   r   r"   r   r   r     s    z8BaseTaskTests.test_wait_concurrent_complete.<locals>.genr1  rm  rA  r   )rC   r9   r
   r   rO   r   rK   ro  r   r6  r  )r#   r   r4   r   r   ro   r   r   r"   r   test_wait_concurrent_complete  s    	

z+BaseTaskTests.test_wait_concurrent_completec                    s~   fdd} |}|td |td fdd}||| }|d d|  d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S rl  r   r   r"   r   r   r     s
    z;BaseTaskTests.test_wait_with_iterator_of_tasks.<locals>.genr1  rm  c                     sB   t t gI d H \} }| t g |t  dS r*   )r
   r   iterrK   ro  rp  rq  r   r   r     s    z;BaseTaskTests.test_wait_with_iterator_of_tasks.<locals>.foor+   rr  rs  r   rq  r    test_wait_with_iterator_of_tasks  s    
z.BaseTaskTests.test_wait_with_iterator_of_tasksc                    s  dd }|  |d_t d| t& tjfdd}W d    n1 sX0    Y  |dd |dd	|d
d fdd}| t$}| | }W d    n1 s0    Y  | 	|j
d jt | d
  | d|d d v  | d	|d d v  | 	|d d | t$ | | }W d    n1 sf0    Y  | d
  d S )Nc                   s   s   dV  dV  dV  dV  d S Nr   rK  r   r   r   r   r   r     s    z,BaseTaskTests.test_as_completed.<locals>.geng      ?Fc                 3   s@   t | E d H   | s<d v r<d v r<dd |S )Nr   r   TgQ?)r
   r   addr  )dtr   )	completedr4   time_shiftedr   r   r     s    

z0BaseTaskTests.test_as_completed.<locals>.sleeperrK  r   r   rm  r|  c                     s2   g } t j gdD ]}| |I d H  q| S r:   )r
   as_completedappend)valuesr~   )r   r   r|  r4   r   r   r   .  s    z,BaseTaskTests.test_as_completed.<locals>.foor   r   )rC   Zslow_callback_durationro  rw   rx   r
   ry   rO   r9   rK   warningsr   __file__r   r6  rI   )r#   r   r  r   wr  r   )r   r   r|  r  r4   r  r   test_as_completed  s,    
0	


24zBaseTaskTests.test_as_completedc                    s  dd }|  |tdd tdd fdd}| t$ | | }W d    n1 sz0    Y  | t	|d	| | |d
 d | |d d
 d	 | 
|d d tj | d  d t g d S )Nc                   s   s   d V  dV  dV  dV  d S )Nr   r1  r   r   r   r   r   r   B  s    z9BaseTaskTests.test_as_completed_with_timeout.<locals>.genr1  r   rm  r   c                     s   g } t j gddD ]d}| r*d z|I d H }| d|f W q t jyz } z| d|f W Y d }~qd }~0 0 q| S )NQ?rB  r4   g{Gz?r   r   )r
   r  r  r  r>  )r  r~   r-   r   r   r   r4   r   r   r   M  s    

&z9BaseTaskTests.test_as_completed_with_timeout.<locals>.foor   r   )r   r   r   r  r   )rC   r   r
   r   rw   rx   rO   r9   rK   r  assertIsInstancer>  r   r6  r  r   )r#   r   r   r  r   r  r   test_as_completed_with_timeout@  s    
2
z,BaseTaskTests.test_as_completed_with_timeoutc                    sp   dd } |tdd  fdd}t$ |  W d    n1 sb0    Y  d S )Nc                   s   s   d V  dV  dV  d S r  r   r   r   r   r   r   g  s    z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.genrK  r   c                     s2   t j gddD ]} | I d H }|d qd S )Nr   r  r   )r
   r  rK   )r~   r-   r   r4   r#   r   r   r   p  s    
z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.foo)rC   r
   r   rw   rx   rO   r9   )r#   r   r   r   r  r   %test_as_completed_with_unused_timeoute  s    
z3BaseTaskTests.test_as_completed_with_unused_timeoutc           	      C   s   dd }|  |}tdd}tdd}||h}| t" ttj||d}W d    n1 sd0    Y  | t|d |	|d	 }| |d | 
d|  |d |	|d
 }| |d | 
d|  d S )Nc                   s   s   dV  dV  dV  d S )Nr   皙?r   r   r   r   r   r   z  s    z9BaseTaskTests.test_as_completed_reverse_wait.<locals>.genr  r   r1  r   r;   r   r   r   )rC   r
   r   rw   rx   listr  rK   r  rO   r   r6  r  )	r#   r   r4   r   r   fsfutsr   r   r   r   r   test_as_completed_reverse_waitx  s    
0
z,BaseTaskTests.test_as_completed_reverse_waitc           
         s    fdd}  |}tdd}tdd}||h} t" ttj||d}W d    n1 sh0    Y   t|d t	|} t |
|\}}	W d    n1 s0    Y   tdd	 |D ddh d S )
Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )Nr  r   r   r   r"   r   r   r     s
    z7BaseTaskTests.test_as_completed_concurrent.<locals>.genr  r   r   r;   r   c                 s   s   | ]}|  V  qd S r	   rS  rz  r   r   r   r{    r@   z=BaseTaskTests.test_as_completed_concurrent.<locals>.<genexpr>)rC   r
   r   rw   rx   r  r  rK   r  r   rO   ro  )
r#   r   r4   r   r   r  r  waiterro   r   r   r"   r   test_as_completed_concurrent  s    
0
,z*BaseTaskTests.test_as_completed_concurrentc                    s    t tjdd  W d    n1 s.0    Y   t$ tj fdd}W d    n1 sl0    Y   t, j| }j| W d    n1 s0    Y  | }t	|ddh t
|d d S )Nc                 S   s   | S r	   r   rw  r   r   r   r8     s    zBBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.coroc                  3   s@   g }  d}t j|| dgjdD ]}| |E d H  q&| S )Nhamry  r;   )r
   r  r4   r  )rp   r|  r~   r8   r#   r   r   r     s    
zDBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.runnerr  ry  r   )rw   rx   r
   ry   r9   r4   rO   rp   rK   ro  r  )r#   r   ra   rp   r   r  r   &test_as_completed_duplicate_coroutines  s    (.*z4BaseTaskTests.test_as_completed_duplicate_coroutinesc                    sl    fdd}  |}dd } ||dd}||  |   | d  d|  d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )Nr  r1  r   r   r"   r   r   r     s
    z%BaseTaskTests.test_sleep.<locals>.genc                    s.   t | d I d H  t | d |I d H }|S )Nr   r   )r  argr  r   r   r   r    s    z)BaseTaskTests.test_sleep.<locals>.sleeperr1  yeah)	rC   r9   rO   rI   ro   rK   rp   r   r6  )r#   r   r4   r  rQ   r   r"   r   
test_sleep  s    

zBaseTaskTests.test_sleepc                    s   fdd} |}|tdd}d  |j fdd}||_t|  j |	  t| 
 j d S )Nc                  3   s   d V }   d|  dV  d S r   r   r   r"   r   r   r     s    z,BaseTaskTests.test_sleep_cancel.<locals>.genr   r  c                    s   | |g|R    S r	   r   )delaycallbackr   )handleorig_call_laterr   r   rM    s    z3BaseTaskTests.test_sleep_cancel.<locals>.call_later)rC   r9   r
   r   rM  r   r   r   Z
_cancelledrL   rI   )r#   r   r4   rQ   rM  r   )r  r  r#   r   test_sleep_cancel  s    


zBaseTaskTests.test_sleep_cancelc                    sZ   fdd} | dd  fdd}| } |d d   d S )	Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )Nr1  r     r   r   r"   r   r   r     s
    z9BaseTaskTests.test_task_cancel_sleeping_task.<locals>.genc                    s   t | I d H  d S r	   r   )r  r   r   r   r     s    z;BaseTaskTests.test_task_cancel_sleeping_task.<locals>.sleepc                     sL     d}  d| j z| I d H  W n tjyB   Y dS 0 dS d S )Nr  r1  r   zslept in)r9   rM  rL   r
   rN   )r  r  r   r   doit   s    z:BaseTaskTests.test_task_cancel_sleeping_task.<locals>.doitr   r1  )rC   rK   rO   r   r6  )r#   r   r  Zdoerr   r  r   test_task_cancel_sleeping_task  s    

z,BaseTaskTests.test_task_cancel_sleeping_taskc                    s   |  | j  fdd}| | j| }t| j | |j  |  t| j | t	j
| jj| | |j |    d S )Nc                      s    I d H  d S r	   r   r   r`   r   r   r8     s    z:BaseTaskTests.test_task_cancel_waiter_future.<locals>.coro)r>   r4   r9   r   r   rq   r  rL   rM   r
   rN   rO   r  rI   r   r8  r   r`   r   test_task_cancel_waiter_future  s    z,BaseTaskTests.test_task_cancel_waiter_futurec                 C   s   dd }| }|  | j|}| td |d W d    n1 sH0    Y  | td |t  W d    n1 s0    Y  | | j|d d S )Nc                      s   dS )Nr{   r   r   r   r   r   rn      s    z4BaseTaskTests.test_task_set_methods.<locals>.notmuchznot support set_resultrm   znot support set_exceptionr{   )	r9   r4   rc   rd   r|   set_exceptionr}   rK   rO   )r#   rn   r   rh   r   r   r   test_task_set_methods  s    (*
z#BaseTaskTests.test_task_set_methodsc                 C   sP   |  t tjdd }W d    n1 s.0    Y  | t| jj|  d S )Nc                   s   s   d V  dV  dS )Nr   r{   r   r   r   r   r   rn   2  s    z/BaseTaskTests.test_step_result.<locals>.notmuchrw   rx   r
   ry   rM   rd   r4   rO   )r#   rn   r   r   r   test_step_result0  s    (zBaseTaskTests.test_step_resultc                    s   G dd dt j}|| jd d  fdd}| | j| }t| j |  j t } 	| t| j | 
| | |  | |  d S )Nc                       s(   e Zd Z fddZ fddZ  ZS )z2BaseTaskTests.test_step_result_future.<locals>.Futc                    s   d| _ t j|i | d S NF)cb_addedrA   r   )r#   r   kwdsrF   r   r   r   ?  s    z;BaseTaskTests.test_step_result_future.<locals>.Fut.__init__c                    s   d| _ t j|i | d S r<  )r  rA   r   r#   r   kwargsrF   r   r   r   C  s    zDBaseTaskTests.test_step_result_future.<locals>.Fut.add_done_callbackr&   r'   r(   r   r   __classcell__r   r   rF   r   Fut>  s   r  r;   c                      s    I d H d S r	   r   r   ra   rp   r   r   wait_for_futureJ  s    z>BaseTaskTests.test_step_result_future.<locals>.wait_for_future)r
   r<   r4   r9   r   r   rI   r  objectr|   rq   ro   r  rp   )r#   r  r  rQ   r  r   r  r   test_step_result_future;  s    	
z%BaseTaskTests.test_step_result_futurec                    s   fdd} |}dd t   fdd}|| }t| |  |  ttj| 	|  |
  |   d S )Nc                  3   s   d V }   d|  dV  d S r   r   r   r"   r   r   r   [  s    z;BaseTaskTests.test_baseexception_during_cancel.<locals>.genc                      s   t dI d H  d S r   r   r   r   r   r   r  b  s    z?BaseTaskTests.test_baseexception_during_cancel.<locals>.sleeperc                      s.   z I d H  W n t jy(    Y n0 d S r	   r  r   )base_excr  r   r   notmutchg  s    z@BaseTaskTests.test_baseexception_during_cancel.<locals>.notmutch)rC   
SystemExitr9   r   r   rL   r   ro   rM   rI   r   rq   r   )r#   r   r4   r  rh   r   )r  r#   r  r    test_baseexception_during_cancelY  s    

z.BaseTaskTests.test_baseexception_during_cancelc                 C   s   dd }|  t| dd }|  t| | t tjdd }W d    n1 s^0    Y  | t| |  tt  d S )Nc                   S   s   d S r	   r   r   r   r   r   fnz  s    z2BaseTaskTests.test_iscoroutinefunction.<locals>.fnc                   s   s
   d V  d S r	   r   r   r   r   r   fn1  s    z3BaseTaskTests.test_iscoroutinefunction.<locals>.fn1c                   s   s
   d V  d S r	   r   r   r   r   r   fn2  s    z3BaseTaskTests.test_iscoroutinefunction.<locals>.fn2)	r   r
   iscoroutinefunctionrw   rx   ry   rI   r   Mock)r#   r  r  r  r   r   r   test_iscoroutinefunctiony  s    (z&BaseTaskTests.test_iscoroutinefunctionc                    s   |  | j | t" tj fdd}W d    n1 s>0    Y  | }| t | j| W d    n1 sz0    Y  | 	 
  d S )Nc                   3   s
    V  d S r	   r   r   r`   r   r   r    s    z?BaseTaskTests.test_yield_vs_yield_from.<locals>.wait_for_future)r>   r4   rw   rx   r
   ry   rM   rd   rO   r   ro   r#   r  rh   r   r`   r   test_yield_vs_yield_from  s    ,*z&BaseTaskTests.test_yield_vs_yield_fromc                    s   |  t tjdd  W d    n1 s.0    Y  |  t" tj fdd}W d    n1 sj0    Y  | }| t| jj| d S )Nc                   s   s
   d V  d S r	   r   r   r   r   r   r8     s    z>BaseTaskTests.test_yield_vs_yield_from_generator.<locals>.coroc                  3   s(     } z| V  W |    n
|    0 d S r	   r  )r   r   r   r   r    s    zIBaseTaskTests.test_yield_vs_yield_from_generator.<locals>.wait_for_futurer  r  r   r   r   "test_yield_vs_yield_from_generator  s    (,z0BaseTaskTests.test_yield_vs_yield_from_generatorc                 C   sz   |  t tjdd }W d    n1 s.0    Y  | t| | }| t| | j|}| 	|d d S )Nc                   S   s   dS Nri   r   r   r   r   r   r     s    z;BaseTaskTests.test_coroutine_non_gen_function.<locals>.funcri   )
rw   rx   r
   ry   rI   r  iscoroutiner4   rO   rK   )r#   r   r8   r  r   r   r   test_coroutine_non_gen_function  s    (z-BaseTaskTests.test_coroutine_non_gen_functionc                    s   |  | j | t" tj fdd}W d    n1 s>0    Y   fdd}| | j| }| | j| }| j|}| |d | 	|
  d S )Nc                      s    S r	   r   r   r`   r   r   r     s    zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.funcc                      s     d d S r  r|   r   r`   r   r   r8     s    zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.corori   )r>   r4   rw   rx   r
   ry   r9   rO   rK   r  rp   )r#   r   r8   r   r   r  r   r`   r   -test_coroutine_non_gen_function_return_future  s    ,z;BaseTaskTests.test_coroutine_non_gen_function_return_futurec                    sZ     tj jd  fdd}  j| j j   tj jd d S )Nr;   c                    s:     tj| d   td    t  d S r:   )rq   r
   current_taskr;   r#   rh   r   r   r8     s    z-BaseTaskTests.test_current_task.<locals>.coro)r  r
   r  r4   r9   rO   r   r   r  r   test_current_task  s
    zBaseTaskTests.test_current_taskc                    s    tjjd j j fdd} fdd}j|jj|jjtf  tjjd d S )Nr;   c                    sD    tj| du   I d H   tj| du  d d S Nr;   TrI   r
   r  r|   r;   )r  r  r#   task1r   r   r    s    
zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro1c                    sD    tj| du   d I d H   tj| du  d S r  r  r;   )r  r  r#   task2r   r   r    s    

zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro2)r  r
   r  r4   r>   r9   rO   r   )r#   r  r  r   )r  r  r#   r  r  r   )test_current_task_with_interleaving_tasks  s    z7BaseTaskTests.test_current_task_with_interleaving_tasksc                    s~   d jfdd  fdd}tj| jd}tj |  j| d 	
  d S )Nr   c                      s<   zI d H  W n t jy,    d7   Y n0 d d S )Nr   zgot past sleep() in inner())r
   rN   r-  r   )proofr#   r  r   r   rR    s    z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.innerc                      s:   z  I d H  W n t jy,   d7 Y n
0 d7 d S )Nr\   r   r  r   rR  r  r   r   r     s
    z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.outerr;   e   )r>   r4   r
   rj   r   r   rL   rO   rK   rI   r   r#   r   r~   r   rR  r  r#   r  r   test_yield_future_passes_cancel  s    
	z-BaseTaskTests.test_yield_future_passes_cancelc                    s   d jfdd  fdd}tj| jd}tj |  tjjj	| 
d  tj d d S )Nr   c                      s   I d H   d7  d S rO  r   r   r  r  r   r   rR    s    
zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.innerc                     sN    t( t  gI d H \} }W d    n1 s80    Y  d7 d S Nr\   )rw   rx   r
   r   )dp)rR  r  r#   r   r   r     s    6zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.outerr;   r   r>   r4   r
   rj   r   r   rL   rM   rN   rO   r|   rK   r  r   r  r   &test_yield_wait_does_not_shield_cancel  s    
z4BaseTaskTests.test_yield_wait_does_not_shield_cancelc                 C   s<   |  | j}t|}|d | j|}| |d d S r*   )r>   r4   r
   shieldr|   rO   rK   )r#   rR  r   r  r   r   r   test_shield_result-  s
    

z BaseTaskTests.test_shield_resultc                 C   sT   |  | j}t|}t| j td}|| t| j | |	 | d S )Nr   )
r>   r4   r
   r  r   r   rd   r  rq   r   )r#   rR  r   r   r   r   r   test_shield_exception4  s    

z#BaseTaskTests.test_shield_exceptionc                 C   sH   |  | j}t|}t| j |  t| j | |  d S r	   )	r>   r4   r
   r  r   r   rL   rI   r   r#   rR  r   r   r   r   test_shield_cancel_inner=  s    
z&BaseTaskTests.test_shield_cancel_innerc                 C   sh   |  | j}t|}t| j |  t| j | |  | 	d|j
d u rXdnt|j
 d S r   )r>   r4   r
   r  r   r   rL   rI   r   rK   Z
_callbacksr  r  r   r   r   test_shield_cancel_outerE  s    
z&BaseTaskTests.test_shield_cancel_outerc                 C   s8   |  | j}|d | jt|}| |d d S r*   )r>   r4   r|   rO   r
   r  rK   )r#   ra   r  r   r   r   test_shield_shortcutN  s    
z"BaseTaskTests.test_shield_shortcutc                    s   d|  | jfdd  fdd}tj| | jd}t| j |  | tj | j	| W d    n1 s0    Y  
d  t| j | d d S )Nr   c                      s   I d H   d7  d S rO  r   r   r  r   r   rR  Y  s    
z/BaseTaskTests.test_shield_effect.<locals>.innerc                      s   t   I d H  d7 d S r  )r
   r  r   r  r   r   r   ^  s    z/BaseTaskTests.test_shield_effect.<locals>.outerr;   r   r  r  r   )rR  r  r  r   test_shield_effectT  s    *
z BaseTaskTests.test_shield_effectc                 C   s   |  | j}|  | j}t||}t|}t| j |  t| j | |	  |
d |
d t| j | | ddg d S Nr   r   )r>   r4   r
   r]   r  r   r   rL   rI   r   r|   rK   rp   )r#   child1child2parentr   r   r   r   test_shield_gatherl  s    


z BaseTaskTests.test_shield_gatherc                 C   s   |  | j}|  | j}t|}t|}t||}t| j |  t| j | |	 tj
 | |  | |  |d |d t| j d S r   )r>   r4   r
   r  r]   r   r   rL   r  r   rN   rI   r   r|   )r#   r  r  r   r   r  r   r   r   test_gather_shieldz  s    



z BaseTaskTests.test_gather_shieldc                 C   sZ   |  | j}| t| jjtj|| jd t }| t| jjtj|| jd |  d S r:   )	r>   r4   rM   r   rO   r
   r  r   r0   r#   ra   r8   r   r   r   test_as_completed_invalid_args  s    z,BaseTaskTests.test_as_completed_invalid_argsc                 C   sf   |  | j}| t| jjt| t }| t| jjt| |  | t	| jjtg  d S r	   )
r>   r4   rM   r   rO   r
   r   r   r0   r}   r  r   r   r   test_wait_invalid_args  s    z$BaseTaskTests.test_wait_invalid_argsc                    sl    fdd}t d |  W d    n1 s00    Y  t d |  W d    n1 s^0    Y  d S )Nc                     s    t& tj fdd} W d    n1 s60    Y  j  d  |  t 	j
tj j 	jtj j j
 d S )Nc                   3   s    j  E d H  d S r	   )rI   
gi_runningr   )ra   r   r#   r   r   r8     s    zKBaseTaskTests.test_corowrapper_mocks_generator.<locals>.check.<locals>.coro)rw   rx   r
   ry   r>   r4   r|   rI   r  r  gi_frametypes	FrameTyper   r	  r   CodeTyperO   r  r   r"   )ra   r   r   check  s    0
z=BaseTaskTests.test_corowrapper_mocks_generator.<locals>.checkFTr   r#   r  r   r"   r    test_corowrapper_mocks_generator  s
    
$
z.BaseTaskTests.test_corowrapper_mocks_generatorc              	      s  t d  t" tjfdd}W d    n1 s<0    Y   t$ tj fddW d    n1 sz0    Y   t tjdd W d    n1 s0    Y    j| } j|} |d W d    n1 s0    Y  d S )	NTc                   3   s     E d H S r	   r   r   )r   r   r   r     s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t1c                  3   s(      j}   j|  | E d H S r	   )r>   r4   r9   r
  )r#   t3r   r   r     s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t2c                 S   s   |  d d S )Nr   r   r   r  r
  r   r   r   r    s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t3r  )	r   rw   rx   r
   ry   r9   r4   rO   rK   )r#   r   rh   valr   )r#   r   r  r   test_yield_from_corowrapper  s    
,.(z)BaseTaskTests.test_yield_from_corowrapperc                    s8   dd   fdd}|  |dd |  |dd d S )Nc                  s   s
   d V } | S r	   r   )r   r   r   r   r     s    z;BaseTaskTests.test_yield_from_corowrapper_send.<locals>.fooc              
      sb   t j  }|d  z||  W n. tyT } z|jd W  Y d }~S d }~0 0 tdd S )Nr   zStopIteration was expected)r
   r   CoroWrapperr.   r,   r   AssertionError)r  cwexr   r   r   call  s    
 z<BaseTaskTests.test_yield_from_corowrapper_send.<locals>.call)r   r   ry  )rK   )r#   r  r   r  r    test_yield_from_corowrapper_send  s    
z.BaseTaskTests.test_yield_from_corowrapper_sendc                 C   s0   t  }dd }tj| }||d< d |_d S )Nc                   s   s   g E d H  d S r	   r   r   r   r   r   r     r@   z3BaseTaskTests.test_corowrapper_weakref.<locals>.foor  )weakrefWeakValueDictionaryr
   r   r  r   )r#   Zwdr   r  r   r   r   test_corowrapper_weakref  s
    z&BaseTaskTests.test_corowrapper_weakrefc                 C   s   dd }t d}tj| }|d  | ||| tj| }|d  | ||t | tj| }|d  |t d}| |t  | |j	d tj| }|d  |t dd }| |t  | |j	d d S )Nc               
   s   s>   d } z
| V } W q t y6 } z|} W Y d }~qd }~0 0 qd S r	   )r   )valueer   r   r   r     s
    
z1BaseTaskTests.test_corowrapper_throw.<locals>.foor   r  )
r   r
   r   r  r.   rq   r/   r  rK   r   )r#   r   r   r  r   r   r   test_corowrapper_throw  s$    



z$BaseTaskTests.test_corowrapper_throwc                    s   j j} t" tj fdd}W d    n1 s:0    Y  t } j	d  j
| | j}tj| jd} tj jd|h td   j   t jjd |jjd= d }|j}d }t   tj jdt  | jdtj|d |  d S )	Nc                 3   s      | }|E d H  tdd S )Nzcode never reached)r>   r   )r4   futurer"   r   r   kill_me 	  s    

z>BaseTaskTests.test_log_destroyed_pending_task.<locals>.kill_meTr;   r   r#  z%Task was destroyed but it is pending!)messagerh   r   )r6   r7   rw   rx   r
   ry   r   r  r4   r   set_exception_handlerrj   rK   	all_tasksrt   Z	_run_oncer  _readyr
  f_localsr   r   
gc_collectro  Zassert_called_withANYZ
reset_mock)r#   r7   r$  Zmock_handlerr8   rh   r   r   r"   r   test_log_destroyed_pending_task	  s2    ,



z-BaseTaskTests.test_log_destroyed_pending_taskzasyncio.base_events.loggerc                    sH   t   dd   fdd}|  |jj d S )Nc                      s   t d S r	   )r   r   r   r   r   r8   O	  s    zBBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.coroc                     s.      } tdI d H  |   d } d S )Nr  r   rg   r8   r4   r#   r   r   r   R	  s    zDBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.runner)r
   rb   rt   rO   r   errorcalled)r#   m_logr   r   r-  r   &test_tb_logger_not_called_after_cancelJ	  s    
z4BaseTaskTests.test_tb_logger_not_called_after_cancelzasyncio.coroutines.loggerc           	   	   C   s   t dH | t tjdd }W d    n1 s80    Y  W d    n1 sV0    Y  t}t jd }|  t	
  | |jj |jjd d }t|\}}dt|jt||t||f }| |t|tj d S )NTc                   S   s   d S r	   r   r   r   r   r   	coro_noop_	  s    z=BaseTaskTests.test_coroutine_never_yielded.<locals>.coro_noopr   r   z^<CoroWrapper %s\(?\)? .* at %s:%s, .*> was never yielded from\nCoroutine object created at \(most recent call last, truncated to \d+ last lines\):\n.*\n  File "%s", line %s, in test_coroutine_never_yielded\n    coro_noop\(\)$)r   rw   rx   r
   ry   r  sys	_getframef_linenor   r*  rI   r.  r/  	call_argsr   r   r   r   r(   r   compileDOTALL)	r#   r0  r2  Ztb_filename	tb_linenor%  Zfunc_filenameZfunc_linenoZregexr   r   r   test_coroutine_never_yielded[	  s$    
F



z*BaseTaskTests.test_coroutine_never_yieldedc                    sl    fdd}t d |  W d   n1 s00    Y  t d |  W d   n1 s^0    Y  dS )zReturn of @asyncio.coroutine()-wrapped function generator object
        from @asyncio.coroutine()-wrapped function should have same effect as
        returning generator object or Future.c                     sZ     t" tj fdd} W d    n1 s20    Y   j|  } |d d S )Nc                     s>     t tjdd } W d    n1 s.0    Y  |  S )Nc                   S   s   dS rO  r   r   r   r   r   
inner_coro	  s    ziBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coro.<locals>.inner_coro)rw   rx   r
   ry   )r;  r"   r   r   
outer_coro	  s    (zUBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coror   rw   rx   r
   ry   r4   rO   rK   )r<  rp   r"   r   r   r  }	  s
    ,zABaseTaskTests.test_return_coroutine_from_coroutine.<locals>.checkFNTr  r  r   r"   r   $test_return_coroutine_from_coroutiney	  s
    
$
z2BaseTaskTests.test_return_coroutine_from_coroutinec                 C   sh   | j d | | j t }t jd }| |jt	 | 
|jd d d t|df | j | d S )NTr   r   test_task_source_traceback)r4   r   r9   r   r3  r4  r5  r  r   r  rK   r  rO   )r#   rh   r   r   r   r   r@  	  s    z(BaseTaskTests.test_task_source_tracebackc                    sp   t    j  fdd} | } t ||} |j t j	 j
| |  d S )Nc                     s     } | I d H  d S r	   )r>   r`   rj  r   r   blocking_coroutine	  s    
z?BaseTaskTests._test_cancel_wait_for.<locals>.blocking_coroutine)r
   rb   r   r0   r   r   r   rL   rM   rN   rO   rI   r   )r#   rB  rA  rh   r   r   rj  r   _test_cancel_wait_for	  s    z#BaseTaskTests._test_cancel_wait_forc                 C   s   |  d  d S r	   rB  r"   r   r   r   test_cancel_blocking_wait_for	  s    z+BaseTaskTests.test_cancel_blocking_wait_forc                 C   s   |  d d S )Ng      N@rC  r"   r   r   r   test_cancel_wait_for	  s    z"BaseTaskTests.test_cancel_wait_forc                    s   t  }| |j | |fdd}| t  t j| |d}W d   n1 sZ0    Y  t j||dd  fdd}	| 
d | |  d |   |  dg dS )	zYEnsure that a gathering future refuses to be cancelled once all
        children are donec                   3   s
    E d H S r	   r   r   r`   r   r   
child_coro	  s    z6BaseTaskTests.test_cancel_gather_1.<locals>.child_coror;   Nc                    s      d S r	   rL   )rZ   )cancel_resultgather_taskr   r   cancelling_callback	  s    z?BaseTaskTests.test_cancel_gather_1.<locals>.cancelling_callbackr+   F)r
   rb   r   r0   r>   rw   rx   r]   rj   r   r|   rO   rK   r   r   rp   )r#   r4   rF  Zgather_futurerJ  r   )rH  ra   rI  r   test_cancel_gather_1	  s    
.


z"BaseTaskTests.test_cancel_gather_1c                    s   g d}|D ]\ }j  d t j fdd fdd}z|  W nd tjy } zJ|jd t	|\}}}||ftj|f 
|d W Y d }~nd }~0 0 d	 W d    q1 s0    Y  qd S )
Nr   r   c                     sd   d} | d7 }  t, tjtdd dI d H  W d    n1 sH0    Y  | dkrd S qd S )Nr   r  T)return_exceptionsr4   r   )rw   rx   r
   r]   r   )r6  rj  r   r   ri   	  s    *z0BaseTaskTests.test_cancel_gather_2.<locals>.testc                     s6     } tdI d H  | j   | I d H  d S rf  r   )Zqwer   r4   r#   ri   r   r   rU  	  s    
z0BaseTaskTests.test_cancel_gather_2.<locals>.mainr   )r   r   z1gather did not propagate the cancellation request)r   r
   rb   r   r0   rO   rN   rK   r   r    assertInr-  )r#   r   r   rU  r   exc_typeZexc_argsr   r   rM  r   test_cancel_gather_2	  s"    
"z"BaseTaskTests.test_cancel_gather_2c                    s(   dd   fdd}j |  d S )Nc                      s   dd  d S )Nr   r   r   r   r   r   r   r   
  s    z3BaseTaskTests.test_exception_traceback.<locals>.fooc                     s4    j  } tdI d H  |  j d S r   )r9   r4   r
   r   r   r   __traceback__rg   r   r#   r   r   rU  	
  s    z4BaseTaskTests.test_exception_traceback.<locals>.mainr   rV  r   rR  r   test_exception_traceback
  s    z&BaseTaskTests.test_exception_tracebackc              	   C   s   dd }|| j _| t tjdd }W d    n1 s>0    Y  | |jj | 	t
< | }z| | j | W |  n
|  0 W d    n1 s0    Y  t  | |jj |jjd d }| d| | t| j t  d S )Nc                 _   s   t d S r	   r   )r  r   r  r   r   r   r   
  s    z8BaseTaskTests.test_error_in_call_soon.<locals>.call_soonc                   S   s   d S r	   r   r   r   r   r   r8   
  s    z3BaseTaskTests.test_error_in_call_soon.<locals>.coror   z$Task was destroyed but it is pending)r4   r   rw   rx   r
   ry   r   r.  r/  rM   r}   r9   r0   rT   rU   rI   r6  rN  rK   r'  ro  )r#   r0  r   r8   r   r%  r   r   r   test_error_in_call_soon
  s     (2z%BaseTaskTests.test_error_in_call_soonc                 C   sx   |  td | | jd W d    n1 s00    Y  |  td | | jd W d    n1 sj0    Y  d S )Nz!a coroutine was expected, got 123r   )rc   r   r9   r4   r"   r   r   r   "test_create_task_with_noncoroutine+
  s    ,z0BaseTaskTests.test_create_task_with_noncoroutinec                 C   s   |  t tjdd }W d    n1 s.0    Y  | | j| }| || j | j| | | j| }| || j | j| d S )Nc                   S   s   d S r	   r   r   r   r   r   r8   9
  s    zDBaseTaskTests.test_create_task_with_oldstyle_coroutine.<locals>.coro)	rw   rx   r
   ry   r9   r4   r  r7   rO   r8  r   r   r   (test_create_task_with_oldstyle_coroutine6
  s    (z6BaseTaskTests.test_create_task_with_oldstyle_coroutinec                 C   s`   dd }|  | j| }| || j | j| |  | j| }| || j | j| d S )Nc                      s   d S r	   r   r   r   r   r   r8   I
  s    z@BaseTaskTests.test_create_task_with_async_function.<locals>.coro)r9   r4   r  r7   rO   r8  r   r   r   $test_create_task_with_async_functionG
  s    z2BaseTaskTests.test_create_task_with_async_functionc                 C   sh   |  | jt }| || j | | j|d |  | jt }| || j | | j|d d S r*   )r9   r4   r)   r  r7   rK   rO   r  r   r   r   (test_create_task_with_asynclike_functionV
  s    z6BaseTaskTests.test_create_task_with_asynclike_functionc                    s(   dd   fdd}j |  d S )Nc                      s   dS rO  r   r   r   r   r   rR  c
  s    z2BaseTaskTests.test_bare_create_task.<locals>.innerc                     s4   t   } | j | I d H }d| d S rO  )r
   r   r  r7   rK   )rh   r:  rR  r#   r   r   r8   f
  s    
z1BaseTaskTests.test_bare_create_task.<locals>.coror   r   r   rY  r   test_bare_create_taska
  s    z#BaseTaskTests.test_bare_create_taskc                    s(   dd   fdd}j |  d S )Nc                      s   d S r	   r   r   r   r   r   r2  p
  s    z<BaseTaskTests.test_bare_create_named_task.<locals>.coro_noopc                     s.   t j  dd} |  d | I d H  d S )NzNo-op)r5   )r
   r   rK   r   rg   r2  r#   r   r   r8   s
  s    z7BaseTaskTests.test_bare_create_named_task.<locals>.coror   r   r   r[  r   test_bare_create_named_taskn
  s    z)BaseTaskTests.test_bare_create_named_taskc                    sj   t jddd  fdd fdd}t z$| }| W   n
  0 d S )Ncvarnopedefaultc                      s.   t dI d H    d  d d S )NrK  r^  something else)r
   r   rK   getro  r   r]  r#   r   r   sub}
  s    z)BaseTaskTests.test_context_1.<locals>.subc                     sV      d  }  d    d | I d H     d d S )Nr^  yes)rK   rb  r9   ro  )Zsubtaskr]  r4   r#   rd  r   r   rU  
  s    

z*BaseTaskTests.test_context_1.<locals>.main)contextvars
ContextVarr
   rb   r9   rO   r0   r#   rU  rh   r   rf  r   test_context_1z
  s    zBaseTaskTests.test_context_1c                    sj   t jddd  fdd}t z$| }| W   n
  0   d d S )Nr]  r^  r_  c               	      s    fdd}    d tdD ]}}||   d|  |jd  |I d H     d|  tdD ]F} d| d|  t	dI d H     d| d|  qq$d S )	Nc                    s     d d S )Nra  )ro  r`   )r]  r   r   fut_on_done
  s    z?BaseTaskTests.test_context_2.<locals>.main.<locals>.fut_on_doner^  r   re  r   -MbP?)
rK   rb  r^   r>   r   ro  r   r|   r
   r   )rk  jra   ir]  r4   r#   r   r   rU  
  s    


z*BaseTaskTests.test_context_2.<locals>.main)	rg  rh  r
   rb   r9   rO   r0   rK   rb  ri  r   rp  r   test_context_2
  s    zBaseTaskTests.test_context_2c                    sj   t jddd  fddfdd}t z|  W   n
  0   d d S )Nr]  r   r_  c                    sL   t dD ]>} | |  ttddI d H    | |  qd S )Nr   rm  r  )r^   ro  r
   r   randomuniformrK   rb  )numro  rc  r   r   rd  
  s    z)BaseTaskTests.test_context_3.<locals>.subc                     sF   g } t dD ]$} tdd}| | qtj|  I d H  d S )Nr\   r   r   )r^   r   rr  randintr  r
   r]   )r   ro  rh   )r4   rd  r   r   rU  
  s
    z*BaseTaskTests.test_context_3.<locals>.main)rg  rh  r
   rb   rO   r0   rK   rb  rV  r   rf  r   test_context_3
  s    zBaseTaskTests.test_context_3c                 C   sP   t  }t }z2| ||}|| | | | W |  n
|  0 d S r	   )r
   rb   r   r9   rO   rq   Zget_coror0   )r#   r4   r8   rh   r   r   r   test_get_coro
  s    
zBaseTaskTests.test_get_coro)r3   )r&   r'   r(   r7   r<   r9   r>   rB   rR   rS   r_   rf   rk   rv   rz   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"  r&  r/  r0  r7  r9  r;  r@  rG  rI  rJ  rL  rN  rW  rb  rc  ri  rk  rt  rv  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r,  r   Zpatchr1  r:  r>  r@  rB  rD  rE  rK  rP  rS  rT  rU  rV  rW  rX  rZ  r\  rj  rq  rv  rw  r  r   r   rF   r   r2   j   s  	3	>""$#	  	! /% 		(.

+
"r2   c                 C   sv   | j }| j}|d u s|d u r | S G dd d}G dd d||}G dd d||}dd }|| _ || _|| _d | _| S )	Nc                       s(   e Zd Z fddZ fddZ  ZS )z(add_subclass_tests.<locals>.CommonFuturec                    s&   t dd | _t j|i | d S )Nc                   S   s   dS r   r   r   r   r   r   r?   
  r@   zCadd_subclass_tests.<locals>.CommonFuture.__init__.<locals>.<lambda>)collectionsdefaultdictcallsrA   r   r  rF   r   r   r   
  s    z1add_subclass_tests.<locals>.CommonFuture.__init__c                    s$   | j d  d7  < t j|i |S )Nr   r   )rz  rA   r   r  rF   r   r   r   
  s    z:add_subclass_tests.<locals>.CommonFuture.add_done_callbackr  r   r   rF   r   CommonFuture
  s   r{  c                   @   s   e Zd ZdS )z add_subclass_tests.<locals>.TaskNrd  r   r   r   r   r7   
  s   r7   c                   @   s   e Zd ZdS )z"add_subclass_tests.<locals>.FutureNrd  r   r   r   r   r<   
  s   r<   c                    sv   j jd  fdd}j| jd}j|}|d t|jddi t jddi d S )Nr;   c                      s   j  fdd  I d H S )Nc                      s
     dS Nry  r  r   r`   r   r   r?   
  r@   zYadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.func.<locals>.<lambda>)r4   r   r   ra   r#   r   r   r   
  s    zGadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.funcry  r   r   )r<   r4   r7   rO   rK   dictrz  )r#   r   rh   rp   r   r}  r   test_subclasses_ctask_cfuture
  s    z9add_subclass_tests.<locals>.test_subclasses_ctask_cfuture)r7   r<   r  r@  )clsZBaseTaskZ
BaseFuturer{  r7   r<   r  r   r   r   add_subclass_tests
  s    	r  c                   @   s   e Zd Zdd Zdd ZdS )SetMethodsTestc                 C   s   t | j}t  | j_}dd }| }| | j|}||d | | j	|d |
  |jd d d }| tjd |W d    n1 s0    Y  |  d S )Nc                      s   t dI d H  dS Nr1  r   r   r   r   r   r   r     s    z@SetMethodsTest.test_set_result_causes_invalid_state.<locals>.foory  r   r   step\(\): already done)r   r<   r   r  r4   call_exception_handlerr9   r|   rK   rO   assert_called_oncer6  rc   r
   InvalidStateErrorr0   )r#   r<   exc_handlerr   r8   rh   r   r   r   r   $test_set_result_causes_invalid_state  s"    

"z3SetMethodsTest.test_set_result_causes_invalid_statec                 C   s   G dd dt }t| j}t  | j_}dd }| }| | j|}|||  | 	| | j
| W d    n1 s0    Y  |  |jd d d }| tjd |W d    n1 s0    Y  |  d S )Nc                   @   s   e Zd ZdS )zESetMethodsTest.test_set_exception_causes_invalid_state.<locals>.MyExcNrd  r   r   r   r   MyExc.  s   r  c                      s   t dI d H  dS r  r   r   r   r   r   r   4  s    zCSetMethodsTest.test_set_exception_causes_invalid_state.<locals>.foor   r   r  )r   r   r<   r   r  r4   r  r9   r  rM   rO   r  r6  rc   r
   r  r0   )r#   r  r<   r  r   r8   rh   r   r   r   r   'test_set_exception_causes_invalid_state-  s     
*"z6SetMethodsTest.test_set_exception_causes_invalid_stateN)r&   r'   r(   r  r  r   r   r   r   r    s   r  _CFuture_CTaskzrequires the C _asyncio modulec                   @   s:   e Zd ZeeddZeeddZej	dd Z
dd ZdS )CTask_CFuture_Testsr  Nr  c                 C   s|   t td}dd }| | j| }| j| | }tdD ]"}|j| | jd | j| q>| j| | ddd d S )	Ngettotalrefcountc                      s   d S r	   r   r   r   r   r   r8   T  s    z@CTask_CFuture_Tests.test_refleaks_in_task___init__.<locals>.coror\   r;   r   r   )Zdelta)	r   Zget_attributer3  r9   r4   rO   r^   r   r   )r#   r  r8   rh   Zrefs_beforero  r   r   r   test_refleaks_in_task___init__Q  s    z2CTask_CFuture_Tests.test_refleaks_in_task___init__c                 C   sV   dd }|  | j| }| j| | t |`W d    n1 sH0    Y  d S )Nc                      s   d S r	   r   r   r   r   r   r8   _  s    zHCTask_CFuture_Tests.test_del__log_destroy_pending_segfault.<locals>.coro)r9   r4   rO   rM   AttributeErrorr   r8  r   r   r   &test_del__log_destroy_pending_segfault^  s
    z:CTask_CFuture_Tests.test_del__log_destroy_pending_segfault)r&   r'   r(   getattrr   r7   r   r<   r   Zrefcount_testr  r  r   r   r   r   r  H  s
   
r  c                   @   s$   e Zd ZeeddZeeddZdS )CTask_CFuture_SubclassTestsr  Nr  )r&   r'   r(   r  r   r7   r   r<   r   r   r   r   r  g  s   r  c                   @   s   e Zd ZeeddZejZdS )CTaskSubclass_PyFuture_Testsr  N	r&   r'   r(   r  r   r7   r   	_PyFuturer<   r   r   r   r   r  q  s   r  c                   @   s   e Zd ZeeddZejZdS )PyTask_CFutureSubclass_Testsr  N)	r&   r'   r(   r  r   r<   r   _PyTaskr7   r   r   r   r   r  z  s   r  c                   @   s   e Zd ZeeddZejZdS )CTask_PyFuture_Testsr  Nr  r   r   r   r   r    s   r  c                   @   s   e Zd ZejZeeddZdS )PyTask_CFuture_Testsr  N)	r&   r'   r(   r   r  r7   r  r   r<   r   r   r   r   r    s   r  c                   @   s   e Zd ZejZejZdS )PyTask_PyFuture_TestsN	r&   r'   r(   r   r  r7   r   r  r<   r   r   r   r   r    s   r  c                   @   s   e Zd ZejZejZdS )PyTask_PyFuture_SubclassTestsNr  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )CTask_Future_Testsc                    s   G dd dt j} fdd}t  | _zF|| jd | jd jd | j| }| j|}W | j  n| j  0 | 	|d d S )	Nc                   @   s   e Zd Zedd ZdS )z+CTask_Future_Tests.test_foobar.<locals>.Futc                 S   s   t d S r	   )r  r"   r   r   r   rs     s    z4CTask_Future_Tests.test_foobar.<locals>.Fut.get_loopN)r&   r'   r(   propertyrs   r   r   r   r   r    s   r  c                      s    I d H  dS r|  r   r   r`   r   r   r8     s    
z,CTask_Future_Tests.test_foobar.<locals>.coror;   r1  r   ry  )
r
   r<   rb   r4   rM  r|   r   rO   r0   rK   )r#   r  r8   rh   r  r   r`   r   test_foobar  s    
zCTask_Future_Tests.test_foobarN)r&   r'   r(   r  r   r   r   r   r    s   r  c                   @   sl   e Zd ZdZdZdZ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S )BaseTaskIntrospectionTestsNc                    s`   G  fddd}| }t   | t t  | | | t |h | | d S )Nc                       s$   e Zd Ze fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLikec                    s    S r	   r   r"   r;   r   r   rr     s    zHBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike._loopc                 S   s   dS r  r   r"   r   r   r   ro     s    zGBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike.doneN)r&   r'   r(   r  rr   ro   r   r;   r   r   TaskLike  s   r  r   r  rK   r
   r'  ro  _register_task_unregister_taskr#   r  rh   r   r;   r   test__register_task_1  s    
z0BaseTaskIntrospectionTests.test__register_task_1c                    s`   G  fddd}| }t   | t t  | | | t |h | | d S )Nc                       s    e Zd Z fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLikec                    s    S r	   r   r"   r;   r   r   rs     s    zKBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.get_loopc                 S   s   dS r  r   r"   r   r   r   ro     s    zGBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.doneNr&   r'   r(   rs   ro   r   r;   r   r   r    s   r  r  r  r   r;   r   test__register_task_2  s    
z0BaseTaskIntrospectionTests.test__register_task_2c                    s`   G  fddd}| }t   | t t  | | | t t  | | d S )Nc                       s    e Zd Z fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLikec                    s    S r	   r   r"   r;   r   r   rs     s    zKBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.get_loopc                 S   s   dS r<  r   r"   r   r   r   ro     s    zGBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.doneNr  r   r;   r   r   r    s   r  r  r  r   r;   r   test__register_task_3  s    
z0BaseTaskIntrospectionTests.test__register_task_3c                 C   sN   t  }t  }| t| | || | t|| | || d S r	   )r   r  r  r
   r  _enter_taskrq   _leave_taskr#   rh   r4   r   r   r   test__enter_task  s    z+BaseTaskIntrospectionTests.test__enter_taskc                 C   s|   t  }t  }t  }| || | t | || W d    n1 sP0    Y  | t|| | || d S r	   )	r   r  r  rM   rd   rq   r
   r  r  r#   r  r  r4   r   r   r   test__enter_task_failure  s    *z3BaseTaskIntrospectionTests.test__enter_task_failurec                 C   s<   t  }t  }| || | || | t| d S r	   )r   r  r  r  r  r
   r  r  r   r   r   test__leave_task  s
    z+BaseTaskIntrospectionTests.test__leave_taskc                 C   s|   t  }t  }t  }| || | t | || W d    n1 sP0    Y  | t|| | || d S r	   )	r   r  r  rM   rd   r  rq   r
   r  r  r   r   r   test__leave_task_failure1
  s    *z4BaseTaskIntrospectionTests.test__leave_task_failure1c                 C   sZ   t  }t  }| t | || W d    n1 s<0    Y  | t| d S r	   )r   r  rM   rd   r  r  r
   r  r  r   r   r   test__leave_task_failure2  s
    *z4BaseTaskIntrospectionTests.test__leave_task_failure2c                    sJ   t  }t    fdd|_| | | | | t t  d S )Nc                      s    S r	   r   r   r;   r   r   r?     r@   zBBaseTaskIntrospectionTests.test__unregister_task.<locals>.<lambda>)	r   r  rs   r  r  rK   r
   r'  ro  r  r   r;   r   test__unregister_task  s    

z0BaseTaskIntrospectionTests.test__unregister_taskc                 C   s2   t  }t  }| | | t|t  d S r	   )r   r  r  rK   r
   r'  ro  r  r   r   r   $test__unregister_task_not_registered#  s    
z?BaseTaskIntrospectionTests.test__unregister_task_not_registered)r&   r'   r(   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s   

r  c                   @   s4   e Zd ZeejZeejZeej	Z
eejZdS )PyIntrospectionTestsN)r&   r'   r(   staticmethodr   Z_py_register_taskr  Z_py_unregister_taskr  Z_py_enter_taskr  Z_py_leave_taskr  r   r   r   r   r  *  s   


r  _c_register_taskc                   @   sP   e Zd Zeedr<eejZeejZ	eej
ZeejZnd Z Z	 ZZdS )CIntrospectionTestsr  N)r&   r'   r(   rJ   r   r  r  r  Z_c_unregister_taskr  Z_c_enter_taskr  Z_c_leave_taskr  r   r   r   r   r  1  s   



r  c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )BaseCurrentLoopTestsc                    s$   t    t | _| | j d S r	   rA   rB   r
   rb   r4   rt   r"   rF   r   r   rB   ?  s    

zBaseCurrentLoopTests.setUpc                 C   s   t d S r	   )NotImplementedErrorr   r   r   r   r9   D  s    zBaseCurrentLoopTests.new_taskc                 C   s   |  tj| jd d S r:   )r  r
   r  r4   r"   r   r   r   !test_current_task_no_running_loopG  s    z6BaseCurrentLoopTests.test_current_task_no_running_loopc                 C   s6   |  t t  W d    n1 s(0    Y  d S r	   )rM   rd   r
   r  r"   r   r   r   *test_current_task_no_running_loop_implicitJ  s    z?BaseCurrentLoopTests.test_current_task_no_running_loop_implicitc                    s>    fdd}  |  j  tj jd d S )Nc                      s<     tj jd   td    t  d S r:   )rq   r
   r  r4   r   r  r   r   r8   O  s    zGBaseCurrentLoopTests.test_current_task_with_implicit_loop.<locals>.coror;   )r9   r4   rO   r  r
   r  r   r   r  r   $test_current_task_with_implicit_loopN  s    z9BaseCurrentLoopTests.test_current_task_with_implicit_loop)	r&   r'   r(   rB   r9   r  r  r  r  r   r   rF   r   r  =  s
   r  c                   @   s   e Zd Zdd ZdS )PyCurrentLoopTestsc                 C   s   t j|| jdS r:   )r   r  r4   r   r   r   r   r9   \  s    zPyCurrentLoopTests.new_taskNr&   r'   r(   r9   r   r   r   r   r  Z  s   r  c                   @   s   e Zd Zdd ZdS )CCurrentLoopTestsc                 C   s   t td|| jdS )Nr  r;   )r  r   r4   r   r   r   r   r9   d  s    zCCurrentLoopTests.new_taskNr  r   r   r   r   r  `  s   r  c                   @   s"   e Zd Zdd Zejdd ZdS )GenericTaskTestsc                 C   s   |  ttjtj d S r	   )rI   
issubclassr
   r7   r<   r"   r   r   r   test_future_subclassj  s    z%GenericTaskTests.test_future_subclassc                 C   sh   zdd l }dd l}dd l}W n ty8   | d Y n,0 zdd l}W n tyb   | d Y n0 d S )Nr   zC modules are not availablez_asyncio module is missing)
_functools_json_pickleImportErrorZskipTest_asyncior-  )r#   r  r  r  r  r   r   r   test_asyncio_module_compiledm  s    z-GenericTaskTests.test_asyncio_module_compiledN)r&   r'   r(   r  r   Zcpython_onlyr  r   r   r   r   r  h  s   r  c                       sT   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )GatherTestsBasec                    s2   t    |  | _|  | _| j| jdd d S )NFcleanup)rA   rB   rC   one_loopre   rt   r"   rF   r   r   rB     s    


zGatherTestsBase.setUpc                 C   s   |j rt| q d S r	   )r(  r   r   r=   r   r   r   	_run_loop  s    zGatherTestsBase._run_loopc                    s    fddt dD \}}}tj |||i |}t }|| |d |d   j	  
|jd  |  |d   j	 ||  
| g d d S )Nc                    s   g | ]} j  qS r   r  rE   rY   ro  r"   r   r   r[     r@   z2GatherTestsBase._check_success.<locals>.<listcomp>r   r   r   F)r   r   r   )r^   r
   r]   wrap_futuresr   MockCallbackr   r|   r  r  rK   r/  r   ro   assert_called_once_withrp   )r#   r  r   r   r|  ra   cbr   r"   r   _check_success  s    




zGatherTestsBase._check_successc                 C   s   |    | j dd d S )NFrL  r  r"   r   r   r   test_success  s    zGatherTestsBase.test_successc                 C   s   | j dd d S )NTr  r  r"   r   r   r   test_result_exception_success  s    z-GatherTestsBase.test_result_exception_successc           	         s    fddt dD \}}}}}tj ||||| }t }|| t }|d |	|  
 j  |  ||  | | |d |  |	t  |  d S )Nc                    s   g | ]} j  qS r   r  r  r"   r   r   r[     r@   z6GatherTestsBase.test_one_exception.<locals>.<listcomp>r   r   r   )r^   r
   r]   r  r   r  r   r  r|   r  r  r  rI   ro   r  rq   r   rL   rd   )	r#   r   r   r|  r  r!  ra   r  r   r   r"   r   test_one_exception  s     




z"GatherTestsBase.test_one_exceptionc           	         s    fddt dD \}}}}tj ||||ddi}t }|| t }t }|	d |
| |	d   j  |  |
|   j  |  ||  | dd||g d S )Nc                    s   g | ]} j  qS r   r  r  r"   r   r   r[     r@   z:GatherTestsBase.test_return_exceptions.<locals>.<listcomp>   rL  Tr   r   )r^   r
   r]   r  r   r  r   r  rd   r|   r  r  r  r   ro   rI   r  rK   rp   )	r#   r   r   r|  r  ra   r  r   Zexc2r   r"   r   test_return_exceptions  s$    





z&GatherTestsBase.test_return_exceptionsc                 C   s   d d}tdd|\}}}| | d td|ddd\}}}| | d td|ddd\}}}| | d	 tdd|ddd\}}}| | d tdd
dd|\}}}| | d	 d S )N
)zimport asyncio.coroutinesz print(asyncio.coroutines._DEBUG)z-E-cs   False )PYTHONASYNCIODEBUGZPYTHONDEVMODE1s   Truez-Xdev)joinr   rK   rstrip)r#   r   stsstdoutstderrr   r   r   test_env_var_debug  s,    

z"GatherTestsBase.test_env_var_debug)r&   r'   r(   rB   r  r  r  r  r  r  r  r  r   r   rF   r   r    s   r  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )FutureGatherTestsc                 G   s   |S r	   r   )r#   r   r   r   r   r    s    zFutureGatherTests.wrap_futuresc                 C   s   t | j | t jd  t j| }| |t j | |j| j | 	| j | 
|  | | g  | t" t j|d| ji}W d    n1 s0    Y  | |j| j d S )Nr4   )r
   rt   r  r   r]   r  r<   rq   rr   r  rI   ro   rK   rp   rw   rx   re   )r#   Zseq_or_iterra   r   r   r   _check_empty_sequence  s    
0z'FutureGatherTests._check_empty_sequencec                 C   s2   |  g  |  d |  t  |  td d S )Nr   r  )r  ro  r  r"   r   r   r   test_constructor_empty_sequence  s    

z1FutureGatherTests.test_constructor_empty_sequencec              	   C   s   | j  }| j }| t t|| W d    n1 s@0    Y  | tJ | t  tj|| jd W d    n1 s0    Y  W d    n1 s0    Y  d S r:   )	r  rE   re   rM   r}   r
   r]   rw   rx   )r#   r  r  r   r   r   %test_constructor_heterogenous_futures  s    

*z7FutureGatherTests.test_constructor_heterogenous_futuresc                    s    fddt dD }tj| } |j j   j  |   	t
" tj|d ji}W d    n1 s|0    Y   |j j   j  |  d S )Nc                    s   g | ]} j  qS r   )re   rE   r  r"   r   r   r[     r@   zIFutureGatherTests.test_constructor_homogenous_futures.<locals>.<listcomp>r   r4   )r^   r
   r]   rq   rr   re   r  r   ro   rw   rx   )r#   Zchildrenra   r   r"   r   #test_constructor_homogenous_futures  s    
0z5FutureGatherTests.test_constructor_homogenous_futuresc                    s    fddt dD \}}}}}t|||||}t }|| |d |    j	  
|  ||  |   | tj |d |  |t  |  d S )Nc                    s   g | ]} j  qS r   r  r  r"   r   r   r[     r@   z;FutureGatherTests.test_one_cancellation.<locals>.<listcomp>r   r   r   )r^   r
   r]   r   r  r   r|   rL   r  r  rI   ro   r  r   r   r  r   rN   r  rd   )r#   r   r   r|  r  r!  ra   r  r   r"   r   test_one_cancellation  s     



z'FutureGatherTests.test_one_cancellationc              	      s   fddt dD \}}}}}}tj||||||dd}t }|| |d t }	||	 |	   
 j  |  |d |	  t }
||
  j|} |d tj  |d	 tj d  |d< |d	<  |d|	d dd |
g || d S )
Nc                    s   g | ]} j  qS r   r  r  r"   r   r   r[   &  s   zLFutureGatherTests.test_result_exception_one_cancellation.<locals>.<listcomp>r   Tr  r   r   r   r  )r^   r
   r]   r   r  r   r|   r  r  rL   r  r  r   ro   rd   rO   r  rN   rK   r  )r#   r   r   r|  r  r!  r~   ra   r  ZzdeZrter  r   r"   r   &test_result_exception_one_cancellation%  s,    





z8FutureGatherTests.test_result_exception_one_cancellationN)
r&   r'   r(   r  r  r  r  r  r  r  r   r   r   r   r    s   	r  c                       sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )CoroutineGatherTestsc                    s   t    t| j d S r	   )rA   rB   r
   rt   r  r"   rF   r   r   rB   ?  s    
zCoroutineGatherTests.setUpc                 G   s*   g }|D ]}|fdd}| |  q|S )Nc                    s
   | I d H S r	   r   r`   r   r   r   r8   F  s    z/CoroutineGatherTests.wrap_futures.<locals>.coro)r  )r#   r   Zcorosra   r8   r   r   r   r  C  s
    z!CoroutineGatherTests.wrap_futuresc                 C   s   dd }| }| }t ||}| |j| j | j| | j| jdd | }| }| t	" t j||| jd}W d    n1 s0    Y  | |j| j | j| d S )Nc                      s   dS r   r   r   r   r   r   r8   L  s    zBCoroutineGatherTests.test_constructor_loop_selection.<locals>.coroFr  r;   )
r
   r]   rq   rr   r  rO   rt   re   rw   rx   )r#   r8   Zgen1Zgen2ra   Zgen3Zgen4r  r   r   r   test_constructor_loop_selectionK  s    0z4CoroutineGatherTests.test_constructor_loop_selectionc                 C   s   |  t tjdd }W d    n1 s.0    Y  |d}|  t* tj|||d|| jd}W d    n1 sz0    Y  | | j | | g d d S )Nc                 S   s   | S r	   r   rw  r   r   r   r8   ^  s    z<CoroutineGatherTests.test_duplicate_coroutines.<locals>.coror   defr;   )r   r   r  r   )	rw   rx   r
   ry   r]   r  r  rK   rp   )r#   r8   r|  ra   r   r   r   test_duplicate_coroutines\  s    (8z.CoroutineGatherTests.test_duplicate_coroutinesc                    s  d| j  fdd}tj| | j d tj| | j dd  fdd}tj| | j d}t| j  | |  | tj	 | j 
| W d    n1 s0    Y  |   |   |    |   t| j  | d d S )Nr   c                      s   I d H   d7  d S rO  r   r   r  r   r   rR  l  s    
z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.innerr;   c                      s"   t  I d H  d7 d S r  r
   r]   r   )r  r  gathererr  r   r   r   u  s    
z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.outer)r  rE   r
   rj   r   r   rI   rL   rM   rN   rO   r   r   rK   )r#   rR  r   r~   r   )r  r  r  r  r  r   test_cancellation_broadcastg  s$    
*z0CoroutineGatherTests.test_cancellation_broadcastc                    s   dd | j   | j   fdd}tj| | j d}t| j   d  t| j  d  t| j  | | t	 d S )Nc                    s   | I d H  t dd S )Nzshould not be ignoredr#  r
  r   r   r   rR    s    
z:CoroutineGatherTests.test_exception_marking.<locals>.innerc                      s   t  I d H  d S r	   r  r   r   r   rR  r   r   r     s    z:CoroutineGatherTests.test_exception_marking.<locals>.outerr;   )
r  rE   r
   rj   r   r   r|   r  r   rd   r  r   r  r   test_exception_marking  s    



z+CoroutineGatherTests.test_exception_marking)
r&   r'   r(   rB   r  r  r  r  r  r  r   r   rF   r   r  =  s    r  c                       s\   e Zd ZdZ fddZdddZddd	Zd
d Zdd Zdd Z	dd Z
dd Z  ZS )RunCoroutineThreadsafeTestsz/Test case for asyncio.run_coroutine_threadsafe.c                    s$   t    t | _| | j d S r	   r  r"   rF   r   r   rB     s    

z!RunCoroutineThreadsafeTests.setUpFc                    sH   t dI dH  |rtd|r@t | j  t dI dH  || S )z"Wait 0.05 second and return a + b.r  NFail!r   )r
   r   rd   r  r4   rL   )r#   r   r   r-  rL   r   r   r   r    s    zRunCoroutineThreadsafeTests.addNc                 C   sl   | j dd||d}t|| j}|r4| j|jd z ||W | pN|  S  n| pd|  0 dS )z$Run add coroutine in the event loop.r   r   )r-  rL   N)	r  r
   Zrun_coroutine_threadsafer4   Zcall_soon_threadsafer.   rp   ro   rL   )r#   r-  rL   rB  advance_coror8   r#  r   r   r   target  s    
z"RunCoroutineThreadsafeTests.targetc                 C   s,   | j d| j}| j |}| |d dS )z9Test coroutine submission from a thread to an event loop.Nr   )r4   run_in_executorr  rO   rK   )r#   r#  rp   r   r   r   test_run_coroutine_threadsafe  s    z9RunCoroutineThreadsafeTests.test_run_coroutine_threadsafec                 C   s\   | j d| jd}| t}| j | W d   n1 s>0    Y  | d|jj dS )z]Test coroutine submission from a thread to an event loop
        when an exception is raised.NTr  )	r4   r   r  rM   rd   rO   rN  r   r   )r#   r#  exc_contextr   r   r   ,test_run_coroutine_threadsafe_with_exception  s    *zHRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_exceptionc                    s    fdd} j d|} tj  j | W d   n1 sH0    Y  t j  t j D ]} 	|
  qjdS )zZTest coroutine submission from a thread to an event loop
        when a timeout is raised.c                      s    j ddS )Nr   rA  r  r   r"   r   r   r?     r@   zXRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeout.<locals>.<lambda>N)r4   r   rM   r
   r>  rO   r   r   r'  rI   ro   )r#   r  r#  rh   r   r"   r   *test_run_coroutine_threadsafe_with_timeout  s    *zFRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeoutc                    sV    fdd} j d|} tj  j | W d   n1 sH0    Y  dS )z\Test coroutine submission from a thread to an event loop
        when the task is cancelled.c                      s    j ddS )NTrG  r  r   r"   r   r   r?     r@   zZRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_cancelled.<locals>.<lambda>N)r4   r   rM   r
   rN   rO   )r#   r  r#  r   r"   r   ,test_run_coroutine_threadsafe_task_cancelled  s    zHRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_cancelledc                    s   dd } j d fdd}t } j |   j j j    j |  t	} j 
| W d   n1 s0    Y   t|jd |j\\}}} |d |j dS )zjTest coroutine submission from a thread to an event loop
        when the task factory raise an exception.c                 S   s   t d S r	   )	NameError)r4   r8   r   r   r   task_factory  s    zfRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.task_factoryNc                      s    j ddS )NT)r  r  r   r"   r   r   r?     r@   zbRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.<lambda>r   r   )r4   r   r   r  r&  r   rD   Zget_task_factoryrM   r  rO   rK   r  Zcall_args_listr6  r   )r#   r  rX   r  r  r4   r   r  r   r"   r   4test_run_coroutine_threadsafe_task_factory_exception  s    
*zPRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception)FF)FFNF)r&   r'   r(   __doc__rB   r  r  r  r  r  r  r	  r  r   r   rF   r   r    s   

  
r  c                       s8   e Zd Z fddZ fddZdd Zdd Z  ZS )	
SleepTestsc                    s$   t    t | _| | j d S r	   r  r"   rF   r   r   rB     s    

zSleepTests.setUpc                    s   | j   d | _ t   d S r	   r4   r0   rA   tearDownr"   rF   r   r   r    s    
zSleepTests.tearDownc                    s>   dfdd  fdd}j |  d d S )Nr   c                    s    | 7  d S r	   r   rt  rS  r   r   
inc_result  s    z.SleepTests.test_sleep_zero.<locals>.inc_resultc                     sF   j  d d tjdddI d H } d  |  d S )Nr   r   r   rS  )r4   r   rK   r
   r   r  r  rp   r#   r   r   r8     s
    z(SleepTests.test_sleep_zero.<locals>.coro   )r4   rO   rK   r   r   r  r   test_sleep_zero  s
    zSleepTests.test_sleep_zeroc                 C   sF   |  t( | jtjd| jd W d    n1 s80    Y  d S NrK  r;   )rw   rx   r4   rO   r
   r   r"   r   r   r    test_loop_argument_is_deprecated  s    z+SleepTests.test_loop_argument_is_deprecated)r&   r'   r(   rB   r  r  r  r  r   r   rF   r   r    s   r  c                       s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )	WaitTestsc                    s$   t    t | _| | j d S r	   r  r"   rF   r   r   rB   $  s    

zWaitTests.setUpc                    s   | j   d | _ t   d S r	   r  r"   rF   r   r   r  )  s    
zWaitTests.tearDownc                 C   sJ   |  t, | jtjt g| jd W d    n1 s<0    Y  d S r:   )rw   rx   r4   rO   r
   r   r   r"   r   r   r   (test_loop_argument_is_deprecated_in_wait.  s    z2WaitTests.test_loop_argument_is_deprecated_in_waitc                 C   sJ   |  t, | jtjt d| jd W d    n1 s<0    Y  d S r  )rw   rx   r4   rO   r
   r   r   r"   r   r   r   ,test_loop_argument_is_deprecated_in_wait_for4  s    z6WaitTests.test_loop_argument_is_deprecated_in_wait_forc                 C   s   |  t& | jtt g W d    n1 s60    Y  | jt }|  t( | jt|t g W d    n1 s0    Y  d S r	   )rw   rx   r4   rO   r
   r   r   r   r  r   r   r   test_coro_is_deprecated_in_wait:  s    "z)WaitTests.test_coro_is_deprecated_in_wait)	r&   r'   r(   rB   r  r  r  r  r  r   r   rF   r   r  #  s
   r  c                       s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )CompatibilityTestsc                    s$   t    t | _| | j d S r	   r  r"   rF   r   r   rB   J  s    

zCompatibilityTests.setUpc                    s   | j   d | _ t   d S r	   r  r"   rF   r   r   r  O  s    
zCompatibilityTests.tearDownc                 C   sV   |  t tjdd }W d    n1 s.0    Y  | j| }| d| d S )Nc                   s   s   t dE d H  dS )Nr   rm   r   r   r   r   r   r8   W  s    z:CompatibilityTests.test_yield_from_awaitable.<locals>.cororm   r=  )r#   r8   rp   r   r   r   test_yield_from_awaitableT  s
    (z,CompatibilityTests.test_yield_from_awaitablec                    s   |  t tjdd  W d    n1 s.0    Y  |  t tjdd W d    n1 sf0    Y   fdd}| j| }| ddg| d S )	Nc                   S   s   dS )Nok1r   r   r   r   r   r  b  s    z;CompatibilityTests.test_await_old_style_coro.<locals>.coro1c                   s   s   t dE d H  dS )Nr   ok2r   r   r   r   r   r  g  s    z;CompatibilityTests.test_await_old_style_coro.<locals>.coro2c                      s   t    I d H S r	   r  r   r  r  r   r   rR  l  s    z;CompatibilityTests.test_await_old_style_coro.<locals>.innerr  r  r=  )r#   rR  rp   r   r  r   test_await_old_style_coro_  s    ((z,CompatibilityTests.test_await_old_style_coroc                 C   s   t d}tdd|dd d S )Nz
            import asyncio

            async def native_coro():
                pass

            @asyncio.coroutine
            def old_style_coro():
                yield from native_coro()

            asyncio.run(old_style_coro())
        z-Wignore::DeprecationWarningr  r  )r  )textwrapdedentr   )r#   r   r   r   r   test_debug_mode_interopr  s    
z*CompatibilityTests.test_debug_mode_interop)	r&   r'   r(   rB   r  r  r  r!  r  r   r   rF   r   r  F  s
   r  __main__)F)Cr
  rx  rP  rg  r   rT   r   rr  r   r3  r  r+  r  Zunittestr  r   r
   r   r   r   Ztest.test_asyncior   r   ri   r   Ztest.support.script_helperr   r   r   contextmanagerr   r   r    r!   r)   rY  r2   r  r  Z
skipUnlessrJ   ZTestCaser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&   rU  r   r   r   r   <module>   s   

	                     :5p
fW`d"#?
