o
    çã¤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	   ú[/var/www/html/ecg_monitoring/venv/lib/python3.10/site-packages/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   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   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Ú
isinstanceÚGreenletExitÚdeadr   r	   r	   r
   Ú	test_kill1   s   zThrowTests.test_killc                    sD  t  ¡ ‰ ‡ fdd„}‡ fdd„}t |ƒ}t ||d}|  t¡ | t¡ W d   ƒ n1 s/w   Y  |  |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
   Ú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,   Úg1Úg2r   r	   r(   r
   Ú"test_throw_goes_to_original_parent>   s8   ÿ

z-ThrowTests.test_throw_goes_to_original_parentc                 C   sT   |   t¡}t ¡  ttƒ | ¡ W d   ƒ n1 sw   Y  |  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   sT   |   t¡}t ¡  tƒ tƒ ¡ W d   ƒ n1 sw   Y  |  t|j	ƒd¡ d S )Nz0instance exception may not have a separate value)
r-   r1   r   r   r   r2   ÚBaseExceptionr   r   r3   r4   r	   r	   r
   Útest_instance_of_wrong_typep   s   þÿÿz&ThrowTests.test_instance_of_wrong_typec                 C   sN   |   t¡}t ¡  d¡ W d   ƒ n1 sw   Y  |  t|jƒd¡ d S )NÚabcz1exceptions must be classes, or instances, not str)r-   r1   r   r   r   r   r   r3   r4   r	   r	   r
   Útest_not_throwablez   s   ÿÿÿzThrowTests.test_not_throwableN)
Ú__name__Ú
__module__Ú__qualname__r   r   r$   r0   r6   r8   r:   r	   r	   r	   r
   r      s    (

r   )r   r   Ú r   r   r   r	   r	   r	   r
   Ú<module>   s
    