a
    kxg+)                     @   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	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g dZ e! Z"g Z#dd Z$dd Z%d2ddZ&de e"fdd Z'd!d" Z(e )d#d$Z*d%d& Z+d'd( Z,d)d* Z-d+d, Z.d3d.d/Z/d0d1 Z0dS )4    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v 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.9/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v r&||v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                    sx  | j }| jd u}|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}zL|t_|t_t| |dd}	|	tkr| }
||
 |  W |t_|t_q|t_|t_0 n| jt_t| || j d}	|r"dd lm  m   fdd|D }nd }t | }t||	||W |rNt  d t_S d t_n|rlt  d t_0 d S )NT)exitF)display_failurer   c                    s   g | ]}  |d qS )zus-ascii)Ztostringdecode).0xZETr   r   
<listcomp>       z_runtest.<locals>.<listcomp>)Zverbose3ZtimeoutfaulthandlerZdump_traceback_latertime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   sb    



  rM   c                 C   sV   zt | |W S    | js>t }td| d| tjdd t|tdd Y S 0 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filerJ   g        N)	rM   pgo	traceback
format_excprintrD   rF   r5   FAILED)r   r   msgr   r   r   runtest   s    rX   c                 C   sH   t  }|| }|jD ]}t|tjd q|jr:tdt	| d S )N)rQ   zerrors while loading tests)
unittestZ
TestLoaderZloadTestsFromModuleerrorsrU   rD   rF   	Exceptionr   Zrun_unittest)
the_moduleloaderr/   errorr   r   r   _test_module   s    

r_   c              	   C   s   t | |}t| t|}t|dd }|d u r>tt|}z.| j	rTt
| ||}n
|  d}W t|| j nt|| j 0 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_   Z
huntrleaksr   cleanup_test_droppingsrA   
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(    



rn   Tc              
   C   s  dt _| jrd}zLt  t|| j| j| jd}t| |}W d    n1 sN0    Y  W n` t jy } z2| js| jst	| d| dd t
W  Y d }~S d }~0  tj y } z2| js| jst	| d| dd tW  Y d }~S d }~0  t jyN } z@d| d}|r&| d| }t	|tjdd	 tW  Y d }~S d }~0  t jyf   t Y S  ty   t	  t Y S    | jst }t	d| d
| tjdd	 t Y S 0 |rtS |jrtS tS )NF)rR   z skipped -- T)rJ   rN   z failedz -- rP   rO   )r   rh   rR   r   r   rA   quietrn   ZResourceDeniedrU   r   rY   ZSkipTestr   Z
TestFailedrD   rF   rV   ZTestDidNotRunr   KeyboardInterruptINTERRUPTEDrS   rT   Zchangedr   r   )r   r   r7   Zenvironmentrm   rW   excr   r   r   rG      sL    .
rG   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y } z*t|  d| d|d	|  W Y d }~qd }~0 0 qd S )
Nr   Z	directoryrQ   zos.path says z) exists but is neither directory nor filez left behind  Tz and it couldn't be removed: )r   rf   ZTESTFNr    r!   existsisdirshutilZrmtreeisfileunlinkRuntimeErrorr   rh   statchmodS_IRWXUS_IRWXGS_IRWXOr[   )r   rA   r0   rv   kindZnukerrz   rr   r   r   r   re   0  s*    re   )N)T)1collectionsr>   rc   rg   r`   rB   r    rD   r?   rS   rY   testr   Ztest.libregrtest.refleakr   r   Ztest.libregrtest.save_envr   Ztest.libregrtest.utilsr   r   r   rV   r   r   r   rq   ZCHILD_ERRORr   r   r   ZPROGRESS_MIN_TIMEZSTDTESTSr)   ZNOTTESTSrj   r   r   r%   r2   r4   
namedtupler5   rM   rX   r_   rn   rG   re   r   r   r   r   <module>   sf   	
9
,
0