U
    nv¨g€  ã                   @   s<   d dl Z d dlmZ ddlmZ dd„ ZG dd„ deƒZdS )	é    N)Úgreenleté   )ÚTestCasec                  G   s   t  ¡ jj| Ž S )N)r   Ú
getcurrentÚparentÚswitch)Úargs© r	   ú=/tmp/pip-unpacked-wheel-49pzfzc0/greenlet/tests/test_throw.pyr      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 )Ú
ThrowTestsc                 C   s>   dd„ }t |ƒ}| ¡ }|  |d¡ | t¡}|  |d¡ d S )Nc                   S   s8   zt dƒ W n tk
r*   t dƒ Y d S X t dƒ d S ©NÚokÚfail)r   ÚRuntimeErrorr	   r	   r	   r
   Úf   s    z ThrowTests.test_class.<locals>.fr   ©r   r   ÚassertEqualÚthrowr   ©Úselfr   ÚgÚresr	   r	   r
   Ú
test_class   s    
zThrowTests.test_classc                 C   sv   dd„ }t |ƒ}| ¡ }|  |d¡ | tdƒ¡}|  |d¡ t |ƒ}| ¡ }|  |d¡ | td¡}|  |d¡ d S )Nc                  S   sT   zt dƒ W n: tk
rF   t ¡ d } t| ƒdkrBt dƒ Y d S Y nX t dƒ d S )Nr   r   Úciaor   )r   r   ÚsysÚexc_infoÚstr)Úvalr	   r	   r
   r      s    zThrowTests.test_val.<locals>.fr   r   r   r   r	   r	   r
   Útest_val   s    
zThrowTests.test_valc                 C   sh   dd„ }t |ƒ}| ¡ }|  |d¡ | ¡ }|  t|t jƒ¡ |  |j¡ | ¡ }|  t|t jƒ¡ d S )Nc                   S   s   t dƒ t dƒ d S r   ©r   r	   r	   r	   r
   r   2   s    zThrowTests.test_kill.<locals>.fr   )r   r   r   r   Ú
assertTrueÚ
isinstanceZGreenletExitÚdeadr   r	   r	   r
   Ú	test_kill1   s    zThrowTests.test_killc              	      s0  t  ¡ ‰ ‡ fdd„}‡ fdd„}t |ƒ}t ||d}|  t¡ | t¡ W 5 Q R X |  |j¡ |  |j¡ t |ƒ}t ||d}| ¡ }|  |d¡ | t¡}|  |d¡ |  |j¡ |  |j¡ t |ƒ}t ||d}| ¡ }|  |d¡ | ¡ }|  |d¡ | t¡}|  |d¡ |  |j¡ |  |j¡ d S )	Nc                      s*   zˆ   d¡ W n tk
r$   Y dS X dS )Núf1 ready to catchÚcaughtznormal exit)r   Ú
IndexErrorr	   ©Úmainr	   r
   Úf1A   s
    z9ThrowTests.test_throw_goes_to_original_parent.<locals>.f1c                      s   ˆ   d¡ d S )Núfrom f2r   r	   r'   r	   r
   Úf2H   s    z9ThrowTests.test_throw_goes_to_original_parent.<locals>.f2)r   r$   r%   r*   )	r   r   ÚassertRaisesr&   r   r    r"   r   r   )r   r)   r+   Zg1Zg2r   r	   r'   r
   Ú"test_throw_goes_to_original_parent>   s6    

z-ThrowTests.test_throw_goes_to_original_parentc              	   C   s@   |   t¡}t ¡  ttƒ | ¡ W 5 Q R X |  t|jƒd¡ d S )Nz1throw() third argument must be a traceback object)	r,   Ú	TypeErrorr   r   r   Ú	Exceptionr   r   Ú	exception©r   Úexcr	   r	   r
   Útest_non_traceback_paramf   s    ýÿz#ThrowTests.test_non_traceback_paramc              	   C   s@   |   t¡}t ¡  tƒ tƒ ¡ W 5 Q R X |  t|j	ƒd¡ d S )Nz0instance exception may not have a separate value)
r,   r.   r   r   r   r/   ÚBaseExceptionr   r   r0   r1   r	   r	   r
   Útest_instance_of_wrong_typep   s    þÿz&ThrowTests.test_instance_of_wrong_typec              	   C   s:   |   t¡}t ¡  d¡ W 5 Q R X |  t|jƒd¡ d S )NÚabcz1exceptions must be classes, or instances, not str)r,   r.   r   r   r   r   r   r0   r1   r	   r	   r
   Útest_not_throwablez   s    ÿÿzThrowTests.test_not_throwableN)
Ú__name__Ú
__module__Ú__qualname__r   r   r#   r-   r3   r5   r7   r	   r	   r	   r
   r      s   (

r   )r   r   Ú r   r   r   r	   r	   r	   r
   Ú<module>   s   