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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 )	ClearTest   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 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   Tr1   )r   r5   r)   r   r   r*   N   s$   
	z3ClearTest.test_clear_executing_generator.<locals>.g)r+   r,   r   r.   )r   r*   r/   r5   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)r5   )linesr   r   record_linec   s   
z7ClearTest.test_lineno_with_tracing.<locals>.record_linec                    s&      | rdt d_      d S )NTr   )r8   r9   f_trace)Ztrace)r?   r   r   testg   s
   
z0ClearTest.test_lineno_with_tracing.<locals>.test)r      r   FT)assertEqual)r   rA   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   r   r   r   r(   r0   r6   r7   rD   r   Zcpython_onlyrE   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$   r:   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FunctionTyperC   )r   r5   r   r   Zouter_localsZinner_localsr   r   r   test_locals   s   zFrameAttrsTest.test_localsc                 C   s>   |   \}}}|  |  | |ji  | |ji  d S r   )rV   r   rC   rX   r   r5   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   rC   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   r2   AttributeErrorr;   )r   r5   _r   r   r   test_f_lineno_del_segfault   s   "z)FrameAttrsTest.test_f_lineno_del_segfaultN)r   r   r   rV   r\   r(   r^   ra   r   r   r   r   rF      s    
rF   c                   @   s   e Zd Z	 dd ZdS )ReprTestc           
   
   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$   r:   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   rj   r   r   r   r   rb      s    rb   __main__)re   r8   rZ   Zunittestr    rA   r   ZTestCaser   rF   rb   r   mainr   r   r   r   <module>   s    {5(