B
    18\                @   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	   `/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_asyncio/test_tasks.pycoroutine_function   s    r   c             c   s*   t j}|j}z| |_d V  W d ||_X d S )N)asyncior   _DEBUG)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]e^_ddd Z`e^_ddd Zadd Zbdd Zcdd Zddd ZeddÄ Zfddń ZgddǄ ZhddɄ Zie^_ddd˄ Zjdd̈́ Zkddτ Zlddф Zmddӄ ZnddՄ Zoddׄ Zpddل Zqddۄ Zr  ZsS )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)r1   r+   r	   )r   r	   r
   <lambda>`       z%BaseTaskTests.setUp.<locals>.<lambda>)supersetUpnew_test_loopr+   set_task_factoryr/   create_future)r   )r,   )r   r
   r5   \   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)gccollect)r   r	   r	   r
   __del__d   s    z9BaseTaskTests.test_task_del_collect.<locals>.Evil.__del__N)r   r   r    r;   r	   r	   r	   r
   Evilc   s   r<   c                  s     S )Nr	   r	   )r<   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	   )r<   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_loopr1   assertRaisesRegexRuntimeErrorr+   rC   r(   )r   
other_looprG   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+   rI   rJ   rC   )r   rN   r	   )rM   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>.notmuchrQ   )r   rB   r/   r+   rC   
assertTruedoneassertEqualresultassertIs_loopget_looprH   set_event_loopr(   )r   rR   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 )NrQ   r	   r	   r	   r	   r
   rR      s    z;BaseTaskTests.test_ensure_future_coroutine.<locals>.notmuch)r+   rQ   )r   rB   rO   r+   rC   rS   rT   rU   rV   rW   rX   rH   rZ   r(   )r   rR   r[   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+   )r1   r+   
set_resultr   rO   rC   rS   rT   rU   rV   rW   rH   rZ   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 )NrQ   r	   r	   r	   r	   r
   rR      s    z6BaseTaskTests.test_ensure_future_task.<locals>.notmuchrQ   )r+   )r   rB   r/   r+   rO   rC   rS   rT   rU   rV   rW   rH   rZ   r`   ra   r(   )r   rR   Zt_origr[   r+   r	   r	   r
   test_ensure_future_task   s    

z%BaseTaskTests.test_ensure_future_taskc             C   s`   G dd d}t 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    re   r)   r	   r	   r	   r
   Aw   s   rf   c               S   s   dS )NrQ   r	   r	   r	   r	   r
   r.      s    z8BaseTaskTests.test_ensure_future_awaitable.<locals>.coro)r+   rQ   )r   rB   rH   rZ   rO   rC   rV   AssertionError)r   rf   r.   r+   rG   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 )NrQ   )r`   	TypeErrorr   rO   )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   rl   )rm   filezfoo\(\) running)
	get_stackrU   f_codeco_nameioStringIOprint_stackseekreadassertRegex)rb   rn   tb)Tr   r	   r
   rk      s    
z)BaseTaskTests.test_get_stack.<locals>.barc                  s    t j jd  I d H  d S )N)r+   )r   rO   r+   r	   )ry   rl   r   r	   r
   runner  s    z,BaseTaskTests.test_get_stack.<locals>.runner)r+   rC   )r   rz   r	   )ry   rk   rl   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
   rR     s    
z-BaseTaskTests.test_task_repr.<locals>.notmuchrR   z#\w+.test_task_repr.<locals>.notmuchz%s:%srunningT)r   z <Task pending %s cb=[<Dummy>()]>z#<Task cancelling %s cb=[<Dummy>()]>rT   z<Task cancelled %s>z<Task finished %s result='abc'>)r+   	set_debugr   rB   rU   r   rw   r    r   
test_utilsget_function_sourcer/   add_done_callbackr   r   _source_tracebackreprcancelr`   CancelledErrorrC   )	r   rR   filenamelinenor   gencoro_qualnamer[   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
   rR   @  s    z<BaseTaskTests.test_task_repr_coro_decorator.<locals>.notmuchrR   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:%sr}   )r   z <Task pending %s cb=[<Dummy>()]>)r+   r~   r   rB   rU   r   rw   r    r   r   r   r   r   r   gi_codeco_filenameco_firstlinenor   r/   r   r   r   rC   )r   rR   r   	coro_namer   r   r   r   r.   coder[   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	   )rG   r	   r	   r
   wait_for}  s    z7BaseTaskTests.test_task_repr_wait_for.<locals>.wait_forz<Task .* wait_for=%s>)r+   r~   r1   r/   r   run_brieflyrw   r   reescaper_   rC   )r   r   rG   rM   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+   r~   r   rB   	functoolspartialcreate_task_log_destroy_pending
addCleanup_coror(   r   rw   )r   r   Zpartial_funcrM   	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  )rU   r+   rC   )r   r   r[   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
   rM     s    z'BaseTaskTests.test_cancel.<locals>.task)r6   r/   	call_soonr   r`   r   r   rC   rS   rT   	cancelledassertFalse)r   r   rM   r[   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
   rM     s    z-BaseTaskTests.test_cancel_yield.<locals>.task)r   rB   r/   r+   r   r   r   r`   r   rC   rS   rT   r   r   )r   rM   r[   r	   r	   r
   test_cancel_yield  s    zBaseTaskTests.test_cancel_yieldc          	      s   |  | j  fdd}| | j| }t| j    | tj | j	| W d Q R X | 
   | 
|  d S )Nc                  s    I d H  dS )Nr   r	   r	   )rb   r	   r
   rM     s    
z4BaseTaskTests.test_cancel_inner_future.<locals>.task)r1   r+   r/   r   r   r   r`   r   r   rC   rS   r   )r   rM   r[   r	   )rb   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	   )rb   r	   r
   rM     s    
