o
    gp3                     @   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r_e  dS dS )zTests for the raise statement.    )supportNc                   C   s   zt     t d  Y S )N   )OSErrorsysexc_info r   r   E/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_raise.pyget_tb   s   r	   c                   @      e Zd Zdd Zdd ZdS )Contextc                 C   s   | S Nr   selfr   r   r   	__enter__      zContext.__enter__c                 C   s   dS )NTr   )r   exc_type	exc_valueexc_tbr   r   r   __exit__   r   zContext.__exit__N__name__
__module____qualname__r   r   r   r   r   r   r          r   c                   @   l   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   s:   z  t y } z| dt| W Y d }~d S d }~ww )NzNo active exceptionNo exception raised)RuntimeErrorassertInstrfailr   er   r   r   test_invalid_reraise   s   zTestRaise.test_invalid_reraisec              
   C   sZ   zzt   t y } z|} d }~ww  t y, } z| || W Y d }~d S d }~ww Nr   )
IndexErrorassertIsr    )r   r"   Zexc1Zexc2r   r   r   test_reraise#   s   zTestRaise.test_reraisec                 C      dd }|  t| d S )Nc                   S   s,   zt d   ztd ty   Y  w NfooZ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   r(   )Nc                	   S   s   zt d   ztd r)   r+   r   r   r   r   r.   <   s   z/TestRaise.test_finally_reraise.<locals>.reraise)r0   r-   r1   r   r   r   test_finally_reraise;   s   zTestRaise.test_finally_reraisec                    s$   dd   fdd}|  t| d S )Nc                    S   s    r   r   r   r   r   r   nested_reraiseG   s   z5TestRaise.test_nested_reraise.<locals>.nested_reraisec                      s   zt d      Y d S Nr*   r,   r   r4   r   r   r.   I   s   z.TestRaise.test_nested_reraise.<locals>.reraiser/   r1   r   r7   r   test_nested_reraiseF   s   zTestRaise.test_nested_reraisec              
   C   sZ   zzt d   t d  ty, } z| |jt  | |j W Y d }~d S d }~ww r5   )r,   
