a
    ze5                     @   s   d Z ddlmZ ddlZddlZddlZdd ZG dd d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jZG dd dejZG dd dejZedkre  dS )zTests for the raise statement.    )supportNc               
   C   s:   z
t  W n* t y4 }  z| jW  Y d } ~ S d } ~ 0 0 d S N)OSError__traceback__)e r   %/usr/lib/python3.9/test/test_raise.pyget_tb   s    
r	   c                   @   s   e Zd Zdd Zdd ZdS )Contextc                 C   s   | S r   r   selfr   r   r   	__enter__   s    zContext.__enter__c                 C   s   dS )NTr   )r   exc_type	exc_valueexc_tbr   r   r   __exit__   s    zContext.__exit__N__name__
__module____qualname__r   r   r   r   r   r   r
      s   r
   c                   @   sl   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 Z
dd Zdd Zdd Zdd ZdS )	TestRaisec              
   C   sJ   z W n4 t y: } z| dt| W Y d }~nd }~0 0 | d d S )NzNo active exceptionNo exception raised)RuntimeErrorassertInstrfailr   r   r   r   r   test_invalid_reraise   s
    &zTestRaise.test_invalid_reraisec              
   C   sz   z:z
t  W n* t y6 } z|} W Y d }~n
d }~0 0 W n0 t yj } z| || W Y d }~nd }~0 0 | d d S Nr   )
IndexErrorassertIsr   )r   r   Zexc1Zexc2r   r   r   test_reraise#   s    
"zTestRaise.test_reraisec                 C   s   dd }|  t| d S )Nc                   S   s@   zt dW n.   ztdW n ty2   Y n0  Y n0 d S Nfoocaught	TypeErrorKeyErrorr   r   r   r   reraise0   s    z.TestRaise.test_except_reraise.<locals>.reraiseassertRaisesr&   r   r(   r   r   r   test_except_reraise/   s    	zTestRaise.test_except_reraisec                 C   s   dd }|  t| d S )Nc                	   S   s2   zt dW n    ztdW  n 0 Y n0 d S r"   r%   r   r   r   r   r(   <   s    
z/TestRaise.test_finally_reraise.<locals>.reraise)r*   r'   r+   r   r   r   test_finally_reraise;   s    zTestRaise.test_finally_reraisec                    s$   dd   fdd}|  t| d S )Nc                    S   s    d S r   r   r   r   r   r   nested_reraiseG   s    z5TestRaise.test_nested_reraise.<locals>.nested_reraisec                      s$   zt dW n      Y n0 d S Nr#   r&   r   r.   r   r   r(   I   s    z.TestRaise.test_nested_reraise.<locals>.reraiser)   r+   r   r1   r   test_nested_reraiseF   s    zTestRaise.test_nested_reraisec              
   C   sj   z&zt dW n   t d Y n0 W n> tyd } z&| |jt  | |j W Y d }~n