zBBaseTaskTests.test_cancel_both_task_and_inner_future.<locals>.task)r1   r+   r/   r   r   r   r`   r   r   rC   rS   rT   r   )r   rM   r[   r	   )rb   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
   rM     s
    
z5BaseTaskTests.test_cancel_task_catching.<locals>.taskr"   )r1   r+   r/   r   r   rW   _fut_waiterr_   r   rS   r   rC   rU   r   )r   rM   r[   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
   rM     s    

z5BaseTaskTests.test_cancel_task_ignoring.<locals>.taskr"   )r1   r+   r/   r   r   rW   r   r_   r   rS   r   rC   rU   r   )r   rM   r[   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 )NrA   )r+   r   )r   rS   _must_cancelr   r   r	   )r+   r   r[   r	   r
   rM   1  s    z4BaseTaskTests.test_cancel_current_task.<locals>.task)r   rH   rZ   r/   r`   r   rC   rS   rT   r   r   r   )r   rM   r	   )r+   r   r[   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   rS   r   r	   )r   r[   r	   r
   rM   D  s    z.BaseTaskTests.test_cancel_at_end.<locals>.taskN)r   rH   rZ   rB   r/   r`   r   rC   rS   rT   r   r   r   )r   r+   rM   r	   )r   r[   r
   test_cancel_at_end?  s    
z BaseTaskTests.test_cancel_at_endc          	      s   t  fdd d    fddfdd}| t j  W d Q R X 	  	   	  d S )Nc                  s      S )N)r(   r	   )r+   r	   r
   r2   Y  r3   z8BaseTaskTests.test_cancel_awaited_task.<locals>.<lambda>c                  s    I d H  d S )Nr	   r	   )rG   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   rM   r	   r
   r.   a  s    z4BaseTaskTests.test_cancel_awaited_task.<locals>.coro)
r   rH   r   r1   r/   r`   r   rC   rS   r   )r   r.   r	   )rG   r+   r   r   r   rM   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
   rM     s
    
z;BaseTaskTests.test_stop_while_run_in_complete.<locals>.taskz+Event loop stopped before Future completed.r   g333333?)r6   r/   r`   rJ   rC   rU   str	exceptionr   rT   r   timer   r   r   )r   r   rM   r[   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+   rI   ra   _log_tracebackrC   )r   r.   rM   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>.genrT   r   )r+   )r6   r1   r_   rC   r   r   rU   rS   rT   r   r   )r   r   r+   rG   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
   rl     s    zZBaseTaskTests.test_wait_for_timeout_less_then_0_or_0_coroutine_do_not_started.<locals>.foor   )r+   )
r6   r   rB   r`   TimeoutErrorrC   r   r   r   rU   )r   r   r+   rl   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+   FrT   )r   r   r	   )foo_runningr+   r	   r
   rl     s
    zABaseTaskTests.test_wait_for_timeout_less_then_0_or_0.<locals>.foo)r+   r   F)subTestr6   r/   r`   r   r   rC   r   rS   rT   r   r   r   rU   )r   r   r   rl   rG   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+   FrT   )r   r   r	   )r   r+   r	   r
   rl     s
    z(BaseTaskTests.test_wait_for.<locals>.foog?)r+   F)r6   r/   r`   r   r   rC   r   rS   rT   r   r   r   rU   )r   r   rl   rG   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 )NrT   r	   r	   r	   r	   r
   r.   	  s    z2BaseTaskTests.test_wait_for_blocking.<locals>.coro)r   r+   rT   )r6   r   rB   rC   r   rU   )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+   rT   )r   r   r	   )r+   r	   r
   rl     s    z9BaseTaskTests.test_wait_for_with_global_loop.<locals>.foog{Gz?)r6   r   rZ   r/   r`   r   rC   r   r   r   rS   rT   r   )r   r   rl   rG   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?rQ   )r6   r1   r   r   
call_laterr_   rC   rU   )r   r   r+   rG   rM   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   rS   )r   
inner_task)r+   r   r   r	   r
   rl   B  s
     zDBaseTaskTests.test_wait_for_waits_for_task_cancellation.<locals>.foo)r   rH   r   r(   rC   )r   rl   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   rU   )r   r   waitrM   )r+   r   r	   r
   rl   W  s    z:BaseTaskTests.test_wait_for_self_cancellation.<locals>.foo)r   rH   r   r(   rC   )r   rl   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   rU   set)rT   pending)r   r   r+   r   r	   r
   rl     s    z$BaseTaskTests.test_wait.<locals>.foor"   )r6   r/   r   r   rC   rU   r   r   )r   r   rl   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   rU   r   )rT   r   )r   r   r   r	   r
   rl     s    z5BaseTaskTests.test_wait_with_global_loop.<locals>.foor"   )r6   r/   r   r   rZ   rC   rU   )r   r   r+   rl   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>.cororN   spam)r+   c             s   s   | ]}|  V  qd S )N)rV   )r>   rb   r	   r	   r
   	<genexpr>  s    z?BaseTaskTests.test_wait_duplicate_coroutines.<locals>.<genexpr>)	r   rB   r/   r+   r   rC   r   rU   r   )r   r.   crM   rT   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`   ra   r+   rC   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   )r6   r/   r   r   r   FIRST_COMPLETEDrC   rU   r   rT   rS   assertIsNonerV   r   r   advance_time)r   r   r+   r   r   rM   rT   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   rB   r/   r+   r   r   rC   rU   rS   rT   r   rV   )r   r   r   r   r   rM   rT   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   )r6   r/   r   r   rB   r   FIRST_EXCEPTIONrC   rU   r   r   r   )	r   r   r+   r   r&   r   rM   rT   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   )r6   r/   r   r   r   r   rC   rU   r   r   r   )r   r   r   r&   r   rM   rT   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>   rb   r	   r	   r
   r   W  s    zFBaseTaskTests.test_wait_with_exception.<locals>.foo.<locals>.<genexpr>r   )r   r   rU   lenr   )rT   r   errors)r   r   r+   r   r	   r
   rl   S  s
    z3BaseTaskTests.test_wait_with_exception.<locals>.foog333333?)r6   r/   r   r   rB   rC   r   r   )r   r   r   rl   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   rU   r   )rT   r   )r   r   r+   r   r	   r
   rl   p  s    z1BaseTaskTests.test_wait_with_timeout.<locals>.foog)\(?r   )	r6   r/   r   r   rC   r   r   r   r   )r   r   rl   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   )r6   r/   r   r   rC   r   rU   r   r   r   r   )r   r   r+   r   r   rT   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)valuesrb   )r   r   r   r+   r	   r
   rl     s    z,BaseTaskTests.test_as_completed.<locals>.foor   )r6   slow_callback_durationr   r   rB   rC   r/   r   r   rS   rU   )r   r   r   rl   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  rb   r$   r&   )r   r   r+   r	   r
   rl     s    

