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Zd dlZd dlm	Z	 dd Z
dd ZG dd dZG d	d
 d
eZG dd deZG dd dZG dd deejZG dd deejZG dd deejZG dd deejZedkrze  dS dS )    N)findfilec                 C   s   t jt| ddS )NZ
dtracedata)Zsubdir)ospathabspathr   )filename r   :/opt/python-3.10.19/usr/lib/python3.10/test/test_dtrace.pyr      s   r   c              	   C   sn   	 t dd| } zdd |  D }|jdd d dd |D }d	|W S  ttfy6   td
| w )Nz\[[0-9]+ refs\] c                 S   s$   g | ]}|r| d s|dqS )#	)
startswithsplit.0rowr   r   r   
<listcomp>   s    z*normalize_trace_output.<locals>.<listcomp>c                 S   s   t | d S )Nr   )int)r   r   r   r   <lambda>    s    z(normalize_trace_output.<locals>.<lambda>)keyc                 S   s   g | ]}|d  qS )   r   r   r   r   r   r   !   s    
z%tracer produced unparsable output:
{})	resub
splitlinessortjoin
IndexError
ValueErrorAssertionErrorformat)outputresultr   r   r   normalize_trace_output   s   r"   c                   @   sH   e Zd ZdZdZg ZdddZdddZdddZddd	Z	d
d Z
dS )TraceBackendNc                 C   sv   t | jt|| j t|d |d}tt|| j d }|  }W d    ||fS 1 s2w   Y  ||fS )Nz.py)script_filepython_fileoptimize_pythonz	.expected)r"   trace_pythonr   	EXTENSIONopenreadrstrip)selfnamer&   actual_outputfexpected_outputr   r   r   run_case.   s   

zTraceBackend.run_casec                 C   s    | j |g }|r|d|g7 }|S )Nz-c)COMMAND)r,   r$   
subcommandcommandr   r   r   generate_trace_command9   s   z#TraceBackend.generate_trace_commandc                 C   s.   |  ||}tj|tjtjdd \}}|S )NT)stdoutstderruniversal_newlines)r5   
subprocessPopenPIPESTDOUTcommunicate)r,   r$   r3   r4   r6   _r   r   r   trace?   s   zTraceBackend.tracec                 C   s<   g }|r| dg|  dtjg| |g }| ||S )Nz-O )extendr   sys
executabler?   )r,   r$   r%   r&   Zpython_flagsr3   r   r   r   r'   G   s
   zTraceBackend.trace_pythonc              
   C   sx   z|  td| j }| }W n tttfy) } z
t|}W Y d }~nd }~ww |dkr:t	d
| jd |d S )Nassert_usablezprobe: successz{}(1) failed: {}r   )r?   r   r(   stripFileNotFoundErrorNotADirectoryErrorPermissionErrorstrunittestZSkipTestr   r2   )r,   r    Zfnfer   r   r   rD   N   s   zTraceBackend.assert_usableN)__name__
__module____qualname__r(   r2   ZCOMMAND_ARGSr1   r5   r?   r'   rD   r   r   r   r   r#   )   s    



r#   c                   @   s   e Zd ZdZg dZdS )DTraceBackendz.d)Zdtracez-qz-sNrL   rM   rN   r(   r2   r   r   r   r   rO   Z       rO   c                   @   s   e Zd ZdZddgZdS )SystemTapBackendz.stpZstapz-gNrP   r   r   r   r   rR   _   rQ   rR   c                   @   sL   e Zd ZdZdZdZedd Zdd Zdd Z	d	d
 Z
dd Zdd ZdS )
TraceTestsNr   c                 C   s   | j   d S rK   )backendrD   r,   r   r   r   
setUpClassl   s   zTraceTests.setUpClassc                 C   s&   | j j|| jd\}}| || d S )N)r&   )rT   r1   r&   assertEqual)r,   r-   r.   r0   r   r   r   r1   p   s   
zTraceTests.run_casec                 C      |  d d S )NZ
call_stackr1   rU   r   r   r   test_function_entry_returnu      z%TraceTests.test_function_entry_returnc                    s|   	 t g d}ttd}|  W d    n1 sw   Y   fdd}|dD ]}||j q,t  | d S )N)ZCALL_FUNCTIONZCALL_FUNCTION_EXZCALL_FUNCTION_KWzcall_stack.pyc                    sF   t  ddjd}|jD ]}t|tjr |j| kr t|  S qg S )Nz<string>exec)sourcer   modeoptimize)	compiler&   	co_consts
isinstancetypesCodeTypeco_namedisZget_instructions)funcnamecodecZcode_stringr,   r   r   get_function_instructions   s   
zFTraceTests.test_verify_call_opcodes.<locals>.get_function_instructionsstart)setr)   r   r*   discardopnamerW   )r,   Zopcodesr/   rk   Zinstructionr   rj   r   test_verify_call_opcodesx   s   
z#TraceTests.test_verify_call_opcodesc                 C   rX   )NgcrY   rU   r   r   r   test_gc   r[   zTraceTests.test_gcc                 C   rX   )NlinerY   rU   r   r   r   	test_line   r[   zTraceTests.test_line)rL   rM   rN   ZmaxDiffrT   r&   classmethodrV   r1   rZ   rp   rr   rt   r   r   r   r   rS   d   s    
rS   c                   @      e Zd Ze ZdZdS )DTraceNormalTestsr   NrL   rM   rN   rO   rT   r&   r   r   r   r   rw          rw   c                   @   rv   )DTraceOptimizedTests   Nrx   r   r   r   r   rz      ry   rz   c                   @   rv   )SystemTapNormalTestsr   NrL   rM   rN   rR   rT   r&   r   r   r   r   r|      ry   r|   c                   @   rv   )SystemTapOptimizedTestsr{   Nr}   r   r   r   r   r~      ry   r~   __main__)rf   Zos.pathr   r   r9   rB   rc   rJ   Ztest.supportr   r   r"   r#   rO   rR   rS   ZTestCaserw   rz   r|   r~   rL   mainr   r   r   r   <module>   s*    14