B
    v9aM                @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddl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 ejd
d Zejdd ZdLd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oFe%eddG dd de!e#ej&Z'e$e%edoze%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 d,d- d-e!ej&Z.e$e%eddG d.d/ d/ej&Z/G d0d1 d1Z0G d2d3 d3ej&e0Z1e$e%ed4dG d5d6 d6ej&e0Z2G d7d8 d8Z3G d9d: d:e3ej&Z4e$e%eddG d;d< d<e3ej&Z5G d=d> d>ej&Z6G d?d@ d@Z7G dAdB dBe7ej&Z8G dCdD dDe7ej&Z9G dEdF dFej&Z:G dGdH dHej&Z;G dIdJ dJej&Z<e=dKkre>  dS )MzTests for tasks.py.    N)mock)
coroutines)futures)tasks)utils)support)assert_python_okc               C   s   d S )N r	   r	   r	    /usr/lib/python3.7/test_tasks.pycoroutine_function   s    r   c             c   s*   t j}|j}z| |_d V  W d ||_X d S )N)asyncior   _DEBUG)Zenabledr   Z	old_debugr	   r	   r
   set_coroutine_debug    s    
r   Fc             C   sR   |rd| }nd| }|d k	r@|d }d| |||d |d f S d| ||f S d S )Nz%sz%s, definedz%coro=<%s() %s at %s> created at %s:%sr      zcoro=<%s() %s at %s>r	   )qualnamestatesrcsource_traceback	generatorframer	   r	   r
   format_coroutine-   s    
r   c               @   s   e Zd Zdd Zdd ZdS )Dummyc             C   s   dS )Nz<Dummy>r	   )selfr	   r	   r
   __repr__<   s    zDummy.__repr__c             G   s   d S )Nr	   )r   argsr	   r	   r
   __call__?   s    zDummy.__call__N)__name__
__module____qualname__r   r   r	   r	   r	   r
   r   :   s   r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CoroLikeObjectc             C   s   t dd S )N*   )StopIteration)r   vr	   r	   r
   sendD   s    zCoroLikeObject.sendc             G   s   d S )Nr	   )r   excr	   r	   r
   throwG   s    zCoroLikeObject.throwc             C   s   d S )Nr	   )r   r	   r	   r
   closeJ   s    zCoroLikeObject.closec             C   s   | S )Nr	   )r   r	   r	   r
   	__await__M   s    zCoroLikeObject.__await__N)r   r   r   r$   r&   r'   r(   r	   r	   r	   r
   r    C   s   r    c                   s  e Zd ZdZdZdd Zdd Z fddZdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>dvdw Z?dxdy Z@dzd{ 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^e_`ddd Zae_`ddd Zbdd Zcdd Zddd ZeddÄ Zfddń ZgddǄ ZhddɄ Zidd˄ Zje_`ddd̈́ Zkddτ Zlddф Zmddӄ ZnddՄ Zoddׄ Zpddل Zqddۄ Zrdd݄ Zs  ZtS )BaseTaskTestsNc             C   s   | j j||dS )N)loop)	__class__Task)r   r*   coror	   r	   r
   new_taskV   s    zBaseTaskTests.new_taskc             C   s   | j j|dS )N)r*   )r+   Future)r   r*   r	   r	   r
   
new_futureY   s    zBaseTaskTests.new_futurec                s6   t       _ j j  fdd j_d S )Nc                  s      jS )N)r0   r*   r	   )r   r	   r
   <lambda>`       z%BaseTaskTests.setUp.<locals>.<lambda>)supersetUpnew_test_loopr*   set_task_factoryr.   Zcreate_future)r   )r+   )r   r
   r4   \   s    

zBaseTaskTests.setUpc                sR   G dd d t j fddjt jfddtdD dji d S )	Nc               @   s   e Zd Zdd ZdS )z1BaseTaskTests.test_task_del_collect.<locals>.Evilc             S   s   t   d S )N)gcZcollect)r   r	   r	   r
   __del__d   s    z9BaseTaskTests.test_task_del_collect.<locals>.Evil.__del__N)r   r   r   r8   r	   r	   r	   r
   Evilc   s   r9   c                  s     S )Nr	   r	   )r9   r	   r
   rung   s    z0BaseTaskTests.test_task_del_collect.<locals>.runc                s   g | ]} j  qS r	   )r.   r*   ).0_)r:   r   r	   r
   
<listcomp>m   s    z7BaseTaskTests.test_task_del_collect.<locals>.<listcomp>d   r*   )r   	coroutiner*   run_until_completegatherrange)r   r	   )r9   r:   r   r
   test_task_del_collectb   s    z#BaseTaskTests.test_task_del_collectc          	   C   sV   t  }| |}dd }z,| td | j|| W d Q R X W d |  X d S )Nc                s   | I d H  d S )Nr	   )futr	   r	   r
   r:   t   s    z1BaseTaskTests.test_other_loop_future.<locals>.runzTask .* got Future .* attached)r   new_event_loopr0   assertRaisesRegexRuntimeErrorr*   r@   r'   )r   
other_looprD   r:   r	   r	   r
   test_other_loop_futurep   s    
z$BaseTaskTests.test_other_loop_futurec          	      sF    fdd}t j| | jd | td | j  W d Q R X d S )Nc                  s    I d H  d S )Nr	   r	   )taskr	   r
   test   s    z6BaseTaskTests.test_task_awaits_on_itself.<locals>.test)r*   zTask cannot await on itself)r   ensure_futurer*   rF   rG   r@   )r   rK   r	   )rJ   r
   test_task_awaits_on_itself~   s
    z(BaseTaskTests.test_task_awaits_on_itselfc             C   s   t jdd }| | j| }| j| | |  | | d | 	|j
| j | 	| | j t  }| | | || }| 	|j
| || |  d S )Nc               S   s   dS )Nokr	   r	   r	   r	   r
   notmuch   s    z.BaseTaskTests.test_task_class.<locals>.notmuchrN   )r   r?   r.   r*   r@   
assertTruedoneassertEqualresultassertIs_loopget_looprE   set_event_loopr'   )r   rO   tr*   r	   r	   r
   test_task_class   s    

zBaseTaskTests.test_task_classc             C   s   t jdd }t j| | jd}| j| | |  | | d | 	|j
| j t  }| | t j| |d}| 	|j
| || |  d S )Nc               S   s   dS )NrN   r	   r	   r	   r	   r
   rO      s    z;BaseTaskTests.test_ensure_future_coroutine.<locals>.notmuch)r*   rN   )r   r?   rL   r*   r@   rP   rQ   rR   rS   rT   rU   rE   rW   r'   )r   rO   rX   r*   r	   r	   r
   test_ensure_future_coroutine   s    

z*BaseTaskTests.test_ensure_future_coroutinec          	   C   s   |  | j}|d t|}| j| | |  | |	 d | 
|| t }| | | t tj||d}W d Q R X |  tj|| jd}| 
|| d S )Nko)r*   )r0   r*   
set_resultr   rL   r@   rP   rQ   rR   rS   rT   rE   rW   assertRaises
ValueErrorr'   )r   Zf_origfr*   r	   r	   r
   test_ensure_future_future   s    


z'BaseTaskTests.test_ensure_future_futurec          	   C   s   t jdd }| | j| }t |}| j| | |  | |	 d | 
|| t  }| | | t t j||d}W d Q R X |  t j|| jd}| 
|| d S )Nc               S   s   dS )NrN   r	   r	   r	   r	   r
   rO      s    z6BaseTaskTests.test_ensure_future_task.<locals>.notmuchrN   )r*   )r   r?   r.   r*   rL   r@   rP   rQ   rR   rS   rT   rE   rW   r]   r^   r'   )r   rO   Zt_origrX   r*   r	   r	   r
   test_ensure_future_task   s    

