B
    ÐH/\{  ã               @   s|   d dl mZ d dlZd dlmZ d dlZdZejs<ed Z	ned Z	G dd„ dej
ƒZG dd	„ d	ej
ƒZed
krxe ¡  dS )é    N)Úget_hubg{®Gáz„?g       @g      4@c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestDirectRaiseFc          
   C   sF   y
t j‚W n6 t jk
r@ } z|jr0tt|ƒƒ‚W d d }~X Y nX d S )N)ÚgeventÚTimeoutÚpendingÚAssertionErrorÚrepr)ÚselfÚt© r   ú9lib/python3.7/site-packages/gevent/tests/test__timeout.pyÚtest_direct_raise_class   s    
z'TestDirectRaise.test_direct_raise_classc          
   C   s`   t  ¡ }y|‚W nJ t jk
rZ } z*||ks8t||fƒ‚|jrJtt|ƒƒ‚W d d }~X Y nX d S )N)r   r   r   r   r   )r	   Útimeoutr
   r   r   r   Útest_direct_raise_instance   s    z*TestDirectRaise.test_direct_raise_instanceN)Ú__name__Ú
__module__Ú__qualname__Zswitch_expectedr   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	d
„ Zdd„ Zdd„ Z	ddd„Z
dd„ Zdd„ Zdd„ Zdd„ Zejdd„ ƒZdS )ÚTestc          
   C   sX   yt ƒ  ¡  |  d¡ W n: tjk
rR } z||k	r6‚ |rB| ¡  |S d }~X Y nX d S )NzMust raise Timeout)r   ÚswitchÚfailr   r   Úclose)r	   r   r   Úexr   r   r   Ú_test!   s    
z
Test._testc             C   s(   |  ¡  |  |d¡ |  ¡  |  |d¡S )NFT)Ústartr   )r	   r   r   r   r   Ú_check_expires,   s    zTest._check_expiresc             C   s   t  t¡}|  |¡ d S )N)r   r   ÚSHOULD_EXPIREr   )r	   r   r   r   r   Útest_expires3   s    
zTest.test_expiresc             C   s   t  td¡}|  |¡ d S )NF)r   r   r   r   )r	   r   r   r   r   Útest_expires_false7   s    zTest.test_expires_falsec             C   s.   t  td¡}|  |¡}|  t|ƒ d¡¡ d S )NÚXXX)r   r   r   r   Ú
assertTrueÚstrÚendswith)r	   r   r   r   r   r   Útest_expires_str=   s    
zTest.test_expires_strc             C   s(   |   dt|ƒkpdt|ƒkt|ƒ¡ d S )Nzexceptions must bezexceptions must derive)r   r    )r	   r   r   r   r   Úassert_type_errD   s    zTest.assert_type_errc          
   C   sº  t  ttƒ ¡}| ¡  ytƒ  ¡  |  d¡ W n, tk
rZ } z|  	|¡ W d d }~X Y nX | 
¡  G dd„ dƒ}t  t|¡}| ¡  ytƒ  ¡  |  d¡ W nj tk
rØ } z|  tjd¡ |  	|¡ W d d }~X Y n2   |  tjd¡ t ¡ d }|  ||¡ Y nX | 
¡  t  t|ƒ ¡}| ¡  ytƒ  ¡  |  d¡ W nl tk
r| } z|  tjd¡ |  	|¡ W d d }~X Y n2   |  tjd¡ t ¡ d }|  ||¡ Y nX | 
¡  d S )NzMost raise TypeErrorc               @   s   e Zd ZdS )z1Test.test_expires_non_exception.<locals>.OldStyleN)r   r   r   r   r   r   r   ÚOldStyleR   s   r$   zMust raise OldStylez-Py3 raises a TypeError for non-BaseExceptionsz+Old style classes can only be raised on Py2r   )r   r   r   Úobjectr   r   r   r   Ú	TypeErrorr#   r   r   Ú	greentestZPY3ZPY2ÚsysÚexc_infoZassertEqual)r	   r   r   r$   r
   r   r   r   Útest_expires_non_exceptionH   sF    


zTest.test_expires_non_exceptionTc          
   C   s`   y| t ƒ  ¡  W d Q R X W n. tjk
rL } z||k	r<‚ |S d }~X Y nX |r\|  d¡ d S )NzMust raise Timeout)r   r   r   r   r   )r	   r   Úraisesr   r   r   r   Ú_check_context_manager_expiresp   s    z#Test._check_context_manager_expiresc             C   s   t  t¡}|  |¡ d S )N)r   r   r   r,   )r	   r   r   r   r   Útest_context_manager|   s    
zTest.test_context_managerc             C   s8   t  td¡}| j|dd |  t|ƒ d¡t|ƒ¡ d S )NF)r+   z(silent))r   r   r   r,   r   r    r!   )r	   r   r   r   r   Útest_context_manager_false€   s    zTest.test_context_manager_falsec             C   s4   t  td¡}|  |¡}|  t|ƒ d¡t|ƒ¡ d S )Nr   )r   r   r   r,   r   r    r!   )r	   r   r   r   r   r   Útest_context_manager_str†   s    
zTest.test_context_manager_strc             C   s>   t  t¡}| ¡  | ¡  t  t¡ |  |j|¡ | 	¡  d S )N)
r   r   r   r   ZcancelÚsleepÚSHOULD_NOT_EXPIREZassertFalser   r   )r	   r   r   r   r   Útest_cancel‹   s    

zTest.test_cancelc          	   C   sp   |   tj¡ t ttjt¡ W d Q R X tƒ }tjttjt|d}|  ||¡ tjttjt|d}|  	|¡ d S )N)Ztimeout_value)
ZassertRaisesr   r   Zwith_timeoutr   r0   r1   r%   ZassertIsZassertIsNone)r	   ÚXÚrr   r   r   Útest_with_timeout“   s    zTest.test_with_timeoutN)T)r   r   r   r   r   r   r   r"   r#   r*   r,   r-   r.   r/   r2   r'   Zignores_leakcheckr5   r   r   r   r   r      s   (
r   Ú__main__)Zgevent.testingZtestingr'   r   Z
gevent.hubr   r(   r   ZRUNNING_ON_CIr1   ZTestCaser   r   r   Úmainr   r   r   r   Ú<module>   s   