$z9BaseTaskTests.test_as_completed_with_timeout.<locals>.foor   r   )r   r   r   gQ?r   )r6   r   r   r   rC   r/   rU   r   assertIsInstancer   r   r   r   r   )r   r   rl   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   rU   )rb   r$   )r   r+   r   r	   r
   rl     s    
z@BaseTaskTests.test_as_completed_with_unused_timeout.<locals>.foo)r6   r   r   rC   r/   )r   r   rl   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   )r6   r   r   listr   rU   r   rC   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)rV   )r>   rb   r	   r	   r
   r   $  s    z=BaseTaskTests.test_as_completed_concurrent.<locals>.<genexpr>)
r6   r   r   r  r   rU   r   r   rC   r   )
r   r   r+   r   r   r	  r
  waiterrT   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  )rV   r   rb   )r.   r   r	   r
   rz   ,  s    zDBaseTaskTests.test_as_completed_duplicate_coroutines.<locals>.runnerr  r   r   )	r   rB   r/   r+   rC   rV   rU   r   r   )r   rz   rG   rV   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)r6   r   rB   r/   rC   rS   rT   rU   rV   r   r   )r   r   r   r[   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	   )delaycallbackr   )handleorig_call_laterr	   r
   r   `  s    z3BaseTaskTests.test_sleep_cancel.<locals>.call_later)r6   r/   r   r   r   r   r   r   
_cancelledr   rS   )r   r   r+   r[   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?)r6   r   rB   rU   rC   r   r   )r   r   r  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	   )rG   r	   r
   r.     s    z:BaseTaskTests.test_task_cancel_waiter_future.<locals>.coro)r1   r+   r   rB   r/   r   r   rW   r   r   r`   r   rC   r   rS   r   )r   r.   rM   r	   )rG   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
   rR     s    z4BaseTaskTests.test_task_set_methods.<locals>.notmuchznot support set_resultrQ   znot support set_exceptionr^   )r   rB   r/   r+   rI   rJ   r_   set_exceptionra   rU   rC   )r   rR   r   rM   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
   rR     s    z/BaseTaskTests.test_step_result.<locals>.notmuch)r   rB   r`   rJ   r+   rC   )r   rR   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_addedr4   re   )r   r   kwds)r,   r	   r
   re     s    z;BaseTaskTests.test_step_result_future.<locals>.Fut.__init__c                s   d| _ t j|| d S )NT)r   r4   r   )r   r   kwargs)r,   r	   r
   r     s    zDBaseTaskTests.test_step_result_future.<locals>.Fut.add_done_callback)r   r   r    re   r   __classcell__r	   r	   )r,   r
   Fut  s   r$  )r+   c               3   s    E d H d S )Nr	   r	   )rG   rV   r	   r
   wait_for_future  s    z>BaseTaskTests.test_step_result_future.<locals>.wait_for_future)r   r0   r+   rB   r/   r   r   rS   r   objectr_   rW   rT   r   rV   )r   r$  r%  r[   r   r	   )rG   rV   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)r6   r   rB   BaseExceptionr/   r   r   r   r   rT   r`   rS   r   rW   r   )r   r   r)  rM   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   iscoroutinefunctionrB   rS   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	   )rG   r	   r
   r%    s    z?BaseTaskTests.test_yield_vs_yield_from.<locals>.wait_for_future)	r1   r+   r   rB   r`   rJ   rC   r   rT   )r   r%  rM   r	   )rG   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   rB   r`   rJ   r+   rC   )r   r%  rM   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 )NrN   r	   r	   r	   r	   r
   r   ,  s    z;BaseTaskTests.test_coroutine_non_gen_function.<locals>.funcrN   )r   rB   rS   r/  iscoroutiner+   rC   rU   )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	   )rG   r	   r
   r   ;  s    zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.funcc                  s     d d S )NrN   )r_   r	   )rG   r	   r
   r.   ?  s    zIBaseTaskTests.test_coroutine_non_gen_function_return_future.<locals>.cororN   )	r1   r+   r   rB   r/   rC   rU   r   rV   )r   r   r.   t1t2r   r	   )rG   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PendingDeprecationWarningrW   current_taskr   rZ   )r+   )r-   r   rM   r	   r
   r.   P  s    