z%BaseTaskTests.test_ensure_future_taskc             C   s`   G dd d}t jdd }t  }| | t j|| |d}|| | dks\td S )Nc               @   s   e Zd Zdd Zdd ZdS )z6BaseTaskTests.test_ensure_future_awaitable.<locals>.Awc             S   s
   || _ d S )N)r-   )r   r-   r	   r	   r
   __init__   s    z?BaseTaskTests.test_ensure_future_awaitable.<locals>.Aw.__init__c             s   s   | j E d H S )N)r-   )r   r	   r	   r
   r(      s    z@BaseTaskTests.test_ensure_future_awaitable.<locals>.Aw.__await__N)r   r   r   rb   r(   r	   r	   r	   r
   Aw   s   rc   c               S   s   dS )NrN   r	   r	   r	   r	   r
   r-      s    z8BaseTaskTests.test_ensure_future_awaitable.<locals>.coro)r*   rN   )r   r?   rE   rW   rL   r@   rS   AssertionError)r   rc   r-   r*   rD   r	   r	   r
   test_ensure_future_awaitable   s    

z*BaseTaskTests.test_ensure_future_awaitablec          	   C   s$   |  t td W d Q R X d S )NrN   )r]   	TypeErrorr   rL   )r   r	   r	   r
   test_ensure_future_neither   s    z(BaseTaskTests.test_ensure_future_neitherc                s@   d  fdd fdd fdd}j |  d S )Nc                  s     I d H  d S )Nr	   r	   )barr	   r
   foo   s    z)BaseTaskTests.test_get_stack.<locals>.fooc                 sd    j dd} z| d jjd W d d } X t } jd|d |d | }	|d d S )Nr   )limitr   ri   )rj   filezfoo\(\) running)
Z	get_stackrR   f_codeco_nameioStringIOprint_stackseekreadassertRegex)r_   rk   tb)Tr   r	   r
   rh      s    
z)BaseTaskTests.test_get_stack.<locals>.barc                  s    t j jd  I d H  d S )N)r*   )r   rL   r*   r	   )ru   ri   r   r	   r
   runner  s    z,BaseTaskTests.test_get_stack.<locals>.runner)r*   r@   )r   rv   r	   )ru   rh   ri   r   r
   test_get_stack   s
    zBaseTaskTests.test_get_stackc       	      C   s^  | j d tjdd }| |jd | |jd | |jt t	
|\}}d||f }| }d}| |jd | |j| | | j |}|t  t|d||jdd	}| t|d
|  |  | t|d|  | tj| j j| t|d||j}| t|d|  | | j | }| j | t|d||j}| t|d|  d S )NFc               s   s   g E d H  dS )Nabcr	   r	   r	   r	   r
   rO     s    
z-BaseTaskTests.test_task_repr.<locals>.notmuchrO   z#\w+.test_task_repr.<locals>.notmuchz%s:%srunningT)r   z <Task pending %s cb=[<Dummy>()]>z#<Task cancelling %s cb=[<Dummy>()]>rQ   z<Task cancelled %s>z<Task finished %s result='abc'>)r*   	set_debugr   r?   rR   r   rs   r   r   
test_utilsget_function_sourcer.   add_done_callbackr   r   _source_tracebackreprcancelr]   CancelledErrorr@   )	r   rO   filenamelinenor   gencoro_qualnamerX   r-   r	   r	   r
   test_task_repr  sB    






zBaseTaskTests.test_task_reprc             C   s^  | j d tjdd }| |jd | |jd | |jt | }d}d}| |j| | |j| t	j
rt	j
rt|\}}|jd }d||||d |d	 f }n|j}	d
||	j|	jf }| t|d|  | | j |}
|
t  t	j
rdt| }n|j}	d|	j|	jf }t|d||
jt	j
 d}| t|
d|  | j |
 d S )NFc               S   s   dS )N{   r	   r	   r	   r	   r
   rO   @  s    z<BaseTaskTests.test_task_repr_coro_decorator.<locals>.notmuchrO   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>z%s:%sry   )r   z <Task pending %s cb=[<Dummy>()]>)r*   rz   r   r?   rR   r   rs   r   r   r   r   r{   r|   r~   gi_codeco_filenameco_firstlinenor   r.   r}   r   r   r@   )r   rO   r   Z	coro_namer   r   r   r   r-   coderX   r   r	   r	   r
   test_task_repr_coro_decorator=  sF    



z+BaseTaskTests.test_task_repr_coro_decoratorc             C   sv   | j d dd }| | j }| | j ||}t| j  | t|dt	t|  |
d  | j | d S )NFc                s
   | I d H S )Nr	   )rD   r	   r	   r
   wait_for}  s    z7BaseTaskTests.test_task_repr_wait_for.<locals>.wait_forz<Task .* wait_for=%s>)r*   rz   r0   r.   r{   run_brieflyrs   r   reescaper\   r@   )r   r   rD   rJ   r	   r	   r
   test_task_repr_wait_forz  s    

z%BaseTaskTests.test_task_repr_wait_forc          	   C   s|   t dP | jd dd }tt|d}| j|d}d|_| 	|j
j W d Q R X t|j
}d}| || d S )NTc                s   t dI d H  d S )Nr   )r   sleep)xyr	   r	   r
   func  s    z>BaseTaskTests.test_task_repr_partial_corowrapper.<locals>.funcr      FzV<CoroWrapper \w+.test_task_repr_partial_corowrapper\.<locals>\.func\(1\)\(\) running, )r   r*   rz   r   r?   	functoolspartialcreate_task_log_destroy_pending
addCleanupZ_coror'   r   rs   )r   r   Zpartial_funcrJ   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 )Nr	   )ab)inner1inner2r	   r
   outer  s    z-BaseTaskTests.test_task_basics.<locals>.outerc                  s   dS )Nr!   r	   r	   r	   r	   r
   r     s    z.BaseTaskTests.test_task_basics.<locals>.inner1c                  s   dS )Ni  r	   r	   r	   r	   r
   r     s    z.BaseTaskTests.test_task_basics.<locals>.inner2i  )rR   r*   r@   )r   r   rX   r	   )r   r   r
   test_task_basics  s
    zBaseTaskTests.test_task_basicsc          	      s   fdd} |  fdd} | } |j tj  | W d Q R X |	  |
  |  d S )Nc              3   s   d V }   d|  dV  d S )Ng      $@r   )assertAlmostEqual)when)r   r	   r
   r     s    z&BaseTaskTests.test_cancel.<locals>.genc                  s   t jd dI d H  dS )Ng      $@)r*      )r   r   r	   )r*   r	   r
   rJ     s    z'BaseTaskTests.test_cancel.<locals>.task)r5   r.   	call_soonr   r]   r   r   r@   rP   rQ   	cancelledassertFalse)r   r   rJ   rX   r	   )r*   r   r
   test_cancel  s    
zBaseTaskTests.test_cancelc             C   st   t jdd }| | j| }t| j |  | t j| jj	| | 
|  | 
|  | |  d S )Nc               s   s   d V  d V  dS )Nr   r	   r	   r	   r	   r
   rJ     s    z-BaseTaskTests.test_cancel_yield.<locals>.task)r   r?   r.   r*   r{   r   r   r]   r   r@   rP   rQ   r   r   )r   rJ   rX   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 Q R X | 
   | 
|  d S )Nc                  s    I d H  dS )Nr   r	   r	   )r_   r	   r
   rJ     s    
z4BaseTaskTests.test_cancel_inner_future.<locals>.task)r0   r*   r.   r{   r   r   r]   r   r   r@   rP   r   )r   rJ   rX   r	   )r_   r
   test_cancel_inner_future  s    z&BaseTaskTests.test_cancel_inner_futurec          	      s   |  | j  fdd}| | j| }t| j    |  | tj | j	| W d Q R X | 
|  | 
   | 
|  d S )Nc                  s    I d H  dS )Nr   r	   r	   )r_   r	   r
   rJ     s    
zBBaseTaskTests.test_cancel_both_task_and_inner_future.<locals>.task)r0   r*   r.   r{   r   r   r]   r   r   r@   rP   rQ   r   )r   rJ   rX   r	   )r_   r
   &test_cancel_both_task_and_inner_future  s    z4BaseTaskTests.test_cancel_both_task_and_inner_futurec                s   |  | j |  | j fdd}| | j| }t| j | |j   d  t| j | |j |  | 	
  | j|}| |d | |
  d S )Nc                  s4    I d H  yI d H  W n t jk
r.   dS X d S )Nr!   )r   r   r	   )fut1fut2r	   r
   rJ     s
    
z5BaseTaskTests.test_cancel_task_catching.<locals>.taskr!   )r0   r*   r.   r{   r   rT   _fut_waiterr\   r   rP   r   r@   rR   r   )r   rJ   rX   resr	   )r   r   r
   test_cancel_task_catching  s    
z'BaseTaskTests.test_cancel_task_catchingc                s   |  | j |  | j|  | j fdd}| | j| }t| j | |j   d  t| j | |j |  | 	
  t| j | |j d | j|}| |d | 
  | |
  d S )Nc                 s>    I d H  yI d H  W n t jk
r.   Y nX I d H } | S )N)r   r   )r   )r   r   fut3r	   r
   rJ     s    

z5BaseTaskTests.test_cancel_task_ignoring.<locals>.taskr!   )r0   r*   r.   r{   r   rT   r   r\   r   rP   r   r@   rR   r   )r   rJ   rX   r   r	   )r   r   r   r
   test_cancel_task_ignoring  s&    	

z'BaseTaskTests.test_cancel_task_ignoringc                sn   t      fdd} | t j j   	j
 	  d S )Nc                  s,      j tjd dI d H  dS )Nr>   )r*   r   )r   rP   _must_cancelr   r   r	   )r*   r   rX   r	   r
   rJ   1  s    z4BaseTaskTests.test_cancel_current_task.<locals>.task)r   rE   rW   r.   r]   r   r@   rP   rQ   r   r   r   )r   rJ   r	   )r*   r   rX   r
   test_cancel_current_task-  s    
z&BaseTaskTests.test_cancel_current_taskc                sr   t  } | t j fdd} ||  t j|j  	   
j  
  dS )z+coroutine end right after task is cancelledc                  s       j dS )Nr   )r   rP   r   r	   )r   rX   r	   r
   rJ   D  s    z.BaseTaskTests.test_cancel_at_end.<locals>.taskN)r   rE   rW   r?   r.   r]   r   r@   rP   rQ   r   r   r   )r   r*   rJ   r	   )r   rX   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 Q R X 	  	   	  d S )Nc                  s      S )N)r'   r	   )r*   r	   r
   r1   Y  r2   z8BaseTaskTests.test_cancel_awaited_task.<locals>.<lambda>c                  s    I d H  d S )Nr	   r	   )rD   r	   r
   nested^  s    z6BaseTaskTests.test_cancel_awaited_task.<locals>.nestedc                  s4      tdI d H    I d H  d S )Nr   )r.   r   r   r   r	   )r*   r   nested_taskr   rJ   r	   r
   r-   a  s    z4BaseTaskTests.test_cancel_awaited_task.<locals>.coro)
r   rE   r   r0   r.   r]   r   r@   rP   r   )r   r-   r	   )rD   r*   r   r   r   rJ   r
   test_cancel_awaited_taskQ  s    
z&BaseTaskTests.test_cancel_awaited_taskc          	      s   fdd} | d fdd} | }t} | W d Q R X t|jd |	  d 
d   |  tj j| d S )	Nc              3   s@   d V }   d|  dV }   d|  dV }   d|  dV  d S )Ng?g?g333333?)r   )r   )r   r	   r
   r   w  s    z:BaseTaskTests.test_stop_while_run_in_complete.<locals>.genr   c                  s>   x8dk r8t jd dI d H  d7 dkr   qW d S )N
   g?)r*   r   r   )r   r   stopr	   )r*   r   r	   r
   rJ     s
    
z;BaseTaskTests.test_stop_while_run_in_complete.<locals>.taskz+Event loop stopped before Future completed.r   g333333?)r5   r.   r]   rG   r@   rR   str	exceptionr   rQ   r   timer   r   r   )r   r   rJ   rX   cmr	   )r*   r   r   r
   test_stop_while_run_in_completeu  s    	
z-BaseTaskTests.test_stop_while_run_in_completec          	   C   sF   dd }|  | j| }| td d|_W d Q R X | j| d S )Nc                  s   d S )Nr	   r	   r	   r	   r
   r-     s    z.BaseTaskTests.test_log_traceback.<locals>.corozcan only be set to FalseT)r.   r*   rF   r^   Z_log_tracebackr@   )r   r-   rJ   r	   r	   r
   test_log_traceback  s
    z BaseTaskTests.test_log_tracebackc                sn    fdd}  |} |}|d |tj|d|d} |d  |   	d|
  d S )Nc              3   s   d V }   d|  d S )Nr   )r   )r   )r   r	   r
   r     s    zMBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_future_done.<locals>.genrQ   r   )r*   )r5   r0   r\   r@   r   r   rR   rP   rQ   r   r   )r   r   r*   rD   retr	   )r   r
   2test_wait_for_timeout_less_then_0_or_0_future_done  s    


z@BaseTaskTests.test_wait_for_timeout_less_then_0_or_0_future_donec          	      s|   fdd} |}d tj fdd}tj |tj| d|d W d Q R X d|  	 d d S )Nc              3   s   d V }   d|  d S )Nr   )r   )r   )r   r	   r
   r     s    zZBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started.<locals>.genFc                  s   d d S )NTr	   r	   )foo_startedr	   r
   ri     s    zZBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started.<locals>.foor   )r*   )
r5   r   r?   r]   TimeoutErrorr@   r   r   r   rR   )r   r   r*   ri   r	   )r   r   r
   ?test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started  s    
"zMBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_startedc                s   fdd}xdD ]}j |d |d   fdd}| }tj tj||d W d Q R X |	  |
  d   d	 W d Q R X qW d S )
Nc              3   s(   d V }   d|  dV }   d|  d S )Ng?r   )r   )r   )r   r	   r
   r     s    zABaseTaskTests.test_wait_for_timeout_less_then_0_or_0.<locals>.gen)r   r   )timeoutc                  s(   d zt jddI d H  W d d X dS )NTg?)r*   FrQ   )r   r   r	   )foo_runningr*   r	   r
   ri     s
    zABaseTaskTests.test_wait_for_timeout_less_then_0_or_0.<locals>.foo)r*   r   F)ZsubTestr5   r.   r]   r   r   r@   r   rP   rQ   r   r   r   rR   )r   r   r   ri   rD   r	   )r   r*   r   r
   &test_wait_for_timeout_less_then_0_or_0  s    

	z4BaseTaskTests.test_wait_for_timeout_less_then_0_or_0c          	      s   fdd} |d   fdd}| }tj tj|dd W d Q R X |  |	  
d   d d S )Nc              3   s.   d V }   d|  dV }   d|  dV } d S )Ng?r   g?)r   )r   )r   r	   r
   r     s
    z(BaseTaskTests.test_wait_for.<locals>.genc                  s(   d zt jddI d H  W d d X dS )NTg?)r*   FrQ   )r   r   r	   )r   r*   r	   r
   ri     s
    z(BaseTaskTests.test_wait_for.<locals>.foog?)r*   F)r5   r.   r]   r   r   r@   r   rP   rQ   r   r   r   rR   )r   r   ri   rD   r	   )r   r*   r   r
   test_wait_for  s    
	 zBaseTaskTests.test_wait_forc             C   s>   |   }tjdd }|tj| d |d}| |d d S )Nc               S   s   dS )NrQ   r	   r	   r	   r	   r
   r-   	  s    z2BaseTaskTests.test_wait_for_blocking.<locals>.coro)r   r*   rQ   )r5   r   r?   r@   r   rR   )r   r*   r-   r   r	   r	   r
   test_wait_for_blocking  s    
z$BaseTaskTests.test_wait_for_blockingc          	      s   fdd} |  fdd}t  z< | }tj  t|d W d Q R X W d td  X d 	  
|  
|  d S )Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng?r   g{Gz?)r   )r   )r   r	   r
   r     s
    z9BaseTaskTests.test_wait_for_with_global_loop.<locals>.genc                  s   t jd dI d H  dS )Ng?)r*   rQ   )r   r   r	   )r*   r	   r
   ri     s    z9BaseTaskTests.test_wait_for_with_global_loop.<locals>.foog{Gz?)r5   r   rW   r.   r]   r   r@   r   r   r   rP   rQ   r   )r   r   ri   rD   r	   )r*   r   r
   test_wait_for_with_global_loop  s    

 z,BaseTaskTests.test_wait_for_with_global_loopc             C   sV   dd }|  |}| |}tj|d|d}|d|jd ||}| |d d S )Nc               s   s   dV  dV  dV  d S )Ng?r	   r	   r	   r	   r
   r   /  s    z7BaseTaskTests.test_wait_for_race_condition.<locals>.geng?)r   r*   g?rN   )r5   r0   r   r   
call_laterr\   r@   rR   )r   r   r*   rD   rJ   r   r	   r	   r
   test_wait_for_race_condition-  s    


z*BaseTaskTests.test_wait_for_race_conditionc                s8   t    j d fdd} |  d S )NFc           	      sX    fdd}   |  }tj tj|d dI d H  W d Q R X  d S )Nc                  s$   zt jd dI d H  W d dX d S )Ng?)r*   T)r   r   r	   )r*   	task_doner	   r
   innerC  s    zSBaseTaskTests.test_wait_for_waits_for_task_cancellation.<locals>.foo.<locals>.innerg?)r   r*   )r.   r]   r   r   r   rP   )r   
inner_task)r*   r   r   r	   r
   ri   B  s
     zDBaseTaskTests.test_wait_for_waits_for_task_cancellation.<locals>.foo)r   rE   r   r'   r@   )r   ri   r	   )r*   r   r   r
   )test_wait_for_waits_for_task_cancellation<  s
    z7BaseTaskTests.test_wait_for_waits_for_task_cancellationc                s2   t    j  fdd} |  d S )Nc           	      s    fdd}   |  }tj|d d}  |}tjd dI d H  |  tj |I d H  W d Q R X |I d H d d S )Nc                  sx   yt jd dI d H  W nZ t jk
rr   yt jd dI d H  W n* t jk
rl   t jd dI d H  Y nX Y nX dS )Ng333333?)r*   r!   )r   r   r   r	   )r*   r	   r
   r   X  s     zIBaseTaskTests.test_wait_for_self_cancellation.<locals>.foo.<locals>.innerg?)r   r*   g?)r*   r!   )r.   r   r   r   r   r]   r   rR   )r   r   waitrJ   )r*   r   r	   r
   ri   W  s    z:BaseTaskTests.test_wait_for_self_cancellation.<locals>.foo)r   rE   r   r'   r@   )r   ri   r	   )r*   r   r
   test_wait_for_self_cancellationS  s    z-BaseTaskTests.test_wait_for_self_cancellationc                s   fdd} |tjdd tjdd fdd}| }|d d  | }d  |d d S )	Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng?r   g333333?)r   )r   )r   r	   r
   r   v  s
    z$BaseTaskTests.test_wait.<locals>.geng?)r*   g333333?c                 sB   t j gdI d H \} }| t g |t  dS )N)r*   r!   )r   r   rR   set)rQ   pending)r   r   r*   r   r	   r
   ri     s    z$BaseTaskTests.test_wait.<locals>.foor!   )r5   r.   r   r   r@   rR   r   r   )r   r   ri   r   r	   )r   r   r*   r   r
   	test_waitt  s    
zBaseTaskTests.test_waitc                s   fdd} |}|tjd|d |tjd|d fdd}t| ||| }|d d S )	Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng{Gz?r   gQ?)r   )r   )r   r	   r
   r     s
    z5BaseTaskTests.test_wait_with_global_loop.<locals>.geng{Gz?)r*   gQ?c                 s>   t  gI d H \} }| t g |t  dS )Nr!   )r   r   rR   r   )rQ   r   )r   r   r   r	   r
   ri     s    z5BaseTaskTests.test_wait_with_global_loop.<locals>.foor!   )r5   r.   r   r   rW   r@   rR   )r   r   r*   ri   r   r	   )r   r   r   r
   test_wait_with_global_loop  s    

z(BaseTaskTests.test_wait_with_global_loopc             C   sv   t jdd }|d}| | jt j|||dg| jd}| j|\}}| | | tdd |D ddh d S )Nc             S   s   | S )Nr	   )sr	   r	   r
   r-     s    z:BaseTaskTests.test_wait_duplicate_coroutines.<locals>.cororK   spam)r*   c             s   s   | ]}|  V  qd S )N)rS   )r;   r_   r	   r	   r
   	<genexpr>  s    z?BaseTaskTests.test_wait_duplicate_coroutines.<locals>.<genexpr>)	r   r?   r.   r*   r   r@   r   rR   r   )r   r-   crJ   rQ   r   r	   r	   r
   test_wait_duplicate_coroutines  s    
z,BaseTaskTests.test_wait_duplicate_coroutinesc             C   sb   |  t| jjtjt | jd tjd| jd}tj|gd| jd}|  t| jj| |  d S )N)r*   g      $@r   )return_whenr*   )	r]   r^   r*   r@   r   r   r   r   r'   )r   Z
sleep_coroZ	wait_coror	   r	   r
   test_wait_errors  s    zBaseTaskTests.test_wait_errorsc                s    fdd}  |} |tjd|d} |tjd|d} |tj||gtj|d}||\}} |h|  |h|  |	   
|	   |   d|  |d |tj||g|d d S )Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng      $@r   g?)r   )r   )r   r	   r
   r     s
    z4BaseTaskTests.test_wait_first_completed.<locals>.geng      $@)r*   g?)r   r*   r   )r5   r.   r   r   r   FIRST_COMPLETEDr@   rR   r   rQ   rP   assertIsNonerS   r   r   advance_time)r   r   r*   r   r   rJ   rQ   r   r	   )r   r
   test_wait_first_completed  s"    


z'BaseTaskTests.test_wait_first_completedc             C   s   t jdd }t jdd }| | j| }| | j| }| | jt j||gt j| jd}| j|\}}| ||h| | |	  | 
|  | |	  | 
|  d S )Nc               s   s
   d V  d S )Nr	   r	   r	   r	   r
   coro1  s    z2BaseTaskTests.test_wait_really_done.<locals>.coro1c               s   s   d V  d V  d S )Nr	   r	   r	   r	   r
   coro2  s    z2BaseTaskTests.test_wait_really_done.<locals>.coro2)r   r*   )r   r?   r.   r*   r   r   r@   rR   rP   rQ   r   rS   )r   r   r   r   r   rJ   rQ   r   r	   r	   r
   test_wait_really_done  s    z#BaseTaskTests.test_wait_really_donec       	         s    fdd}  |} |tjd|d}tjdd } || } |tj||gtj|d}||\}} |h|  |h|  	d|
  |d	 |tj||g|d d S )
Nc              3   s   d V }   d|  dV  d S )Ng      $@r   )r   )r   )r   r	   r
   r     s    z4BaseTaskTests.test_wait_first_exception.<locals>.geng      $@)r*   c               S   s   t dd S )Nerr)ZeroDivisionErrorr	   r	   r	   r
   r%     s    z4BaseTaskTests.test_wait_first_exception.<locals>.exc)r   r*   r   r   )r5   r.   r   r   r?   r   FIRST_EXCEPTIONr@   rR   r   r   r   )	r   r   r*   r   r%   r   rJ   rQ   r   r	   )r   r
   test_wait_first_exception  s    


z'BaseTaskTests.test_wait_first_exceptionc                s   fdd} |  tjd d} fdd} | }tj||gtj d} |\}}|h| |h| d 	   
d	  tj||g d d S )
Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng      $@r   g{Gz?)r   )r   )r   r	   r
   r   "  s
    z<BaseTaskTests.test_wait_first_exception_in_wait.<locals>.geng      $@)r*   c                  s    t jd dI d H  tdd S )Ng{Gz?)r*   r   )r   r   r   r	   )r*   r	   r
   r%   .  s    z<BaseTaskTests.test_wait_first_exception_in_wait.<locals>.exc)r   r*   g{Gz?r   )r5   r.   r   r   r   r   r@   rR   r   r   r   )r   r   r   r%   r   rJ   rQ   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jdd tjfdd}|  fdd}|  d	  |  d	  d S )
Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng?r   g333333?)r   )r   )r   r	   r
   r   A  s
    z3BaseTaskTests.test_wait_with_exception.<locals>.geng?)r*   c               3   s    t jd dE d H  tdd S )Ng333333?)r*   Zreally)r   r   r   r	   )r*   r	   r
   sleeperL  s    z7BaseTaskTests.test_wait_with_exception.<locals>.sleeperc                 s`   t j gdI d H \} }t| d |t  tdd | D }t|d d S )N)r*   r   c             s   s   | ]}|  d k	r|V  qd S )N)r   )r;   r_   r	   r	   r
   r   W  s    zFBaseTaskTests.test_wait_with_exception.<locals>.foo.<locals>.<genexpr>r   )r   r   rR   lenr   )rQ   r   errors)r   r   r*   r   r	   r
   ri   S  s
    z3BaseTaskTests.test_wait_with_exception.<locals>.foog333333?)r5   r.   r   r   r?   r@   r   r   )r   r   r   ri   r	   )r   r   r*   r   r
   test_wait_with_exception?  s    
