o
    JXh7                    @   s  	 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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dRddZdd Z G dd dZ!G dd dZ"G dd dZ#dd Z$G dd dZ%e&e'edoe'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.d/ d/e#e%ej(Z/e$G d0d1 d1e#ej(Z0e&e'ed d!G d2d3 d3ej(Z1G d4d5 d5Z2G d6d7 d7ej(e2Z3e&e'ed8d!G d9d: d:ej(e2Z4G d;d< d<Z5G d=d> d>e5ej(Z6e&e'ed d!G d?d@ d@e5ej(Z7G dAdB dBej(Z8G dCdD dDZ9G dEdF dFe9ej(Z:G dGdH dHe9ej(Z;G dIdJ dJej(Z<G dKdL dLej(Z=G dMdN dNej(Z>G dOdP dPej(Z?e@dQkreA  dS dS )S    N)mock)GenericAlias)
coroutines)futures)tasks)utils)support)assert_python_okc                   C   s   t d  d S N)asyncioZset_event_loop_policy r   r   F/opt/python-3.10.19/usr/lib/python3.10/test/test_asyncio/test_tasks.pytearDownModule      r   c                         d S r
   r   r   r   r   r   coroutine_function!      r   c                 c   s0    t j}|j}z| |_d V  W ||_d S ||_w r
   )r   r   _DEBUG)Zenabledr   Z	old_debugr   r   r   set_coroutine_debug%   s   r   Fc                 C   sN   |rd| }nd| }|d ur |d }d| |||d |d f S d| ||f 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_coroutine1   s   
r   c                 C   s6   	 d}	 | j }|d u rn|} |d7 }qt| | j|fS )Nr   Tr   )__context__typeargs)excdepthcontextr   r   r   get_innermost_context>   s   r$   c                   @      e Zd Zdd Zdd ZdS )Dummyc                 C      dS )Nz<Dummy>r   selfr   r   r   __repr__P      zDummy.__repr__c                 G      d S r
   r   )r)   r    r   r   r   __call__S   r+   zDummy.__call__N)__name__
__module____qualname__r*   r-   r   r   r   r   r&   N   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N*   )StopIteration)r)   vr   r   r   sendX   s   zCoroLikeObject.sendc                 G   r,   r
   r   )r)   r!   r   r   r   throw[   r+   zCoroLikeObject.throwc                 C   r,   r
   r   r(   r   r   r   close^   r+   zCoroLikeObject.closec                 C      | S r
   r   r(   r   r   r   	__await__a   r+   zCoroLikeObject.__await__N)r.   r/   r0   r6   r7   r8   r:   r   r   r   r   r1   W   s
    r1   c                       s  e Zd ZdZdZdd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ʄ Zheijdˡdd̈́ ZkeijdΡddЄ Zldd҄ ZmddԄ Znddք Zodd؄ Zpddڄ Zqeijdˡdd܄ Zrddބ Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|  Z}S )BaseTaskTestsNTestTaskc                 C   s   | j j|||dS )N)loopname)	__class__Task)r)   r=   coror>   r   r   r   new_taskj   s   zBaseTaskTests.new_taskc                 C   s   | j j|dS Nr=   )r?   Futurer)   r=   r   r   r   
new_futurem   r   zBaseTaskTests.new_futurec                    s6   t       _ j j  fdd j_d S )Nc                      s      jS r
   )rG   r=   r   r(   r   r   <lambda>t       z%BaseTaskTests.setUp.<locals>.<lambda>)supersetUpnew_test_loopr=   set_task_factoryrB   create_futurer(   r?   r(   r   rK   p   s   

zBaseTaskTests.setUpc                 C   s,   | j jt }| |jtf | |t d S r
   )r?   r@   strassertEqual__args__assertIsInstancer   r)   taskr   r   r   test_generic_aliasv   s   z BaseTaskTests.test_generic_aliasc                 C   s   dd }|  | j| }| t|d | |jd  |d | |jd | tj	 | j
| W d    d S 1 s?w   Y  d S )Nc                      r   r
   r   r   r   r   r   rA   |   r   z;BaseTaskTests.test_task_cancel_message_getter.<locals>.coro_cancel_message
my message)rB   r=   
assertTruehasattrrQ   rW   cancelassertRaisesr   CancelledErrorrun_until_completer)   rA   tr   r   r   test_task_cancel_message_getter{   s   
"z-BaseTaskTests.test_task_cancel_message_getterc                 C   st   dd }|  | j| }|d d|_| |jd | tj | j| W d    d S 1 s3w   Y  d S )Nc                      r   r
   r   r   r   r   r   rA      r   z;BaseTaskTests.test_task_cancel_message_setter.<locals>.cororX   zmy new message)	rB   r=   r[   rW   rQ   r\   r   r]   r^   r_   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                   @      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/   r0   rf   r   r   r   r   Evil   s    rg   c                      s     S r
   r   r   )rg   r   r   run   s   z0BaseTaskTests.test_task_del_collect.<locals>.runc                    s   g | ]
} j  qS r   )rB   r=   ).0_)rh   r)   r   r   
<listcomp>   s    z7BaseTaskTests.test_task_del_collect.<locals>.<listcomp>d   )r=   r^   r   gatherranger(   r   )rg   rh   r)   r   test_task_del_collect   s   z#BaseTaskTests.test_task_del_collectc                 C   s~   t  }| |}dd }z,| td | j|| W d    n1 s'w   Y  W |  d S W |  d S |  w )Nc                    s   | I d H  d S r
   r   futr   r   r   rh         z1BaseTaskTests.test_other_loop_future.<locals>.runzTask .* got Future .* attached)r   new_event_looprG   assertRaisesRegexRuntimeErrorr=   r^   r8   )r)   
other_looprq   rh   r   r   r   test_other_loop_future   s   
z$BaseTaskTests.test_other_loop_futurec                    s\    fdd}t j| | jd | td | j  W d    d S 1 s'w   Y  d S )Nc                          I d H  d S r
   r   r   rU   r   r   test   rr   z6BaseTaskTests.test_task_awaits_on_itself.<locals>.testrD   zTask cannot await on itself)r   ensure_futurer=   rt   ru   r^   )r)   rz   r   ry   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                         dS Nokr   r   r   r   r   notmuch   r   z.BaseTaskTests.test_task_class.<locals>.notmuchr   )rB   r=   r^   rY   donerQ   resultassertIs_loopget_loopr   rs   set_event_loopr8   )r)   r   r`   r=   r   r   r   test_task_class   s   

zBaseTaskTests.test_task_classc                    sT  dd  t j  | jd}| |j| j | j| | |  | |	 d   }| 
|j | td t | W d    n1 sIw   Y   fdd}| j| }| |j| j | j| | |  | |	 d t | j | 
t jd  t   }| |j| j | j| | |  | |	 d d S )Nc                      r}   r~   r   r   r   r   r   r      r   z;BaseTaskTests.test_ensure_future_coroutine.<locals>.notmuchrD   r   no current event loopc                         t   S r
   r   r{   r   r   r   r   rz         z8BaseTaskTests.test_ensure_future_coroutine.<locals>.test)r   r{   r=   r   r   r^   rY   r   rQ   r   
addCleanupr8   rt   ru   r   r)   r`   arz   r   r   r   test_ensure_future_coroutine   s0   z*BaseTaskTests.test_ensure_future_coroutinec                    s  |  t tjdd  W d    n1 sw   Y  tj  | jd}| |j| j | j| | 	|
  | | d   }| |j | td t| W d    n1 saw   Y   fdd}| j| }| |j| j | j| | 	|
  | | d t| j | tjd  t  }| |j| j | j| | 	|
  | | d d S )Nc                   S   r'   r~   r   r   r   r   r   r         z=BaseTaskTests.test_ensure_future_coroutine_2.<locals>.notmuchrD   r   zThere is no current event loopc                      r   r
   r   r   r   r   r   rz      r   z:BaseTaskTests.test_ensure_future_coroutine_2.<locals>.test)assertWarnsDeprecationWarningr   	coroutiner{   r=   r   r   r^   rY   r   rQ   r   r   r8   rt   ru   r   r   r   r   r   test_ensure_future_coroutine_2   s6   z,BaseTaskTests.test_ensure_future_coroutine_2c                 C   s   |  | j}|d t|}| j| | |  | |	 d | 
|| t }| | | t tj||d}W d    n1 sKw   Y  |  tj|| jd}| 
|| d S )NkorD   )rG   r=   
set_resultr   r{   r^   rY   r   rQ   r   r   rs   r   r\   
ValueErrorr8   )r)   Zf_origfr=   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 sLw   Y  |  tj|| jd}| 	|| d S )Nc                      r}   r~   r   r   r   r   r   r      r   z6BaseTaskTests.test_ensure_future_task.<locals>.notmuchr   rD   )rB   r=   r   r{   r^   rY   r   rQ   r   r   rs   r   r\   r   r8   )r)   r   Zt_origr`   r=   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w   Y  t }| | tj|| |d}|| | |	 d d S )Nc                   @   r%   )z6BaseTaskTests.test_ensure_future_awaitable.<locals>.Awc                 S   s
   || _ d S r
   rA   r)   rA   r   r   r   __init__6  s   
z?BaseTaskTests.test_ensure_future_awaitable.<locals>.Aw.__init__c                 s   s    | j E d H S r
   r   r(   r   r   r   r:   8  r   z@BaseTaskTests.test_ensure_future_awaitable.<locals>.Aw.__await__N)r.   r/   r0   r   r:   r   r   r   r   Aw5  s    r   c                   S   r'   r~   r   r   r   r   r   rA   <  r   z8BaseTaskTests.test_ensure_future_awaitable.<locals>.cororD   r   )
r   r   r   r   rs   r   r{   r^   rQ   r   )r)   r   rA   r=   rq   r   r   r   test_ensure_future_awaitable4  s   

z*BaseTaskTests.test_ensure_future_awaitablec                 C   s:   |  t td W d    d S 1 sw   Y  d S r~   )r\   	TypeErrorr   r{   r(   r   r   r   test_ensure_future_neitherF  s   "z(BaseTaskTests.test_ensure_future_neitherc                 C   sZ   t  }| | j}| td t j||d W d    n1 s"w   Y  |  d S )NzRThe future belongs to a different loop than the one specified as the loop argumentrD   )r   rs   rG   r=   rt   r   r{   r8   )r)   r=   r   r   r   r   test_ensure_future_error_msgJ  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   fooV     z)BaseTaskTests.test_get_stack.<locals>.fooc                     sj    j dd} z| d jjd W d } nd } w t } jd|d |d | }	|d d S )Nr   )limitr   r   )r   filezfoo\(\) running)
Z	get_stackrQ   f_codeco_nameioStringIOprint_stackseekreadassertRegex)r   r   tb)Tr)   r   r   r   Y  s   
z)BaseTaskTests.test_get_stack.<locals>.barc                      s"   t j jd  I d H  d S rC   )r   r{   r=   r   )r   r   r)   r   r   runnerh  s   z,BaseTaskTests.test_get_stack.<locals>.runnerr=   r^   )r)   r   r   )r   r   r   r)   r   test_get_stackS  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                      r}   Nabcr   r   r   r   r   r   r  r   z-BaseTaskTests.test_task_repr.<locals>.notmuchr   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>()]>r   z#<Task cancelled name='TestTask' %s>z/<Task finished name='TestTask' %s result='abc'>)r=   	set_debugrQ   r.   r   r0   r/   
test_utilsget_function_sourcerB   add_done_callbackr&   r   _source_tracebackreprr[   r\   r   r]   r^   )	r)   r   filenamelinenor   gencoro_qualnamer`   rA   r   r   r   test_task_repro  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                      r}   N{   r   r   r   r   r   r     r   z;BaseTaskTests.test_task_repr_autogenerated.<locals>.notmuchz ^<Task pending name='Task-(\d+)'r   )rB   r=   ZassertNotEqualr   rematchassertIsNotNoneZ
assertLessintgroupr^   )r)   r   t1t2Zmatch1Zmatch2r   r   r   test_task_repr_autogenerated  s   

 z*BaseTaskTests.test_task_repr_autogeneratedc                 C   sD   dd }|  | j| }|dh | | d | j| d S )Nc                      r}   r   r   r   r   r   r   r     r   z:BaseTaskTests.test_task_repr_name_not_str.<locals>.notmuch   z{6})rB   r=   set_namerQ   get_namer^   )r)   r   r`   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w   Y  | |jd | |j	d | |j
t | }d}d}| |j| | |j	| tjrtjrlt|\}}|jd }d||||d |d	 f }n|j}	d
||	j|	jf }| t|d|  | | j |}
|
t  tjrdt| }n|j}	d|	j|	jf }t|d||
jtj d}| t|
d|  | j |
 d S )NFc                   S   r'   r   r   r   r   r   r   r     s   z<BaseTaskTests.test_task_repr_coro_decorator.<locals>.notmuchr   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   )r=   r   r   r   r   r   rQ   r.   r   r0   r/   r   r   r   r   r   gi_codeco_filenameco_firstlinenor   rB   r   r&   r   r^   )r)   r   r   Z	coro_namer   r   r   r   rA   coder`   r   r   r   r   test_task_repr_coro_decorator  sZ   

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                       | I d H S r
   r   rp   r   r   r   wait_for     
