B
    H/\W                 @   s  d dl mZmZmZ d dlZd dlZd dlmZmZ d dl	m
Z d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ee ZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd dejZG dd dej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jZ!G d!d" d"e!Z"G d#d$ d$e!Z#G d%d& d&e!Z$G d'd( d(ejZ%[[e&d)kre'  dS )*    )absolute_importprint_functiondivisionN)EventAsyncResult)xrange)AbstractGenericGetTestCase)AbstractGenericWaitTestCase)
SMALL_TICK)SMALL_TICK_MAX_ADJc               @   s   e Zd Zdd Zdd ZdS )TestEventWaitc             C   s   t  j|d d S )N)timeout)r   wait)selfr    r   7lib/python3.7/site-packages/gevent/tests/test__event.pyr      s    zTestEventWait.waitc             C   s   t t  d S )N)strr   )r   r   r   r   
test_cover   s    zTestEventWait.test_coverN)__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S )TestWaitEventc             C   s   t jt g|d d S )N)r   )geventr   r   )r   r   r   r   r   r      s    zTestWaitEvent.waitc                s4   t    fdd fdd}t|  d S )Nc                  s       d S )N)setr   )eventr   r   setter(   s    z2TestWaitEvent.test_set_during_wait.<locals>.setterc                 sv   t }   }|    |         t j fdd}    | d S )Ng{Gz?)r   )	r   spawnr   
assertTruereadyjoinclearassertFalseZassertNotIn)sZreso)r   r   r   r   r   waiter+   s    

z2TestWaitEvent.test_set_during_wait.<locals>.waiter)r   r   r   r   )r   r$   r   )r   r   r   r   test_set_during_wait!   s    z"TestWaitEvent.test_set_during_waitN)r   r   r   r   r%   r   r   r   r   r      s   r   c               @   s   e Zd Zdd ZdS )TestAsyncResultWaitc             C   s   t  j|d d S )N)r   )r   r   )r   r   r   r   r   r   E   s    zTestAsyncResultWait.waitN)r   r   r   r   r   r   r   r   r&   C   s   r&   c               @   s   e Zd Zdd ZdS )TestWaitAsyncResultc             C   s   t jt g|d d S )N)r   )r   r   r   )r   r   r   r   r   r   K   s    zTestWaitAsyncResult.waitN)r   r   r   r   r   r   r   r   r'   I   s   r'   c               @   s   e Zd Zdd ZdS )TestAsyncResultGetc             C   s   t  j|d d S )N)r   )r   get)r   r   r   r   r   r   Q   s    zTestAsyncResultGet.waitN)r   r   r   r   r   r   r   r   r(   O   s   r(   c               @   s   e Zd ZdS )MyExceptionN)r   r   r   r   r   r   r   r*   T   s   r*   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestAsyncResultc             C   s6   t  }| t|jd  |d  |d  t| d S )N)r   assertRaises	TypeErrorZrawlinkunlinkr   )r   arr   r   r   	test_linkY   s
    