z&BaseTaskTests.test_wait_with_exceptionc                s   fdd} |tjdd tjdd fdd}|  d  d	 tj gd d S )
Nc              3   s@   d V }   d|  dV }   d|  dV }   d|  dV  d S )Ng?r   g333333?g)\(?)r   )r   )r   r	   r
   r   b  s    z1BaseTaskTests.test_wait_with_timeout.<locals>.geng?)r*   g333333?c                 sF   t j gddI d H \} }| t g |tg d S )Ng)\(?)r   r*   )r   r   rR   r   )rQ   r   )r   r   r*   r   r	   r
   ri   p  s    z1BaseTaskTests.test_wait_with_timeout.<locals>.foog)\(?r   )	r5   r.   r   r   r@   r   r   r   r   )r   r   ri   r	   )r   r   r*   r   r
   test_wait_with_timeout`  s    	

z$BaseTaskTests.test_wait_with_timeoutc                s    fdd}  |} |tjd|d} |tjd|d}|tj||gd|d\}} |t|g  |t|g  d|	  |
d |tj||g|d d S )Nc              3   s@   d V }   d|  dV }   d|  dV }   d|  dV  d S )Ng?r   g333333?)r   )r   )r   r	   r
   r     s    z8BaseTaskTests.test_wait_concurrent_complete.<locals>.geng?)r*   g333333?)r   r*   r   )r5   r.   r   r   r@   r   rR   r   r   r   r   )r   r   r*   r   r   rQ   r   r	   )r   r
   test_wait_concurrent_complete}  s    	

z+BaseTaskTests.test_wait_concurrent_completec                s   dd }|  |d_t dtjfdd}|dd |dd	|d
dtj fdd}| | }| d
  | 	d|d d k | 	d	|d d k | 
|d d | | }| d
  d S )Nc               s   s   dV  dV  dV  dV  d S )Nr   g{Gz?r	   r	   r	   r	   r
   r     s    z,BaseTaskTests.test_as_completed.<locals>.geng      ?Fc             3   sD   t j| dE d H   | s@d kr@d kr@dd |S )N)r*   r   r   TgQ?)r   r   addr   )dtr   )	completedr*   time_shiftedr	   r
   r     s    

z0BaseTaskTests.test_as_completed.<locals>.sleeperg{Gz?r   r   g333333?r   c              3   s6   g } x,t j gdD ]}| |E d H  qW | S )N)r*   )r   as_completedappend)valuesr_   )r   r   r   r*   r	   r
   ri     s    z,BaseTaskTests.test_as_completed.<locals>.foor   )r5   Zslow_callback_durationr   r   r?   r@   r.   r   r   rP   rR   )r   r   r   ri   r   r	   )r   r   r   r   r*   r   r
   test_as_completed  s"    




zBaseTaskTests.test_as_completedc                s   dd }|  |tjddd tjddd fdd	}| | }| t|d
| | |d d | |d d d
 | |d d tj	 | 
d  d tj gd d S )Nc               s   s   d V  dV  dV  dV  d S )Nr   g?r	   r	   r	   r	   r
   r     s    z9BaseTaskTests.test_as_completed_with_timeout.<locals>.geng?r   )r*   g333333?r   c                 s   g } xzt j gddD ]b}| r,d y|I d H }| d|f W q t jk
rz } z| d|f W d d }~X Y qX qW | S )NgQ?)r   r*   g{Gz?r   r   )r   r   r   r   r   )r   r_   r#   r%   )r   r   r*   r	   r
   ri     s    

$z9BaseTaskTests.test_as_completed_with_timeout.<locals>.foor   r   )r   r   r   gQ?r   )r5   r   r   r   r@   r.   rR   r   assertIsInstancer   r   r   r   r   )r   r   ri   r   r	   )r   r   r*   r
   test_as_completed_with_timeout  s    

z,BaseTaskTests.test_as_completed_with_timeoutc                sJ   dd } |tjddd  fdd}|  d S )Nc               s   s   d V  dV  dV  d S )Nr   g{Gz?r	   r	   r	   r	   r
   r     s    z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.geng{Gz?r   )r*   c                 s6   x0t j gddD ]} | I d H }|d qW d S )Nr   )r   r*   r   )r   r   rR   )r_   r#   )r   r*   r   r	   r
   ri     s    
z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.foo)r5   r   r   r@   r.   )r   r   ri   r	   )r   r*   r   r
   %test_as_completed_with_unused_timeout  s
    
z3BaseTaskTests.test_as_completed_with_unused_timeoutc       	      C   s   dd }|  |}tjdd|d}tjdd|d}||h}ttj||d}| t|d ||d	 }| |d | d|	  |
d ||d
 }| |d | d|	  d S )Nc               s   s   dV  dV  dV  d S )Nr   g?r	   r	   r	   r	   r
   r     s    z9BaseTaskTests.test_as_completed_reverse_wait.<locals>.geng?r   )r*   g?r   r   r   r   )r5   r   r   listr   rR   r   r@   r   r   r   )	r   r   r*   r   r   fsfutsr   r   r	   r	   r
   test_as_completed_reverse_wait  s    

z,BaseTaskTests.test_as_completed_reverse_waitc       
         s    fdd}  |}tjdd|d}tjdd|d}||h}ttj||d} t|d tj||d}||\}}	 t	dd	 |D ddh d S )
Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng?r   )r   )r   )r   r	   r
   r     s
    z7BaseTaskTests.test_as_completed_concurrent.<locals>.geng?r   )r*   r   r   c             s   s   | ]}|  V  qd S )N)rS   )r;   r_   r	   r	   r
   r   $  s    z=BaseTaskTests.test_as_completed_concurrent.<locals>.<genexpr>)
r5   r   r   r   r   rR   r   r   r@   r   )
r   r   r*   r   r   r   r   waiterrQ   r   r	   )r   r
   test_as_completed_concurrent  s    
z*BaseTaskTests.test_as_completed_concurrentc                sn   t jdd  t j fdd}j| }j| | }t|ddh t|d d S )Nc             S   s   | S )Nr	   )r   r	   r	   r
   r-   (  s    zBBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.coroc              3   sD   g }  d}x2t j|| dgjdD ]}| |E d H  q(W | S )Nhamr   )r*   )r   r   r*   r   )rS   r   r_   )r-   r   r	   r
   rv   ,  s    zDBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.runnerr  r   r   )	r   r?   r.   r*   r@   rS   rR   r   r   )r   rv   rD   rS   r	   )r-   r   r
   &test_as_completed_duplicate_coroutines&  s    	z4BaseTaskTests.test_as_completed_duplicate_coroutinesc                sv   fdd} | tj fdd} |dd} | |  | d 	d 
  d S )Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng?g?)r   )r   )r   r	   r
   r   =  s
    z%BaseTaskTests.test_sleep.<locals>.genc             3   s6   t j| d  dE d H  t j| d | dE d H }|S )Nr   )r*   )r   r   )r   argr   )r*   r	   r
   r   F  s    z)BaseTaskTests.test_sleep.<locals>.sleeperg?yeah)r5   r   r?   r.   r@   rP   rQ   rR   rS   r   r   )r   r   r   rX   r	   )r*   r   r
   
test_sleep;  s    

zBaseTaskTests.test_sleepc                s   fdd} |}|tjdd|d}d  |j fdd}||_t|  j |	  t| 
 j d S )Nc              3   s   d V }   d|  dV  d S )Ng      $@r   )r   )r   )r   r	   r
   r   T  s    z,BaseTaskTests.test_sleep_cancel.<locals>.geng      $@r  )r*   c                s   | |f|   S )Nr	   )Zdelaycallbackr   )handleorig_call_laterr	   r
   r   `  s    z3BaseTaskTests.test_sleep_cancel.<locals>.call_later)r5   r.   r   r   r   r{   r   r   Z
_cancelledr   rP   )r   r   r*   rX   r   r	   )r
  r  r   r
   test_sleep_cancelR  s    