z7BaseTaskTests.test_task_repr_wait_for.<locals>.wait_forz<Task .* wait_for=%s>)r=   r   rG   rB   r   run_brieflyr   r   r   escaper   r^   )r)   r   rq   rU   r   r   r   test_task_repr_wait_for  s   

z%BaseTaskTests.test_task_repr_wait_forc              	   C   s   t dB | jd dd }| t tt|d}W d    n1 s(w   Y  | j	|d}d|_
| |jj W d    n1 sIw   Y  t|j}d}| || d S )NTc                       t dI d H  d S Nr   r   sleep)xyr   r   r   func     z>BaseTaskTests.test_task_repr_partial_corowrapper.<locals>.funcr      FzL<coroutine object \w+\.test_task_repr_partial_corowrapper\.<locals>\.func at)r   r=   r   r   r   r   r   	functoolspartialcreate_task_log_destroy_pendingr   Z_coror8   r   r   )r)   r   Zpartial_funcrU   Z	coro_reprexpectedr   r   r   "test_task_repr_partial_corowrapper
  s   

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   )r   binner1inner2r   r   outer$  s   z-BaseTaskTests.test_task_basics.<locals>.outerc                      r}   r2   r   r   r   r   r   r   )  r   z.BaseTaskTests.test_task_basics.<locals>.inner1c                      r}   )Ni  r   r   r   r   r   r   ,  r   z.BaseTaskTests.test_task_basics.<locals>.inner2i  )rQ   r=   r^   )r)   r   r`   r   r   r   test_task_basics"  s
   zBaseTaskTests.test_task_basicsc                    s\   t     dd  fdd}z | } | W    d S    w )Nc                         t r
   r   r   r   r   r   raise_error9  r   zFBaseTaskTests.test_exception_chaining_after_await.<locals>.raise_errorc                     s   zt d tyX }  zG  }z|I d H  W n* tyE }  zt| t | j}t||jft df W Y d } ~ nd } ~ ww W Y d } ~ d S W Y d } ~ d S d } ~ ww )N   )r   )KeyError	ExceptionrB   rQ   r   r   r   r    )r!   rU   Zchainedr=   r   r)   r   r   rh   <  s&   z>BaseTaskTests.test_exception_chaining_after_await.<locals>.run)r   rs   r   rB   r^   r8   r)   rh   rU   r   r   r   #test_exception_chaining_after_await2  s   
z1BaseTaskTests.test_exception_chaining_after_awaitc                    sp   d  t   dd  fdd}z| }| W   n  w  d d S )Nc                    s   | r
   r   )r!   r   r   r   process_excV  r   zYBaseTaskTests.test_exception_chaining_after_await_with_context_cycle.<locals>.process_excc                     s   zt d tyI }  z8| }z|I d H  W n ty6 }  z| | ju  d | _W Y d } ~ nd } ~ ww W Y d } ~ d S W Y d } ~ d S d } ~ ww )Nr   )r   r   rB   BaseExceptionr   )r!   rU   Z	has_cycler=   r   r)   r   r   rh   Y  s    
zQBaseTaskTests.test_exception_chaining_after_await_with_context_cycle.<locals>.runF)r   rs   r   rB   r^   r8   rQ   r   r   r   r   6test_exception_chaining_after_await_with_context_cycleO  s   
zDBaseTaskTests.test_exception_chaining_after_await_with_context_cyclec                    s    fdd}  |}dd } || }||j  tj || W d    n1 s2w   Y   |	   |
   |  d S )Nc                  3       d V }   d|  dV  d S N      $@r   assertAlmostEqualZwhenr(   r   r   r   p     
z&BaseTaskTests.test_cancel.<locals>.genc                         t dI d H  dS )Nr     r   r   r   r   r   rU   w     z'BaseTaskTests.test_cancel.<locals>.task)rL   rB   	call_soonr[   r\   r   r]   r^   rY   r   	cancelledassertFalse)r)   r   r=   rU   r`   r   r(   r   test_canceln  s   
zBaseTaskTests.test_cancelc              
         g d}|D ]j\ }j  dX t  dd  fdd}| }tj}| W d    n1 sDw   Y  |j}	|j
d t|}	|tj|df W d    n1 skw   Y  qd S )	N)r   r   )r
   r   )rX   r  )   r  cancel_argsc                      r   N
   r   r   r   r   r   r     r   zHBaseTaskTests.test_cancel_with_message_then_future_result.<locals>.sleepc                     L     } tdI d H  | j   t| gI d H \}}|   d S r   )rB   r   r   r[   waitr   rU   r   pendingr  r=   r)   r   r   r   rA        
zGBaseTaskTests.test_cancel_with_message_then_future_result.<locals>.coror   r   subTestr   rs   r   rB   r\   r]   r^   	exceptionrQ   r    r$   r)   casesexpected_argsrA   rU   cmr!   actualr   r  r   +test_cancel_with_message_then_future_result  (   

z9BaseTaskTests.test_cancel_with_message_then_future_resultc              
      r  )	Nr  r  c                      r   r  r   r   r   r   r   r     r   zKBaseTaskTests.test_cancel_with_message_then_future_exception.<locals>.sleepc                     r  r   rB   r   r   r[   r  r!  r  r  r   r   rA     r  zJBaseTaskTests.test_cancel_with_message_then_future_exception.<locals>.coror   r   r  r"  r   r  r   .test_cancel_with_message_then_future_exception  r(  z<BaseTaskTests.test_cancel_with_message_then_future_exceptionc                    s   t     dd  fdd} | }t j} | W d    n1 s2w   Y  |j}|j	d t
|}|t jddf d S )Nc                      r   r  r   r   r   r   r   r     r   zJBaseTaskTests.test_cancel_with_message_before_starting_task.<locals>.sleepc                     s<      } | d t| gI d H \}}|   d S )NrX   )rB   r[   r   r  r!  r  r=   r)   r   r   r   rA     s
   
zIBaseTaskTests.test_cancel_with_message_before_starting_task.<locals>.coror   r  r   )r   rs   r   rB   r\   r]   r^   r!  rQ   r    r$   )r)   rA   rU   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w   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   rU        z-BaseTaskTests.test_cancel_yield.<locals>.task)r   r   r   r   rB   r=   r   r   r[   r\   r]   r^   rY   r   r  r  r)   rU   r`   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 s5w   Y  | 
   | 
|  d S )Nc                          I d H  dS r-  r   r   r   r   r   rU        
z4BaseTaskTests.test_cancel_inner_future.<locals>.task)rG   r=   rB   r   r   r[   r\   r   r]   r^   rY   r  r/  r   r2  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 s9w   Y  | 
|  | 
   | 
|  d S )Nc                      r1  r-  r   r   r2  r   r   rU     r3  zBBaseTaskTests.test_cancel_both_task_and_inner_future.<locals>.task)rG   r=   rB   r   r   r[   r\   r   r]   r^   rY   r   r  r/  r   r2  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 d S  t jy   Y dS w r2   r   r]   r   fut1fut2r   r   rU     s   
z5BaseTaskTests.test_cancel_task_catching.<locals>.taskr3   rG   r=   rB   r   r   r   _fut_waiterr   r[   rY   r  r^   rQ   r  r)   rU   r`   resr   r7  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w I d H } | S r
   r6  )r=  r8  r9  Zfut3r   r   rU   /  s   