d }~0 0 d S r/   )r&   
ValueErrorassertIsInstance__context__assertIsNone	__cause__r   r   r   r   test_raise_from_NoneP   s    zTestRaise.test_raise_from_Nonec                 C   s   dd }|  t| d S )Nc                   S   sF   zt dW n4   t  W d    n1 s00    Y   Y n0 d S r/   )r&   r
   r   r   r   r   r(   [   s    z-TestRaise.test_with_reraise1.<locals>.reraiser)   r+   r   r   r   test_with_reraise1Z   s    zTestRaise.test_with_reraise1c                 C   s   dd }|  t| d S )Nc                   S   sN   zt dW n<   t  tdW d    n1 s80    Y   Y n0 d S r"   )r&   r
   r'   r   r   r   r   r(   e   s    &z-TestRaise.test_with_reraise2.<locals>.reraiser)   r+   r   r   r   test_with_reraise2d   s    zTestRaise.test_with_reraise2c                    sB   dd }|  t   | t fdd | t fdd d S )Nc                   s   s&   zt dW n   dV   Y n0 d S )Nr#      r0   r   r   r   r   r(   o   s
    z-TestRaise.test_yield_reraise.<locals>.reraisec                      s   t  S r   nextr   gr   r   <lambda>w       z.TestRaise.test_yield_reraise.<locals>.<lambda>c                      s   t  S r   r<   r   r>   r   r   r@   x   rA   )r=   r*   r&   StopIterationr+   r   r>   r   test_yield_reraisen   s
    zTestRaise.test_yield_reraisec                 C   s:   G dd dt }z|W n ty*   Y n0 | d d S )Nc                   @   s   e Zd Zdd ZdS )z7TestRaise.test_erroneous_exception.<locals>.MyExceptionc                 S   s
   t  d S r   r   r   r   r   r   __init__|   s    z@TestRaise.test_erroneous_exception.<locals>.MyException.__init__Nr   r   r   rE   r   r   r   r   MyException{   s   rG   r   )	Exceptionr   r   r   rG   r   r   r   test_erroneous_exceptionz   s    z"TestRaise.test_erroneous_exceptionc                 C   sB   G dd dt }| t |W d    n1 s40    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z@TestRaise.test_new_returns_invalid_instance.<locals>.MyExceptionc                 W   s   t  S r   )object)clsargsr   r   r   __new__   s    zHTestRaise.test_new_returns_invalid_instance.<locals>.MyException.__new__N)r   r   r   rN   r   r   r   r   rG      s   rG   )rH   r*   r&   rI   r   r   r   !test_new_returns_invalid_instance   s    z+TestRaise.test_new_returns_invalid_instancec              
   C   s>   zW n4 t y8 } z| t|d W Y d }~n
d }~0 0 d S )Nz(3,))AssertionErrorassertEqualr   r   r   r   r   test_assert_with_tuple_arg   s    z$TestRaise.test_assert_with_tuple_argN)r   r   r   r   r!   r,   r-   r2   r8   r9   r:   rC   rJ   rO   rR   r   r   r   r   r      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 )	TestCausec              
   C   s   zrz&zt W n ty$   td Y n0 W nF tyn } z.| |j | |j d|_|W Y d }~n
d }~0 0 W n( ty } z|}W Y d }~n
d }~0 0 | |j | |j | |j	t  d S )NF)
r&   rH   r3   r6   r7   Z
assertTrue__suppress_context__ZassertFalser4   r5   )r   excr   r   r   r   testCauseSyntax   s     zTestCause.testCauseSyntaxc              
   C   sN   z
t dW n4 ty> } z| dt| W Y d }~nd }~0 0 | d d S )N   zexception causer   )r   r&   r   r   r   r   r   r   r   test_invalid_cause   s
    
&zTestCause.test_invalid_causec              
   C   sL   z
t tW n2 t y< } z| |jt W Y d }~nd }~0 0 | d d S r   )r   r'   r4   r7   r   r   r   r   r   test_class_cause   s
    
$zTestCause.test_class_causec              
   C   sR   t  }z
t|W n2 tyB } z| |j| W Y d }~nd }~0 0 | d d S r   )r'   r   r    r7   r   )r   causer   r   r   r   test_instance_cause   s    
$zTestCause.test_instance_causec                 C   s<   G dd dt }z
t|W n ty,   Y n0 | d d S )Nc                   @   s   e Zd Zdd ZdS )z3TestCause.test_erroneous_cause.<locals>.MyExceptionc                 S   s
   t  d S r   rD   r   r   r   r   rE      s    z<TestCause.test_erroneous_cause.<locals>.MyException.__init__NrF   r   r   r   r   rG      s   rG   r   )rH   r   r   r   rI   r   r   r   test_erroneous_cause   s    
zTestCause.test_erroneous_causeN)r   r   r   rV   rX   rY   r[   r\   r   r   r   r   rS      s
   	rS   c                   @   s   e Zd Zdd Zdd ZdS )TestTracebackc              
   C   sN   z
t  W n4 t y> } z| |jtj W Y d }~nd }~0 0 | d d S r   )r   r4   r   typesTracebackTyper   r   r   r   r   test_sets_traceback   s
    