zBaseTaskTests.test_sleep_cancelc                sj   fdd} | tj fddtj fdd}| } |d d   d S )	Nc              3   s.   d V }   d|  dV }   d|  dV  d S )Ng?r   i  )r   )r   )r   r	   r
   r   p  s
    z9BaseTaskTests.test_task_cancel_sleeping_task.<locals>.genc             3   s   t j|  dE d H  d S )N)r*   )r   r   )r   )r*   r	   r
   r   y  s    z;BaseTaskTests.test_task_cancel_sleeping_task.<locals>.sleepc              3   sL     d}  d| j y| E d H  W n tjk
rB   dS X dS d S )Ni  g?r   zslept in)r.   r   r   r   r   )r   )r*   r   r   r	   r
   doit}  s    z:BaseTaskTests.test_task_cancel_sleeping_task.<locals>.doitr   g?)r5   r   r?   rR   r@   r   r   )r   r   r  Zdoerr	   )r*   r   r   r
   test_task_cancel_sleeping_taskn  s    
z,BaseTaskTests.test_task_cancel_sleeping_taskc                s   |  | j tj fdd}| | j| }t| j | |j  |	  t| j | 
tj| jj| | |j |    d S )Nc               3   s    E d H  d S )Nr	   r	   )rD   r	   r
   r-     s    z:BaseTaskTests.test_task_cancel_waiter_future.<locals>.coro)r0   r*   r   r?   r.   r{   r   rT   r   r   r]   r   r@   r   rP   r   )r   r-   rJ   r	   )rD   r
   test_task_cancel_waiter_future  s    z,BaseTaskTests.test_task_cancel_waiter_futurec          	   C   s   t jdd }| }| | j|}| td |d W d Q R X | td |t  W d Q R X | 	| j
|d d S )Nc               S   s   dS )Nr[   r	   r	   r	   r	   r
   rO     s    z4BaseTaskTests.test_task_set_methods.<locals>.notmuchznot support set_resultrN   znot support set_exceptionr[   )r   r?   r.   r*   rF   rG   r\   set_exceptionr^   rR   r@   )r   rO   r   rJ   r	   r	   r
   test_task_set_methods  s    
z#BaseTaskTests.test_task_set_methodsc             C   s&   t jdd }| t| jj|  d S )Nc               s   s   d V  dV  dS )Nr   r[   r	   r	   r	   r	   r
   rO     s    z/BaseTaskTests.test_step_result.<locals>.notmuch)r   r?   r]   rG   r*   r@   )r   rO   r	   r	   r
   test_step_result  s    zBaseTaskTests.test_step_resultc                s   G dd dt j}|| jd d t j fdd}| | j| }t| j |  j t	 } 
| t| j | | | |  | |  d S )Nc                   s(   e Zd Z fddZ fddZ  ZS )z2BaseTaskTests.test_step_result_future.<locals>.Futc                s   d| _ t j|| d S )NF)cb_addedr3   rb   )r   r   kwds)r+   r	   r
   rb     s    z;BaseTaskTests.test_step_result_future.<locals>.Fut.__init__c                s   d| _ t j|| d S )NT)r  r3   r}   )r   r   kwargs)r+   r	   r
   r}     s    zDBaseTaskTests.test_step_result_future.<locals>.Fut.add_done_callback)r   r   r   rb   r}   __classcell__r	   r	   )r+   r
   Fut  s   r  )r*   c               3   s    E d H d S )Nr	   r	   )rD   rS   r	   r
   wait_for_future  s    z>BaseTaskTests.test_step_result_future.<locals>.wait_for_future)r   r/   r*   r?   r.   r{   r   rP   r  objectr\   rT   rQ   r   rS   )r   r  r  rX   r   r	   )rD   rS   r
   test_step_result_future  s    	
z%BaseTaskTests.test_step_result_futurec                s   fdd} |tjfddt  tj fdd}| }t |  |	  
ttj |	  |  |   d S )Nc              3   s   d V }   d|  dV  d S )Ng      $@r   )r   )r   )r   r	   r
   r     s    z;BaseTaskTests.test_baseexception_during_cancel.<locals>.genc               3   s   t jd dE d H  d S )Nr   )r*   )r   r   r	   )r*   r	   r
   r     s    z?BaseTaskTests.test_baseexception_during_cancel.<locals>.sleeperc               3   s0   y E d H  W n t jk
r*    Y nX d S )N)r   r   r	   )base_excr   r	   r
   notmutch  s    z@BaseTaskTests.test_baseexception_during_cancel.<locals>.notmutch)r5   r   r?   BaseExceptionr.   r{   r   r   r   rQ   r]   rP   r   rT   r   )r   r   r  rJ   r	   )r  r*   r   r   r
    test_baseexception_during_cancel  s    

z.BaseTaskTests.test_baseexception_during_cancelc             C   sf   dd }|  t| dd }|  t| tjdd }| t| |  tt  d S )Nc               S   s   d S )Nr	   r	   r	   r	   r
   fn  s    z2BaseTaskTests.test_iscoroutinefunction.<locals>.fnc               s   s
   d V  d S )Nr	   r	   r	   r	   r
   fn1  s    z3BaseTaskTests.test_iscoroutinefunction.<locals>.fn1c               s   s
   d V  d S )Nr	   r	   r	   r	   r
   fn2  s    z3BaseTaskTests.test_iscoroutinefunction.<locals>.fn2)r   r   iscoroutinefunctionr?   rP   r   Mock)r   r  r   r!  r	   r	   r
   test_iscoroutinefunction  s    z&BaseTaskTests.test_iscoroutinefunctionc          	      sX   |  | j tj fdd}| }| t | j| W d Q R X |    d S )Nc               3   s
    V  d S )Nr	   r	   )rD   r	   r
   r    s    z?BaseTaskTests.test_yield_vs_yield_from.<locals>.wait_for_future)	r0   r*   r   r?   r]   rG   r@   r   rQ   )r   r  rJ   r	   )rD   r
   test_yield_vs_yield_from  s    z&BaseTaskTests.test_yield_vs_yield_fromc                s<   t jdd  t j fdd}| }| t| jj| d S )Nc               s   s
   d V  d S )Nr	   r	   r	   r	   r
   r-     s    z>BaseTaskTests.test_yield_vs_yield_from_generator.<locals>.coroc              3   s      } z
| V  W d |    X d S )N)r'   )r   )r-   r	   r
   r    s    
zIBaseTaskTests.test_yield_vs_yield_from_generator.<locals>.wait_for_future)r   r?   r]   rG   r*   r@   )r   r  rJ   r	   )r-   r
   "test_yield_vs_yield_from_generator  s    z0BaseTaskTests.test_yield_vs_yield_from_generatorc             C   sP   t jdd }| t | | }| t | | j|}| |d d S )Nc               S   s   dS )NrK   r	   r	   r	   r	   r
   r   ,  s    z;BaseTaskTests.test_coroutine_non_gen_function.<locals>.funcrK   )r   r?   rP   r"  iscoroutiner*   r@   rR   )r   r   r-   r   r	   r	   r
   test_coroutine_non_gen_function+  s    z-BaseTaskTests.test_coroutine_non_gen_functionc                sz   |  | j tj fdd}tj fdd}| | j| }| | j| }| j|}| |d | |  d S )Nc                  s    S )Nr	   r	   )rD   r	   r
   r   ;  s    zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.funcc                  s     d d S )NrK   )r\   r	   )rD   r	   r
   r-   ?  s    zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.cororK   )	r0   r*   r   r?   r.   r@   rR   r   rS   )r   r   r-   t1t2r   r	   )rD   r
   -test_coroutine_non_gen_function_return_future8  s    z;BaseTaskTests.test_coroutine_non_gen_function_return_futurec          	      s   j j t  jjd W d Q R X  fdd}j|jj t  jjd W d Q R X d S )N)r*   c          	      s    t  j| d W d Q R X t|  zR t  d  W d Q R X  t    W d Q R X W d td  X d S )N)r*   )assertWarnsPendingDeprecationWarningrT   current_taskr   rW   )r*   )r,   r   rJ   r	   r
   r-   P  s    
z8BaseTaskTests.test_current_task_deprecated.<locals>.coro)	r+   r,   r,  r-  r   r.  r*   r.   r@   )r   r-   r	   )r,   r   rJ   r
   test_current_task_deprecatedJ  s    z*BaseTaskTests.test_current_task_deprecatedc                sZ     tj jd  fdd}  j| j j   tj jd d S )N)r*   c                s:     tj| d   td    t  d S )N)r*   )rT   r   r.  )r*   )r   rJ   r	   r
   r-   f  s    z-BaseTaskTests.test_current_task.<locals>.coro)r   r   r.  r*   r.   r@   )r   r-   r	   )r   rJ   r
   test_current_taskc  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jfjd  tjjd d S )N)r*   c                sD    tj| dk  I d H   tj| dk d d S )N)r*   T)rP   r   r.  r\   )r*   )r   r   r   task1r	   r
   r   v  s    
zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro1c                sD    tj| dk  d I d H   tj| dk d S )N)r*   T)rP   r   r.  r\   )r*   )r   r   r   task2r	   r
   r   |  s    

zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro2)r   r   r.  r*   r0   r.   r@   r   )r   r   r   r	   )r   r   r   r1  r2  r
   )test_current_task_with_interleaving_tasksp  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>   yI d H  W n  t jk
r.    d7   Y nX d d S )Nr   zgot past sleep() in inner())r   r   failr	   )proofr   r  r	   r
   r     s    z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.innerc                  s<   y  I d H  W n t jk
