B
    `1)                 @   sv  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	Z	d dl
Z
d dlmZ d dlmZmZ d dlmZ d dlmZmZ dZd ZdZdZd	Zd
ZdZdZdZed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"g Z#d"d# Z$d$d% Z%d;d&d'Z&de e"fd(d)Z'd*d+ Z(e )d,d-Z*d.d/ Z+d0d1 Z,d2d3 Z-d4d5 Z.d<d7d8Z/d9d: Z0dS )=    N)support)dash_Rclear_caches)saved_test_environment)format_durationprint_warning   iiz	%s passedz	%s failedz%s failed (env changed)z
%s skippedz%s skipped (resource denied)z%s interruptedz
%s crashedz%s run no testsz%s timed outg      >@Ztest_grammarZtest_opcodesZ	test_dictZtest_builtinZtest_exceptionsZ
test_typesZtest_unittestZtest_doctestZtest_doctest2Ztest_supportc             C   s,   | j }|ttttfkrdS |tkr(|jS dS )NFT)resultPASSEDRESOURCE_DENIEDSKIPPEDTEST_DID_NOT_RUNENV_CHANGEDZfail_env_changed)r   nsok r   ./usr/lib/python3.7/test/libregrtest/runtest.py	is_failedE   s    r   c             C   s8   t | jd}|| j }| jtkr4d|t| jf }|S )Nz%sz%s (%s))_FORMAT_TEST_RESULTgetr   	test_nameTIMEOUTr   	test_time)r   Zfmttextr   r   r   format_test_resultN   s
    

r   c             C   s   | pt jt jtpt jS )N)ospathdirname__file__curdir)r!   r   r   r   findtestdirV   s    r%   c       	      C   sv   t | } t| }g }t||B }xF|D ]>}tj|\}}|dd dkr(|dkr(||kr(|| q(W |t| S )z-Return a list of all applicable test modules.N   Ztest_)z.py )r%   r    listdirsetr!   splitextappendsorted)	testdirZstdtestsZnottestsnamestestsZothersnamemodZextr   r   r   	findtestsZ   s    

 r2   c             C   s    | ds| jr|S d| S d S )Nztest.)
startswithr-   )r   r   r   r   r   get_abs_moduleg   s    r4   
TestResultz#test_name result test_time xml_datac                sN  | j }| jd k	}|r$tj| jdd t }zt| j| j	 | j
rJg nd  t_}| jr`dt_|rdt_t }tj}tj}z@|t_|t_t| |dd}	|	tkr| }
||
 |  W d |t_|t_X n| jt_t| || j d}	|rdd lm  m   fdd|D }nd }t | }t||	||S |rBt  d t_X d S )NT)exitF)display_failurer   c                s   g | ]}  |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_latertimeZperf_counterr   Zset_match_testsZmatch_testsZignore_testsZxmlpathZjunit_xml_listZfailfastverboseioStringIOsysstdoutstderr_runtest_innerr   getvaluewriteflushZxml.etree.ElementTreeZetreeZElementTreer5   Zcancel_dump_traceback_later)r   r   Zoutput_on_failureZuse_timeoutZ
start_timeZxml_liststreamZorig_stdoutZorig_stderrr   outputZxml_datar   r   )r;   r   _runtestr   sL    


rK   c             C   sN   y
t | |S    | js<t }td| d| tjdd t|tddS dS )a  Run a single test.

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

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

        INTERRUPTED      KeyboardInterrupt
        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.
        TIMEOUT          test timed out.

    If ns.xmlpath is not None, xml_data is a list containing each
    generated testsuite element.
    ztest z crashed -- T)filerH   g        N)	rK   pgo	traceback
format_excprintrB   rD   r5   FAILED)r   r   msgr   r   r   runtest   s    
rS   c             C   sL   t  }|| }x|jD ]}t|tjd qW |jr>tdt	| d S )N)rL   zerrors while loading tests)
unittestZ
TestLoaderZloadTestsFromModuleerrorsrP   rB   rD   	Exceptionr   Zrun_unittest)
the_moduleloaderr/   errorr   r   r   _test_module   s    
rZ   c          	   C   s   t | |}t| t|}t|dd }|d kr>tt|}z"| j	rTt
| ||}n
|  d}W d t|| j X t  tjrdt_t| dttj d ttj tj  t  |S )NZ	test_mainFTz	 created z uncollectable object(s).)r4   r   Zunload	importlibimport_modulegetattr	functoolspartialrZ   Z
huntrleaksr   cleanup_test_droppingsr?   
gc_collectgcZgarbageenvironment_alteredr   lenFOUND_GARBAGEextendclearZreap_children)r   r   ZabstestrW   Ztest_runnerrefleakr   r   r   _runtest_inner2   s(    



ri   Tc          
   C   s  dt _| jrd}y8t  t|| j| j| jd}t| |}W d Q R X W nD t jk
r } z&| js~| js~t	| d| dd t
S d }~X Y  n tjk
r } z&| js| jst	| d| dd tS d }~X Y n t jk
r( } z4d| d}|r| d| }t	|tjdd	 tS d }~X Y nf t jk
r>   tS  tk
rX   t	  tS    | jst }t	d| d
| tjdd	 tS |rtS |jrtS tS )NF)rM   z skipped -- T)rH   ztest z failedz -- )rL   rH   z crashed -- )r   rc   rM   r   r   r?   quietri   ZResourceDeniedrP   r   rT   ZSkipTestr   Z
TestFailedrB   rD   rQ   ZTestDidNotRunr   KeyboardInterruptINTERRUPTEDrN   rO   Zchangedr   r   )r   r   r7   Zenvironmentrh   rR   excr   r   r   rE      sJ    rE   c             C   s  t   xt jfD ]}tj|s$qtj|rFdd l}d|j }}n*tj	|r`dtj
 }}ntd|d|rtd| ||f  dt _y.dd l}t||j|jB |jB  || W q tk
r } z"t|  d| d	|d
|  W d d }~X Y qX qW d S )Nr   Z	directoryrL   zos.path says z) exists but is neither directory nor filez%r left behind %s %rTz left behind  z and it couldn't be removed: )r   ra   ZTESTFNr    r!   existsisdirshutilZrmtreeisfileunlinkRuntimeErrorr   rc   statchmodS_IRWXUS_IRWXGS_IRWXOrV   )r   r?   r0   rq   ZkindZnukerru   rm   r   r   r   r`   0  s&    r`   )N)T)1collectionsr=   r^   rb   r[   r@   r    rB   r>   rN   rT   Ztestr   Ztest.libregrtest.refleakr   r   Ztest.libregrtest.save_envr   Ztest.libregrtest.utilsr   r   r   rQ   r   r   r   rl   ZCHILD_ERRORr   r   r   ZPROGRESS_MIN_TIMEZSTDTESTSr)   ZNOTTESTSre   r   r   r%   r2   r4   
namedtupler5   rK   rS   rZ   ri   rE   r`   r   r   r   r   <module>   st   	
9
,
0