z5BaseTaskTests.test_cancel_task_ignoring.<locals>.taskr3   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 )Nrl   r
  )r[   rY   _must_cancelr   r   r   r)   r`   r   r   rU   L  s
   z4BaseTaskTests.test_cancel_current_task.<locals>.taskr   rs   r   rB   r  r  r\   r]   r^   rY   r   rA  r[   r)   r=   rU   r   rB  r   test_cancel_current_taskH  s   

z&BaseTaskTests.test_cancel_current_taskc                    s   	 t  } |  fdd} ||     t j|j  	
   	   j    d S )Nc                      s       j dS r-  )r[   rY   rA  r   rB  r   r   rU   a  s   z.BaseTaskTests.test_cancel_at_end.<locals>.taskrC  rD  r   rB  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 sCw   Y  	  	   	  d S )Nc                      s      S r
   r8   r   rD   r   r   rH   w  s    z8BaseTaskTests.test_cancel_awaited_task.<locals>.<lambda>c                      rx   r
   r   r   rp   r   r   nested|  rr   z6BaseTaskTests.test_cancel_awaited_task.<locals>.nestedc                      s6      tdI d H    I d H  d S r   rB   r   r   r[   r   )r=   rH  nested_taskr)   rU   r   r   rA     s
   z4BaseTaskTests.test_cancel_awaited_task.<locals>.coro)
r   rs   r   rG   rB   r\   r]   r^   rY   r  r   r   )rq   r=   rH  rJ  r)   rU   r   test_cancel_awaited_tasko  s   
z&BaseTaskTests.test_cancel_awaited_taskc                 C   s"   ||vrt d|d| dd S )Nztext z not found in:
>>>z<<<ru   )r)   textsubstrr   r   r   assert_text_contains  s   z"BaseTaskTests.assert_text_containsc                       t     dd  fdd} | }z | W n t jy>   t }|d |d Y d S w 	d d S )Nc                      r   r  r   r   r   r   r   rH       zEBaseTaskTests.test_cancel_traceback_for_future_result.<locals>.nestedc                     s6      } tdI d H  |   | I d H  d S r   rI  ry   r=   rH  r)   r   r   rA     s
   zCBaseTaskTests.test_cancel_traceback_for_future_result.<locals>.coroawait asyncio.sleep(10)zawait task  # search targetCancelledError did not occur
r   rs   r   rB   r^   r]   	traceback
format_excrO  failr)   rA   rU   r   r   rR  r   'test_cancel_traceback_for_future_result  s   
z5BaseTaskTests.test_cancel_traceback_for_future_resultc                    rP  )Nc                      r   r  r   r   r   r   r   rH    rQ  zHBaseTaskTests.test_cancel_traceback_for_future_exception.<locals>.nestedc                     sJ      } tdI d H  |   t| gI d H \}}|   d S r   r)  r  rR  r   r   rA     s   zFBaseTaskTests.test_cancel_traceback_for_future_exception.<locals>.cororS  z!task.exception()  # search targetrT  rU  rY  r   rR  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 s0w   Y  t|jd |	  d 
d   |  tj j| d S )	Nc                  3   sB    d V }   d|  dV }   d|  dV }   d|  dV  d S )N皙?皙?333333?r  r  r(   r   r   r        
z:BaseTaskTests.test_stop_while_run_in_complete.<locals>.genr   c                      sB   dk rt dI d H  d7 dkr   dk sd S d S )Nr  r\  r   r   )r   r   stopr   )r=   r   r   r   rU     s   z;BaseTaskTests.test_stop_while_run_in_complete.<locals>.taskz+Event loop stopped before Future completed.r   r^  )rL   rB   r\   ru   r^   rQ   rP   r!  r  r   r  timer[   r   r]   )r)   r   rU   r`   r%  r   )r=   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 w   Y  | j| d S )Nc                      r   r
   r   r   r   r   r   rA     r   z.BaseTaskTests.test_log_traceback.<locals>.corozcan only be set to FalseT)rB   r=   rt   r   Z_log_tracebackr^   r)   rA   rU   r   r   r   test_log_traceback  s   z BaseTaskTests.test_log_tracebackc                    s   fdd} |}|td |td fdd}||| }|d d|  ||| }d|  |d d S )Nc                  3   0    d V }   d|  dV }   d|  dV  d S Nr\  r   333333?r  r  r(   r   r   r        
z$BaseTaskTests.test_wait.<locals>.genr\  rg  c                     s@   t  gI d H \} }| t g |t  dS r2   r   r  rQ   setr   r  r   r   r)   r   r   r   	  s
   z$BaseTaskTests.test_wait.<locals>.foor3   rL   rB   r   r   r^   rQ   r  ra  r)   r   r=   r   r=  r   rl  r   	test_wait  s   
zBaseTaskTests.test_waitc              	   C   s   |  t tjdd }W d    n1 sw   Y  |d}| | jt|||dg}|  t | j|\}}W d    n1 sGw   Y  | | | 	t
dd |D ddh d S )Nc                 S   r9   r
   r   sr   r   r   rA     r   z:BaseTaskTests.test_wait_duplicate_coroutines.<locals>.cororz   spamc                 s       | ]}|  V  qd S r
   r   ri   r   r   r   r   	<genexpr>'      z?BaseTaskTests.test_wait_duplicate_coroutines.<locals>.<genexpr>)r   r   r   r   rB   r=   r  r^   r  rQ   rj  )r)   rA   crU   r   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)	r\   r   r=   r^   r   r  rj  r   r8   )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   re  )Nr  r   r\  r  r  r(   r   r   r   8  rh  z4BaseTaskTests.test_wait_first_completed.<locals>.genr  r\  rz  r  )rL   rB   r   r   r  FIRST_COMPLETEDr^   rQ   r  r   rY   assertIsNoner   r  ra  advance_time)r)   r   r=   r   r   rU   r   r  r   r(   r   test_wait_first_completed6  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                      r   r   r   r   r   r   r   coro1W  r   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   coro2Z  s   z2BaseTaskTests.test_wait_really_done.<locals>.coro2rz  )rB   r=   r   r  r}  r^   rQ   rY   r   r~  r   )r)   r  r  r   r   rU   r   r  r   r   r   test_wait_really_doneS  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   r  r  r  r  r(   r   r   r   m  r  z4BaseTaskTests.test_wait_first_exception.<locals>.genr  c                      s
   t d)Nerr)ZeroDivisionErrorr   r   r   r   r!   w     z4BaseTaskTests.test_wait_first_exception.<locals>.excrz  r   r  rL   rB   r   r   r  FIRST_EXCEPTIONr^   rQ   r  ra  r  	r)   r   r=   r   r!   r   rU   r   r  r   r(   r   test_wait_first_exceptionk  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   re  )Nr  r   {Gz?r  r  r(   r   r   r     rh  z<BaseTaskTests.test_wait_first_exception_in_wait.<locals>.genr  c                         t dI d H  td)Nr  r  r   r   r  r   r   r   r   r!        z<BaseTaskTests.test_wait_first_exception_in_wait.<locals>.excrz  r  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   re  rf  r  r  r(   r   r   r     rh  z3BaseTaskTests.test_wait_with_exception.<locals>.genr\  c                      r  )Nrg  Zreallyr  r   r   r   r   sleeper  r  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!  ru  r   r   r   rv    s    zFBaseTaskTests.test_wait_with_exception.<locals>.foo.<locals>.<genexpr>r   )r   r  rQ   lenrj  )r   r  errorsrl  r   r   r     s   z3BaseTaskTests.test_wait_with_exception.<locals>.foorg  )rL   rB   r   r   r^   r  ra  )r)   r   r=   r  r   r   rl  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   sB    d V }   d|  dV }   d|  dV }   d|  dV  d S )Nr\  r   rg  )\(?r  r  r(   r   r   r     r_  z1BaseTaskTests.test_wait_with_timeout.<locals>.genr\  rg  c                     sF   t j gddI d H \} }| t g |tg d S )Nr  timeoutri  rk  rl  r   r   r     s   z1BaseTaskTests.test_wait_with_timeout.<locals>.foor  r  )	rL   rB   r   r   r^   r  ra  r  r  r)   r   r=   r   r   rl  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   sB    d V }   d|  dV }   d|  dV }   d|  dV  d S rf  r  r  r(   r   r   r     r_  z8BaseTaskTests.test_wait_concurrent_complete.<locals>.genr\  rg  r  r  )rL   rB   r   r   r^   r  rQ   rj  r  ra  r  )r)   r   r=   r   r   r   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   re  rf  r  r  r(   r   r   r     rh  z;BaseTaskTests.test_wait_with_iterator_of_tasks.<locals>.genr\  rg  c                     sD   t t gI d H \} }| t g |t  dS r2   )r   r  iterrQ   rj  rk  rl  r   r   r     s
   z;BaseTaskTests.test_wait_with_iterator_of_tasks.<locals>.foor3   rm  rn  r   rl  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 s,w   Y  |dd |dd	|d
d fdd}| | }| 	d

  | d|d d v  | d	|d d v  | |d d | | }| 	d

  d S )Nc                   s   s    dV  dV  dV  dV  d S Nr   r  r   r   r   r   r   r     
   
z,BaseTaskTests.test_as_completed.<locals>.geng      ?Fc                 3   sB    t | E d H   | sd v rd v rdd |S )Nr   r   TgQ?)r   r   addr  )dtr   )	completedr=   time_shiftedr   r   r  $  s   

z0BaseTaskTests.test_as_completed.<locals>.sleeperr  r   r   rg  rx  c                     s0   g } t  gD ]
}| |I d H  q| S r
   r   as_completedappend)valuesr   )r   r   rx  r   r   r   2  s
   z,BaseTaskTests.test_as_completed.<locals>.foor   )rL   Zslow_callback_durationrj  r   r   r   r   r^   rB   r  ra  rY   rQ   )r)   r   r  r   r=  r   )r   r   rx  r  r=   r  r   test_as_completed  s(   



zBaseTaskTests.test_as_completedc                    s   dd }|  |tdd tdd fdd}| | }| 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   r\  r   r   r   r   r   r   D  r  z9BaseTaskTests.test_as_completed_with_timeout.<locals>.genr\  r   rg  r   c                     s   g } t j gddD ]1}| rd z|I d H }| d|f W q t jy= } z| d|f W Y d }~qd }~ww | S )NQ?r  g{Gz?r   r   )r   r  r  r  TimeoutError)r  r   r5   r!   r   r   r=   r   r   r   O  s   

z9BaseTaskTests.test_as_completed_with_timeout.<locals>.foor   r   )r   r   r   r  r  )rL   r   r   r   r^   rB   rQ   r  rS   r  r  ra  r  r  )r)   r   r   r=  r   r  r   test_as_completed_with_timeoutB  s   

z,BaseTaskTests.test_as_completed_with_timeoutc                    sD   dd } |}tdd  fdd}|||  d S )Nc                   s   s    d V  dV  dV  d S r  r   r   r   r   r   r   h     
z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.genr  r   c                     s2   t j gddD ]} | I d H }|d q	d S )Nr   r  r   )r   r  rQ   )r   r5   r   r)   r   r   r   q  s
   
z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.foo)rL   r   r   r^   rB   r  r   r  r   %test_as_completed_with_unused_timeoutf  s
   
z3BaseTaskTests.test_as_completed_with_unused_timeoutc                    sR   dd } |tdd}tdd}||h  fdd}|  d S )	Nc                   s   s    dV  dV  dV  d S )Nr   皙?r   r   r   r   r   r   z  r  z9BaseTaskTests.test_as_completed_reverse_wait.<locals>.genr  r   r\  r   c                     s   t t } t| d | d I d H }|d d  d | d I d H }|d d  d S )Nr   r   r   r  r   r   r\  )listr   r  rQ   r  r  ra  r  )futsr   r   fsr=   r)   r   r   rz     s   
z:BaseTaskTests.test_as_completed_reverse_wait.<locals>.test)rL   r   r   r^   )r)   r   r   r   rz   r   r  r   test_as_completed_reverse_waitx  s   
z,BaseTaskTests.test_as_completed_reverse_waitc                    sT   fdd}t dd}t dd}||h  fdd}|}||  d S )Nc                  3   s0    d V }   d|  dV }   d|  dV  d S )Nr  r   r  r  r(   r   r   r     rh  z7BaseTaskTests.test_as_completed_concurrent.<locals>.genr  r   r   c                     s   t t } t| d t| }t}|I d H \}}W d    n1 s,w   Y  |jd j	t
 tdd |D ddh d S )Nr   r   c                 s   rs  r
   rt  ru  r   r   r   rv    rw  zKBaseTaskTests.test_as_completed_concurrent.<locals>.test.<locals>.<genexpr>r   r   )r  r   r  rQ   r  r  r   r   warningsr   __file__rj  )r  waiterr%  r   r  r  r)   r   r   rz     s   