z8BaseTaskTests.test_current_task_deprecated.<locals>.coro)	r,   r-   r9  r:  r   r;  r+   r/   rC   )r   r.   r	   )r-   r   rM   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+   )rW   r   r;  )r+   )r   rM   r	   r
   r.   f  s    z-BaseTaskTests.test_current_task.<locals>.coro)r   r   r;  r+   r/   rC   )r   r.   r	   )r   rM   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)rS   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)rS   r   r;  r_   )r+   )r   r   r   task2r	   r
   r   |  s    

zFBaseTaskTests.test_current_task_with_interleaving_tasks.<locals>.coro2)r   r   r;  r+   r1   r/   rC   r   )r   r   r   r	   )r   r   r   r>  r?  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 )NrA   r   )r   r   r	   )r   rB  r	   r
   r     s
    z<BaseTaskTests.test_yield_future_passes_cancel.<locals>.outer)r+   e   )r1   r+   r   rO   r   r   r   rC   rU   rS   r   )r   r   rb   r	   )r   rB  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	   )rB  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+   rA   )r   r   r+   )dp)r   rB  r   r	   r
   r     s    zCBaseTaskTests.test_yield_wait_does_not_shield_cancel.<locals>.outer)r+   r   )r1   r+   r   rO   r   r   r   r`   r   rC   r_   rU   )r   r   rb   r	   )r   rB  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"   )r1   r+   r   shieldr_   rC   rU   )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   )
r1   r+   r   rH  r   r   rJ   r  rW   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)	r1   r+   r   rH  r   r   r   rS   r   )r   r   r   r	   r	   r
   test_shield_cancel  s    
z BaseTaskTests.test_shield_cancelc             C   s8   |  | j}|d | jt|}| |d d S )Nr"   )r1   r+   r_   rC   r   rH  rU   )r   rG   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	   )rB  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+   rA   )r   rH  r+   r	   )r   rB  r   r	   r
   r     s    z/BaseTaskTests.test_shield_effect.<locals>.outer)r+   r   )r1   r+   r   rO   r   r   r   r`   r   rC   r_   rU   )r   r   rb   r	   )r   rB  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   )r1   r+   r   rD   rH  r   r   r   rS   r   r_   rU   rV   )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   )r1   r+   r   rH  rD   r   r   r   r  r   r   rS   r   r_   )r   rN  rO  r   r   rP  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+   )	r1   r+   r`   ri   rC   r   r   r   r(   )r   rG   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+   )
r1   r+   r`   ri   rC   r   r   r   r(   ra   )r   rG   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)rS   
gi_runningr	   )rG   r   r   r	   r
   r.   9  s    zKBaseTaskTests.test_corowrapper_mocks_generator.<locals>.check.<locals>.coro)r   rB   r1   r+   r_   rS   r4  r  gi_frametypes	FrameTyper   rU  r   CodeTyperC   r   )r.   )r   )rG   r   r
   check5  s    
z=BaseTaskTests.test_corowrapper_mocks_generator.<locals>.checkFT)r   )r   rZ  r	   )r   r
    test_corowrapper_mocks_generator3  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	   )r7  r	   r
   r6  \  s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t1c              3   s(      j}   j|  | E d H S )N)r1   r+   r/   )rb   )r   t3r	   r
   r7  `  s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t2c             S   s   |  d d S )N)r   r      )r_   )rb   r	   r	   r
   r\  f  s    z5BaseTaskTests.test_yield_from_corowrapper.<locals>.t3)r   r   r]  )r   r   rB   r/   r+   rC   rU   )r   r6  rM   valr	   )r   r7  r\  r
   test_yield_from_corowrapperZ  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
   rl   o  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   rg   )r  cwex)rl   r	   r
   calls  s    
z<BaseTaskTests.test_yield_from_corowrapper_send.<locals>.call)r   r   r   )rU   )r   rc  r	   )rl   r
    test_yield_from_corowrapper_sendn  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
   rl     r3   z3BaseTaskTests.test_corowrapper_weakref.<locals>.foora  )weakrefWeakValueDictionaryr   r   r`  r   )r   wdrl   ra  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
   rl     s    