zTestAsyncResult.test_linkc                sp   g t    jd  jd   fdd}t| t } | td d|fg d S )Nr   c           	      s2    t}    W d Q R X d| jf d S )Ncaught)r,   r*   r)   append	exception)exc)elogr   r   r   r$   f   s    z,TestAsyncResult.test_set_exc.<locals>.waiterr   r1   )	r   assertEqualexc_infor3   r   r   r*   Zset_exceptionsleep)r   r$   objr   )r5   r6   r   r   test_set_exc`   s    


zTestAsyncResult.test_set_excc          
   C   st   t  }td}tt|jd}| |j tj	d|2 | 
t}|  W d Q R X | ||j W d Q R X d S )NZinterruptedzhello event1r   )r   r*   r   Zspawn_laterDELAYr   Z_close_on_teardownkillTimeout	start_newr,   r)   assertIsr3   )r   Zevent1Z	timer_excgr4   r   r   r   test_setp   s    zTestAsyncResult.test_setc             C   s6   t  }t }tjt|j|d}| ||d|f  d S )N)timeout_valuez1Nobody sent anything to event2 yet it received %r)r   objectr   with_timeoutr<   r)   r@   )r   Zevent2Xresultr   r   r   test_set_with_timeout   s    z%TestAsyncResult.test_set_with_timeoutc             C   s.   t  }| jtj|jdd | tj|j d S )NF)block)r   r,   r   r>   r)   Z
get_nowait)r   r/   r   r   r   test_nonblocking_get   s    z$TestAsyncResult.test_nonblocking_getN)r   r   r   r0   r;   rB   rH   rJ   r   r   r   r   r+   W   s
   	r+   c               @   s    e Zd ZdZdd Zdd ZdS )TestAsyncResultAsLinkTargetFc             C   s   t dd }t t t   }}}|| || || | | d | | d t }t j	t
|j|d}| || d S )Nc               S   s   dS )N   r   r   r   r   r   <lambda>   s    z6TestAsyncResultAsLinkTarget.test_set.<locals>.<lambda>rL   )rC   )r   r   r   link
link_valuelink_exceptionr7   r)   rD   rE   r<   r@   )r   rA   s1s2s3rF   rG   r   r   r   rB      s    


z$TestAsyncResultAsLinkTarget.test_setc             C   s   dd }t |}t t t   }}}|| || || | tj|j	 t
 }t jt|j	|d}| || | tj|j	 d S )Nc               S   s   t dd S )Nz.TestAsyncResultAsLinkTarget.test_set_exception)	greentestExpectedExceptionr   r   r   r   func   s    z<TestAsyncResultAsLinkTarget.test_set_exception.<locals>.func)rC   )r   r   r   rN   rO   rP   r,   rT   rU   r)   rD   rE   r<   r@   )r   rV   rA   rQ   rR   rS   rF   rG   r   r   r   test_set_exception   s    



z.TestAsyncResultAsLinkTarget.test_set_exceptionN)r   r   r   Zerror_fatalrB   rW   r   r   r   r   rK      s   rK   c               @   s   e Zd ZdZdd ZdS )TestEvent_SetThenClearrL   c                sR   t    fddt| jD }td       x|D ]}|  q>W d S )Nc                s   g | ]}t  jqS r   )r   r   r   ).0i)r5   r   r   
<listcomp>   s    z/TestEvent_SetThenClear.test.<locals>.<listcomp>gMbP?)r   rangeNr   r9   r   r    r   )r   waitersZgreenletr   )r5   r   test   s    

zTestEvent_SetThenClear.testN)r   r   r   r]   r_   r   r   r   r   rX      s   rX   c               @   s   e Zd ZdZdS )TestEvent_SetThenClear100d   N)r   r   r   r]   r   r   r   r   r`      s   r`   c               @   s   e Zd ZdZdS )TestEvent_SetThenClear1000i  N)r   r   r   r]   r   r   r   r   rb      s   rb   c               @   s:   e Zd ZdZdZdZed Zdd Ze	ddd	 Z
dS )
TestWait   NrL   g      Y@c             C   sJ   xD|s
|rDt | j |r&|   t | j |r|   qW d S )N)r   r9   periodpopr   )r   eventsasyncsr   r   r   _sender   s    
zTestWait._senderz:Not all results have arrived sometimes due to timer issuesc             C   s   dd t | jD }dd t | jD }t|t| }t| j||}tj|| | j| jd}| jd krp|}nt	|| j| j
 }| jd kr| | | n$t	| j|}| | | |  | |t||t||f d S )Nc             S   s   g | ]
}t  qS r   )r   )rY   _r   r   r   r[      s    z!TestWait.test.<locals>.<listcomp>c             S   s   g | ]
}t  qS r   )r   )rY   rj   r   r   r   r[      s    )countr   )r   r]   lenr   r   ri   r   rk   r   minre   r   r   r!   r=   r7   )r   rg   rh   Zmax_lenZsenderZresultsZexpected_lenr   r   r   r_      s    

zTestWait.test)r   r   r   r]   rk   r   re   ri   rT   ZskipOnAppVeyorr_   r   r   r   r   rc      s   	rc   c               @   s   e Zd ZdZdS )TestWait_notimeoutN)r   r   r   r   r   r   r   r   rn      s   rn   c               @   s   e Zd ZdZdS )TestWait_count1rL   N)r   r   r   rk   r   r   r   r   ro      s   ro   c               @   s   e Zd ZdZdS )TestWait_count2   N)r   r   r   rk   r   r   r   r   rp      s   rp   c               @   s   e Zd Zdd ZdS )TestEventBasicsc             C   s&   t  }t|}| ||  ~~d S )N)r   weakrefrefr@   )r   r5   rr   r   r   test_weakref   s
    
zTestEventBasics.test_weakrefN)r   r   r   rv   r   r   r   r   rr      s   rr   __main__)(Z
__future__r   r   r   rs   r   Zgevent.eventr   r   Zgevent.testingZtestingrT   Zgevent.testing.sixr   Zgevent.testing.timingr   r	   r
   r   r<   r   r   r&   r'   r(   	Exceptionr*   ZTestCaser+   rK   rX   r`   rb   rc   rn   ro   rp   rr   r   mainr   r   r   r   <module>   s<   	'7#