ValueErrorassertIsInstance__context__assertIsNone	__cause__r!   r   r   r   test_raise_from_NoneP   s   zTestRaise.test_raise_from_Nonec                 C   r(   )Nc                   S   s8   zt d   t  W d     1 sw   Y   r5   )r,   r   r   r   r   r   r.   [   s   
z-TestRaise.test_with_reraise1.<locals>.reraiser/   r1   r   r   r   test_with_reraise1Z      zTestRaise.test_with_reraise1c                 C   r(   )Nc                   S   s2   zt d   t  td1 sw   Y   r)   )r,   r   r-   r   r   r   r   r.   e   s   z-TestRaise.test_with_reraise2.<locals>.reraiser/   r1   r   r   r   test_with_reraise2d   r@   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   dV   )Nr*      r6   r   r   r   r   r.   o   s   z-TestRaise.test_yield_reraise.<locals>.reraisec                         t  S r   nextr   gr   r   <lambda>w       z.TestRaise.test_yield_reraise.<locals>.<lambda>c                      rC   r   rD   r   rF   r   r   rH   x   rI   )rE   r0   r,   StopIterationr1   r   rF   r   test_yield_reraisen   s
   zTestRaise.test_yield_reraisec                 C   s*   G dd dt }z| ty   Y d S w )Nc                   @      e Zd Zdd ZdS )z7TestRaise.test_erroneous_exception.<locals>.MyExceptionc                 S      t  r   r   r   r   r   r   __init__|      z@TestRaise.test_erroneous_exception.<locals>.MyException.__init__Nr   r   r   rO   r   r   r   r   MyException{       rR   r   )	Exceptionr   r    r   rR   r   r   r   test_erroneous_exceptionz   s   z"TestRaise.test_erroneous_exceptionc                 C   s4   G dd dt }| t |1 sw   Y  d S )Nc                   @   rL   )z@TestRaise.test_new_returns_invalid_instance.<locals>.MyExceptionc                 W   s   t  S r   )object)clsargsr   r   r   __new__   rP   zHTestRaise.test_new_returns_invalid_instance.<locals>.MyException.__new__N)r   r   r   rZ   r   r   r   r   rR      rS   rR   )rT   r0   r,   rU   r   r   r   !test_new_returns_invalid_instance   s   z+TestRaise.test_new_returns_invalid_instancec              
   C   s@   zJ d t y } z| t|d W Y d }~d S d }~ww )NF)   z(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'   r2   r3   r8   r>   r?   rA   rK   rV   r[   r_   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   z+zzt  ty   td w  ty+ } z| |j | |j d|_|d }~ww  ty? } z|}W Y d }~nd }~ww | |j | |j | |j	t  d S )NF)
r,   rT   r9   r<   r=   Z
assertTrue__suppress_context__ZassertFalser:   r;   )r   excr"   r   r   r   testCauseSyntax   s*   zTestCause.testCauseSyntaxc              
   C   s>   zt d ty } z| dt| W Y d }~d S d }~ww )N   zexception causer   )r%   r,   r   r   r    r!   r   r   r   test_invalid_cause      zTestCause.test_invalid_causec              
   C   s<   zt t t y } z| |jt W Y d }~d S d }~ww r$   )r%   r-   r:   r=   r    r!   r   r   r   test_class_cause   s   zTestCause.test_class_causec              
   C   sB   t  }zt| ty  } z| |j| W Y d }~d S d }~ww r$   )r-   r%   r&   r=   r    )r   causer"   r   r   r   test_instance_cause   s   zTestCause.test_instance_causec                 C   s,   G dd dt }zt| ty   Y d S w )Nc                   @   rL   )z3TestCause.test_erroneous_cause.<locals>.MyExceptionc                 S   rM   r   rN   r   r   r   r   rO      rP   z<TestCause.test_erroneous_cause.<locals>.MyException.__init__NrQ   r   r   r   r   rR      rS   rR   r   )rT   r%   r   r    rU   r   r   r   test_erroneous_cause   s   zTestCause.test_erroneous_causeN)r   r   r   rc   re   rg   ri   rj   r   r   r   r   r`      s    	r`   c                   @   r
   )TestTracebackc              
   C   s>   zt   t y } z| |jtj W Y d }~d S d }~ww r$   )r%   r:   __traceback__typesTracebackTyper    r!   r   r   r   test_sets_traceback   rf   z!TestTraceback.test_sets_tracebackc              
   C   sX   t  }zt | ty+ } z| |j| | |jj| W Y d }~d S d }~ww r$   )r	   r%   with_tracebackassertNotEqualrl   r^   tb_nextr    )r   tbr"   r   r   r   test_accepts_traceback   s   z$TestTraceback.test_accepts_tracebackN)r   r   r   ro   rt   r   r   r   r   rk      s    rk   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestTracebackTypec                 C   s   t r   )r9   r   r   r   r   raiser   r   zTestTracebackType.raiserc              
   C   sx  z|    W n ty } z	|j}W Y d }~nd }~ww | |jtj | |jt	
  | |jt | |jt | |jjd  | t
 |`W d    n1 sUw   Y  | t d|_W d    n1 smw   Y  | t ||_W d    n1 sw   Y  | t ||j_W d    n1 sw   Y  d |_| |jd  t }||_| |j| d S )NZasdf)rv   rT   rl   r:   rr   rm   rn   r&   tb_framer   	_getframetb_lastiint	tb_linenor0   r,   r9   r	   )r   rb   rs   Znew_tbr   r   r   
test_attrs   s8   
zTestTracebackType.test_attrsc                 C   sb  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 sRw   Y  | 
t t|ddd W d    n1 sow   Y  | 
t t||dd W d    n1 sw   Y  | 
t t||dd W d    d S 1 sw   Y  d S )NrB   r   Znoznuh-uh)r	   r   rx   rm   rn   r^   rr   rw   ry   r{   r0   r,   )r   Zother_tbframers   r   r   r   test_constructor  s*   "z"TestTracebackType.test_constructorN)r   r   r   rv   r|   r~   r   r   r   r   ru      s    #ru   c                   @   r   )TestContextc              
   C   sN   t  }z	z|   t  ty& } z| |j| W Y d }~d S d }~ww r$   )r%   r   r^   r;   r    r   contextr"   r   r   r   $test_instance_context_instance_raise*  s   z0TestContext.test_instance_context_instance_raisec              
   C   sZ   t }z	z|   t  ty, } z| |j| | |j| W Y d }~d S d }~ww r$   r%   r   rq   r;   r:   r    r   r   r   r   !test_class_context_instance_raise6  s   z-TestContext.test_class_context_instance_raisec              
   C   sX   t }zz|   t ty+ } z| |j| | |j| W Y d }~d S d }~ww r$   r   r   r   r   r   test_class_context_class_raiseC  s   z*TestContext.test_class_context_class_raisec              
   C   s`   zzdd  W n   t W n t y( } z| |jt W Y d }~d S d }~ww | d d S NrB   r   r   r   r:   r;   ZeroDivisionErrorr    r!   r   r   r   test_c_exception_contextP  s   z$TestContext.test_c_exception_contextc              
   C   sb   zzdd  W n   t  Y W n ty) } z| |jt W Y d }~d S d }~ww | d d S r   )xyzzy	NameErrorr:   r;   r   r    r!   r   r   r   test_c_exception_raise[  s   z"TestContext.test_c_exception_raisec              
   C   s@   zzW t t  t y } z| |j W Y d }~d S d }~ww r$   )r   r<   r;   r    r!   r   r   r   test_noraise_finallyf  s   z TestContext.test_noraise_finallyc              
   C   sJ   z