z1BaseTaskTests.test_corowrapper_throw.<locals>.foorl   )rl   )
ri  r   r   r`  r%   rW   r'   r  rU   r   )r   rl   r   ra  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)r9  r:  	all_tasksr+   rg   r	   )r-   r   r[   r	   r
   r.     s    z5BaseTaskTests.test_all_tasks_deprecated.<locals>.coro)r,   r-   r/   r+   rC   )r   r.   r	   )r-   r   r[   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)r1   ri  )r+   future)r   r	   r
   kill_me  s    

z>BaseTaskTests.test_log_destroyed_pending_task.<locals>.kill_meT)r+   r   ro  z%Task was destroyed but it is pending!)messagerM   r   )r,   r-   r   rB   r   r0  r+   r~   set_exception_handlerrO   rU   rm  rZ   r9  r:  	_run_oncer   _readyrV  f_localsr   r   
gc_collectr   assert_called_withANY
reset_mock)r   r-   rp  mock_handlerr.   rM   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)ri   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   )rM   )r.   r+   r   r	   r
   rz     s    zDBaseTaskTests.test_tb_logger_not_called_after_cancel.<locals>.runner)r   rH   rZ   rB   rC   r   errorcalled)r   m_logrz   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   rB   __file__sys	_getframef_linenor   rv  rS   r|  r}  	call_argsr   r   r   r   r    rw   compileDOTALL)	r   r~  r  Ztb_filename	tb_linenorq  Zfunc_filenameZfunc_lineno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   rB   )r  r	   r	   r
   
outer_coro  s    zUBaseTaskTests.test_return_coroutine_from_coroutine.<locals>.check.<locals>.outer_coror   )r   rB   r+   rC   rU   )r  rV   )r   r	   r
   rZ    s    zABaseTaskTests.test_return_coroutine_from_coroutine.<locals>.checkFNT)r   )r   rZ  r	   )r   r
   $test_return_coroutine_from_coroutine  s
    

z2BaseTaskTests.test_return_coroutine_from_coroutinec             C   sh   | j d | | j t }t jd }| |jt	 | 
|jd d d t|df | j | d S )NTr   r]  test_task_source_traceback)r+   r~   r/   r   r  r  r  r  r   r  rU   r  rC   )r   rM   r   r	   r	   r
   r  -  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)r1   )rG   )r+   r   r	   r
   blocking_coroutine=  s    
z?BaseTaskTests._test_cancel_wait_for.<locals>.blocking_coroutine)r+   )r   rH   r   r(   rB   r   r   r   r   r`   r   rC   rS   r   )r   r   r  rM   r   r	   )r+   r   r
   _test_cancel_wait_for9  s    
z#BaseTaskTests._test_cancel_wait_forc             C   s   |  d  d S )N)r  )r   r	   r	   r
   test_cancel_blocking_wait_forN  s    z+BaseTaskTests.test_cancel_blocking_wait_forc             C   s   |  d d S )Ng      N@)r  )r   r	   r	   r
   test_cancel_wait_forQ  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	   )rG   r	   r
   
child_coro]  s    z6BaseTaskTests.test_cancel_gather_1.<locals>.child_coro)r+   Nc                s      d S )N)r   )r?   )cancel_resultgather_taskr	   r
   cancelling_callbackc  s    z?BaseTaskTests.test_cancel_gather_1.<locals>.cancelling_callbackr"   F)r   rH   r   r(   r1   rD   rO   r   r_   rC   rU   r   r   rV   )r   r+   r  Zgather_futurer  r	   )r  rG   r  r
   test_cancel_gather_1T  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   rD   r   )r   )r+   r	   r
   rN   v  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   rA  )Zqwe)r+   r   rN   r	   r
   main  s    z0BaseTaskTests.test_cancel_gather_2.<locals>.main)r   rH   r   r(   rC   )r   r  r	   )r+   r   rN   r
   test_cancel_gather_2r  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
   rl     s    z3BaseTaskTests.test_exception_traceback.<locals>.fooc              3   s*    j  } d V  |  j d S )N)r/   r+   assertIsNotNoner   __traceback__)rM   )rl   r   r	   r
   r    s    z4BaseTaskTests.test_exception_traceback.<locals>.main)r   rB   r+   rC   )r   r  r	   )rl   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)ra   )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   rB   r   r|  r}  r`   ra   r/   r(   rS   r  assertInrU   rm  r   )r   r~  r   r.   r   rq  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   )rI   ri   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   rB   r/   r+   r  r-   rC   )r   r.   rM   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-   rC   )r   r.   rM   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-   rU   rC   )r   rM   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-   rU   )rM   r   )r   r   r	   r
   r.     s    
z1BaseTaskTests.test_bare_create_task.<locals>.coro)r+   rC   )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   rU   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)rU   r  r/   r   )Zsubtask)r  r+   r   r  r	   r
   r    s    

z*BaseTaskTests.test_context_1.<locals>.main)contextvars
ContextVarr   rH   r/   rC   r(   )r   r  rM   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   )rG   )r  r	   r
   fut_on_done	  s    z?BaseTaskTests.test_context_2.<locals>.main.<locals>.fut_on_doner  r   r  r]  -gMbP?)r+   )
rU   r  rE   r1   r   r   r   r_   r   r   )r  jrG   i)r  r+   r   r	   r
   r  	  s    


z*BaseTaskTests.test_context_2.<locals>.main)	r  r  r   rH   r/   rC   r(   rU   r  )r   r  rM   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+   )rE   r   r   r   randomuniformrU   r  )numr  )r  r+   r   r	   r
   r  5	  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 )NrA   r   r   r+   )rE   r   r  randintr  r   rD   )r   r  rM   )r+   r  r	   r
   r  <	  s
    z*BaseTaskTests.test_context_3.<locals>.main)r  r  r   rH   rC   r(   rU   r  )r   r  r	   )r  r+   r   r  r
   test_context_30	  s    
zBaseTaskTests.test_context_3)tr   r   r    r-   r0   r/   r1   r5   rF   rL   rP   r\   r]   rc   rd   rh   rj   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+  r1  r2  r3  r5  r8  r<  r=  r@  rD  rG  rI  rJ  rK  rL  rM  rQ  rR  rS  rT  r[  r_  rd  rh  rl  rn  r{  r   patchr  r  r  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
   r2   V	  r3   zCadd_subclass_tests.<locals>.CommonFuture.__init__.<locals>.<lambda>)collectionsdefaultdictcallsr4   re   )r   r   r"  )r,   r	   r
   re   U	  s    z1add_subclass_tests.<locals>.CommonFuture.__init__c                s    | j d  d7  < t j||S )Nr   r   )r  r4   r   )r   r   r"  )r,   r	   r
   r   Y	  s    z:add_subclass_tests.<locals>.CommonFuture.add_done_callback)r   r   r    re   r   r#  r	   r	   )r,   r
   CommonFutureT	  s   r  c               @   s   e Zd ZdS )z add_subclass_tests.<locals>.TaskN)r   r   r    r	   r	   r	   r
   r-   ]	  s   r-   c               @   s   e Zd ZdS )z"add_subclass_tests.<locals>.FutureN)r   r   r    r	   r	   r	   r
   r0   `	  s   r0   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	   )rG   r	   r
   r2   g	  r3   zYadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.func.<locals>.<lambda>)r+   r   r	   )rG   r   r	   r
   r   f	  s    zGadd_subclass_tests.<locals>.test_subclasses_ctask_cfuture.<locals>.funcr   r   r   )r0   r+   r-   rC   rU   dictr  )r   r   rM   rV   r	   )rG   r   r
   test_subclasses_ctask_cfuturec	  s    