"z8BaseTaskTests.test_as_completed_concurrent.<locals>.test)r   r   rL   r^   )r)   r   r   r   rz   r=   r   r  r   test_as_completed_concurrent  s   

z*BaseTaskTests.test_as_completed_concurrentc                    s   |  t tjdd  W d    n1 sw   Y  |  t tj fdd}W d    n1 s5w   Y  | | j| }| j| | }| t	|ddh | t
|d d S )Nc                 S   r9   r
   r   rp  r   r   r   rA     r   zBBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.coroc                  3   s<    g }  d}t || dgD ]
}| |E d H  q| S )Nhamrr  r  )r   rx  r   r   r   r   r     s   zDBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.runnerr  rr  r   )r   r   r   r   rB   r=   r^   r   rQ   rj  r  )r)   r   rq   r   r   r   r   &test_as_completed_duplicate_coroutines  s   	z4BaseTaskTests.test_as_completed_duplicate_coroutinesc                 C   s`   dd }| }|  |j t|g}| td t| W d    d S 1 s)w   Y  d S )Nc                      r}   r2   r   r   r   r   r   rA     r   zDBaseTaskTests.test_as_completed_coroutine_without_loop.<locals>.coror   )r   r8   r   r  rt   ru   r  )r)   rA   r   r  r   r   r   (test_as_completed_coroutine_without_loop  s   
"z6BaseTaskTests.test_as_completed_coroutine_without_loopc                    s.     }dd   fdd}||  d S )Nc                      r}   r2   r   r   r   r   r   rA     r   zHBaseTaskTests.test_as_completed_coroutine_use_running_loop.<locals>.coroc                     s>   t t  g} t| d | d I d H d d S )Nr   r   r3   )r  r   r  rQ   r  )r  rA   r)   r   r   rz     s   zHBaseTaskTests.test_as_completed_coroutine_use_running_loop.<locals>.test)rL   r^   )r)   r=   rz   r   r  r   ,test_as_completed_coroutine_use_running_loop  s   z:BaseTaskTests.test_as_completed_coroutine_use_running_loopc                 C   sd   dd }|   }t| | tjd  tt| g}| t|d | ||d d d S )Nc                      r}   r2   r   r   r   r   r   rA     r   zGBaseTaskTests.test_as_completed_coroutine_use_global_loop.<locals>.coror   r   r3   )	rL   r   r   r   r  r  rQ   r  r^   )r)   rA   r=   r  r   r   r   +test_as_completed_coroutine_use_global_loop  s   
z9BaseTaskTests.test_as_completed_coroutine_use_global_loopc                    sl    fdd}  |}dd } ||dd}||  |   | d  d|  d S )Nc                  3   s0    d V }   d|  dV }   d|  dV  d S )Nr  r\  r  r  r(   r   r   r     rh  z%BaseTaskTests.test_sleep.<locals>.genc                    s0   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>.sleeperr\  yeah)	rL   rB   r^   rY   r   rQ   r   r  ra  )r)   r   r=   r  r`   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   r  r  r  r  r(   r   r   r     r  z,BaseTaskTests.test_sleep_cancel.<locals>.genr  r  c                    s   | |g|R    S r
   r   )delaycallbackr    )handleorig_call_laterr   r   
call_later  s   z3BaseTaskTests.test_sleep_cancel.<locals>.call_later)rL   rB   r   r   r  r   r   r  Z
_cancelledr[   rY   )r)   r   r=   r`   r  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   s0    d V }   d|  dV }   d|  dV  d S )Nr\  r     r  r  r(   r   r   r     rh  z9BaseTaskTests.test_task_cancel_sleeping_task.<locals>.genc                    s   t | I d H  d S r
   r   )r  r   r   r   r   $  r   z;BaseTaskTests.test_task_cancel_sleeping_task.<locals>.sleepc                     sH     d}  d| j z| I d H  W dS  tjy#   Y dS w )Nr  r\  r  zslept in)rB   r  r[   r   r]   )r  r+  r   r   doit'  s   z:BaseTaskTests.test_task_cancel_sleeping_task.<locals>.doitr  r\  )rL   rQ   r^   r  ra  )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                      rx   r
   r   r   rp   r   r   rA   8  rr   z:BaseTaskTests.test_task_cancel_waiter_future.<locals>.coro)rG   r=   rB   r   r   r   r;  r[   r\   r   r]   r^   r~  rY   r  rc  r   rp   r   test_task_cancel_waiter_future5  s   z,BaseTaskTests.test_task_cancel_waiter_futurec                 C   s   dd }| }|  | j|}| td |d W d    n1 s$w   Y  | td |t  W d    n1 s@w   Y  | | j|d d S )Nc                      r}   )Nr   r   r   r   r   r   r   G  r   z4BaseTaskTests.test_task_set_methods.<locals>.notmuchznot support set_resultr   znot support set_exceptionr   )	rB   r=   rt   ru   r   set_exceptionr   rQ   r^   )r)   r   r   rU   r   r   r   test_task_set_methodsF  s   
z#BaseTaskTests.test_task_set_methodsc                 C   sP   |  t tjdd }W d    n1 sw   Y  | t| jj|  d S )Nc                   s   s    d V  dV  dS )Nr   r   r   r   r   r   r   r   Y  r.  z/BaseTaskTests.test_step_result.<locals>.notmuchr   r   r   r   r\   ru   r=   r^   )r)   r   r   r   r   test_step_resultW  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                       (   e Zd Z fddZ fddZ  ZS )z2BaseTaskTests.test_step_result_future.<locals>.Futc                       d| _ t j|i | d S NF)cb_addedrJ   r   )r)   r    kwdsrO   r   r   r   f     z;BaseTaskTests.test_step_result_future.<locals>.Fut.__init__c                    r  NT)r  rJ   r   r)   r    kwargsrO   r   r   r   j  r  zDBaseTaskTests.test_step_result_future.<locals>.Fut.add_done_callbackr.   r/   r0   r   r   __classcell__r   r   rO   r   Fute      r  rD   c                      s    I d H d S r
   r   r   rq   r   r   r   wait_for_futureq  s   z>BaseTaskTests.test_step_result_future.<locals>.wait_for_future)r   rE   r=   rB   r   r   rY   r  objectr   r   r   r~  r   )r)   r  r  r`   r=  r   r  r   test_step_result_futureb  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   r  r  r  r  r(   r   r   r     r  z;BaseTaskTests.test_baseexception_during_cancel.<locals>.genc                      r   r  r   r   r   r   r   r    r   z?BaseTaskTests.test_baseexception_during_cancel.<locals>.sleeperc                      s*   z	 I d H  W d S  t jy    w r
   r6  r   )base_excr  r   r   notmutch  s   z@BaseTaskTests.test_baseexception_during_cancel.<locals>.notmutch)rL   
SystemExitrB   r   r   r[   r  r   r\   rY   r  r   r!  )r)   r   r=   r  rU   r   )r  r)   r  r    test_baseexception_during_cancel  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/w   Y  | t| |  tt  | tt	  d S )Nc                   S   r,   r
   r   r   r   r   r   fn  r+   z2BaseTaskTests.test_iscoroutinefunction.<locals>.fnc                   s       d V  d S r
   r   r   r   r   r   fn1  r   z3BaseTaskTests.test_iscoroutinefunction.<locals>.fn1c                   s   r  r
   r   r   r   r   r   fn2     
z3BaseTaskTests.test_iscoroutinefunction.<locals>.fn2)
r  r   iscoroutinefunctionr   r   r   rY   r   MockZ	AsyncMock)r)   r  r  r  r   r   r   test_iscoroutinefunction  s   z&BaseTaskTests.test_iscoroutinefunctionc                    s   |  | j | t tj fdd}W d    n1 sw   Y  | }| t | j| W d    n1 s=w   Y  | 	 
  d S )Nc                   3   s     V  d S r
   r   r   rp   r   r   r    r  z?BaseTaskTests.test_yield_vs_yield_from.<locals>.wait_for_future)rG   r=   r   r   r   r   r\   ru   r^   r  r   r)   r  rU   r   rp   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w   Y  |  t tj fdd}W d    n1 s5w   Y  | }| t| jj| d S )Nc                   s   r  r
   r   r   r   r   r   rA     r  z>BaseTaskTests.test_yield_vs_yield_from_generator.<locals>.coroc                  3   s(      } z
| V  W |    d S |    w r
   rG  )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w   Y  | t| | }| t| | j|}| 	|d d S )Nc                   S   r'   Nrz   r   r   r   r   r   r     r   z;BaseTaskTests.test_coroutine_non_gen_function.<locals>.funcrz   )
r   r   r   r   rY   r  iscoroutiner=   r^   rQ   )r)   r   rA   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w   Y   fdd}| | j| }| | j| }| j|}| |d | 	|
  d S )Nc                          S r
   r   r   rp   r   r   r     r   zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.funcc                      s     d d S r  r   r   rp   r   r   rA     rr   zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.cororz   )rG   r=   r   r   r   r   rB   r^   rQ   r~  r   )r)   r   rA   r   r   r=  r   rp   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 )NrD   c                    s8     t    td    t  d S r
   )r   r   current_taskrD   rT   r   r   rA     s   z-BaseTaskTests.test_current_task.<locals>.coro)r~  r   r  r=   rB   r^   r   r   rT   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 )NrD   c                    s>    t u   I d H   t u  d d S r  rY   r   r  r   rD   )r8  r9  r)   task1r   r   r    s
   
zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro1c                    s>    t u   d I d H   t u  d S r  r  rD   )r8  r9  r)   task2r   r   r    s
   

zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro2)r~  r   r  r=   rG   rB   r^   r  )r)   r  r  r   )r8  r9  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   w d d S )Nr   zgot past sleep() in inner())r   r]   rX  r   )proofr)   r  r   r   inner!  s   z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.innerc                      s>   z  I d H  W n t jy   d7 Y d S w d7 d S )Nrl   r  r6  r   r  r  r   r   r   +  s   z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.outerrD   e   )rG   r=   r   r{   r   r   r[   r^   rQ   rY   r  r)   r   r   r   r  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                         I d H   d7  d S Nr   r   r   r  r  r   r   r  A     
zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.innerc                     sP    t t  gI d H \} }W d    n1 sw   Y  d7 d S Nrl   )r   r   r   r  )dp)r  r  r)   r   r   r   F  s
   zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.outerrD   r   rG   r=   r   r{   r   r   r[   r\   r]   r^   r   rQ   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 r2   )rG   r=   r   shieldr   r^   rQ   )r)   r  r   r=  r   r   r   test_shield_resultU  s
   

z BaseTaskTests.test_shield_resultc                 C   sT   |  | j}t|}t| j td}|| t| j | |	 | d S )Nr   )
rG   r=   r   r  r   r   ru   r  r   r!  )r)   r  r   r!   r   r   r   test_shield_exception\  s   