zdd  W t t  t y$ } z| |jt W Y d }~d S d }~ww r   r   r!   r   r   r   test_raise_finallyq  s   
zTestContext.test_raise_finallyc              
   C   s   G dd d}z|  dd  W d    n1 sw   Y  W n t y: } z| |jt W Y d }~d S d }~ww | d d S )Nc                   @   r
   )z8TestContext.test_context_manager.<locals>.ContextManagerc                 S   s   d S r   r   r   r   r   r   r   ~  r   zBTestContext.test_context_manager.<locals>.ContextManager.__enter__c                 S   s   t  d S r   )r   )r   tvrs   r   r   r   r     s   zATestContext.test_context_manager.<locals>.ContextManager.__exit__Nr   r   r   r   r   ContextManager}  r   r   rB   r   r   )r   r:   r;   r   r    )r   r   r"   r   r   r   test_context_manager|  s   
z TestContext.test_context_managerc              
   C   sb   zzdd  W W d S  t y } z|d }~ww  t y0 } z| |j W Y d }~d S d }~ww NrB   r   )r   r<   r;   r!   r   r   r   test_cycle_broken  s   zTestContext.test_cycle_brokenc                 C   s   z+zt  W W d S  ty+ } zzdd  W n	 ty   |w W Y d }~W d S d }~ww  tyE } z| |jj W Y d }~d S d }~ww r   )r   r   r   r<   r;   )r   ar"   r   r   r   test_reraise_cycle_broken  s    z%TestContext.test_reraise_cycle_brokenc                    s    dd   fdd}|  d S )Nc                   s   s    zdV  W d S w )NrB   r   r   r   r   r   gen  s   z"TestContext.test_3118.<locals>.genc               
      sV     } t |  z	zt   ~ t ty* } z|jt W Y d }~d S d }~ww r   )rE   r9   r-   rT   r:   r;   )rG   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                    s`   G dd d  fdd}t  }|  t|jj W d    d S 1 s)w   Y  d S )Nc                   @   rL   )z TestContext.test_3611.<locals>.Cc                 S   s   zdd  W 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  rS   r   c               
      sn     } zz| j  W W d S  ty   ~ tw  ty6 } z|jd  |jt W Y d }~d S d }~ww r   )xAttributeErrorr,   rT   rq   r;   r:   )r   r"   r   r   r   r   r     s   z TestContext.test_3611.<locals>.f)r   Zcatch_unraisable_exceptionr^   r   Z
unraisabler   )r   r   cmr   r   r   	test_3611  s   
"zTestContext.test_3611N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )  s    
r   c                   @   r
   )TestRemovedFunctionalityc                 C   s   zt tf ty   Y d S w r$   )r%   r-   r,   r    r   r   r   r   test_tuples  s
   z$TestRemovedFunctionality.test_tuplesc                 C   s   zd t y   Y d S w )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   r   rm   Zunittestr	   r   ZTestCaser   r`   rk   ru   r   r   r   mainr   r   r   r   <module>   s"   };B ,