o
    £€jcÃ
  ã                   @   s:   d dl Z d dlZd dlmZ dd„ ZG dd„ dejƒZdS )é    N)Úgreenletc                  G   s   t  ¡ jj| Ž S )N)r   Ú
getcurrentÚparentÚswitch)Úargs© r   úD/usr/local/lib/python3.10/dist-packages/greenlet/tests/test_throw.pyr      s   r   c                   @   s,   e Z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   s6   zt dƒ W n ty   t dƒ Y d S w 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   sR   zt dƒ W n ty"   t ¡ d } t| ƒdkr t dƒ Y d S Y nw t dƒ d S )Nr   é   Ú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Ú
isinstanceÚGreenletExitÚdeadr   r   r   r   Ú	test_kill1   s   zThrowTests.test_killc                    s   t  ¡ ‰ ‡ fdd„}‡ fdd„}t |ƒ}t ||d}|  t|jt¡ |  |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 dS  ty   Y dS w )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   Úf2I   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+   Úg1Úg2r   r   r'   r   Ú"test_throw_goes_to_original_parent>   s4   

z-ThrowTests.test_throw_goes_to_original_parentN)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r/   r   r   r   r   r	      s
    r	   )r   Úunittestr   r   ÚTestCaser	   r   r   r   r   Ú<module>   s
    