z#BaseTaskTests.test_shield_exceptionc                 C   sH   |  | j}t|}t| j |  t| j | |  d S r
   )	rG   r=   r   r  r   r   r[   rY   r  r)   r  r   r   r   r   test_shield_cancel_innere  s   
z&BaseTaskTests.test_shield_cancel_innerc                 C   sn   |  | j}t|}t| j |  t| j | |  | 	d|j
d u r/d d S t|j
 d S r   )rG   r=   r   r  r   r   r[   rY   r  rQ   Z
_callbacksr  r  r   r   r   test_shield_cancel_outerm  s   
*z&BaseTaskTests.test_shield_cancel_outerc                 C   s8   |  | j}|d | jt|}| |d d S r2   )rG   r=   r   r^   r   r  rQ   )r)   rq   r=  r   r   r   test_shield_shortcutv  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 s@w   Y  
d  t| j | d d S )Nr   c                      r  r  r   r   r  r   r   r    r  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>.outerrD   r   r
  r   r   )r  r  r  r   test_shield_effect|  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   )rG   r=   r   rm   r  r   r   r[   rY   r  r   rQ   r   )r)   child1child2parentr   r   r   r   test_shield_gather  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  )rG   r=   r   r  rm   r   r   r[   rS   r!  r]   rY   r  r   )r)   r  r  r   r   r  r   r   r   test_gather_shield  s   



z BaseTaskTests.test_gather_shieldc                 C   sV   dd }| }|  |j | td t| W d    d S 1 s$w   Y  d S )Nc                      r}   r2   r   r   r   r   r   rA     r   z>BaseTaskTests.test_shield_coroutine_without_loop.<locals>.coror   )r   r8   rt   ru   r   r  )r)   rA   r  r   r   r   "test_shield_coroutine_without_loop  s   "z0BaseTaskTests.test_shield_coroutine_without_loopc                    sN   dd   fdd}| j | }| |j| j  | j |}| |d d S )Nc                      r}   r2   r   r   r   r   r   rA     r   zBBaseTaskTests.test_shield_coroutine_use_running_loop.<locals>.coroc                      r   r
   r  r   r   r   r   rz     r   zBBaseTaskTests.test_shield_coroutine_use_running_loop.<locals>.testr3   )r=   r^   rQ   r   )r)   rz   r   r=  r   r   r   &test_shield_coroutine_use_running_loop  s   z4BaseTaskTests.test_shield_coroutine_use_running_loopc                 C   sZ   dd }t | j | t jd  t | }| |j| j | j|}| |d d S )Nc                      r}   r2   r   r   r   r   r   rA     r   zABaseTaskTests.test_shield_coroutine_use_global_loop.<locals>.coror3   )r   r   r=   r   r  rQ   r   r^   )r)   rA   r   r=  r   r   r   %test_shield_coroutine_use_global_loop  s   z3BaseTaskTests.test_shield_coroutine_use_global_loopc                 C   sN   |  | j}| t| jjt| t }| t| jjt| |  d S r
   )	rG   r=   r\   r   r^   r   r  r   r8   r)   rq   rA   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
   )
rG   r=   r\   r   r^   r   r  r   r8   r   r  r   r   r   test_wait_invalid_args  s   z$BaseTaskTests.test_wait_invalid_argsc                    sn    fdd}t d |  W d    n1 sw   Y  t d |  W d    d S 1 s0w   Y  d S )Nc                     s    t tj fdd} W d    n1 sw   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
   )rY   
gi_runningr   )rq   r   r)   r   r   rA     s   zKBaseTaskTests.test_corowrapper_mocks_generator.<locals>.check.<locals>.coro)r   r   r   r   rG   r=   r   rY   r  rS   gi_frametypes	FrameTyper  r!  r   CodeTyper^   r~  r   r(   )rq   r   r   check  s   
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v  t tjfdd}W d    n1 sw   Y   t tj fddW d    n1 s=w   Y   t tjdd W d    n1 sYw   Y    j| } j|} |d W d    d S 1 s}w   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
   )rG   r=   rB   r2  )r)   t3r   r   r     s   
z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t2c                 S   s   |  d d S )Nr   r   r   r  r2  r   r   r   r*  $  s   z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t3r+  )	r   r   r   r   r   rB   r=   r^   rQ   )r)   r   rU   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              
      s\   t j  }|d  z
||  W td ty- } z|jd W  Y d }~S d }~ww )Nr   zStopIteration was expected)r   r   CoroWrapperr6   r4   r    AssertionError)r  cwexr   r   r   call1  s   
z<BaseTaskTests.test_yield_from_corowrapper_send.<locals>.call)r   r   rr  )rQ   )r)   r3  r   r2  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   @  s    z3BaseTaskTests.test_corowrapper_weakref.<locals>.foor0  )weakrefWeakValueDictionaryr   r   r.  r   )r)   Zwdr   r0  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 n t y } z|} W Y d }~nd }~ww qr
   )r   )valueer   r   r   r   G  s   
z1BaseTaskTests.test_corowrapper_throw.<locals>.foor   r2  )
r   r   r   r.  r6   r   r7   rS   rQ   r    )r)   r   r!  r0  r   r   r   test_corowrapper_throwE  s$   



z$BaseTaskTests.test_corowrapper_throwc                    s   j j} t tj fdd}W d    n1 sw   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)Nzcode never reached)rG   r   )r=   futurer(   r   r   kill_meh  s   

z>BaseTaskTests.test_log_destroyed_pending_task.<locals>.kill_meTrD   r   r;  z%Task was destroyed but it is pending!)messagerU   r   )r?   r@   r   r   r   r   r   r  r=   r   set_exception_handlerr{   rQ   	all_tasksr   Z	_run_oncer  _readyr"  f_localsr   r   
gc_collectrj  Zassert_called_withANYZ
reset_mock)r)   r@   r<  Zmock_handlerrA   rU   r   r   r(   r   test_log_destroyed_pending_taskd  s4   	



z-BaseTaskTests.test_log_destroyed_pending_taskzasyncio.base_events.loggerc                    sH   t   dd   fdd}|  |jj d S )Nc                      r   r
   )r   r   r   r   r   rA     r   zBBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.coroc                     s0      } tdI d H  |   d } d S )Nr  rI  ry   rA   r=   r)   r   r   r     s
   zDBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.runner)r   rs   r   r^   r  errorcalled)r)   m_logr   r   rE  r   &test_tb_logger_not_called_after_cancel  s   
z4BaseTaskTests.test_tb_logger_not_called_after_cancelzasyncio.coroutines.loggerc           	   	   C   s   t d$ | t tjdd }W d    n1 sw   Y  W d    n1 s+w   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   r,   r
   r   r   r   r   r   	coro_noop  r   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   r   r   r   r   r  sys	_getframef_linenor   rB  rY   rF  rG  	call_argsr   r   r   r   r0   r   compileDOTALL)	r)   rH  rJ  Ztb_filename	tb_linenor=  Zfunc_filenameZfunc_linenoZregexr   r   r   test_coroutine_never_yielded  s*   




z*BaseTaskTests.test_coroutine_never_yieldedc                    sp   	  fdd}t d |  W d    n1 sw   Y  t d |  W d    d S 1 s1w   Y  d S )Nc                     sZ     t tj fdd} W d    n1 sw   Y   j|  } |d d S )Nc                     sB     t tjdd } W d    |  S 1 sw   Y  |  S )Nc                   S   r'   r  r   r   r   r   r   
inner_coro  r   ziBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coro.<locals>.inner_coro)r   r   r   r   )rS  r(   r   r   
outer_coro  s   
zUBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coror   r   r   r   r   r=   r^   rQ   )rT  r   r(   r   r   r&    s   
zABaseTaskTests.test_return_coroutine_from_coroutine.<locals>.checkFTr'  r(  r   r(   r   $test_return_coroutine_from_coroutine  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)r=   r   rB   r   rK  rL  rM  rS   r   r  rQ   r  r^   )r)   rU   r   r   r   r   rX    s   z(BaseTaskTests.test_task_source_tracebackc                    s   	 t  }| |j | |fdd}|| d   fdd}| d | |  d | 	
  |  dg d S )Nc                     s$    fdd} t |  }t |S )Nc                   3   s     E d H S r
   r   r   rp   r   r   
child_coro  r   zFBaseTaskTests.test_cancel_gather_1.<locals>.create.<locals>.child_coro)r   rm   r{   )rY  Zgather_futurerp   r   r   create  s   
z2BaseTaskTests.test_cancel_gather_1.<locals>.createc                    s      d S r
   r[   )rj   )cancel_resultgather_taskr   r   cancelling_callback     z?BaseTaskTests.test_cancel_gather_1.<locals>.cancelling_callbackr3   F)r   rs   r   r8   rG   r^   r   r   rQ   r  r  r   )r)   r=   rZ  r^  r   )r\  rq   r]  r   test_cancel_gather_1  s   



z"BaseTaskTests.test_cancel_gather_1c                    s   g d}|D ]q\ }j  d_ t j dd  fdd}z|  W n2 tjyb } z%|jd t	|\}}}||ftj|f 
|d W Y d }~n
d }~ww d	 W d    n1 srw   Y  qd S )
Nr  r  c                     s8   d} 	 | d7 } t jt dddI d H  | dkrd S q)Nr   Tr  return_exceptionsr   )r   rm   r   )ra  r   r   r   rz   	  s   z0BaseTaskTests.test_cancel_gather_2.<locals>.testc                     s8     } tdI d H  | j   | I d H  d S )Nr]  rI  )Zqwer  r=   r)   rz   r   r   main	  s
   
z0BaseTaskTests.test_cancel_gather_2.<locals>.mainr   )r   r   z1gather did not propagate the cancellation request)r   r   rs   r   r8   r^   r]   rQ   r    r$   assertInrX  )r)   r#  r$  rd  r!   exc_typeZexc_argsr"   r   rc  r   test_cancel_gather_2	  s.   	