&z!TestTraceback.test_sets_tracebackc              
   C   sh   t  }zt |W nB tyX } z*| |j| | |jj| W Y d }~nd }~0 0 | d d S r   )r	   r   with_tracebackassertNotEqualr   rQ   tb_nextr   )r   tbr   r   r   r   test_accepts_traceback   s    &z$TestTraceback.test_accepts_tracebackN)r   r   r   r`   re   r   r   r   r   r]      s   r]   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestTracebackTypec                 C   s   t d S r   )r3   r   r   r   r   raiser   s    zTestTracebackType.raiserc              
   C   s|  z|    W n* ty6 } z|j}W Y d }~n
d }~0 0 | |jtj | |jt	
  | |jt | |jt | |jjd  | t |`W d    n1 s0    Y  | t d|_W d    n1 s0    Y  | t ||_W d    n1 s0    Y  | t ||j_W d    n1 s@0    Y  d |_| |jd  t }||_| |j| d S )NZasdf)rg   rH   r   r4   rc   r^   r_   r    tb_framesys	_getframetb_lastiint	tb_linenor*   r&   r3   r	   )r   rU   rd   Znew_tbr   r   r   
test_attrs   s,    "$&(zTestTracebackType.test_attrsc                 C   sd  t  }t }t||dd}| |j| | |j| | |jd | |j	d td |dd}| |jd  | 
t  td|dd W d    n1 s0    Y  | 
t  t|ddd W d    n1 s0    Y  | 
t  t||dd W d    n1 s0    Y  | 
t  t||dd W d    n1 sV0    Y  d S )Nr;      noznuh-uh)r	   ri   rj   r^   r_   rQ   rc   rh   rk   rm   r*   r&   )r   Zother_tbframerd   r   r   r   test_constructor  s"    ..0z"TestTracebackType.test_constructorN)r   r   r   rg   rn   rr   r   r   r   r   rf      s   #rf   c                   @   st   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 Z
dd Zdd Zdd Zdd Zdd ZdS )TestContextc              
   C   sh   t  }z z|W n   t Y n0 W n2 tyX } z| |j| W Y d }~nd }~0 0 | d d S r   )r   r   r    r5   r   r   contextr   r   r   r   $test_instance_context_instance_raise*  s    $z0TestContext.test_instance_context_instance_raisec              
   C   st   t }z z|W n   t Y n0 W n@ tyd } z(| |j| | |j| W Y d }~nd }~0 0 | d d S r   r   r   ZassertIsNotr5   r4   r   rt   r   r   r   !test_class_context_instance_raise6  s    $z-TestContext.test_class_context_instance_raisec              
   C   sr   t }zz|W n   tY n0 W n@ tyb } z(| |j| | |j| W Y d }~nd }~0 0 | d d S r   rw   rt   r   r   r   test_class_context_class_raiseC  s    $z*TestContext.test_class_context_class_raisec              
   C   sd   z"zdd  W n   t Y n0 W n2 t yT } z| |jt W Y d }~nd }~0 0 | d d S Nr;   r   r   r   r4   r5   ZeroDivisionErrorr   r   r   r   r   test_c_exception_contextP  s    $z$TestContext.test_c_exception_contextc              
   C   sd   z"zdd  W n   t  Y n0 W n2 tyT } z| |jt W Y d }~nd }~0 0 | d d S rz   )xyzzy	NameErrorr4   r5   r|   r   r   r   r   r   test_c_exception_raise[  s    $z"TestContext.test_c_exception_raisec              
   C   sT   zzW t nt 0 W n0 t yD } z| |j W Y d }~nd }~0 0 | d d S r   )r   r6   r5   r   r   r   r   r   test_noraise_finallyf  s    "z TestContext.test_noraise_finallyc              
   C   s^   zzdd  W t nt 0 W n2 t yN } z| |jt W Y d }~nd }~0 0 | d d S rz   r{   r   r   r   r   test_raise_finallyq  s    
$zTestContext.test_raise_finallyc              
   C   s   G dd d}z2|  dd  W d    n1 s40    Y  W n2 t yr } z| |jt W Y d }~nd }~0 0 | d d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z8TestContext.test_context_manager.<locals>.ContextManagerc                 S   s   d S r   r   r   r   r   r   r   ~  s    zBTestContext.test_context_manager.<locals>.ContextManager.__enter__c                 S   s   t  d S r   )r~   )r   tvrd   r   r   r   r     s    zATestContext.test_context_manager.<locals>.ContextManager.__exit__Nr   r   r   r   r   ContextManager}  s   r   r;   r   r   )r   r4   r5   r|   r   )r   r   r   r   r   r   test_context_manager|  s    *$z TestContext.test_context_managerc              
   C   sp   z:zdd  W n( t y6 } z|W Y d }~n