r.   d7 Y n
X d7 d S )Nr>   r   )r   r   r	   )r   r5  r	   r
   r     s
    z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.outer)r*   e   )r0   r*   r   rL   r{   r   r   r@   rR   rP   r   )r   r   r_   r	   )r   r5  r   r  r
   test_yield_future_passes_cancel  s    
	z-BaseTaskTests.test_yield_future_passes_cancelc                s   d jfdd  fdd}tj| jd}tj |  tjjj	| 
d  tj d d S )Nr   c                  s   I d H   d7  d S )Nr   r	   r	   )r5  r  r	   r
   r     s    
zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.innerc                 s*   t j  gjdI d H \} }d7 d S )N)r*   r>   )r   r   r*   )dp)r   r5  r   r	   r
   r     s    zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.outer)r*   r   )r0   r*   r   rL   r{   r   r   r]   r   r@   r\   rR   )r   r   r_   r	   )r   r5  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 )Nr!   )r0   r*   r   shieldr\   r@   rR   )r   r   r   r   r	   r	   r
   test_shield_result  s
    

z BaseTaskTests.test_shield_resultc             C   sT   |  | j}t|}t| j td}|| t| j | |	 | d S )Nr   )
r0   r*   r   r;  r{   r   rG   r  rT   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 )N)	r0   r*   r   r;  r{   r   r   rP   r   )r   r   r   r	   r	   r
   test_shield_cancel_inner  s    
z&BaseTaskTests.test_shield_cancel_innerc             C   sh   |  | j}t|}t| j |  t| j | |  | 	d|j
d krXdnt|j
 d S )Nr   )r0   r*   r   r;  r{   r   r   rP   r   rR   Z
_callbacksr   )r   r   r   r	   r	   r
   test_shield_cancel_outer  s    
z&BaseTaskTests.test_shield_cancel_outerc             C   s8   |  | j}|d | jt|}| |d d S )Nr!   )r0   r*   r\   r@   r   r;  rR   )r   rD   r   r	   r	   r
   test_shield_shortcut  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 Q R X 
d  tj d d S )Nr   c                  s   I d H   d7  d S )Nr   r	   r	   )r5  r  r	   r
   r     s    
z/BaseTaskTests.test_shield_effect.<locals>.innerc                  s$   t j  jdI d H  d7 d S )N)r*   r>   )r   r;  r*   r	   )r   r5  r   r	   r
   r     s    z/BaseTaskTests.test_shield_effect.<locals>.outer)r*   r   )r0   r*   r   rL   r{   r   r   r]   r   r@   r\   rR   )r   r   r_   r	   )r   r5  r   r  r
   test_shield_effect  s    
z BaseTaskTests.test_shield_effectc             C   s   |  | j}|  | j}tj||| jd}tj|| jd}t| j |  t| j | |	  |
d |
d t| j | | ddg d S )N)r*   r   r   )r0   r*   r   rA   r;  r{   r   r   rP   r   r\   rR   rS   )r   child1child2parentr   r	   r	   r
   test_shield_gather  s    

z BaseTaskTests.test_shield_gatherc             C   s   |  | j}|  | j}tj|| jd}tj|| jd}tj||| jd}t| j |  t| j | |	 tj
 | |  | |  |d |d t| j d S )N)r*   r   r   )r0   r*   r   r;  rA   r{   r   r   r   r   r   rP   r   r\   )r   rB  rC  r   r   rD  r	   r	   r
   test_gather_shield  s    

z BaseTaskTests.test_gather_shieldc             C   sZ   |  | j}| t| jjtj|| jd t }| t| jjtj|| jd |  d S )N)r*   )	r0   r*   r]   rf   r@   r   r   r   r'   )r   rD   r-   r	   r	   r
   test_as_completed_invalid_args"  s    z,BaseTaskTests.test_as_completed_invalid_argsc             C   sx   |  | j}| t| jjtj|| jd t }| t| jjtj|| jd |  | t	| jjtjg | jd d S )N)r*   )
r0   r*   r]   rf   r@   r   r   r   r'   r^   )r   rD   r-   r	   r	   r
   test_wait_invalid_args-  s    z$BaseTaskTests.test_wait_invalid_argsc          	      sD    fdd}t d |  W d Q R X t d |  W d Q R X d S )Nc                 s   t j fdd} j  d  |  t  jt	j
 j jt	j j j d S )Nc               3   s    j  E d H  d S )N)rP   
gi_runningr	   )rD   r   r   r	   r
   r-   B  s    zKBaseTaskTests.test_corowrapper_mocks_generator.<locals>.check.<locals>.coro)r   r?   r0   r*   r\   rP   r'  r   gi_frametypes	FrameTyper   rI  r   CodeTyper@   r   )r-   )r   )rD   r   r
   check>  s    
z=BaseTaskTests.test_corowrapper_mocks_generator.<locals>.checkFT)r   )r   rN  r	   )r   r
    test_corowrapper_mocks_generator<  s
    

z.BaseTaskTests.test_corowrapper_mocks_generatorc          	      st   t db tjfdd}tj fddtjdd   j| } j|} |d W d Q R X d S )	NTc               3   s     E d H S )Nr	   r	   )r*  r	   r
   r)  e  s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t1c              3   s(      j}   j|  | E d H S )N)r0   r*   r.   )r_   )r   t3r	   r
   r*  i  s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t2c             S   s   |  d d S )N)r   r      )r\   )r_   r	   r	   r
   rP  o  s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t3)r   r   rQ  )r   r   r?   r.   r*   r@   rR   )r   r)  rJ   valr	   )r   r*  rP  r
   test_yield_from_corowrapperc  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 )Nr	   )r   r	   r	   r
   ri   x  s    z;BaseTaskTests.test_yield_from_corowrapper_send.<locals>.fooc          
      s\   t j  }|d  y||  W n( tk
rN } z
|jd S d }~X Y n
X tdd S )Nr   zStopIteration was expected)r   r   CoroWrapperr$   r"   r   rd   )r  cwZex)ri   r	   r
   call|  s    
z<BaseTaskTests.test_yield_from_corowrapper_send.<locals>.call)r   r   r   )rR   )r   rV  r	   )ri   r
    test_yield_from_corowrapper_sendw  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 )Nr	   r	   r	   r	   r
   ri     r2   z3BaseTaskTests.test_corowrapper_weakref.<locals>.foorU  )weakrefZWeakValueDictionaryr   r   rT  r   )r   Zwdri   rU  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 } x6y
| V } W q t k
r6 } z|} W d d }~X Y qX qW d S )N)	Exception)valueer	   r	   r
   ri     s    
z1BaseTaskTests.test_corowrapper_throw.<locals>.foori   )ri   )
rZ  r   r   rT  r$   rT   r&   r   rR   r   )r   ri   r   rU  r	   r	   r
   test_corowrapper_throw  s$    



z$BaseTaskTests.test_corowrapper_throwc                s8   j j  fdd}j| j d S )Nc            	      s0    t  jhks"tW d Q R X d S )N)r,  r-  	all_tasksr*   rd   r	   )r,   r   rX   r	   r
   r-     s    z5BaseTaskTests.test_all_tasks_deprecated.<locals>.coro)r+   r,   r.   r*   r@   )r   r-   r	   )r,   r   rX   r
   test_all_tasks_deprecated  s    z'BaseTaskTests.test_all_tasks_deprecatedc          	      sV   j j}tj fdd}t } jd  j| | j}tj	| jd} 
tj jd|h t j zV t  
| |h W d Q R X  t  
|d |h W d Q R X W d td  X  j   
t jjd |jjd= d }|j}d }t   
tj jdt  | jdtj|d |  d S )	Nc             3   s      | }|E d H  tdd S )Nzcode never reached)r0   rZ  )r*   future)r   r	   r
   kill_me  s    

z>BaseTaskTests.test_log_destroyed_pending_task.<locals>.kill_meT)r*   r   r`  z%Task was destroyed but it is pending!)messagerJ   r   )r+   r,   r   r?   r   r#  r*   rz   set_exception_handlerrL   rR   r^  rW   r,  r-  Z	_run_oncer   _readyrJ  f_localsr~   r   
gc_collectr   Zassert_called_withANYZ
reset_mock)r   r,   ra  Zmock_handlerr-   rJ   r   r	   )r   r
   test_log_destroyed_pending_task  s8    
"


z-BaseTaskTests.test_log_destroyed_pending_taskzasyncio.base_events.loggerc                sT   t   t jdd  t j fdd}|  |jj d S )Nc               S   s   t d S )N)rf   r	   r	   r	   r
   r-     s    zBBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.coroc              3   s2      } tjddE d H  |   d } d S )Ng?)r*   )r.   r   r   r   )rJ   )r-   r*   r   r	   r
   rv     s    zDBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.runner)r   rE   rW   r?   r@   r   errorcalled)r   m_logrv   r	   )r-   r*   r   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jdd }W d Q R X t}t jd }|  t  | 	|j
j |j
jd d }t|\}}dt|jt||t||f }| |t|tj d S )NTc               S   s   d S )Nr	   r	   r	   r	   r
   	coro_noop  s    z=BaseTaskTests.test_coroutine_never_yielded.<locals>.coro_noopr   r   z^<CoroWrapper %s\(?\)? .* at %s:%s, .*> was never yielded from\nCoroutine object created at \(most recent call last, truncated to \d+ last lines\):\n.*\n  File "%s", line %s, in test_coroutine_never_yielded\n    coro_noop\(\)$)r   r   r?   __file__sys	_getframef_linenor   rf  rP   ri  rj  	call_argsr{   r|   r   r   r   rs   compileDOTALL)	r   rk  rm  Ztb_filename	tb_linenorb  Zfunc_filenameZfunc_linenoZregexr	   r	   r
   test_coroutine_never_yielded  s    


z*BaseTaskTests.test_coroutine_never_yieldedc          	      sD    fdd}t d |  W dQ R X t d |  W dQ R X dS )zReturn of @asyncio.coroutine()-wrapped function generator object
        from @asyncio.coroutine()-wrapped function should have same effect as
        returning generator object or Future.c                 s,   t jdd }  j|  } |d d S )Nc              S   s   t jdd } |  S )Nc               S   s   dS )Nr   r	   r	   r	   r	   r
   
inner_coro%  s    ziBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coro.<locals>.inner_coro)r   r?   )rw  r	   r	   r
   
outer_coro#  s    zUBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coror   )r   r?   r*   r@   rR   )rx  rS   )r   r	   r
   rN  "  s    zABaseTaskTests.test_return_coroutine_from_coroutine.<locals>.checkFNT)r   )r   rN  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   rQ  test_task_source_traceback)r*   rz   r.   r   ro  rp  rq  r   r~   r   rR   rn  r@   )r   rJ   r   r	   r	   r
   r{  6  s    z(BaseTaskTests.test_task_source_tracebackc                sz   t    j t j fdd} | } t j|| d} |j 	t j
 j| |  d S )Nc              3   s     } | E d H  d S )N)r0   )rD   )r*   r   r	   r
   blocking_coroutineF  s    
z?BaseTaskTests._test_cancel_wait_for.<locals>.blocking_coroutine)r*   )r   rE   r   r'   r?   r   r   r   r   r]   r   r@   rP   r   )r   r   r|  rJ   r   r	   )r*   r   r
   _test_cancel_wait_forB  s    
z#BaseTaskTests._test_cancel_wait_forc             C   s   |  d  d S )N)r}  )r   r	   r	   r
   test_cancel_blocking_wait_forW  s    z+BaseTaskTests.test_cancel_blocking_wait_forc             C   s   |  d d S )Ng      N@)r}  )r   r	   r	   r
   test_cancel_wait_forZ  s    z"BaseTaskTests.test_cancel_wait_forc                s   t  }| |j | |fdd}t j| |d}t j||dd  fdd}| d |	 | 
 d |   | 
 dg dS )	zYEnsure that a gathering future refuses to be cancelled once all
        children are donec               3   s
    E d H S )Nr	   r	   )rD   r	   r
   
child_corof  s    z6BaseTaskTests.test_cancel_gather_1.<locals>.child_coro)r*   Nc                s      d S )N)r   )r<   )cancel_resultgather_taskr	   r
   cancelling_callbackl  s    z?BaseTaskTests.test_cancel_gather_1.<locals>.cancelling_callbackr!   F)r   rE   r   r'   r0   rA   rL   r}   r\   r@   rR   r   r   rS   )r   r*   r  Zgather_futurer  r	   )r  rD   r  r
   test_cancel_gather_1]  s    



z"BaseTaskTests.test_cancel_gather_1c                s@   t    j  fdd fdd} |  d S )Nc                 sB   d} x8| d7 } t jt jd dd dI d H  | dkrd S qW d S )Nr   g?)r*   T)return_exceptionsr*   r   )r   rA   r   )r   )r*   r	   r
   rK     s    z0BaseTaskTests.test_cancel_gather_2.<locals>.testc                 s^      } tjd dI d H  |   y| I d H  W n tjk
rN   Y nX d d S )Ng?)r*   z1gather did not propagate the cancellation request)r.   r   r   r   r   r4  )Zqwe)r*   r   rK   r	   r
   main  s    z0BaseTaskTests.test_cancel_gather_2.<locals>.main)r   rE   r   r'   r@   )r   r  r	   )r*   r   rK   r
   test_cancel_gather_2{  s
    
z"BaseTaskTests.test_cancel_gather_2c                s4   t jdd  t j fdd}j|  d S )Nc               S   s   dd  d S )Nr   r   r	   r	   r	   r	   r
   ri     s    z3BaseTaskTests.test_exception_traceback.<locals>.fooc              3   s*    j  } d V  |  j d S )N)r.   r*   ZassertIsNotNoner   __traceback__)rJ   )ri   r   r	   r
   r    s    z4BaseTaskTests.test_exception_traceback.<locals>.main)r   r?   r*   r@   )r   r  r	   )ri   r   r
   test_exception_traceback  s    z&BaseTaskTests.test_exception_tracebackc          	   C   s   dd }|| j _tjdd }| |jj | t* | }z| 	| j | W d |
  X W d Q R X | |jj |jjd d }| d| | t| j t  d S )Nc             _   s   t d S )N)r^   )r	  r   r  r	   r	   r
   r     s    z8BaseTaskTests.test_error_in_call_soon.<locals>.call_soonc               S   s   d S )Nr	   r	   r	   r	   r
   r-     s    z3BaseTaskTests.test_error_in_call_soon.<locals>.coror   z$Task was destroyed but it is pending)r*   r   r   r?   r   ri  rj  r]   r^   r.   r'   rP   rr  assertInrR   r^  r   )r   rk  r   r-   r   rb  r	   r	   r
   test_error_in_call_soon  s    z%BaseTaskTests.test_error_in_call_soonc          	   C   sP   |  td | | jd W d Q R X |  td | | jd W d Q R X d S )Nz!a coroutine was expected, got 123r   )rF   rf   r.   r*   )r   r	   r	   r
   "test_create_task_with_noncoroutine  s    z0BaseTaskTests.test_create_task_with_noncoroutinec             C   sf   t jdd }| | j| }| || j | j| | | j| }| || j | j| d S )Nc               S   s   d S )Nr	   r	   r	   r	   r
   r-     s    zDBaseTaskTests.test_create_task_with_oldstyle_coroutine.<locals>.coro)r   r?   r.   r*   r   r,   r@   )r   r-   rJ   r	   r	   r
   (test_create_task_with_oldstyle_coroutine  s    z6BaseTaskTests.test_create_task_with_oldstyle_coroutinec             C   s`   dd }|  | j| }| || j | j| |  | j| }| || j | j| d S )Nc                  s   d S )Nr	   r	   r	   r	   r
   r-     s    z@BaseTaskTests.test_create_task_with_async_function.<locals>.coro)r.   r*   r   r,   r@   )r   r-   rJ   r	   r	   r
   $test_create_task_with_async_function  s    z2BaseTaskTests.test_create_task_with_async_functionc             C   sh   |  | jt }| || j | | j|d |  | jt }| || j | | j|d d S )Nr!   )r.   r*   r    r   r,   rR   r@   )r   rJ   r	   r	   r
   (test_create_task_with_asynclike_function  s    z6BaseTaskTests.test_create_task_with_asynclike_functionc                s(   dd   fdd}j |  d S )Nc                  s   dS )Nr   r	   r	   r	   r	   r
   r     s    z2BaseTaskTests.test_bare_create_task.<locals>.innerc                 s4   t   } | j | I d H }d| d S )Nr   )r   r   r   r,   rR   )rJ   r   )r   r   r	   r
   r-     s    
