3
^d"                 @   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Zd dlm	Z	 d dl
mZmZ d dlmZ dZd Zd/Zd0Zd1Zd2Zd3Zd4ZedededededededediZdZddddddddddg
Ze Zdd Zdeefd d!Zd"d# Zd$d% Zd&d' Z d5d)d*Z!d+d, Z"d6d-d.Z#dS )7    N)support)dash_Rclear_caches)saved_test_environment                  z	%s passedz	%s failedz%s failed (env changed)z
%s skippedz%s skipped (resource denied)z%s interruptedz
%s crashedz%s run no testsg      >@Ztest_grammarZtest_opcodesZ	test_dictZtest_builtinZtest_exceptionsZ
test_typesZtest_unittestZtest_doctestZtest_doctest2Ztest_supportc             C   s   t j|d}||  S )Nz%s)_FORMAT_TEST_RESULTget)Z	test_nameresultZfmt r   ./usr/lib/python3.6/test/libregrtest/runtest.pyformat_test_result:   s    r   c       	      C   sv   t | } tj| }g }t||B }xF|D ]>}tjj|\}}|dd dkr(|dkr(||kr(|j| q(W |t| S )z-Return a list of all applicable test modules.Nr
   Ztest_.py )r   r   )findtestdiroslistdirsetpathsplitextappendsorted)	testdirZstdtestsZnottestsnamestestsZothersnamemodZextr   r   r   	findtests?   s    

 r!   c             C   s    |j ds| jr|S d| S d S )Nztest.)
startswithr   )nstestr   r   r   get_abs_moduleL   s    r%   c                s@  | j }| jdk	}|r$tj| jdd ztj| j dt_| jrBg nd t_	}| j
rXdt_
|rdt_tj }tj}tj}zD|t_|t_t| |dd}|d tkr|j }	|j|	 |j  W d|t_|t_X n| jt_t| || j d}|rddljj  fdd|D }
nd}
||
f S |r(tj  t|| j dt_	X dS )	a  Run a single test.

    ns -- regrtest namespace of options
    test -- the name of the test

    Returns the tuple (result, test_time, xml_data), where result is one
    of the constants:

        INTERRUPTED      KeyboardInterrupt when run under -j
        RESOURCE_DENIED  test skipped because resource denied
        SKIPPED          test skipped for some other reason
        ENV_CHANGED      test failed because it changed the execution environment
        FAILED           test failed
        PASSED           test passed
        EMPTY_TEST_SUITE test ran no subtests.

    If ns.xmlpath is not None, xml_data is a list containing each
    generated testsuite element.
    NT)exitF)display_failurer   c                s   g | ]} j |jd qS )zus-ascii)Ztostringdecode).0x)ETr   r   
<listcomp>   s    zruntest.<locals>.<listcomp>)Zverbose3ZtimeoutfaulthandlerZdump_traceback_laterr   Zset_match_testsZmatch_testsZenvironment_alteredZxmlpathZjunit_xml_listZfailfastverboseioStringIOsysstdoutstderrruntest_innerPASSEDgetvaluewriteflushZxml.etree.ElementTreeZetreeZElementTreeZcancel_dump_traceback_latercleanup_test_droppings)r#   r$   Zoutput_on_failureZuse_timeoutZxml_liststreamZorig_stdoutZorig_stderrr   outputZxml_datar   )r+   r   runtestT   sH    



r<   c               C   s   t j  d S )N)r   Zreap_childrenr   r   r   r   post_test_cleanup   s    r=   Tc       
         s,  t j| d}d}yt| |}t  t|| j| j| jdb}tj }t	j
| t dd }|d krn fdd}| jrt ||| j}n|  tj | }W d Q R X t  W nT t jk
r }	 z(| j r| j rt|d|	dd	 t|fS d }	~	X n4 tjk
r> }	 z,| j r,| j r,t|d|	dd	 t|fS d }	~	X n tk
rT    Y n t jk
r }	 zB| js|rtd
|d|	tjdd ntd
|dtjdd t|fS d }	~	X nt t jk
r   t|fS    tj }	| jstd
|d|	tjdd t|fS |rt|fS |jr t|fS t |fS d S )Ng        F)pgoZ	test_mainc                 sL   t j } | j }x| jD ]}t|tjd qW | jr>tdtj	| d S )N)filezerrors while loading tests)
unittestZ
TestLoaderZloadTestsFromModuleerrorsprintr1   r3   	Exceptionr   Zrun_unittest)loaderr   error)
the_moduler   r   test_runner   s    
z"runtest_inner.<locals>.test_runnerz
skipped --T)r8   r$   z	failed --)r?   r8   Zfailedz
crashed --)!r   Zunloadr%   r   r   r.   quietr>   time	importlibimport_modulegetattrZ
huntrleaksr   r=   ZResourceDeniedrB   RESOURCE_DENIEDr@   ZSkipTestSKIPPEDKeyboardInterruptZ
TestFailedr1   r3   FAILEDZTestDidNotRunTEST_DID_NOT_RUN	traceback
format_excZchangedENV_CHANGEDr5   )
r#   r$   r'   Z	test_timeZrefleakZabstestZenvironmentZ
start_timerG   msgr   )rF   r   r4      s^    



r4   c       	      C   s  dd l }dd l}dd l}|j  xtjdfD ]}tjj|s>q,tjj	|rXd|j
 }}n&tjj|rrdtj }}ntd| |rtd| ||f  y0ttdrtj||j|jB |jB  || W q, tk
r } z td| |||f tjd	 W Y d d }~X q,X q,W d S )
Nr   Zdb_homeZ	directoryr?   z8os.path says %r exists but is neither directory nor filez%r left behind %s %rchmodz3%r left behind %s %r and it couldn't be removed: %s)r?   )shutilstatgcZcollectr   ZTESTFNr   r   existsisdirZrmtreeisfileunlinkSystemErrorrB   hasattrrV   S_IRWXUS_IRWXGS_IRWXOrC   r1   r3   )	Ztestnamer.   rW   rX   rY   r   ZkindZnukerrU   r   r   r   r9      s.    

r9   c             C   s   | pt jjt jjtpt jS )N)r   r   dirname__file__curdir)r   r   r   r   r     s    r   i)T)N)$r-   rJ   r/   r   r1   rI   rR   r@   r$   r   Ztest.libregrtest.refleakr   r   Ztest.libregrtest.save_envr   r5   rP   rT   rN   rM   ZINTERRUPTEDZCHILD_ERRORrQ   r   ZPROGRESS_MIN_TIMEZSTDTESTSr   ZNOTTESTSr   r!   r%   r<   r=   r4   r9   r   r   r   r   r   <module>   s\   D
?+