z"BaseTaskTests.test_cancel_gather_2c                    (   dd   fdd}j |  d S )Nc                      s   dd  d S )Nr   r   r   r   r   r   r   r   3	  r   z3BaseTaskTests.test_exception_traceback.<locals>.fooc                     s6    j  } tdI d H  |  j d S r   )rB   r=   r   r   r   r!  __traceback__ry   r   r)   r   r   rd  6	  s   z4BaseTaskTests.test_exception_traceback.<locals>.mainr   r)   rd  r   rj  r   test_exception_traceback0	  s   z&BaseTaskTests.test_exception_tracebackc              	   C   s   dd }|| j _| t tjdd }W d    n1 sw   Y  | |jj | 	t
 | }z| | j | W |  n|  w W d    n1 sQw   Y  t  | |jj |jjd d }| d| | t| j t  d S )Nc                 _      t r
   r   )r  r    r  r   r   r   r  ?	  r+   z8BaseTaskTests.test_error_in_call_soon.<locals>.call_soonc                   S   r,   r
   r   r   r   r   r   rA   D	  r   z3BaseTaskTests.test_error_in_call_soon.<locals>.coror   z$Task was destroyed but it is pending)r=   r  r   r   r   r   r  rF  rG  r\   r   rB   r8   rd   re   rY   rN  re  rQ   r?  rj  )r)   rH  r  rA   r   r=  r   r   r   test_error_in_call_soon=	  s$   z%BaseTaskTests.test_error_in_call_soonc                 C   sz   |  td | | jd W d    n1 sw   Y  |  td | | jd W d    d S 1 s6w   Y  d S )Nz!a coroutine was expected, got 123r   )rt   r   rB   r=   r(   r   r   r   "test_create_task_with_noncoroutineX	  s   "z0BaseTaskTests.test_create_task_with_noncoroutinec                 C   s   |  t tjdd }W d    n1 sw   Y  | | j| }| || j | j| | | j| }| || j | j| d S )Nc                   S   r,   r
   r   r   r   r   r   rA   f	  r   zDBaseTaskTests.test_create_task_with_oldstyle_coroutine.<locals>.coro)	r   r   r   r   rB   r=   rS   r@   r^   rc  r   r   r   (test_create_task_with_oldstyle_coroutinec	  s   z6BaseTaskTests.test_create_task_with_oldstyle_coroutinec                 C   s`   dd }|  | j| }| || j | j| |  | j| }| || j | j| d S )Nc                      r   r
   r   r   r   r   r   rA   v	  r   z@BaseTaskTests.test_create_task_with_async_function.<locals>.coro)rB   r=   rS   r@   r^   rc  r   r   r   $test_create_task_with_async_functiont	  s   z2BaseTaskTests.test_create_task_with_async_functionc                 C   sh   |  | jt }| || j | | j|d |  | jt }| || j | | j|d d S r2   )rB   r=   r1   rS   r@   rQ   r^   rT   r   r   r   (test_create_task_with_asynclike_function	  s   z6BaseTaskTests.test_create_task_with_asynclike_functionc                    rh  )Nc                      r}   r  r   r   r   r   r   r  	  r   z2BaseTaskTests.test_bare_create_task.<locals>.innerc                     s6   t   } | j | I d H }d| d S r  )r   r   rS   r@   rQ   )rU   retr  r)   r   r   rA   	  s
   
z1BaseTaskTests.test_bare_create_task.<locals>.coror   r   r   rt  r   test_bare_create_task	  s   z#BaseTaskTests.test_bare_create_taskc                    rh  )Nc                      r   r
   r   r   r   r   r   rJ  	  r   z<BaseTaskTests.test_bare_create_named_task.<locals>.coro_noopc                     s0   t j  dd} |  d | I d H  d S )NzNo-op)r>   )r   r   rQ   r   ry   rJ  r)   r   r   rA   	     z7BaseTaskTests.test_bare_create_named_task.<locals>.coror   r   r   rv  r   test_bare_create_named_task	  s   z)BaseTaskTests.test_bare_create_named_taskc                    sh   t jddd  fdd fdd}t z| }| W   d S   w )Ncvarnopedefaultc                      s0   t dI d H    d  d d S )Nr  rz  something else)r   r   rQ   getrj  r   ry  r)   r   r   sub	  rw  z)BaseTaskTests.test_context_1.<locals>.subc                     sX      d  }  d    d | I d H     d d S )Nrz  yes)rQ   r~  rB   rj  )Zsubtaskry  r=   r)   r  r   r   rd  	  s   

z*BaseTaskTests.test_context_1.<locals>.main)contextvars
ContextVarr   rs   rB   r^   r8   r)   rd  rU   r   r  r   test_context_1	  s   zBaseTaskTests.test_context_1c                    sj   t jddd  fdd}t z| }| W   n  w   d d S )Nry  rz  r{  c               	      s    fdd}    d tdD ]S}}||   d|  |jd  |I d H     d|  tdD ]#} d| d|  t	dI d H     d| d|  qBqd S )	Nc                    s     d d S )Nr}  )rj  rp   )ry  r   r   fut_on_done	  s   z?BaseTaskTests.test_context_2.<locals>.main.<locals>.fut_on_donerz  r   r  r   -MbP?)
rQ   r~  rn   rG   r   rj  r  r   r   r   )r  jrq   iry  r=   r)   r   r   rd  	  s    


z*BaseTaskTests.test_context_2.<locals>.main)	r  r  r   rs   rB   r^   r8   rQ   r~  r  r   r  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  w   d d S )Nry  r   r{  c                    sN   t dD ]} | |  ttddI d H    | |  qd S )Nr  r  r  )rn   rj  r   r   randomuniformrQ   r~  )numr  r  r   r   r  	  s   z)BaseTaskTests.test_context_3.<locals>.subc                     sH   g } t dD ]} tdd}| | qtj|  I d H  d S )Nrl   r   r  )rn   r   r  randintr  r   rm   )r   r  rU   )r=   r  r   r   rd  	  s   z*BaseTaskTests.test_context_3.<locals>.main)r  r  r   rs   r^   r8   rQ   r~  rk  r   r  r   test_context_3	  s   zBaseTaskTests.test_context_3c                 C   sN   t  }t }z| ||}|| | | | W |  d S |  w r
   )r   rs   r   rB   r^   r   Zget_coror8   )r)   r=   rA   rU   r   r   r   test_get_coro	  s   
zBaseTaskTests.test_get_coro)r<   )~r.   r/   r0   r@   rE   rB   rG   rK   rV   ra   rb   ro   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r'  r*  r,  r0  r4  r5  r>  r@  rE  rF  rK  rO  rZ  r[  rb  rd  ro  ry  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-  r4  r7  r:  rD  r   patchrI  rR  rV  rX  r`  rg  rl  rn  ro  rp  rq  rr  ru  rx  r  r  r  r  r  r   r   rO   r   r;   e   s    
!	3	>""$#	 -$ 			(.

 )
"r;   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                       r  )z(add_subclass_tests.<locals>.CommonFuturec                    s&   t dd | _t j|i | d S )Nc                   S   r'   r   r   r   r   r   r   rH   
      zCadd_subclass_tests.<locals>.CommonFuture.__init__.<locals>.<lambda>)collectionsdefaultdictcallsrJ   r   r  rO   r   r   r   
  s   z1add_subclass_tests.<locals>.CommonFuture.__init__c                    s$   | j d  d7  < t j|i |S )Nr   r   )r  rJ   r   r  rO   r   r   r   
  s   z:add_subclass_tests.<locals>.CommonFuture.add_done_callbackr  r   r   rO   r   CommonFuture
  r  r  c                   @      e Zd ZdS )z add_subclass_tests.<locals>.TaskNr.   r/   r0   r   r   r   r   r@   
      r@   c                   @   r  )z"add_subclass_tests.<locals>.FutureNr  r   r   r   r   rE   
  r  rE   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 )NrD   c                      s    j  fdd  I d H S )Nc                      s
     dS Nrr  r  r   rp   r   r   rH    
  s   
 zYadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.func.<locals>.<lambda>)r=   r  r   rq   r)   r   r   r   
  s   
zGadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.funcrr  r   r   )rE   r=   r@   r^   rQ   dictr  )r)   r   rU   r   r   r  r   test_subclasses_ctask_cfuture
  s   z9add_subclass_tests.<locals>.test_subclasses_ctask_cfuture)r@   rE   r  rX  )clsZBaseTaskZ
BaseFuturer  r@   rE   r  r   r   r   add_subclass_tests
  s   	r  c                   @   r%   )SetMethodsTestc                 C   s   t | j}t  | j_}dd }| }| | j|}||d | | j	|d |
  |jd d d }| tjd |1 sEw   Y  |  d S )Nc                      r	  Nr\  r  r   r   r   r   r   r   F
  r  z@SetMethodsTest.test_set_result_causes_invalid_state.<locals>.foorr  r   r!  step\(\): already done)r   rE   r   r  r=   call_exception_handlerrB   r   rQ   r^   assert_called_oncerN  rt   r   InvalidStateErrorr8   )r)   rE   exc_handlerr   rA   rU   r!   r   r   r   $test_set_result_causes_invalid_stateB
  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 s@w   Y  |  |jd d d }| tjd |1 s_w   Y  |  d S )Nc                   @   r  )zESetMethodsTest.test_set_exception_causes_invalid_state.<locals>.MyExcNr  r   r   r   r   MyExc[
  r  r  c                      r	  r  r   r   r   r   r   r   a
  r  zCSetMethodsTest.test_set_exception_causes_invalid_state.<locals>.foor   r!  r  )r   r   rE   r   r  r=   r  rB   r  r\   r^   r  rN  rt   r   r  r8   )r)   r  rE   r  r   rA   rU   r!   r   r   r   'test_set_exception_causes_invalid_stateZ
  s$   
z6SetMethodsTest.test_set_exception_causes_invalid_stateN)r.   r/   r0   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                      r   r
   r   r   r   r   r   rA   
  r   z@CTask_CFuture_Tests.test_refleaks_in_task___init__.<locals>.cororl   rD   r   r  )Zdelta)	r   Zget_attributerK  rB   r=   r^   rn   r   r  )r)   r  rA   rU   Zrefs_beforer  r   r   r   test_refleaks_in_task___init__~
  s   z2CTask_CFuture_Tests.test_refleaks_in_task___init__c                 C   sX   dd }|  | j| }| j| | t |`W d    d S 1 s%w   Y  d S )Nc                      r   r
   r   r   r   r   r   rA   
  r   zHCTask_CFuture_Tests.test_del__log_destroy_pending_segfault.<locals>.coro)rB   r=   r^   r\   AttributeErrorr   rc  r   r   r   &test_del__log_destroy_pending_segfault
  s   "z:CTask_CFuture_Tests.test_del__log_destroy_pending_segfault)r.   r/   r0   getattrr   r@   r   rE   r   Zrefcount_testr  r  r   r   r   r   r  u
  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/   r0   r  r   r@   r   rE   r   r   r   r   r  
  s    r  c                   @      e Zd ZeeddZejZdS )CTaskSubclass_PyFuture_Testsr  N	r.   r/   r0   r  r   r@   r   	_PyFuturerE   r   r   r   r   r  
      
r  c                   @   r  )PyTask_CFutureSubclass_Testsr  N)	r.   r/   r0   r  r   rE   r   _PyTaskr@   r   r   r   r   r  
  r  r  c                   @   r  )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/   r0   r   r  r@   r  r   rE   r   r   r   r   r  
  s    r  c                   @      e Zd ZejZejZdS )PyTask_PyFuture_TestsN	r.   r/   r0   r   r  r@   r   r  rE   r   r   r   r   r  
  s    
r  c                   @   r  )PyTask_PyFuture_SubclassTestsNr  r   r   r   r   r  
  s    
r  c                   @   rc   )CTask_Future_Testsc                    s   G dd dt j} fdd}t  | _z#|| jd | jd jd | j| }| j|}W | j  n| j  w | 	|d d S )	Nc                   @   s   e Zd Zedd ZdS )z+CTask_Future_Tests.test_foobar.<locals>.Futc                 S   rm  r
   )r  r(   r   r   r   r   
  r   z4CTask_Future_Tests.test_foobar.<locals>.Fut.get_loopN)r.   r/   r0   propertyr   r   r   r   r   r  
  s    r  c                      r1  r  r   r   rp   r   r   rA   
  r3  z,CTask_Future_Tests.test_foobar.<locals>.cororD   r\  r   rr  )
r   rE   rs   r=   r  r   r   r^   r8   rQ   )r)   r  rA   rU   r=  r   rp   r   test_foobar
  s   
zCTask_Future_Tests.test_foobarN)r.   r/   r0   r  r   r   r   r   r  
      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                    `   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                    r  r
   r   r(   rD   r   r   r   
  r   zHBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike._loopc                 S   r'   r  r   r(   r   r   r   r   
  r+   zGBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike.doneN)r.   r/   r0   r  r   r   r   rD   r   r   TaskLike
  s    r  r   r  rQ   r   r?  rj  _register_task_unregister_taskr)   r  rU   r   rD   r   test__register_task_1
  s   