z1BaseTaskTests.test_bare_create_task.<locals>.coro)r*   r@   )r   r-   r	   )r   r   r
   test_bare_create_task  s    z#BaseTaskTests.test_bare_create_taskc                sd   t jddd  fdd fdd}t z| }| W d   X d S )Ncvarnope)defaultc                  s2   t jddI d H    d  d d S )Ng{Gz?)r*   r  zsomething else)r   r   rR   getr   r	   )r  r*   r   r	   r
   sub	  s    z)BaseTaskTests.test_context_1.<locals>.subc                 sV      d  }  d    d | I d H     d d S )Nr  yes)rR   r  r.   r   )Zsubtask)r  r*   r   r  r	   r
   r  	  s    

z*BaseTaskTests.test_context_1.<locals>.main)contextvars
ContextVarr   rE   r.   r@   r'   )r   r  rJ   r	   )r  r*   r   r  r
   test_context_1 	  s    zBaseTaskTests.test_context_1c                sb   t jddd  fdd}t z| }| W d   X   d d S )Nr  r  )r  c           	      s    fdd}    d xtdD ]}}||   d|  |jd  |I d H     d|  xVtdD ]J} d| d|  tj	dd	I d H     d| d|  qW q&W d S )
Nc                s     d d S )Nzsomething else)r   )rD   )r  r	   r
   fut_on_done	  s    z?BaseTaskTests.test_context_2.<locals>.main.<locals>.fut_on_doner  r   r  rQ  -gMbP?)r*   )
rR   r  rB   r0   r}   r   r   r\   r   r   )r  jrD   i)r  r*   r   r	   r
   r  	  s    


z*BaseTaskTests.test_context_2.<locals>.main)	r  r  r   rE   r.   r@   r'   rR   r  )r   r  rJ   r	   )r  r*   r   r
   test_context_2	  s    
zBaseTaskTests.test_context_2c                sd   t jddd  fddfdd}t z|  W d   X   d d S )Nr  r   )r  c                sT   xNt dD ]B} | |  tjtdddI d H    | |  q
W d S )Nr   gMbP?g?)r*   )rB   r   r   r   randomZuniformrR   r  )numr  )r  r*   r   r	   r
   r  >	  s
    z)BaseTaskTests.test_context_3.<locals>.subc                 sP   g } x0t dD ]$} tdd}| | qW tj| d iI d H  d S )Nr>   r   r   r*   )rB   r   r  Zrandintr   r   rA   )r   r  rJ   )r*   r  r	   r
   r  E	  s
    z*BaseTaskTests.test_context_3.<locals>.main)r  r  r   rE   r@   r'   rR   r  )r   r  r	   )r  r*   r   r  r
   test_context_39	  s    
zBaseTaskTests.test_context_3)ur   r   r   r,   r/   r.   r0   r4   rC   rI   rM   rY   rZ   r`   ra   re   rg   rw   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  r$  r%  r&  r(  r+  r/  r0  r3  r7  r:  r<  r=  r>  r?  r@  rA  rE  rF  rG  rH  rO  rS  rW  rY  r]  r_  rh  r   Zpatchrl  rv  ry  r{  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r	   )r+   r
   r)   Q   s   5=$#	! !!-$
"		'
5"r)   c             C   sv   | j }| j}|d ks|d kr | S G dd d}G dd d||}G dd d||}dd }|| _ || _|| _d | _| S )	Nc                   s(   e Zd Z fddZ fddZ  ZS )z(add_subclass_tests.<locals>.CommonFuturec                s"   t dd | _t j|| d S )Nc               S   s   dS )Nr   r	   r	   r	   r	   r
   r1   _	  r2   zCadd_subclass_tests.<locals>.CommonFuture.__init__.<locals>.<lambda>)collectionsdefaultdictcallsr3   rb   )r   r   r  )r+   r	   r
   rb   ^	  s    z1add_subclass_tests.<locals>.CommonFuture.__init__c                s    | j d  d7  < t j||S )Nr}   r   )r  r3   r}   )r   r   r  )r+   r	   r
   r}   b	  s    z:add_subclass_tests.<locals>.CommonFuture.add_done_callback)r   r   r   rb   r}   r  r	   r	   )r+   r
   CommonFuture]	  s   r  c               @   s   e Zd ZdS )z add_subclass_tests.<locals>.TaskN)r   r   r   r	   r	   r	   r
   r,   f	  s   r,   c               @   s   e Zd ZdS )z"add_subclass_tests.<locals>.FutureN)r   r   r   r	   r	   r	   r
   r/   i	  s   r/   c                sv   j jd  fdd}j| jd}j|}|d t|jddi t jddi d S )N)r*   c                  s   j  fdd  I d H S )Nc                  s
     dS )Nr   )r\   r	   )rD   r	   r
   r1   p	  r2   zYadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.func.<locals>.<lambda>)r*   r   r	   )rD   r   r	   r
   r   o	  s    zGadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.funcr   r}   r   )r/   r*   r,   r@   rR   dictr  )r   r   rJ   rS   r	   )rD   r   r
   test_subclasses_ctask_cfuturel	  s    
z9add_subclass_tests.<locals>.test_subclasses_ctask_cfuture)r,   r/   r  r{  )clsZBaseTaskZ
BaseFuturer  r,   r/   r  r	   r	   r
   add_subclass_testsV	  s    	r  c               @   s   e Zd Zdd Zdd ZdS )SetMethodsTestc          	      s   t  j}t   j_} fdd}| }  j|}||d   j	|d |
  |jd d d } tjd
 |W d Q R X |  d S )Nc                  s   t jd jdI d H  dS )Ng?)r*   r   )r   r   r*   r	   )r   r	   r
   ri   	  s    z@SetMethodsTest.test_set_result_causes_invalid_state.<locals>.foor   r   r   zstep\(\): already done)typer/   r   r#  r*   call_exception_handlerr.   r\   rR   r@   assert_called_oncerr  rF   r   InvalidStateErrorr'   )r   r/   exc_handlerri   r-   rJ   r%   r	   )r   r
   $test_set_result_causes_invalid_state	  s    

z3SetMethodsTest.test_set_result_causes_invalid_statec          	      s   G dd dt }t j}t   j_} fdd}| }  j|}|||   	|  j
| W d Q R X |  |jd d d } tjd
 |W d Q R X |  d S )Nc               @   s   e Zd ZdS )zESetMethodsTest.test_set_exception_causes_invalid_state.<locals>.MyExcN)r   r   r   r	   r	   r	   r
   MyExc	  s   r  c                  s   t jd jdI d H  dS )Ng?)r*   r   )r   r   r*   r	   )r   r	   r
   ri   	  s    zCSetMethodsTest.test_set_exception_causes_invalid_state.<locals>.foor   r   zstep\(\): already done)rZ  r  r/   r   r#  r*   r  r.   r  r]   r@   r  rr  rF   r   r  r'   )r   r  r/   r  ri   r-   rJ   r%   r	   )r   r
   'test_set_exception_causes_invalid_state	  s    
z6SetMethodsTest.test_set_exception_causes_invalid_stateN)r   r   r   r  r  r	   r	   r	   r
   r  	  s   r  _CFuture_CTaskzrequires the C _asyncio modulec               @   s:   e Zd ZeeddZeeddZej	dd Z
dd ZdS )CTask_CFuture_Testsr  Nr  c             C   s   t td}tjdd }| | j| }| j| | }x.tdD ]"}|j	| | jd | j| qFW | j
| | ddd d S )	Ngettotalrefcountc               S   s   d S )Nr	   r	   r	   r	   r
   r-   	  s    z@CTask_CFuture_Tests.test_refleaks_in_task___init__.<locals>.coror>   )r*   r   r   )Zdelta)r   Zget_attributero  r   r?   r.   r*   r@   rB   rb   r   )r   r  r-   rJ   Zrefs_beforer  r	   r	   r
   test_refleaks_in_task___init__	  s    z2CTask_CFuture_Tests.test_refleaks_in_task___init__c          	   C   sH   t jdd }| | j| }| j| | t
 |`W d Q R X d S )Nc               S   s   d S )Nr	   r	   r	   r	   r
   r-   	  s    zHCTask_CFuture_Tests.test_del__log_destroy_pending_segfault.<locals>.coro)r   r?   r.   r*   r@   r]   AttributeErrorr   )r   r-   rJ   r	   r	   r
   &test_del__log_destroy_pending_segfault	  s
    z:CTask_CFuture_Tests.test_del__log_destroy_pending_segfault)r   r   r   getattrr   r,   r   r/   r   Zrefcount_testr  r  r	   r	   r	   r
   r  	  s   r  c               @   s$   e Zd ZeeddZeeddZdS )CTask_CFuture_SubclassTestsr  Nr  )r   r   r   r  r   r,   r   r/   r	   r	   r	   r
   r  	  s   r  c               @   s   e Zd ZeeddZejZdS )CTaskSubclass_PyFuture_Testsr  N)	r   r   r   r  r   r,   r   	_PyFuturer/   r	   r	   r	   r
   r  	  s   r  c               @   s   e Zd ZeeddZejZdS )PyTask_CFutureSubclass_Testsr  N)	r   r   r   r  r   r/   r   _PyTaskr,   r	   r	   r	   r
   r  	  s   r  c               @   s   e Zd ZeeddZejZdS )CTask_PyFuture_Testsr  N)	r   r   r   r  r   r,   r   r  r/   r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd ZejZeeddZdS )PyTask_CFuture_Testsr  N)	r   r   r   r   r  r,   r  r   r/   r	   r	   r	   r
   r  

  s   r  c               @   s   e Zd ZejZejZdS )PyTask_PyFuture_TestsN)	r   r   r   r   r  r,   r   r  r/   r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd ZejZejZdS )PyTask_PyFuture_SubclassTestsN)	r   r   r   r   r  r,   r   r  r/   r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd Zdd ZdS )CTask_Future_Testsc                s   G dd dt j} fdd}t  | _z@|| jd | jd jd t j| | jd}| j|}W d | j  X | 	|d d S )	Nc               @   s   e Zd Zedd ZdS )z+CTask_Future_Tests.test_foobar.<locals>.Futc             S   s   t d S )N)r  )r   r	   r	   r
   rV   %
  s    z4CTask_Future_Tests.test_foobar.<locals>.Fut.get_loopN)r   r   r   propertyrV   r	   r	   r	   r
   r  $
  s   r  c                  s    I d H  dS )Nr   r	   r	   )rD   r	   r
   r-   )
  s    