z9add_subclass_tests.<locals>.test_subclasses_ctask_cfuture)r-   r0   r  r  )clsZBaseTaskZ
BaseFuturer  r-   r0   r  r	   r	   r
   add_subclass_testsM	  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
   rl   	  s    z@SetMethodsTest.test_set_result_causes_invalid_state.<locals>.foor   r   r   zstep\(\): already done)typer0   r   r0  r+   call_exception_handlerr/   r_   rU   rC   assert_called_oncer  rI   r   InvalidStateErrorr(   )r   r0   exc_handlerrl   r.   rM   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
   rl   	  s    zCSetMethodsTest.test_set_exception_causes_invalid_state.<locals>.foor   r   zstep\(\): already done)ri  r  r0   r   r0  r+   r  r/   r  r`   rC   r  r  rI   r   r  r(   )r   r  r0   r  rl   r.   rM   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>.cororA   )r+   r   r   )delta)r   get_attributer  r   rB   r/   r+   rC   rE   re   r   )r   r  r.   rM   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   rB   r/   r+   rC   r`   AttributeErrorr   )r   r.   rM   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   r0   r   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   r0   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   	_PyFuturer0   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   r0   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  r0   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   r0   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  r0   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  r0   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
   rY   
  s    z4CTask_Future_Tests.test_foobar.<locals>.Fut.get_loopN)r   r   r    propertyrY   r	   r	   r	   r
   r$  
  s   r$  c                  s    I d H  dS )Nr   r	   r	   )rG   r	   r
   r.    
  s    
z,CTask_Future_Tests.test_foobar.<locals>.coro)r+   g?r   r   )
r   r0   rH   r+   r   r_   r-   rC   r(   rU   )r   r$  r.   rM   r   r	   )rG   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
   rX   8
  s    zHBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike._loopc             S   s   dS )NFr	   )r   r	   r	   r
   rT   <
  s    zGBaseTaskIntrospectionTests.test__register_task_1.<locals>.TaskLike.doneN)r   r   r    r  rX   rT   r	   )r+   r	   r
   TaskLike7
  s   r  )r   r0  rU   r   rm  r   _register_task_unregister_task)r   r  rM   r	   )r+   r
   test__register_task_16
  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
   rY   I
  s    zKBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.get_loopc             S   s   dS )NFr	   )r   r	   r	   r
   rT   L
  s    zGBaseTaskIntrospectionTests.test__register_task_2.<locals>.TaskLike.doneN)r   r   r    rY   rT   r	   )r+   r	   r
   r  H
  s   r  )r   r0  rU   r   rm  r   r  r  )r   r  rM   r	   )r+   r
   test__register_task_2G
  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
   rY   Y
  s    zKBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.get_loopc             S   s   dS )NTr	   )r   r	   r	   r
   rT   \
  s    zGBaseTaskIntrospectionTests.test__register_task_3.<locals>.TaskLike.doneN)r   r   r    rY   rT   r	   )r+   r	   r
   r  X
  s   r  )r   r0  rU   r   rm  r   r  r9  r:  r-   r  )r   r  rM   r	   )r+   r
   test__register_task_3W
  s    
 z0BaseTaskIntrospectionTests.test__register_task_3c             C   sN   t  }t  }| t| | || | t|| | || d S )N)r   r0  r   r   r;  _enter_taskrW   _leave_task)r   rM   r+   r	   r	   r
   test__enter_taski
  s    z+BaseTaskIntrospectionTests.test__enter_taskc          	   C   sh   t  }t  }t  }| || | t | || W d Q R X | t|| | || d S )N)	r   r0  r  r`   rJ   rW   r   r;  r  )r   r>  r?  r+   r	   r	   r
   test__enter_task_failureq
  s    z3BaseTaskIntrospectionTests.test__enter_task_failurec             C   s<   t  }t  }| || | || | t| d S )N)r   r0  r  r  r   r   r;  )r   rM   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   r0  r  r`   rJ   r  rW   r   r;  )r   r>  r?  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   r0  r`   rJ   r  r   r   r;  )r   rM   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
   r2   
  r3   zBBaseTaskIntrospectionTests.test__unregister_task.<locals>.<lambda>)	r   r0  rY   r  r  rU   r   rm  r   )r   rM   r	   )r+   r
   test__unregister_task
  s    

z0BaseTaskIntrospectionTests.test__unregister_taskc             C   s2   t  }t  }| | | t|t  d S )N)r   r0  r  rU   r   rm  r   )r   rM   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  0
  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   _py_register_taskr  _py_unregister_taskr  _py_enter_taskr  _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  _c_unregister_taskr  _c_enter_taskr  _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)r4   r5   r   rH   r+   rZ   )r   )r,   r	   r
   r5   
  s    

zBaseCurrentLoopTests.setUpc                s"   | j   td  t   d S )N)r+   r(   r   rZ   r4   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`   rJ   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+   )rW   r   r;  r+   r	   )r   rM   r	   r
   r.   
  s    zGBaseCurrentLoopTests.test_current_task_with_implicit_loop.<locals>.coro)r+   )r/   r+   rC   r   r   r;  )r   r.   r	   )r   rM   r
   $test_current_task_with_implicit_loop
  s    z9BaseCurrentLoopTests.test_current_task_with_implicit_loop)