z0BaseTaskIntrospectionTests.test__register_task_1c                    r  )Nc                           e Zd Z fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLikec                    r  r
   r   r(   rD   r   r   r      r+   zKBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.get_loopc                 S   r'   r  r   r(   r   r   r   r     r+   zGBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.doneNr.   r/   r0   r   r   r   rD   r   r   r  
      r  r  r  r   rD   r   test__register_task_2
     
z0BaseTaskIntrospectionTests.test__register_task_2c                    s`   G  fddd}| }t   | t t  | | | t t  | | d S )Nc                       r  )zBBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLikec                    r  r
   r   r(   rD   r   r   r     r+   zKBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.get_loopc                 S   r'   r  r   r(   r   r   r   r     r+   zGBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.doneNr  r   rD   r   r   r    r  r  r  r  r   rD   r   test__register_task_3  r  z0BaseTaskIntrospectionTests.test__register_task_3c                 C   sN   t  }t  }| t| | || | t|| | || d S r
   )r   r  r~  r   r  _enter_taskr   _leave_taskr)   rU   r=   r   r   r   test__enter_task  s   z+BaseTaskIntrospectionTests.test__enter_taskc                 C   s|   t  }t  }t  }| || | t | || W d    n1 s(w   Y  | t|| | || d S r
   )	r   r  r  r\   ru   r   r   r  r  r)   r  r  r=   r   r   r   test__enter_task_failure&     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_task0  s
   z+BaseTaskIntrospectionTests.test__leave_taskc                 C   s|   t  }t  }t  }| || | t | || W d    n1 s(w   Y  | t|| | || d S r
   )	r   r  r  r\   ru   r  r   r   r  r  r   r   r   test__leave_task_failure17  r  z4BaseTaskIntrospectionTests.test__leave_task_failure1c                 C   sZ   t  }t  }| t | || W d    n1 sw   Y  | t| d S r
   )r   r  r\   ru   r  r~  r   r  r  r   r   r   test__leave_task_failure2A  s   z4BaseTaskIntrospectionTests.test__leave_task_failure2c                    sJ   t  }t    fdd|_| | | | | t t  d S )Nc                      r  r
   r   r   rD   r   r   rH   K  r  zBBaseTaskIntrospectionTests.test__unregister_task.<locals>.<lambda>)	r   r  r   r  r  rQ   r   r?  rj  rT   r   rD   r   test__unregister_taskH  s   

z0BaseTaskIntrospectionTests.test__unregister_taskc                 C   s2   t  }t  }| | | t|t  d S r
   )r   r  r  rQ   r   r?  rj  r  r   r   r   $test__unregister_task_not_registeredP  s   
z?BaseTaskIntrospectionTests.test__unregister_task_not_registered)r.   r/   r0   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/   r0   staticmethodr   Z_py_register_taskr  Z_py_unregister_taskr  Z_py_enter_taskr  Z_py_leave_taskr  r   r   r   r   r  W  s
    


r  _c_register_taskc                   @   sR   e Zd ZeedreejZeejZ	eej
ZeejZdS d Z Z	 ZZdS )CIntrospectionTestsr  N)r.   r/   r0   rZ   r   r  r  r  Z_c_unregister_taskr  Z_c_enter_taskr  Z_c_leave_taskr  r   r   r   r   r  ^  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                    $   t    t | _| | j d S r
   rJ   rK   r   rs   r=   r   r(   rO   r   r   rK   l     

zBaseCurrentLoopTests.setUpc                 C   rm  r
   )NotImplementedErrorr   r   r   r   rB   q  r+   zBaseCurrentLoopTests.new_taskc                 C   s   |  tj| jd d S rC   )r~  r   r  r=   r(   r   r   r   !test_current_task_no_running_loopt     z6BaseCurrentLoopTests.test_current_task_no_running_loopc                 C   :   |  td t  W d    d S 1 sw   Y  d S )Nzno running event loop)rt   ru   r   r  r(   r   r   r   *test_current_task_no_running_loop_implicitw     
"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 rC   )r   r   r  r=   r   rT   r   r   rA   |  s   zGBaseCurrentLoopTests.test_current_task_with_implicit_loop.<locals>.cororD   )rB   r=   r^   r~  r   r  r   r   rT   r   $test_current_task_with_implicit_loop{  s   z9BaseCurrentLoopTests.test_current_task_with_implicit_loop)	r.   r/   r0   rK   rB   r  r  r  r  r   r   rO   r   r  j  s    r  c                   @   rc   )PyCurrentLoopTestsc                 C   s   t j|| jdS rC   )r   r  r=   r   r   r   r   rB        zPyCurrentLoopTests.new_taskNr.   r/   r0   rB   r   r   r   r   r    s    r  c                   @   rc   )CCurrentLoopTestsc                 C   s   t td|| jdS )Nr  rD   )r  r   r=   r   r   r   r   rB     s   zCCurrentLoopTests.new_taskNr  r   r   r   r   r    r  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
   )rY   
issubclassr   r@   rE   r(   r   r   r   test_future_subclass  r  z%GenericTaskTests.test_future_subclassc                 C   sj   zdd l }dd l}dd l}W n ty   | d Y d S w zdd l}W d S  ty4   | d Y d S w )Nr   zC modules are not availablez_asyncio module is missing)
_functools_json_pickleImportErrorZskipTest_asynciorX  )r)   r  r  r  r  r   r   r   test_asyncio_module_compiled  s   z-GenericTaskTests.test_asyncio_module_compiledN)r.   r/   r0   r  r   Zcpython_onlyr  r   r   r   r   r    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)rJ   rK   rL   one_looprv   r   r(   rO   r   r   rK     s   


zGatherTestsBase.setUpc                 C   s   |j rt| |j sd S d S r
   )r@  r   r   rF   r   r   r   	_run_loop  s   
zGatherTestsBase._run_loopc                    s    fddt dD \}}} j |||i |}t }|| |d |d   j  	|j
d  |  |d   j ||  	| g d d S )Nc                       g | ]} j  qS r   r  rN   ri   r  r(   r   r   rk         z2GatherTestsBase._check_success.<locals>.<listcomp>r   r   r   F)r   r   r   )rn   _gatherwrap_futuresr   MockCallbackr   r   r   r  rQ   rG  r  r   assert_called_once_withr   )r)   r  r   r   rx  rq   cbr   r(   r   _check_success  s   




zGatherTestsBase._check_successc                 C   s   |    | j dd d S )NFra  r
  r(   r   r   r   test_success  s   zGatherTestsBase.test_successc                 C   s   | j dd d S )NTra  r  r(   r   r   r   test_result_exception_success  r  z-GatherTestsBase.test_result_exception_successc           	         s    fddt dD \}}}}} j ||||| }t }|| t }|d ||  	 j
  |  ||  | | |d |  |t  |  d S )Nc                    r  r   r  r  r(   r   r   rk     r  z6GatherTestsBase.test_one_exception.<locals>.<listcomp>r  r   r   )rn   r  r  r   r  r   r  r   r  r   r  rY   r   r  r   r!  r[   ru   )	r)   r   r   rx  r  r9  rq   r	  r!   r   r(   r   test_one_exception  s    




z"GatherTestsBase.test_one_exceptionc           	         s    fddt dD \}}}} j ||||ddi}t }|| t }t }|d |	| |d  
 j  |  |	|  
 j  |  ||  | dd||g d S )Nc                    r  r   r  r  r(   r   r   rk     r  z:GatherTestsBase.test_return_exceptions.<locals>.<listcomp>   rb  Tr   r   )rn   r  r  r   r  r   r  ru   r   r  r   r  r  r   rY   r  rQ   r   )	r)   r   r   rx  r  rq   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	   rQ   rstrip)r)   r   stsstdoutstderrr   r   r   test_env_var_debug  s,   

z"GatherTestsBase.test_env_var_debug)r.   r/   r0   rK   r   r
  r  r  r  r  r  r  r   r   rO   r   r    s    r  c                   @   T   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d Z
dd ZdS )FutureGatherTestsc                 G   s   |S r
   r   )r)   r   r   r   r   r    r+   zFutureGatherTests.wrap_futuresc                 O   s   t j|i |S r
   r   rm   r  r   r   r   r    r  zFutureGatherTests._gatherc                 C   r  )Nr   )rt   ru   r   rm   r(   r   r   r   ,test_constructor_empty_sequence_without_loop  r  z>FutureGatherTests.test_constructor_empty_sequence_without_loopc                 C   sb   dd }| j | }| |tj | |j| j  | | j  | |	  | 
| g  d S )Nc                      s
   t  S r
   r  r   r   r   r   rm      r  zRFutureGatherTests.test_constructor_empty_sequence_use_running_loop.<locals>.gather)r  r^   rS   r   rE   r   r   r   rY   r   rQ   r   )r)   rm   rq   r   r   r   0test_constructor_empty_sequence_use_running_loop  s   zBFutureGatherTests.test_constructor_empty_sequence_use_running_loopc                 C   sn   t | j | t jd  t  }| |t j | |j| j | 	| j | 
|  | | g  d S r
   )r   r   r  r   rm   rS   rE   r   r   r   rY   r   rQ   r   )r)   rq   r   r   r   /test_constructor_empty_sequence_use_global_loop)  s   zAFutureGatherTests.test_constructor_empty_sequence_use_global_loopc                 C   sP   | j  }| j }| t t|| W d    d S 1 s!w   Y  d S r
   )r  rN   rv   r\   r   r   rm   )r)   r8  r9  r   r   r   %test_constructor_heterogenous_futures4  s
   

"z7FutureGatherTests.test_constructor_heterogenous_futuresc                    s    fddt dD }tj| } |j j   j  |  tj| } |j j   j  |  d S )Nc                    r  r   )rv   rN   r  r(   r   r   rk   ;  r  zIFutureGatherTests.test_constructor_homogenous_futures.<locals>.<listcomp>r   )	rn   r   rm   r   r   rv   r   r  r   )r)   childrenrq   r   r(   r   #test_constructor_homogenous_futures:  s   

z5FutureGatherTests.test_constructor_homogenous_futuresc                    s    fddt dD \}}}}}t|||||}t }|| |d |    j	  
|  ||  |   | tj |d |  |t  |  d S )Nc                    r  r   r  r  r(   r   r   rk   F  r  z;FutureGatherTests.test_one_cancellation.<locals>.<listcomp>r  r   r   )rn   r   rm   r   r  r   r   r[   r   r  rY   r   r  r  r  rS   r!  r]   r  ru   )r)   r   r   rx  r  r9  rq   r	  r   r(   r   test_one_cancellationE  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                    r  r   r  r  r(   r   r   rk   X  s    zLFutureGatherTests.test_result_exception_one_cancellation.<locals>.<listcomp>r   Tra  r   r   r   r  )rn   r   rm   r   r  r   r   r  r  r[   r   r  r  r   ru   r^   rS   r]   rQ   r  )r)   r   r   rx  r  r9  r   rq   r	  ZzdeZrter=  r   r(   r   &test_result_exception_one_cancellationW  s,   





z8FutureGatherTests.test_result_exception_one_cancellationN)r.   r/   r0   r  r  r   r!  r"  r#  r%  r&  r'  r   r   r   r   r    s    
r  c                   @   r  )CoroutineGatherTestsc                 G   s*   g }|D ]}|fdd}| |  q|S )Nc                    r   r
   r   rp   r   r   r   rA   t  r   z/CoroutineGatherTests.wrap_futures.<locals>.coro)r  )r)   r   Zcorosrq   rA   r   r   r   r  q  s
   z!CoroutineGatherTests.wrap_futuresc                    s    fdd}| j | S )Nc                      s   t j i S r
   r  r   r    r  r   r   rA   z  r   z*CoroutineGatherTests._gather.<locals>.coro)r  r^   )r)   r    r  rA   r   r)  r   r  y  s   zCoroutineGatherTests._gatherc                 C   sj   dd }| }|  |j | }|  |j | td t|| W d    d S 1 s.w   Y  d S )Nc                      r}   r   r   r   r   r   r   rA     r   z@CoroutineGatherTests.test_constructor_without_loop.<locals>.coror   )r   r8   rt   ru   r   rm   )r)   rA   gen1gen2r   r   r   test_constructor_without_loop~  s   "z2CoroutineGatherTests.test_constructor_without_loopc                    sP   dd }|  |  fdd}| j | }| |j| j  | j | d S )Nc                      r}   r   r   r   r   r   r   rA     r   zDCoroutineGatherTests.test_constructor_use_running_loop.<locals>.coroc                      s   t  S r
   r  r   r*  r+  r   r   rm     r   zFCoroutineGatherTests.test_constructor_use_running_loop.<locals>.gather)r  r^   r   r   )r)   rA   rm   rq   r   r-  r   !test_constructor_use_running_loop  s   z6CoroutineGatherTests.test_constructor_use_running_loopc                 C   sZ   dd }t | j | t jd  | }| }t ||}| |j| j | j| d S )Nc                      r}   r   r   r   r   r   r   rA     r   zCCoroutineGatherTests.test_constructor_use_global_loop.<locals>.coro)r   r   rv   r   rm   r   r   r^   )r)   rA   r*  r+  rq   r   r   r    test_constructor_use_global_loop  s   z5CoroutineGatherTests.test_constructor_use_global_loopc                 C   sx   |  t tjdd }W d    n1 sw   Y  |d}| |||d|}| | j | | g d d S )Nc                 S   r9   r
   r   rp  r   r   r   rA     r   z<CoroutineGatherTests.test_duplicate_coroutines.<locals>.coror   def)r   r   r0  r   )	r   r   r   r   r  r   r  rQ   r   )r)   rA   rx  rq   r   r   r   test_duplicate_coroutines  s   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 sXw   Y  |   |   |    |   t| j  | d d S )Nr   c                      r  r  r   r   r  r   r   r    r  z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.innerrD   c                      s$   t  I d H  d7 d S r  r  r   )r  r  gathererr  r   r   r     s   
z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.outer)r  rN   r   r{   r   r   rY   r[   r\   r]   r^   r  r  rQ   )r)   r  r   r   r   )r  r  r2  r  r  r   test_cancellation_broadcast  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)Nzshould not be ignoredrL  r2  r   r   r   r    s   
z:CoroutineGatherTests.test_exception_marking.<locals>.innerc                      s    t  I d H  d S r
   r  r   r   r   r  r   r   r     s   z:CoroutineGatherTests.test_exception_marking.<locals>.outerrD   )
r  rN   r   r{   r   r   r   rS   r!  ru   r   r   r4  r   test_exception_marking  s   



z+CoroutineGatherTests.test_exception_markingc              	   C   s   t d8 dd }|d}| t | |i  W d    n1 s$w   Y  | | j | jj  W d    d S 1 s@w   Y  d S )Nz8asyncio.base_events.BaseEventLoop.call_exception_handlerc                    s   | S r
   r   rp  r   r   r   rA     r   z2CoroutineGatherTests.test_issue46672.<locals>.coror   )	r   r  r\   r   r  r   r  r  Zassert_not_called)r)   rA   rx  r   r   r   test_issue46672  s   "z$CoroutineGatherTests.test_issue46672N)r.   r/   r0   r  r  r,  r.  r/  r1  r3  r5  r6  r   r   r   r   r(  o  s    

 r(  c                       s^   e 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 )RunCoroutineThreadsafeTestsc                    r  r
   r  r(   rO   r   r   rK     r  z!RunCoroutineThreadsafeTests.setUpFc                    sL   	 t dI d H  |rtd|r"t | j  t dI d H  || S )Nr  Fail!r   )r   r   ru   r  r=   r[   )r)   r   r   rX  r[   r   r   r   r    s   zRunCoroutineThreadsafeTests.addNc                 C   sn   	 | j dd||d}t|| j}|r| j|jd  z||W | p*|  S  S | p5|  w  w )Nr   r   )rX  r[   )	r  r   Zrun_coroutine_threadsafer=   Zcall_soon_threadsafer6   r   r   r[   )r)   rX  r[   r  advance_cororA   r;  r   r   r   target  s   
,z"RunCoroutineThreadsafeTests.targetc                 C   s.   	 | j d | j}| j |}| |d d S )Nr   )r=   run_in_executorr:  r^   rQ   )r)   r;  r   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 w   Y  | d|jj d S )NTr8  )	r=   r;  r:  r\   ru   r^   re  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 s%w   Y  t j  t j D ]	} 	|
  q6d S )Nc                          j ddS )Nr   r  r:  r   r(   r   r   rH   #  rI   zXRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeout.<locals>.<lambda>)r=   r;  r\   r   r  r^   r   r   r?  rY   r   )r)   r  r;  rU   r   r(   r   *test_run_coroutine_threadsafe_with_timeout   s   zFRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeoutc                    sZ   	  fdd} j d |} tj  j | W d    d S 1 s&w   Y  d S )Nc                      r?  )NTr[  r@  r   r(   r   r   rH   /  rI   zZRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_cancelled.<locals>.<lambda>)r=   r;  r\   r   r]   r^   )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 sAw   Y   t|jd |j\\}}} |d |j d S )Nc                 S   rm  r
   )	NameError)r=   rA   r   r   r   task_factory8  r+   zfRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.task_factoryc                      r?  )NT)r9  r@  r   r(   r   r   rH   <  rI   zbRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.<lambda>r   r!  )r=   r;  r   r  r>  r   rM   Zget_task_factoryr\   rC  r^   rQ   r  Zcall_args_listrN  r!  )r)   rD  rh   r  r=  r=   r#   r  r   r(   r   4test_run_coroutine_threadsafe_task_factory_exception4  s"   
zPRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception)FF)FFNF)r.   r/   r0   rK   r  r:  r<  r>  rA  rB  rE  r  r   r   rO   r   r7    s    


r7  c                       0   e Zd Z fddZ fddZdd Z  ZS )
SleepTestsc                    r  r
   r  r(   rO   r   r   rK   R  r  zSleepTests.setUpc                       | j   d | _ t   d S r
   r=   r8   rJ   tearDownr(   rO   r   r   rJ  W     
zSleepTests.tearDownc                    s>   dfdd  fdd}j |  d d S )Nr   c                    s    | 7  d S r
   r   r  rt  r   r   
inc_result_  r_  z.SleepTests.test_sleep_zero.<locals>.inc_resultc                     sH   j  d d tjdddI d H } d  |  d S )Nr   r   r  rt  )r=   r  rQ   r   r   rL  rM  r   r)   r   r   rA   c  s   z(SleepTests.test_sleep_zero.<locals>.coro   )r=   r^   rQ   r   r   rN  r   test_sleep_zero\  s
   zSleepTests.test_sleep_zero)r.   r/   r0   rK   rJ  rP  r  r   r   rO   r   rG  Q      rG  c                       rF  )	WaitTestsc                    r  r
   r  r(   rO   r   r   rK   o  r  zWaitTests.setUpc                    rH  r
   rI  r(   rO   r   r   rJ  t  rK  zWaitTests.tearDownc                 C   s   |  t | jtt g W d    n1 sw   Y  | jt }|  t | jt|t g W d    d S 1 sDw   Y  d S r
   )r   r   r=   r^   r   r  r   r   rT   r   r   r   test_coro_is_deprecated_in_waity  s   "z)WaitTests.test_coro_is_deprecated_in_wait)r.   r/   r0   rK   rJ  rS  r  r   r   rO   r   rR  n  rQ  rR  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                    r  r
   r  r(   rO   r   r   rK     r  zCompatibilityTests.setUpc                    rH  r
   rI  r(   rO   r   r   rJ    rK  zCompatibilityTests.tearDownc                 C   sV   |  t tjdd }W d    n1 sw   Y  | j| }| d| d S )Nc                   s       t dE d H  dS )Nr   r   r   r   r   r   r   rA        z:CompatibilityTests.test_yield_from_awaitable.<locals>.coror   rU  )r)   rA   r   r   r   r   test_yield_from_awaitable  s   z,CompatibilityTests.test_yield_from_awaitablec                    s   |  t tjdd  W d    n1 sw   Y  |  t tjdd W d    n1 s3w   Y   fdd}| j| }| ddg| d S )	Nc                   S   r'   )Nok1r   r   r   r   r   r    r   z;CompatibilityTests.test_await_old_style_coro.<locals>.coro1c                   s   rU  )Nr   ok2r   r   r   r   r   r    rV  z;CompatibilityTests.test_await_old_style_coro.<locals>.coro2c                      s   t    I d H S r
   r  r   r  r  r   r   r    s   z;CompatibilityTests.test_await_old_style_coro.<locals>.innerrX  rY  rU  )r)   r  r   r   rZ  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_interop  s   

z*CompatibilityTests.test_debug_mode_interop)	r.   r/   r0   rK   rJ  rW  r[  r^  r  r   r   rO   r   rT    s    rT  __main__)F)Br  
contextlibr  r   rd   r   r  r   rK  r\  rV  r#  Zunittestr5  r   r   r   r   r   r   Ztest.test_asyncior   r   rz   r   Ztest.support.script_helperr	   r   r   contextmanagerr   r   r$   r&   r1   r;   r  r  Z
skipUnlessrZ   ZTestCaser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r7  rG  rR  rT  r.   rd  r   r   r   r   <module>   s    

	                   4:5p
f\~d
?