z,CTask_Future_Tests.test_foobar.<locals>.coro)r*   g?r   r   )
r   r/   rE   r*   r   r\   r,   r@   r'   rR   )r   r  r-   rJ   r   r	   )rD   r
   test_foobar#
  s    
zCTask_Future_Tests.test_foobarN)r   r   r   r  r	   r	   r	   r
   r  
  s   r  c               @   sl   e Zd ZdZdZdZdZdd Zdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd ZdS )BaseTaskIntrospectionTestsNc                s`   G  fddd}| }t   | t t  | | | t |h | | d S )Nc                   s$   e Zd Ze fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLikec                s    S )Nr	   )r   )r*   r	   r
   rU   A
  s    zHBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike._loopc             S   s   dS )NFr	   )r   r	   r	   r
   rQ   E
  s    zGBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike.doneN)r   r   r   r  rU   rQ   r	   )r*   r	   r
   TaskLike@
  s   r  )r   r#  rR   r   r^  r   _register_task_unregister_task)r   r  rJ   r	   )r*   r
   test__register_task_1?
  s    
z0BaseTaskIntrospectionTests.test__register_task_1c                s`   G  fddd}| }t   | t t  | | | t |h | | d S )Nc                   s    e Zd Z fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLikec                s    S )Nr	   )r   )r*   r	   r
   rV   R
  s    zKBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.get_loopc             S   s   dS )NFr	   )r   r	   r	   r
   rQ   U
  s    zGBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.doneN)r   r   r   rV   rQ   r	   )r*   r	   r
   r  Q
  s   r  )r   r#  rR   r   r^  r   r  r  )r   r  rJ   r	   )r*   r
   test__register_task_2P
  s    
z0BaseTaskIntrospectionTests.test__register_task_2c          	      s   G  fddd}| }t   | t t  | | | t t  | t | tj	 |h W d Q R X | 
| d S )Nc                   s    e Zd Z fddZdd ZdS )zBBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLikec                s    S )Nr	   )r   )r*   r	   r
   rV   b
  s    zKBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.get_loopc             S   s   dS )NTr	   )r   r	   r	   r
   rQ   e
  s    zGBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.doneN)r   r   r   rV   rQ   r	   )r*   r	   r
   r  a
  s   r  )r   r#  rR   r   r^  r   r  r,  r-  r,   r  )r   r  rJ   r	   )r*   r
   test__register_task_3`
  s    
 z0BaseTaskIntrospectionTests.test__register_task_3c             C   sN   t  }t  }| t| | || | t|| | || d S )N)r   r#  r   r   r.  _enter_taskrT   _leave_task)r   rJ   r*   r	   r	   r
   test__enter_taskr
  s    z+BaseTaskIntrospectionTests.test__enter_taskc          	   C   sh   t  }t  }t  }| || | t | || W d Q R X | t|| | || d S )N)	r   r#  r  r]   rG   rT   r   r.  r  )r   r1  r2  r*   r	   r	   r
   test__enter_task_failurez
  s    z3BaseTaskIntrospectionTests.test__enter_task_failurec             C   s<   t  }t  }| || | || | t| d S )N)r   r#  r  r  r   r   r.  )r   rJ   r*   r	   r	   r
   test__leave_task
  s
    z+BaseTaskIntrospectionTests.test__leave_taskc          	   C   sh   t  }t  }t  }| || | t | || W d Q R X | t|| | || d S )N)	r   r#  r  r]   rG   r  rT   r   r.  )r   r1  r2  r*   r	   r	   r
   test__leave_task_failure1
  s    z4BaseTaskIntrospectionTests.test__leave_task_failure1c          	   C   sF   t  }t  }| t | || W d Q R X | t| d S )N)r   r#  r]   rG   r  r   r   r.  )r   rJ   r*   r	   r	   r
   test__leave_task_failure2
  s
    z4BaseTaskIntrospectionTests.test__leave_task_failure2c                sJ   t  }t    fdd|_| | | | | t t  d S )Nc                  s    S )Nr	   r	   )r*   r	   r
   r1   
  r2   zBBaseTaskIntrospectionTests.test__unregister_task.<locals>.<lambda>)	r   r#  rV   r  r  rR   r   r^  r   )r   rJ   r	   )r*   r
   test__unregister_task
  s    

z0BaseTaskIntrospectionTests.test__unregister_taskc             C   s2   t  }t  }| | | t|t  d S )N)r   r#  r  rR   r   r^  r   )r   rJ   r*   r	   r	   r
   $test__unregister_task_not_registered
  s    
z?BaseTaskIntrospectionTests.test__unregister_task_not_registered)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r	   r	   r
   r  9
  s   

r  c               @   s4   e Zd ZeejZeejZeej	Z
eejZdS )PyIntrospectionTestsN)r   r   r   staticmethodr   Z_py_register_taskr  Z_py_unregister_taskr  Z_py_enter_taskr  Z_py_leave_taskr  r	   r	   r	   r
   r  
  s   


r  _c_register_taskc               @   sP   e Zd Zeedr<eejZeejZ	eej
ZeejZnd Z Z	 ZZdS )CIntrospectionTestsr  N)r   r   r   hasattrr   r  r  r  Z_c_unregister_taskr  Z_c_enter_taskr  Z_c_leave_taskr  r	   r	   r	   r
   r  
  s   



r  c                   sH   e Zd Z fddZ fddZdd Zdd Zd	d
 Zdd Z  Z	S )BaseCurrentLoopTestsc                s$   t    t | _t| j d S )N)r3   r4   r   rE   r*   rW   )r   )r+   r	   r
   r4   
  s    

zBaseCurrentLoopTests.setUpc                s"   | j   td  t   d S )N)r*   r'   r   rW   r3   tearDown)r   )r+   r	   r
   r  
  s    

zBaseCurrentLoopTests.tearDownc             C   s   t d S )N)NotImplementedError)r   r-   r	   r	   r
   r.   
  s    zBaseCurrentLoopTests.new_taskc             C   s   |  tj| jd d S )N)r*   )r   r   r.  r*   )r   r	   r	   r
   !test_current_task_no_running_loop
  s    z6BaseCurrentLoopTests.test_current_task_no_running_loopc          	   C   s"   |  t t  W d Q R X d S )N)r]   rG   r   r.  )r   r	   r	   r
   *test_current_task_no_running_loop_implicit
  s    z?BaseCurrentLoopTests.test_current_task_no_running_loop_implicitc                s>    fdd}  |  j  tj jd d S )Nc                  s<     tj jd   td    t  d S )N)r*   )rT   r   r.  r*   r	   )r   rJ   r	   r
   r-   
  s    zGBaseCurrentLoopTests.test_current_task_with_implicit_loop.<locals>.coro)r*   )r.   r*   r@   r   r   r.  )r   r-   r	   )r   rJ   r
   $test_current_task_with_implicit_loop
  s    z9BaseCurrentLoopTests.test_current_task_with_implicit_loop)
r   r   r   r4   r  r.   r  r  r  r  r	   r	   )r+   r
   r  
  s   r  c               @   s   e Zd Zdd ZdS )PyCurrentLoopTestsc             C   s   t j|| jdS )N)r*   )r   r  r*   )r   r-   r	   r	   r
   r.   
  s    zPyCurrentLoopTests.new_taskN)r   r   r   r.   r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd Zdd ZdS )CCurrentLoopTestsc             C   s   t td|| jdS )Nr  )r*   )r  r   r*   )r   r-   r	   r	   r
   r.   
  s    zCCurrentLoopTests.new_taskN)r   r   r   r.   r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd Zdd Zdd ZdS )GenericTaskTestsc             C   s   |  ttjtj d S )N)rP   
issubclassr   r,   r/   )r   r	   r	   r
   test_future_subclass
  s    z%GenericTaskTests.test_future_subclassc             C   sR   ydd l }W n tk
r    Y n.X ydd l}W n tk
rL   | d Y nX d S )Nr   z_asyncio module is missing)
_functoolsImportError_asyncior4  )r   r  r  r	   r	   r
   test_asyncio_module_compiled
  s    z-GenericTaskTests.test_asyncio_module_compiledN)r   r   r   r  r  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)r3   r4   r5   one_looprH   rW   )r   )r+   r	   r
   r4     s    


zGatherTestsBase.setUpc             C   s   x|j rt| qW d S )N)rd  r{   r   )r   r*   r	   r	   r
   	_run_loop  s    zGatherTestsBase._run_loopc                s    fddt dD \}}}tj ||||}t }|| |d |d   j	  
|jd  |  |d   j	 ||  
| dddg d S )Nc                s   g | ]}t j jd qS ))r*   )r   r/   r  )r;   r  )r   r	   r
   r=     s    z2GatherTestsBase._check_success.<locals>.<listcomp>rQ  r   r   F)rB   r   rA   wrap_futuresr{   MockCallbackr}   r\   r  r  rR   rj  r   rQ   assert_called_once_withrS   )r   r  r   r   r   rD   cbr	   )r   r
   _check_success  s    




zGatherTestsBase._check_successc             C   s   |    | j dd d S )NF)r  )r  )r   r	   r	   r
   test_success  s    zGatherTestsBase.test_successc             C   s   | j dd d S )NT)r  )r  )r   r	   r	   r
   test_result_exception_success"  s    z-GatherTestsBase.test_result_exception_successc       	         s    fddt dD \}}}}}tj ||||| }t }|| t }|d |	|  
 j  |  ||  | | |d |  |	t  |  d S )Nc                s   g | ]}t j jd qS ))r*   )r   r/   r  )r;   r  )r   r	   r
   r=   &  s    z6GatherTestsBase.test_one_exception.<locals>.<listcomp>   r   rQ  )rB   r   rA   r  r{   r  r}   r   r\   r  r  r  rP   rQ   r  rT   r   r   rG   )	r   r   r   r   r8  r\  rD   r  r%   r	   )r   r
   test_one_exception%  s     




z"GatherTestsBase.test_one_exceptionc       	         s    fddt dD \}}}}tj ||||ddi}t }|| t }t }|	d |
| |	d   j  |  |
|   j  |  ||  | dd||g d S )Nc                s   g | ]}t j jd qS ))r*   )r   r/   r  )r;   r  )r   r	   r
   r=   8  s    z:GatherTestsBase.test_return_exceptions.<locals>.<listcomp>   r  Tr   rQ  )rB   r   rA   r  r{   r  r}   r   rG   r\   r  r  r  r   rQ   rP   r  rR   rS   )	r   r   r   r   r8  rD   r  r%   Zexc2r	   )r   r
   test_return_exceptions7  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-Ez-cs   False )PYTHONASYNCIODEBUGZPYTHONDEVMODE1s   Truez-XZdev)joinr   rR   rstrip)r   r   stsstdoutstderrr	   r	   r
   test_env_var_debugJ  s&    z"GatherTestsBase.test_env_var_debug)r   r   r   r4   r  r  r  r  r  r  r  r  r	   r	   )r+   r
   r    s   r  c               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )FutureGatherTestsc             G   s   |S )Nr	   )r   r   r	   r	   r
   r  k  s    zFutureGatherTests.wrap_futuresc             C   s   t | j | t jd  t j| }| |t j | |j| j | 	| j | 
|  | | g  t j|d| ji}| |j| j d S )Nr*   )r   rW   r  r   rA   r   r/   rT   rU   r  rP   rQ   rR   rS   rH   )r   Zseq_or_iterrD   r	   r	   r
   _check_empty_sequencen  s    
z'FutureGatherTests._check_empty_sequencec             C   s2   |  g  |  d |  t  |  td d S )Nr	   r  )r  r   iter)r   r	   r	   r
   test_constructor_empty_sequencez  s    

z1FutureGatherTests.test_constructor_empty_sequencec          	   C   sh   t j| jd}t j| jd}| t t || W d Q R X | t t j|| jd W d Q R X d S )N)r*   )r   r/   r  rH   r]   r^   rA   )r   r   r   r	   r	   r
   %test_constructor_heterogenous_futures  s    z7FutureGatherTests.test_constructor_heterogenous_futuresc                s    fddt dD }tj| } |j j   j  |  tj|d ji} |j j   j  |  d S )Nc                s   g | ]}t j jd qS ))r*   )r   r/   rH   )r;   r  )r   r	   r
   r=     s    zIFutureGatherTests.test_constructor_homogenous_futures.<locals>.<listcomp>rQ  r*   )	rB   r   rA   rT   rU   rH   r  r   rQ   )r   ZchildrenrD   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                s   g | ]}t j jd qS ))r*   )r   r/   r  )r;   r  )r   r	   r
   r=     s    z;FutureGatherTests.test_one_cancellation.<locals>.<listcomp>r  r   rQ  )rB   r   rA   r{   r  r}   r\   r   r  r  rP   rQ   r  r   r   r   r   r   r  rG   )r   r   r   r   r8  r\  rD   r  r	   )r   r
   test_one_cancellation  s     



z'FutureGatherTests.test_one_cancellationc          	      s   fddt dD \}}}}}}tj||||||dd}t }|| |d t }	||	 |	   
 j  |  |d |	  t }
||
  j|} |d tj  |d	 tj d  |d< |d	<  |d|	d dd |
g || d S )
Nc                s   g | ]}t j jd qS ))r*   )r   r/   r  )r;   r  )r   r	   r
   r=     s   zLFutureGatherTests.test_result_exception_one_cancellation.<locals>.<listcomp>   T)r  r   rQ  r   r  )rB   r   rA   r{   r  r}   r\   r   r  r   r  r  r   rQ   rG   r@   r   r   rR   r  )r   r   r   r   r8  r\  r_   rD   r  ZzdeZrter   r	   )r   r
   &test_result_exception_one_cancellation  s*    





z8FutureGatherTests.test_result_exception_one_cancellationN)
r   r   r   r  r  r  r  r	  r
  r  r	   r	   r	   r
   r  i  s   r  c                   sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )CoroutineGatherTestsc                s   t    t| j d S )N)r3   r4   r   rW   r  )r   )r+   r	   r
   r4     s    
zCoroutineGatherTests.setUpc             G   s4   g }x*|D ]"}t j|fdd}||  q
W |S )Nc             s   s
   | E d H S )Nr	   )rD   r	   r	   r
   r-     s    z/CoroutineGatherTests.wrap_futures.<locals>.coro)r   r?   r   )r   r   ZcorosrD   r-   r	   r	   r
   r    s    
z!CoroutineGatherTests.wrap_futuresc             C   s   t jdd }| }| }t ||}| |j| j | j| | j| jdd | }| }t j||| jd}| |j| j | j| d S )Nc               S   s   dS )Nrx   r	   r	   r	   r	   r
   r-     s    zBCoroutineGatherTests.test_constructor_loop_selection.<locals>.coroF)r  )r*   )	r   r?   rA   rT   rU   r  r@   rW   rH   )r   r-   Zgen1Zgen2rD   Zgen3Zgen4r   r	   r	   r
   test_constructor_loop_selection  s    z4CoroutineGatherTests.test_constructor_loop_selectionc             C   sX   t jdd }|d}t j|||d|| jd}| | j | | ddddg d S )Nc             S   s   | S )Nr	   )r   r	   r	   r
   r-     s    z<CoroutineGatherTests.test_duplicate_coroutines.<locals>.cororx   def)r*   )r   r?   rA   r  r  rR   rS   )r   r-   r   rD   r	   r	   r
   test_duplicate_coroutines  s
    z.CoroutineGatherTests.test_duplicate_coroutinesc          	      s  dt jjdt jfdd}t j| jd t j| jdd t j fdd}t j| jd}tj |  	t j
 j| W d Q R X          tj d d S )Nr   )r*   c               3   s   E d H   d7  d S )Nr   r	   r	   )r5  r  r	   r
   r     s    
z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.innerc               3   s(   t j jdE d H  d7 d S )N)r*   r>   )r   rA   r  r	   )rB  rC  gathererr5  r   r	   r
   r     s    
z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.outer)r   r/   r  r?   rL   r{   r   rP   r   r]   r   r@   r   r   rR   )r   r   r   r_   r	   )rB  rC  r  r5  r   r  r
   test_cancellation_broadcast  s$    z0CoroutineGatherTests.test_cancellation_broadcastc                s   t jdd t jjd t jjdt j fdd}t j| jd}tj  d  tj d  tj |	 t
 d S )Nc             s   s   | E d H  t dd S )Nzshould not be ignored)rG   )r_   r	   r	   r
   r     s    
z:CoroutineGatherTests.test_exception_marking.<locals>.inner)r*   c               3   s$   t j jdE d H  d S )N)r*   )r   rA   r  r	   )r   r   r   r   r	   r
   r     s    z:CoroutineGatherTests.test_exception_marking.<locals>.outer)r   r?   r/   r  rL   r{   r   r\   r   r   rG   )r   r   r_   r	   )r   r   r   r   r
   test_exception_marking  s    

z+CoroutineGatherTests.test_exception_marking)
r   r   r   r4   r  r  r  r  r  r  r	   r	   )r+   r
   r    s   		"r  c                   sb   e Zd ZdZ fddZejdddZddd	Zd
d Z	dd Z
dd Zdd Zdd Z  ZS )RunCoroutineThreadsafeTestsz/Test case for asyncio.run_coroutine_threadsafe.c                s$   t    t | _| | j d S )N)r3   r4   r   rE   r*   rW   )r   )r+   r	   r
   r4   #  s    

z!RunCoroutineThreadsafeTests.setUpFc             c   sD   t jd| jdE dH  |r"td|r<t | j  dV  || S )z"Wait 0.05 second and return a + b.g?)r*   NzFail!)r   r   r*   rG   r.  r   )r   r   r   r4  r   r	   r	   r
   r   (  s    zRunCoroutineThreadsafeTests.addNc             C   sV   | j dd||d}t|| j}|r4| j|jd z
||S | pN|  X dS )z$Run add coroutine in the event loop.r   r   )r4  r   N)	r   r   Zrun_coroutine_threadsafer*   Zcall_soon_threadsafer$   rS   rQ   r   )r   r4  r   r   advance_coror-   r`  r	   r	   r
   target3  s    
