B
    v9a                 @   s   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 )    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   !/usr/lib/python3.7/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asyncioZBaseEventLooploopr   ZMockZ_process_eventsZ	_selectorZselectZreturn_valueZ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   Z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   r)   r#   r*   r   )r   r	   test_context_manager_with_await@   s    
z)LockTests.test_context_manager_with_awaitN)r   r   r   r+   r-   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   Z	feed_dataZfeed_eofr(   assertEqual)r   ZDATAr4   r1   r   )r3   r	   test_readlineZ   s    
zStreamReaderTests.test_readlineN)r   r   r   r7   r   r   r   r	   r.   X   s   r.   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   Ziscoroutiner   r   )r   r9   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	   r9   y   r:   z4CoroutineTests.test_iscoroutinefunction.<locals>.foo)r    r   Ziscoroutinefunction)r   r9   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   r?   c                  s     S )Nr   r   )r?   r   r	   func   s    z>CoroutineTests.test_function_returning_awaitable.<locals>.funcr>   )r   	coroutiner6   r
   r   )r   r@   coror   )r?   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 )Nr>   r   r   r   r   r	   bar   s    z5CoroutineTests.test_async_def_coroutines.<locals>.barc                  s     I d H S )Nr   r   )rD   r   r	   r9      s    z5CoroutineTests.test_async_def_coroutines.<locals>.foor>   T)r   r(   r6   	set_debug)r   r9   r1   r   )rD   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)r6   rG   rH   r   rE   r(   )r   rI   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   r>   r   r   r   r   r	   gen   s    
z0CoroutineTests.test_types_coroutine.<locals>.genc                  s     S )Nr   r   )rK   r   r	   r@      s    z1CoroutineTests.test_types_coroutine.<locals>.funcc                 s     }  | tj | I d H S )N)ZassertIsInstancetypes_GeneratorWrapper)wrapper)r@   r   r   r	   rB      s    z1CoroutineTests.test_types_coroutine.<locals>.coror>   )rL   rA   r   r(   r6   )r   rB   r1   r   )r@   rK   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   r9   )Z	get_stackr6   f_codeco_name)r;   )Tr   r   r	   r9      s    z1CoroutineTests.test_task_print_stack.<locals>.fooc                  s    t j jd  I d H  d S )N)r   )r   Zensure_futurer   r   )rT   r9   r   r   r	   runner   s    z4CoroutineTests.test_task_print_stack.<locals>.runner)r   r(   )r   rU   r   )rT   r9   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   ZTaskr   r   Zcancel)rB   t)rW   r   r   r	   rU      s    z0CoroutineTests.test_double_await.<locals>.runnerTz"coroutine is being awaited already)msg)r   rE   ZassertRaisesRuntimeErrorr(   )r   rU   r   )rW   r   r	   test_double_await   s    	
z CoroutineTests.test_double_awaitN)r   r   r   r<   r=   rC   rF   rJ   rO   rV   r[   r   r   r   r	   r8   k   s   	r8   __main__)rG   rL   Zunittestr#   r   r   r   Ztest.test_asyncior   Z
test_utilsr   ZTestCaser   r   r.   r8   r   mainr   r   r   r	   <module>   s   0m