o
    e"                     @   sF  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Zd dlZd dl	m
Z
 d dlZd dlZd dlm  mZ d dlmZ e je jeZe jedZe jedZeeZedd e eD Z!W d   n1 ssw   Y  da"dd	 Z#G d
d dej$Z%G dd de%Z&G dd de&Z'e(dkre)  dS dS )    N)	ccompiler)Cygdbcodefilecfuncs.cc                 c   s$    | ]\}}|  |d  fV  qdS )   N)strip).0iline r   SD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Debugger/Tests/TestLibCython.py	<genexpr>   s   " r   c               	   C   sF  t d urt S da ztjg dtjd} W n ty   d }Y nw |  \}}d}t||dd}|rt	t
t| }|ddgkrd	a tjd
dG}|d |  tjddd|jgtjd} |  \}}zt	t
t|dd }|ddgk r~da W n ty   da Y nw W d    n1 sw   Y  t std t S )NF)gdbz-nxz	--version)stdoutzGNU gdb [^\d]*(\d+)\.(\d+)asciiignore      Tzw+)modez8python import sys; print("%s %s" % sys.version_info[:2])r   -batch-xz6Skipping gdb tests, need gdb >= 7.2 with Python >= 2.7)have_gdb
subprocessPopenPIPEOSErrorcommunicaterematchdecodelistmapintgroupstempfileNamedTemporaryFilewriteflushnamesplit
ValueErrorwarningswarn)pZgdb_versionr   _regexZgdb_version_numberZpython_version_scriptZinternal_python_versionr   r   r   test_gdb   sJ   
r0   c                   @   s   e Zd Zdd Zdd ZdS )DebuggerTestCasec                 C   s  t  sdS t | _tj| jd| _tj| jdd| _tj| jd| _	t
 | _zt| j tt| j tt| j	d  ttdd| j	d  t }|jdgd	d
gd t| jd| jd}t }tjd| jdttd|}ttjd}tj}|t_|  z4|j d| jddd	| jdd| |j!|d |d |d dddgid W |"  |t_|#  W dS |"  |t_|#  w    t| j  )z
        Run gdb and have cygdb import the debug information from the code
        defined in TestParseTreeTransforms's setUp method
        Nzcodefile.pyxZcython_debugZcython_debug_info_codefileZcfuncsz.cz.hr   Tz-fPIC)debugZextra_postargsr   )test_directorymodulemodule_pathF)workdirZcleanup_workdirtagsw)Z	gdb_debug
output_dir)Z	targetdirincdirZannotateZextra_compile_optionsr3   r4   Zextra_objectszcfuncs.o)r3   r4   r6   r:   Zextra_extension_argsr   )$r0   r$   mkdtemptempdirospathjoindestfileZ
debug_destZcfuncs_destfilegetcwdcwdchdirshutilcopyr   cfuncs_filereplacer   Znew_compilercompiledict	build_extZOptimizationruntestsZCythonCompileTestCaseZ
parse_tagsopendevnullsysstderrZdisable_optimizationZ
run_cythonZrun_distutilsZrestore_stateclose)selfcompileroptsZoptimization_disablerZcython_compile_testcaseZ
new_stderrrO   r   r   r   setUpH   s~   


	
zDebuggerTestCase.setUpc                 C   s&   t  sd S t| j t| j d S N)r0   r=   rC   rB   rD   rmtreer<   rQ   r   r   r   tearDown   s   zDebuggerTestCase.tearDownN)__name__
__module____qualname__rT   rX   r   r   r   r   r1   F   s    Zr1   c                       s(   e Zd Z fddZ fddZ  ZS )GdbDebuggerTestCasec              	      s  t  sd S tt|   td}tdtjd d f }t	| j
|| _t| jd}|| W d    n1 s<w   Y  ddd| jdd	tjd
dg	}g }tjd}|r]|| |tjtjtjtj ttjtj|d}tj|tjtj|d| _d S )Na              python

            import os
            import sys
            import traceback

            def excepthook(type, value, tb):
                traceback.print_exception(type, value, tb)
                sys.stderr.flush()
                sys.stdout.flush()
                os._exit(1)

            sys.excepthook = excepthook

            # Have tracebacks end up on sys.stderr (gdb replaces sys.stderr
            # with an object that calls gdb.write())
            sys.stderr = sys.__stderr__

            end
            z            python

            from Cython.Debugger.Tests import test_libcython_in_gdb
            test_libcython_in_gdb.main(version=%r)

            end
            r   ar   r   r   z-nz--argsz-czimport codefile
PYTHONPATH)r^   )r   rO   env)r0   superr\   rT   textwrapdedentrN   version_infocygdbZmake_command_filer<   gdb_command_filerL   r&   
executabler=   environgetappendr>   dirnameabspathCython__file__rI   pathsepr?   r   r   r   r-   )rQ   Zprefix_codecodefargspathsr>   r_   	__class__r   r   rT      s<   
	
zGdbDebuggerTestCase.setUpc              	      s   t  sd S z;tt|   | jr8z| jj  W n   Y z| jj  W n   Y | j  W t	
| j d S W t	
| j d S t	
| j w rU   )r0   r`   r\   rX   r-   r   rP   rO   waitr=   removere   rW   rs   r   r   rX      s   zGdbDebuggerTestCase.tearDown)rY   rZ   r[   rT   rX   __classcell__r   r   rs   r   r\      s    <r\   c                   @   s   e Zd Zdd ZdS )TestAllc           	      C   s   t  sd S | j \}}|d}|d}| jj}|dkr,tj| tj| d S |dkrUd}d||f }d||f }d||f }d|||||f }tj| d S d S )	NzUTF-8r   r   z******************************z%s   v INSIDE GDB v   %sz%s   v STDERR v   %sz%s   ^ INSIDE GDB ^   %sz
%s
%s%s
%s%s)r0   r-   r   r   
returncoderN   rO   r&   )	rQ   outerrZexit_statusborderstartrO   enderrmsgr   r   r   test_all   s"   

zTestAll.test_allN)rY   rZ   r[   r   r   r   r   r   rx      s    rx   __main__)*r=   r   rN   rD   r+   ra   Zunittestr$   r   	distutilsr   rK   ZCython.Distutils.extensionrl   ZCython.Distutils.old_build_extZ	DistutilsZold_build_extrJ   ZCython.Debuggerr   rd   r>   rj   rk   rm   rootr?   r   rF   rL   rp   rI   	enumerateZsource_to_linenor   r0   ZTestCaser1   r\   rx   rY   mainr   r   r   r   <module>   s8   
)cN