U
    `+)                     @   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.8/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   sr   t | } t| }g }t||B }|D ]>}tj|\}}|dd dkr&|dkr&||kr&|| q&|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                    sR  | 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 5 |t_|t_X n| jt_t| || j d}	|rdd lm  m   fdd|D }nd }t | }t||	||W S |rFt  d t_X d S )NT)exitF)display_failurer   c                    s   g | ]}  |d qS )zus-ascii)Ztostringdecode).0xZETr   r   
<listcomp>   s     z_runtest.<locals>.<listcomp>)Zverbose3ZtimeoutfaulthandlerZdump_traceback_latertimeperf_counterZcancel_dump_traceback_laterr   Zjunit_xml_listZset_match_testsZmatch_testsZignore_testsZxmlpathZfailfastverboseioStringIOsysstdoutstderr_runtest_innerr   getvaluewriteflushZxml.etree.ElementTreeZetreeZElementTreer5   )r   r   Zoutput_on_failureZuse_timeoutZ
start_timeZxml_liststreamZorig_stdoutZorig_stderrr   outputZxml_datar   r   r;   r   _runtestr   sP    


rL   c                 C   sV   zt | |W S    | js>t }td| d| tjdd t|tdd Y S X 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.
    test  crashed -- TfilerI   g        N)	rL   pgo	traceback
format_excprintrC   rE   r5   FAILED)r   r   msgr   r   r   runtest   s     rW   c                 C   sH   t  }|| }|jD ]}t|tjd q|jr:tdt	| d S )N)rP   zerrors while loading tests)
unittestZ
TestLoaderZloadTestsFromModuleerrorsrT   rC   rE   	Exceptionr   Zrun_unittest)
the_moduleloaderr/   errorr   r   r   _test_module   s    

r^   c              	   C   s   t | |}t| t|}t|dd }|d kr>tt|}z"| jrTt| ||}n
|  d}W 5 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partialr^   cleanup_test_droppingsr@   Z
huntrleaksr   
gc_collectgcZgarbageenvironment_alteredr   lenFOUND_GARBAGEextendclearZreap_children)r   r   Zabstestr[   Ztest_runnerrefleakr   r   r   _runtest_inner2   s(    



rm   Tc              
   C   s  dt _| jrd}z8t  t|| j| j| jd}t| |}W 5 Q R X W nj t jk
r } z.| js~| js~t	| d| dd t
 W Y S d }~X Y n tjk
r } z.| js| jst	| d| dd t W Y S d }~X Y n t jk
r@ } z<d| d}|r| d| }t	|tjdd	 t W Y S d }~X Y nt t jk
rZ   t Y S  tk
rx   t	  t Y S    | jst }t	d| d
| tjdd	 t Y S X |rtS |jrtS tS )NF)rQ   z skipped -- T)rI   rM   z failedz -- rO   rN   )r   rg   rQ   r   r   r@   quietrm   ZResourceDeniedrT   r   rX   ZSkipTestr   Z
TestFailedrC   rE   rU   ZTestDidNotRunr   KeyboardInterruptINTERRUPTEDrR   rS   Zchangedr   r   )r   r   r7   Zenvironmentrl   rV   excr   r   r   rF      sN     
rF   c                 C   s  t   t jfD ]}tj|s"qtj|rDdd l}d|j }}n*tj	|r^dtj
 }}ntd|d|rt|  d| d| dt _z.dd l}t||j|jB |jB  || W q tk
r  } z"t|  d| d|d	|  W 5 d }~X Y qX qd S )
Nr   Z	directoryrP   zos.path says z) exists but is neither directory nor filez left behind  Tz and it couldn't be removed: )r   re   ZTESTFNr    r!   existsisdirshutilZrmtreeisfileunlinkRuntimeErrorr   rg   statchmodS_IRWXUS_IRWXGS_IRWXOrZ   )r   r@   r0   ru   ZkindZnukerry   rq   r   r   r   rd   0  s&    rd   )N)T)1collectionsr=   rb   rf   r_   rA   r    rC   r>   rR   rX   Ztestr   Ztest.libregrtest.refleakr   r   Ztest.libregrtest.save_envr   Ztest.libregrtest.utilsr   r   r   rU   r   r   r   rp   ZCHILD_ERRORr   r   r   ZPROGRESS_MIN_TIMEZSTDTESTSr)   ZNOTTESTSri   r   r   r%   r2   r4   
namedtupler5   rL   rW   r^   rm   rF   rd   r   r   r   r   <module>   s            	
9
,
0