o
    HXh                     @   s   d dl Z d dl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G dd dejZ	G dd dejZ
ed	kr?e  dS dS )
    N)supportc                   @   s`   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zejdd ZdS )	ClearTestz"
    Tests for frame.clear().
       c                 K   s   dd  d S N   r    )selfxkwargsr   r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_frame.pyinner   s   zClearTest.innerc              
   K   sB   z| j di | W |S  ty  } z	|}W Y d }~|S d }~ww )Nr   )r   ZeroDivisionError)r   r
   eexcr   r   r   outer   s   zClearTest.outerc                 C   s(   |dur|j   |j}|dusdS dS )z2
        Clear all frames in a traceback.
        N)tb_framecleartb_next)r   tbr   r   r   clear_traceback_frames   s   
z ClearTest.clear_traceback_framesc                 C   sh   G dd d}| }t |}| j|d}~t  | d |  | |j t  | d |  d S )Nc                   @      e Zd ZdS )z&ClearTest.test_clear_locals.<locals>.CN__name__
__module____qualname__r   r   r   r   C"       r   c)	weakrefrefr   r   
gc_collectassertIsNotr   __traceback__assertIsr   r   r   wrr   r   r   r   test_clear_locals!   s   
zClearTest.test_clear_localsc                    sB   d  fdd}| }t |   |j    d S )NFc                   3   s"    zd V     W d d S d w )NT)r   r   Zendlyr   r   r   g2   s
   
z)ClearTest.test_clear_generator.<locals>.g)nextassertFalsegi_framer   
assertTrue)r   r)   genr   r(   r   test_clear_generator0   s   

zClearTest.test_clear_generatorc              
   C   s   zdd  W n t y } z
|jj}W Y d }~nd }~ww | t |  W d    n1 s1w   Y  | t |j  W d    d S 1 sLw   Y  d S r   r   r#   r   assertRaisesRuntimeErrorr   f_back)r   r   fr   r   r   test_clear_executing@   s   
"zClearTest.test_clear_executingc                    s@   d  fdd}| }t |}  |    d S )NFc                  3   s    z]zdd  W nL t yT }  z@| jj}t |  W d    n1 s(w   Y  t |j  W d    n1 sBw   Y  |V  W Y d } ~ n
d } ~ ww W d d S W d d S d w )Nr   r   Tr0   )r   r4   r(   r   r   r)   N   s$   
	z3ClearTest.test_clear_executing_generator.<locals>.g)r*   r+   r   r-   )r   r)   r.   r4   r   r(   r   test_clear_executing_generatorK   s   
z(ClearTest.test_clear_executing_generatorc                    sT    fddfdd}g d}g  |d |   | g  |d |   | d S )Nc                     s"   t d}  | j| jj  d S )Nr   )sys	_getframeappendf_linenof_codeco_firstlineno)r4   )linesr   r   record_linec   s   
z7ClearTest.test_lineno_with_tracing.<locals>.record_linec                    s&      | rdt d_      d S )NTr   )r7   r8   f_trace)Ztrace)r>   r   r   testg   s
   
z0ClearTest.test_lineno_with_tracing.<locals>.test)r      r   FT)assertEqual)r   r@   Zexpected_linesr   )r=   r>   r   test_lineno_with_tracingb   s   z"ClearTest.test_lineno_with_tracingc                 C   s   t  3 G dd d}| }t|}| j|d}~| d |  | |j | d |  W d    d S 1 s:w   Y  d S )Nc                   @   r   )z)ClearTest.test_clear_refcycles.<locals>.CNr   r   r   r   r   r   z   r   r   r   )	r   Z
disable_gcr   r    r   r"   r   r#   r$   r%   r   r   r   test_clear_refcyclesv   s   

"zClearTest.test_clear_refcyclesN)r   )r   r   r   __doc__r   r   r   r'   r/   r5   r6   rC   r   Zcpython_onlyrD   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 )FrameAttrsTestc              
   C   sn   dd }z|  W |S  t y6 } z |j}g }|r+||j |j}|sW Y d }~|S W Y d }~|S d }~ww )Nc                        d d}  fdd}| S )Nr      c                         d } dd  d}d S N   r   r   	   r   ztr	   r   r   r         z8FrameAttrsTest.make_frames.<locals>.outer.<locals>.innerr   yr   r   rP   r   r         z)FrameAttrsTest.make_frames.<locals>.outer)r   r#   r9   r   r   )r   r   r   r   framesr   r   r   make_frames   s    
zFrameAttrsTest.make_framesc                 C   sV   |   \}}}|j}| |dtj | |ddd |j}| |ddd d S )Nr   r   rH   )r	   rS      )r	   rN   )rV   f_localsZassertIsInstancepoptypesFunctionTyperB   )r   r4   r   r   Zouter_localsZinner_localsr   r   r   test_locals   s   zFrameAttrsTest.test_localsc                 C   s>   |   \}}}|  |  | |ji  | |ji  d S N)rV   r   rB   rX   r   r4   r   r   r   r   r   r'      s
   z FrameAttrsTest.test_clear_localsc                 C   sJ   |   \}}}|j |j |  |  | |ji  | |ji  d S r]   )rV   rX   r   rB   r^   r   r   r   test_locals_clear_locals   s   z'FrameAttrsTest.test_locals_clear_localsc                 C   sB   |   \}}}| t |`W d    d S 1 sw   Y  d S r]   )rV   r1   AttributeErrorr:   )r   r4   _r   r   r   test_f_lineno_del_segfault   s   "z)FrameAttrsTest.test_f_lineno_del_segfaultN)r   r   r   rV   r\   r'   r_   rb   r   r   r   r   rF      s    
rF   c                   @   s   e Zd ZdZdd ZdS )ReprTestz 
    Tests for repr(frame).
    c           
   
   C   s   dd }|j j}z|  W n$ ty1 } z|j}g }|r'||j |j}|sW Y d }~n
d }~ww | d |\}}}t	t
t}	| t
|d|	|d f  | t
|d|	|d f  | t
|d|	|d	 f  d S )
Nc                     rG   )Nr   rH   c                     rI   rJ   r   rM   rP   r   r   r      rQ   z0ReprTest.test_repr.<locals>.outer.<locals>.innerr   rR   r   rP   r   r      rT   z!ReprTest.test_repr.<locals>.outerzshould have raisedz=^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code test_repr>$   z9^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code outer>$rW   z9^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code inner>$r   )__code__r<   r   r#   r9   r   r   Zfailreescaperepr__file__ZassertRegex)
r   r   offsetr   r   rU   Zf_thisZf_outerZf_innerZ	file_reprr   r   r   	test_repr   s>   	








zReprTest.test_reprN)r   r   r   rE   rk   r   r   r   r   rc      s    rc   __main__)rf   r7   rZ   Zunittestr   r@   r   ZTestCaser   rF   rc   r   mainr   r   r   r   <module>   s    {5(