r   r   r    r5   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)rS   
issubclassr   r-   r0   )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_asynciorA  )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)r4   r5   r6   one_looprK   rZ   )r   )r,   r	   r
   r5   
  s    


zGatherTestsBase.setUpc             C   s   x|j rt| qW d S )N)rt  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   r0   r  )r>   r  )r   r	   r
   r@     s    z2GatherTestsBase._check_success.<locals>.<listcomp>r]  r   r   F)rE   r   rD   wrap_futuresr   MockCallbackr   r_   r  r  rU   r}  r   rT   assert_called_once_withrV   )r   r"  r   r   r   rG   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   r0   r  )r>   r  )r   r	   r
   r@     s    z6GatherTestsBase.test_one_exception.<locals>.<listcomp>   r   r]  )rE   r   rD   r  r   r  r   r   r_   r  r  r  rS   rT   r  rW   r   r   rJ   )	r   r   r   r   rE  rk  rG   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   r0   r  )r>   r  )r   r	   r
   r@   /  s    z:GatherTestsBase.test_return_exceptions.<locals>.<listcomp>   r  Tr   r]  )rE   r   rD   r  r   r  r   r   rJ   r_   r  r  r  r   rT   rS   r  rU   rV   )	r   r   r   r   rE  rG   r  r&   Zexc2r	   )r   r
   test_return_exceptions.  s"    





z&GatherTestsBase.test_return_exceptionsc             C   s   d d}tdd|\}}}| | d td|ddd\}}}| | d td|ddd\}}}| | d	 tdd|ddd\}}}| | d tdd
dd|\}}}| | d	 d S )N
)zimport asyncio.coroutinesz print(asyncio.coroutines._DEBUG)z-Ez-cs   False )PYTHONASYNCIODEBUGPYTHONDEVMODE1s   Truez-Xdev)joinr   rU   rstrip)r   r   stsstdoutstderrr	   r	   r
   test_env_var_debugA  s&    z"GatherTestsBase.test_env_var_debug)r   r   r    r5   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  b  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   rZ   r  r   rD   r  r0   rW   rX   r  rS   rT   rU   rV   rK   )r   Zseq_or_iterrG   r	   r	   r
   _check_empty_sequencee  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_sequenceq  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   r0   r  rK   r`   ra   rD   )r   r   r   r	   r	   r
   %test_constructor_heterogenous_futuresw  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   r0   rK   )r>   r  )r   r	   r
   r@     s    zIFutureGatherTests.test_constructor_homogenous_futures.<locals>.<listcomp>r]  r+   )	rE   r   rD   rW   rX   rK   r  r   rT   )r   childrenrG   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   r0   r  )r>   r  )r   r	   r
   r@     s    z;FutureGatherTests.test_one_cancellation.<locals>.<listcomp>r  r   r]  )rE   r   rD   r   r  r   r_   r   r  r  rS   rT   r  r   r   r  r   r   r  rJ   )r   r   r   r   rE  rk  rG   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   r0   r  )r>   r  )r   r	   r
   r@     s   zLFutureGatherTests.test_result_exception_one_cancellation.<locals>.<listcomp>   T)r  r   r]  r   r  )rE   r   rD   r   r  r   r_   r   r  r   r  r  r   rT   rJ   rC   r  r   rU   r  )r   r   r   r   rE  rk  rb   rG   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/  r1  r	   r	   r	   r
   r(  `  s   r(  c                   sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )CoroutineGatherTestsc                s   t    t| j d S )N)r4   r5   r   rZ   r  )r   )r,   r	   r
   r5     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	   )rG   r	   r	   r
   r.     s    z/CoroutineGatherTests.wrap_futures.<locals>.coro)r   rB   r  )r   r   ZcorosrG   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 )Nr|   r	   r	   r	   r	   r
   r.     s    zBCoroutineGatherTests.test_constructor_loop_selection.<locals>.coroF)r  )r+   )	r   rB   rD   rW   rX   r  rC   rZ   rK   )r   r.   Zgen1Zgen2rG   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>.coror|   def)r+   )r   rB   rD   r  r  rU   rV   )r   r.   r   rG   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	   )rB  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+   rA   )r   rD   r  r	   )rN  rO  gathererrB  r   r	   r
   r     s    
