B
    2*\#                 @   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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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 d0d*d+Z!d,d- Z"d1d.d/Z#dS )2    N)support)dash_Rclear_caches)saved_test_environment   iz	%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 |d}||  S )Nz%s)_FORMAT_TEST_RESULTget)Z	test_nameresultZfmt r   CC:\ALexclude\prg\programme\Python37\Lib\test\libregrtest\runtest.pyformat_test_result:   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 )N   Ztest_)z.py )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    | ds| jr|S d| S d S )Nztest.)
startswithr   )nstestr   r   r   get_abs_moduleL   s    r%   c          	      sF  | j }| jd k	}|r$tj| jdd zt| j dt_| jrBg nd  t_	}| j
rXdt_
|rdt_t }tj}tj}zD|t_|t_t| |d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 }
||
f S |r.t  t|| j 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_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   d S )N)r   Zreap_childrenr   r   r   r   post_test_cleanup   s    r=   Tc       
         s*  t | d}d}yt| |}t  t|| j| j| jdb}t	 }t
| t dd }|d krn fdd}| jrt ||| j}n|  t	 | }W d Q R X t  W nR t jk
r }	 z$| js| jst|d|	dd	 t|fS d }	~	X Y n4 tjk
r: }	 z(| js&| js&t|d|	dd	 t|fS d }	~	X Y n tk
rP    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 Y nt t jk
r   t|fS    t }	| 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  } |  }x| jD ]}t|tjd qW | jr>tdt	| 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>   timeZperf_counter	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}|  xtjdfD ]}tj|s>q,tj	|rXd|j
 }}n&tj|rrdtj }}ntd| |rtd| ||f  y0ttdrt||j|jB |jB  || W q, tk
r } ztd| |||f tjd	 W d d }~X Y 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   kindZnukerrU   r   r   r   r9      s.    

r9   c             C   s   | pt jt jtpt jS )N)r   r   dirname__file__curdir)r   r   r   r   r     s    r   )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
?+