a
    b                      @   sD  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 s0    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r@e)  dS )    N)	ccompiler)Cygdbcodefilecfuncs.cc                 c   s"   | ]\}}|  |d  fV  qdS )   N)strip).0iline r   s/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/Cython/Debugger/Tests/TestLibCython.py	<genexpr>       r   c               	   C   sR  t d urt S da ztjg dtjd} W n ty>   d }Y n&0 |  \}}d}t||dd}|r>t	t
t| }|ddgkr>d	a tjd
d}|d |  tjddd|jgtjd} |  \}}z0t	t
t|dd }|ddgk rda W n ty   da Y n0 W d    n1 s40    Y  t sNt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-x   z6Skipping gdb tests, need gdb >= 7.2 with Python >= 2.6)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   s@    
*
r2   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
 | _z4t| 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d}t }tjf | jdttd|}ttjd}tj}|t_|  z^|j f | jddd	| jdd| |j!f d| jddgid| W |"  |t_|#  n|"  |t_|#  0 W n   t| j  Y n0 dS )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   )Ztest_directorymoduleF)workdirZcleanup_workdirtagsw)Z	gdb_debug
output_dir)Z	targetdirincdirZannotateZextra_compile_optionsextra_objectszcfuncs.o)r:   r6   Zextra_extension_args)$r2   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_stderrrP   r   r   r   setUpH   s|    


	
zDebuggerTestCase.setUpc                 C   s&   t  s
d S t| j t| j d S N)r2   r>   rD   rC   rE   rmtreer=   rR   r   r   r   tearDown   s    zDebuggerTestCase.tearDownN)__name__
__module____qualname__rU   rY   r   r   r   r   r3   F   s   Xr3   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 sx0    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   rP   env)r2   superr]   rU   textwrapdedentrO   version_infocygdbZmake_command_filer=   gdb_command_filerM   r(   
executabler>   environgetappendr?   dirnameabspathCython__file__rJ   pathsepr@   r   r   r   r/   )rR   Zprefix_codecodefargspathsr?   r`   	__class__r   r   rU      s:    
	(
zGdbDebuggerTestCase.setUpc              	      s   t  s
d S zjtt|   | jrfz| jj  W n   Y n0 z| jj  W n   Y n0 | j  W t	
| j nt	
| j 0 d S rV   )r2   ra   r]   rY   r/   r   rQ   rP   waitr>   removerf   rX   rt   r   r   rY      s    zGdbDebuggerTestCase.tearDown)rZ   r[   r\   rU   rY   __classcell__r   r   rt   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rVtj| tj| nN|dkrd}d||f }d||f }d||f }d|||||f }tj| 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)r2   r/   r   r!   
returncoderO   rP   r(   )	rR   outerrexit_statusZborderstartrP   enderrmsgr   r   r   test_all   s     

zTestAll.test_allN)rZ   r[   r\   r   r   r   r   r   ry      s   ry   __main__)*r>   r   rO   rE   r-   rb   Zunittestr&   r   	distutilsr   rL   ZCython.Distutils.extensionrm   ZCython.Distutils.old_build_extZ	DistutilsZold_build_extrK   ZCython.Debuggerr   re   r?   rk   rl   rn   rootr@   r   rG   rM   rq   rJ   	enumerateZsource_to_linenor   r2   ZTestCaser3   r]   ry   rZ   mainr   r   r   r   <module>   s2   
4)aN