d }~0 0 W n0 t yj } z| |j W Y d }~n
d }~0 0 d S Nr;   r   )r|   r6   r5   r   r   r   r   test_cycle_broken  s    zTestContext.test_cycle_brokenc                 C   s   zVzt  W nH tyR } z0zdd  W n ty<   |Y n0 W Y d }~n
d }~0 0 W n2 ty } z| |jj W Y d }~n
d }~0 0 d S r   )r~   r   r|   r6   r5   )r   ar   r   r   r   test_reraise_cycle_broken  s    $z%TestContext.test_reraise_cycle_brokenc                 C   s   t d}z|W nh t yx   zt dW n t y<   Y n0 zt dW n( t yr } z|}W Y d }~n
d }~0 0 Y n0 | |j| d S )Nru   r$   new)rH   r    r5   )r   ru   rU   Zraisedr   r   r   test_not_last  s     zTestContext.test_not_lastc                    s    dd   fdd}|  d S )Nc                   s   s   z
dV  W n0 d S )Nr;   r   r   r   r   r   gen  s    z"TestContext.test_3118.<locals>.genc               
      sf     } t |  z ztW n   ~ tY n0 W n2 ty` } z|jt W Y d }~n
d }~0 0 d S r   )r=   r3   r'   rH   r4   r5   )r?   r   r   r   r   r   f  s    z TestContext.test_3118.<locals>.fr   )r   r   r   r   r   	test_3118  s    zTestContext.test_3118c                    sj   dd l G dd d  fddt &}  t|jj W d    n1 s\0    Y  d S )Nr   c                   @   s   e Zd Zdd ZdS )z TestContext.test_3611.<locals>.Cc                 S   s    zdd  W n    Y n0 d S r   r   r   r   r   r   __del__  s    z(TestContext.test_3611.<locals>.C.__del__N)r   r   r   r   r   r   r   r   C  s   r   c               
      s|     } z0z
j  W n  ty2   ~   tY n0 W n@ tyv } z(|jd  |jt W Y d }~n
d }~0 0 d S r   )xAttributeErrorZcollectr&   rH   rb   r5   r4   )r   r   r   r   gcr   r   r   r     s    
z TestContext.test_3611.<locals>.f)r   r   Zcatch_unraisable_exceptionrQ   r|   Z
unraisabler   )r   cmr   r   r   	test_3611  s    
zTestContext.test_3611N)r   r   r   rv   rx   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   rs   )  s   
rs   c                   @   s   e Zd Zdd Zdd ZdS )TestRemovedFunctionalityc                 C   s.   zt tfW n ty   Y n0 | d d S r   )r   r'   r&   r   r   r   r   r   test_tuples  s
    z$TestRemovedFunctionality.test_tuplesc                 C   s*   zdW n t y   Y n0 | d d S )Nr#   r   )r&   r   r   r   r   r   test_strings  s
    z%TestRemovedFunctionality.test_stringsN)r   r   r   r   r   r   r   r   r   r     s   r   __main__)__doc__testr   ri   r^   Zunittestr	   r
   ZTestCaser   rS   r]   rf   rs   r   r   mainr   r   r   r   <module>   s   };B ?