o
    GXhu                     @   sR   d Z ddlZddlZddlZddlmZ G dd dejZedkr'e	  dS dS )zL
Tests run by test_atexit in a subprocess since it clears atexit callbacks.
    N)supportc                   @   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 )GeneralTestc                 C      t   d S Natexit_clearself r   ;/opt/python-3.10.19/usr/lib/python3.10/test/_test_atexit.pysetUp      zGeneralTest.setUpc                 C   r   r   r   r	   r   r   r   tearDown   r   zGeneralTest.tearDownc                 G   s|   t  0}tj|g|R   t  | |jj| | |jj| | t	|jj
| W d    d S 1 s7w   Y  d S r   )r   catch_unraisable_exceptionr   register_run_exitfuncsassertEqual
unraisableobjectexc_typetype	exc_value)r
   r   funcargscmr   r   r   assert_raises_unraisable   s   
"z$GeneralTest.assert_raises_unraisablec                    sx   g   fdd} fdd}t |dd t | t j|ddd	 t   |  d
dddifd
di fddi fg d S )Nc                          d| |f d S )Nfunc1appendr   kwargsZcallsr   r   r         z%GeneralTest.test_order.<locals>.func1c                     r   )Nfunc2r   r!   r#   r   r   r%   "   r$   z%GeneralTest.test_order.<locals>.func2         value)keyr%   )r(   r*   r   r   )r&   r'   )r   r   r   r   )r
   r   r%   r   r#   r   
test_order   s   
zGeneralTest.test_orderc                 C   s   dd }|  t|dd d S )Nc                   S   s   d S r   r   r   r   r   r   r   1      z&GeneralTest.test_badargs.<locals>.funcr&   r'   r   	TypeError)r
   r   r   r   r   test_badargs0   s   zGeneralTest.test_badargsc                 C      dd }|  t| d S )Nc                   S   s   t r   )r.   r   r   r   r   raise_type_error8   r,   z0GeneralTest.test_raise.<locals>.raise_type_errorr-   )r
   r1   r   r   r   
test_raise7   s   zGeneralTest.test_raisec                 C   r0   )Nc                   S   s   dd  d S Nr&   r   r   r   r   r   r   div_zero@   r   z5GeneralTest.test_raise_unnormalized.<locals>.div_zero)r   ZeroDivisionError)r
   r4   r   r   r   test_raise_unnormalized=   s   z#GeneralTest.test_raise_unnormalizedc                 C   s   |  ttj d S r   )r   
SystemExitsysexitr	   r   r   r   	test_exitE   s   zGeneralTest.test_exitc                    sF   dg  fdd}t dD ]}t| qt  |  d d d S )Nr   c                          d  d7  < d S Nr   r&   r   r   ar   r   incJ   r$   z$GeneralTest.test_stress.<locals>.inc   )ranger   r   r   r   )r
   r?   ir   r=   r   test_stressH   s   zGeneralTest.test_stressc                    s@   dg  fdd}t | t   t   |  d d d S )Nr   c                      r;   r<   r   r   r=   r   r   r?   U   r$   z#GeneralTest.test_clear.<locals>.inc)r   r   r   r   r   )r
   r?   r   r=   r   
test_clearS   s   
zGeneralTest.test_clearc                    sf   dg  fdd} fdd}t dD ]}t| qt| t| t  |  d d d S )Nr   c                      r;   r<   r   r   r=   r   r   r?   `   r$   z(GeneralTest.test_unregister.<locals>.incc                      s    d  d8  < d S r<   r   r   r=   r   r   decb   r$   z(GeneralTest.test_unregister.<locals>.dec   )rA   r   r   
unregisterr   r   )r
   r?   rE   rB   r   r=   r   test_unregister^   s   

zGeneralTest.test_unregisterc                 C   sN   g }t |jd t   | |dg t |j t   | |dg d S )N   )r   r   r    r   r   rH   )r
   lr   r   r   test_bound_methodsm   s   zGeneralTest.test_bound_methodsc              	      s    fdd t   zBt &}t   | |jj  | |jjt	 | t
|jjt	 W d    n1 s9w   Y  W t   d S W t   d S t   w )Nc                      s   t   dd  d S r3   )r   rH   r   r   r   r   r   y   s   
z@GeneralTest.test_atexit_with_unregistered_function.<locals>.func)r   r   r   r   r   r   r   r   r   r5   r   r   rH   )r
   r   r   rM   r   &test_atexit_with_unregistered_functionw   s   

z2GeneralTest.test_atexit_with_unregistered_functionN)__name__
__module____qualname__r   r   r   r+   r/   r2   r6   r:   rC   rD   rI   rL   rN   r   r   r   r   r   
   s    	
r   __main__)
__doc__r   r8   Zunittesttestr   ZTestCaser   rO   mainr   r   r   r   <module>   s    }