z?CoroutineGatherTests.test_cancellation_broadcast.<locals>.outer)r   r0   r  rB   rO   r   r   rS   r   r`   r   rC   r   r   rU   )r   r   r   rb   r	   )rN  rO  r6  rB  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)rJ   )rb   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   rD   r  r	   )r   r   r   r   r	   r
   r   
  s    z:CoroutineGatherTests.test_exception_marking.<locals>.outer)r   rB   r0   r  rO   r   r   r_   r  r   rJ   )r   r   rb   r	   )r   r   r   r   r
   test_exception_marking  s    

z+CoroutineGatherTests.test_exception_marking)
r   r   r    r5   r  r3  r5  r7  r8  r#  r	   r	   )r,   r
   r2    s   		"r2  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)r4   r5   r   rH   r+   rZ   )r   )r,   r	   r
   r5     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+   rJ   r;  r   )r   r   r   rA  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   )rA  r   N)	r   r   run_coroutine_threadsafer+   call_soon_threadsafer%   rV   rT   r   )r   rA  r   r   advance_coror.   ro  r	   r	   r
   target*  s    
z"RunCoroutineThreadsafeTests.targetc             C   s,   | j d| j}| j |}| |d dS )z9Test coroutine submission from a thread to an event loop.Nr]  )r+   run_in_executorr=  rC   rU   )r   ro  rV   r	   r	   r
   test_run_coroutine_threadsafe=  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`   rJ   rC   r  r   r   )r   ro  exc_contextr	   r	   r
   ,test_run_coroutine_threadsafe_with_exceptionC  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
   r2   N  r3   zXRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_with_timeout.<locals>.<lambda>N)r+   r>  r`   r   r   rC   r   r   rm  rS   rT   )r   r  ro  rM   r	   )r   r
   *test_run_coroutine_threadsafe_with_timeoutK  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
   r2   Z  r3   zZRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_cancelled.<locals>.<lambda>N)r+   r>  r`   r   r   rC   )r   r  ro  r	   )r   r
   ,test_run_coroutine_threadsafe_task_cancelledW  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_factoryc  s    zfRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.task_factoryNc                  s    j ddS )NT)r<  )r=  r	   )r   r	   r
   r2   g  r3   zbRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception.<locals>.<lambda>r   r   )r+   r>  r   r  rr  r7   r`   rD  rC   rU   r   call_args_listr  r   )r   rE  r=   r  r@  r+   contextr"  r	   )r   r
   4test_run_coroutine_threadsafe_task_factory_exception_  s    zPRunCoroutineThreadsafeTests.test_run_coroutine_threadsafe_task_factory_exception)FF)FFNF)r   r   r    __doc__r5   r   rB   r   r=  r?  rA  rB  rC  rH  r#  r	   r	   )r,   r
   r9    s   
 
r9  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)r4   r5   r   rH   r+   rZ   )r   )r,   r	   r
   r5   {  s    

zSleepTests.setUpc                s   | j   d | _ t   d S )N)r+   r(   r4   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  )rV   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+   rV   )r+   r   rU   r   r   )r  )rK  rV   r   r	   r
   r.     s
    z(SleepTests.test_sleep_zero.<locals>.coro   )r   rB   r+   rC   rU   )r   r.   r	   )rK  rV   r   r
   test_sleep_zero  s
    zSleepTests.test_sleep_zero)r   r   r    r5   r  rM  r#  r	   r	   )r,   r
   rJ  z  s   rJ  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)r4   r5   r   rH   r+   rZ   )r   )r,   r	   r
   r5     s    

zCompatibilityTests.setUpc                s   | j   d | _ t   d S )N)r+   r(   r4   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+   rQ   )r   r   r+   r	   )r   r	   r
   r.     s    z:CompatibilityTests.test_yield_from_awaitable.<locals>.cororQ   )r   rB   r+   rC   rU   )r   r.   rV   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   rD   r+   r	   )r   r   r   r	   r
   r     s    z;CompatibilityTests.test_await_old_style_coro.<locals>.innerrP  rQ  )r   rB   r+   rC   rU   )r   r   rV   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    r5   r  rO  rR  rU  r#  r	   r	   )r,   r
   rN    s
   
rN  __main__)F)?rI  r  
contextlibr  r   r9   rr   r  r   r  rS  rW  unittestre  r   r   r   r   r   Ztest.test_asyncior   r   rN   r   test.support.script_helperr   rB   r   contextmanagerr   r   r   r!   r*   r  r  
skipUnlessr  TestCaser  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r2  r9  rJ  rN  r   r  r	   r	   r	   r
   <module>   s   
	                  :5

r
"fTcc:
