B
    18\                 @   s   d Z ddlZddlZddlZddlmZ ddlmZ ddlZddlm	Z
 G dd dZG dd	 d	e
jZG d
d deZG dd deZG dd deZedkre  dS )z3Tests support for new syntax introduced by PEP 492.    N)support)mock)utilsc               @   s.   e Zd Zdd Zd
ddZdd Zdd	 ZdS )FakeCoroc             C   s   d S )N )selfvaluer   r   a/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_asyncio/test_pep492.pysend   s    zFakeCoro.sendNc             C   s   d S )Nr   )r   typvaltbr   r   r	   throw   s    zFakeCoro.throwc             C   s   d S )Nr   )r   r   r   r	   close   s    zFakeCoro.closec             c   s
   d V  d S )Nr   )r   r   r   r	   	__await__   s    zFakeCoro.__await__)NN)__name__
__module____qualname__r
   r   r   r   r   r   r   r	   r      s   
r   c                   s   e Zd Z fddZ  ZS )BaseTestc                sH   t    t | _t | j_t | j_d| jjj	_
| | j d S )Nr   )supersetUpasyncioBaseEventLooploopr   Mock_process_events	_selectorselectreturn_valueset_event_loop)r   )	__class__r   r	   r      s    

zBaseTest.setUp)r   r   r   r   __classcell__r   r   )r    r	   r      s   r   c               @   s   e Zd Zdd Zdd ZdS )	LockTestsc                sp   t j jdt j jdt j jdt j jdg} fdd}x*|D ]"} j||  |  qFW d S )N)r   c          
      s   t jd jdI d H   |   | 4 I d H D} |d   |   t jd jdI d H   |   W d Q I d H R X  |   d S )Ng{Gz?)r   )r   sleepr   assertFalselockedassertIs
assertTrue)lock_lock)r   r   r	   test2   s    z7LockTests.test_context_manager_async_with.<locals>.test)	r   Lockr   	Condition	SemaphoreBoundedSemaphorerun_until_completer$   r%   )r   
primitivesr*   	primitiver   )r   r	   test_context_manager_async_with*   s    

z)LockTests.test_context_manager_async_withc                sp   t j jdt j jdt j jdt j jdg} fdd}x*|D ]"} j||  |  qFW d S )N)r   c          
      s   t jd jdI d H   |    th | I d H D} |d   |   t jd jdI d H   |   W d Q R X  |   W d Q R X d S )Ng{Gz?)r   )	r   r#   r   r$   r%   assertWarnsDeprecationWarningr&   r'   )r(   r)   )r   r   r	   r*   H   s    z7LockTests.test_context_manager_with_await.<locals>.test)	r   r+   r   r,   r-   r.   r/   r$   r%   )r   r0   r*   r1   r   )r   r	   test_context_manager_with_await@   s    
z)LockTests.test_context_manager_with_awaitN)r   r   r   r2   r5   r   r   r   r	   r"   (   s   r"   c               @   s   e Zd Zdd ZdS )StreamReaderTestsc                sT   d}t j| jd  |     fdd}| j| }| |dddg d S )Ns   line1
line2
line3)r   c           	      s>   g } x4 2 y3 d H }W n
 t k
s.X | | q
   Y  W | S )N)StopAsyncIterationappend)dataline)streamr   r	   readera   s    z/StreamReaderTests.test_readline.<locals>.readers   line1
s   line2
s   line3)r   StreamReaderr   	feed_datafeed_eofr/   assertEqual)r   DATAr<   r9   r   )r;   r	   test_readlineZ   s    
zStreamReaderTests.test_readlineN)r   r   r   rB   r   r   r   r	   r6   X   s   r6   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )CoroutineTestsc             C   sD   dd }| }z|  t| W d |  X |  tt  d S )Nc                  s   d S )Nr   r   r   r   r	   foon       z,CoroutineTests.test_iscoroutine.<locals>.foo)r'   r   iscoroutiner   r   )r   rD   fr   r   r	   test_iscoroutinem   s    
zCoroutineTests.test_iscoroutinec             C   s   dd }|  t| d S )Nc                  s   d S )Nr   r   r   r   r	   rD   y   rE   z4CoroutineTests.test_iscoroutinefunction.<locals>.foo)r'   r   iscoroutinefunction)r   rD   r   r   r	   test_iscoroutinefunctionx   s    z'CoroutineTests.test_iscoroutinefunctionc                sD   G dd d t j fdd}| }| |d d |  d S )Nc               @   s   e Zd Zdd ZdS )zCCoroutineTests.test_function_returning_awaitable.<locals>.Awaitablec             S   s   dS )N)spamr   )r   r   r   r	   r   ~   s    zMCoroutineTests.test_function_returning_awaitable.<locals>.Awaitable.__await__N)r   r   r   r   r   r   r   r	   	Awaitable}   s   rL   c                  s     S )Nr   r   )rL   r   r	   func   s    z>CoroutineTests.test_function_returning_awaitable.<locals>.funcrK   )r   	coroutiner@   r
   r   )r   rM   coror   )rL   r	   !test_function_returning_awaitable|   s
    z0CoroutineTests.test_function_returning_awaitablec                sX   dd   fdd}| j | }| |d | j d | j | }| |d d S )Nc                  s   dS )NrK   r   r   r   r   r	   bar   s    z5CoroutineTests.test_async_def_coroutines.<locals>.barc                  s     I d H S )Nr   r   )rQ   r   r	   rD      s    z5CoroutineTests.test_async_def_coroutines.<locals>.foorK   T)r   r/   r@   	set_debug)r   rD   r9   r   )rQ   r	   test_async_def_coroutines   s    z(CoroutineTests.test_async_def_coroutinesc                sJ    fdd}  t d  jd  j|    t d d S )Nc                  s     t dk d S )Nr   )r'   sys#get_coroutine_origin_tracking_depthr   )r   r   r	   start   s    zOCoroutineTests.test_debug_mode_manages_coroutine_origin_tracking.<locals>.startr   T)r@   rT   rU   r   rR   r/   )r   rV   r   )r   r	   1test_debug_mode_manages_coroutine_origin_tracking   s
    z@CoroutineTests.test_debug_mode_manages_coroutine_origin_trackingc                sF   dd t jfdd  fdd}j| }|d d S )Nc               s   s   dE d H  dS )Nr   rK   r   r   r   r   r	   gen   s    
z0CoroutineTests.test_types_coroutine.<locals>.genc                  s     S )Nr   r   )rX   r   r	   rM      s    z1CoroutineTests.test_types_coroutine.<locals>.funcc                 s     }  | tj | I d H S )N)assertIsInstancetypes_GeneratorWrapper)wrapper)rM   r   r   r	   rO      s    z1CoroutineTests.test_types_coroutine.<locals>.cororK   )rZ   rN   r   r/   r@   )r   rO   r9   r   )rM   rX   r   r	   test_types_coroutine   s
    z#CoroutineTests.test_types_coroutinec                s4   d   fdd fdd}j |  d S )Nc                 s0    j dd} z| d jjd W d d } X d S )N   )limitr   rD   )	get_stackr@   f_codeco_name)rG   )Tr   r   r	   rD      s    z1CoroutineTests.test_task_print_stack.<locals>.fooc                  s    t j jd  I d H  d S )N)r   )r   ensure_futurer   r   )rc   rD   r   r   r	   runner   s    z4CoroutineTests.test_task_print_stack.<locals>.runner)r   r/   )r   re   r   )rc   rD   r   r	   test_task_print_stack   s    z$CoroutineTests.test_task_print_stackc          	      sR   fdd  fdd}j d jtdd j |  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	   afunc   s    z/CoroutineTests.test_double_await.<locals>.afuncc                 sJ     } t j| jd}z$t jdjdI d H  | I d H  W d |  X d S )N)r   r   )r   Taskr   r#   cancel)rO   t)rg   r   r   r	   re      s    z0CoroutineTests.test_double_await.<locals>.runnerTz"coroutine is being awaited already)msg)r   rR   assertRaisesRuntimeErrorr/   )r   re   r   )rg   r   r	   test_double_await   s    	
z CoroutineTests.test_double_awaitN)r   r   r   rH   rJ   rP   rS   rW   r]   rf   rn   r   r   r   r	   rC   k   s   	rC   __main__)__doc__rT   rZ   unittestr*   r   r   r   Ztest.test_asyncior   
test_utilsr   TestCaser   r"   r6   rC   r   mainr   r   r   r	   <module>   s   0m