z"RunCoroutineThreadsafeTests.targetc             C   s,   | j d| j}| j |}| |d dS )z9Test coroutine submission from a thread to an event loop.NrQ  )r*   run_in_executorr  r@   rR   )r   r`  rS   r	   r	   r
   test_run_coroutine_threadsafeF  s    z9RunCoroutineThreadsafeTests.test_run_coroutine_threadsafec          	   C   sH   | j d| jd}| t}| j | W dQ R X | d|jj dS )z]Test coroutine submission from a thread to an event loop
        when an exception is raised.NTzFail!)	r*   r  r  r]   rG   r@   r  r   r   )r   r`  exc_contextr	   r	   r
   ,test_run_coroutine_threadsafe_with_exceptionL  s    zHRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_exceptionc          	      sr    fdd} j d|} tj  j | W dQ R X t j  x"t j D ]} 	|
  qXW dS )zZTest coroutine submission from a thread to an event loop
        when a timeout is raised.c                  s    j ddS )Nr   )r   )r  r	   )r   r	   r
   r1   W  r2   zXRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeout.<locals>.<lambda>N)r*   r  r]   r   r   r@   r{   r   r^  rP   rQ   )r   r	  r`  rJ   r	   )r   r
   *test_run_coroutine_threadsafe_with_timeoutT  s    zFRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeoutc          	      sB    fdd} j d|} tj  j | W dQ R X dS )z[Test coroutine submission from a tread to an event loop
        when the task is cancelled.c                  s    j ddS )NT)r   )r  r	   )r   r	   r
   r1   c  r2   zZRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_cancelled.<locals>.<lambda>N)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 |  t} j | W dQ R X  	t
|jd |j\\}}} 	|d |j dS )ziTest coroutine submission from a tread to an event loop
        when the task factory raise an exception.c             S   s   t d S )N)	NameError)r*   r-   r	   r	   r
   task_factoryl  s    zfRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.task_factoryNc                  s    j ddS )NT)r  )r  r	   )r   r	   r
   r1   p  r2   zbRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.<lambda>r   r   )r*   r  r{   r  rc  r6   r]   r  r@   rR   r   Zcall_args_listrr  r   )r   r  r:   r	  r  r*   contextr  r	   )r   r
   4test_run_coroutine_threadsafe_task_factory_exceptionh  s    zPRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception)FF)FFNF)r   r   r   __doc__r4   r   r?   r   r  r  r  r  r  r   r  r	   r	   )r+   r
   r     s   
 
r  c                   s0   e Zd Z fddZ fddZdd Z  ZS )
SleepTestsc                s"   t    t | _td  d S )N)r3   r4   r   rE   r*   rW   )r   )r+   r	   r
   r4     s    

zSleepTests.setUpc                s   | j   d | _ t   d S )N)r*   r'   r3   r  )r   )r+   r	   r
   r    s    
zSleepTests.tearDownc                sD   dfdd t j fdd}j|  d d S )Nr   c                s    | 7  d S )Nr	   )r  )rS   r	   r
   
inc_result  s    z.SleepTests.test_sleep_zero.<locals>.inc_resultc              3   sJ   j  d d tjdj ddE d H } d  |  d S )Nr   r   r   )r*   rS   )r*   r   rR   r   r   )r  )r#  rS   r   r	   r
   r-     s
    z(SleepTests.test_sleep_zero.<locals>.coro   )r   r?   r*   r@   rR   )r   r-   r	   )r#  rS   r   r
   test_sleep_zero  s
    zSleepTests.test_sleep_zero)r   r   r   r4   r  r%  r  r	   r	   )r+   r
   r"    s   r"  c                   s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )CompatibilityTestsc                s"   t    t | _td  d S )N)r3   r4   r   rE   r*   rW   )r   )r+   r	   r
   r4     s    

zCompatibilityTests.setUpc                s   | j   d | _ t   d S )N)r*   r'   r3   r  )r   )r+   r	   r
   r    s    
zCompatibilityTests.tearDownc                s0   t j fdd} j| } d| d S )Nc               3   s   t jd jdE d H  dS )Nr   )r*   rN   )r   r   r*   r	   )r   r	   r
   r-     s    z:CompatibilityTests.test_yield_from_awaitable.<locals>.cororN   )r   r?   r*   r@   rR   )r   r-   rS   r	   )r   r
   test_yield_from_awaitable  s    z,CompatibilityTests.test_yield_from_awaitablec                sR   t jdd  t jfdd fdd}j| }ddg| d S )	Nc               S   s   dS )Nok1r	   r	   r	   r	   r
   r     s    z;CompatibilityTests.test_await_old_style_coro.<locals>.coro1c               3   s   t jd jdE d H  dS )Nr   )r*   ok2)r   r   r*   r	   )r   r	   r
   r     s    z;CompatibilityTests.test_await_old_style_coro.<locals>.coro2c                  s   t j   jdI d H S )N)r*   )r   rA   r*   r	   )r   r   r   r	   r
   r     s    z;CompatibilityTests.test_await_old_style_coro.<locals>.innerr(  r)  )r   r?   r*   r@   rR   )r   r   rS   r	   )r   r   r   r
   test_await_old_style_coro  s
    z,CompatibilityTests.test_await_old_style_coroc             C   s   t d}td|dd d 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-cr  )r  )textwrapdedentr   )r   r   r	   r	   r
   test_debug_mode_interop  s    z*CompatibilityTests.test_debug_mode_interop)	r   r   r   r4   r  r'  r*  r-  r  r	   r	   )r+   r
   r&    s
   
r&  __main__)F)?r!  r  
contextlibr  r   r7   rn   r  r   ro  r+  rK  ZunittestrX  r   r   r   r   r   Ztest.test_asyncior   r{   rK   r   Ztest.support.script_helperr   r?   r   contextmanagerr   r   r   r    r)   r  r  Z
skipUnlessr  ZTestCaser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r&  r   r  r	   r	   r	   r
   <module>   s   
	                  :5

r
"fTcc:
