U
���g+) � @ sv d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlmZ d dl
mZmZ d dlmZ d dlmZmZ dZd ZdZdZd Zd
ZdZdZd
Zedededededededededi ZdZddddddddd d!g
Z e!� Z"g Z#d"d#� Z$d$d%� Z%d;d&d'�Z&de e"fd(d)�Z'd*d+� Z(e �)d,d-�Z*d.d/� Z+d0d1� Z,d2d3� Z-d4d5� Z.d<d7d8�Z/d9d:� Z0dS )=� N)�support)�dash_R�clear_caches)�saved_test_environment)�format_duration�
print_warning� ���������������i����i����z %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 >@Ztest_grammarZtest_opcodesZ test_dictZtest_builtinZtest_exceptionsZ
test_typesZ
test_unittestZtest_doctestZ
test_doctest2Ztest_supportc C s, | j }|ttttfkrdS |tkr(|jS dS )NFT)�result�PASSED�RESOURCE_DENIED�SKIPPED�TEST_DID_NOT_RUN�ENV_CHANGEDZfail_env_changed)r �ns�ok� r �./usr/lib/python3.8/test/libregrtest/runtest.py� is_failedE s r c C s8 t �| jd�}|| j }| jtkr4d|t| j�f }|S )Nz%sz%s (%s))�_FORMAT_TEST_RESULT�getr � test_name�TIMEOUTr � test_time)r Zfmt�textr r r �format_test_resultN s
r c C s | pt j�t j�t��pt jS )N)�os�path�dirname�__file__�curdir)r! r r r �findtestdirV s r% c C sr t | �} t�| �}g }t|�|B }|D ]>}tj�|�\}}|dd� dkr&|dkr&||kr&|�|� q&|t|� S )z-Return a list of all applicable test modules.N� Ztest_)z.py� )r% r �listdir�setr! �splitext�append�sorted) �testdirZstdtestsZnottests�names�testsZothers�name�modZextr r r � findtestsZ s
r2 c C s |� d�s| jr|S d| S d S )Nztest.)�
startswithr- )r r r r r �get_abs_moduleg s r4 �
TestResultz#test_name result test_time xml_datac
sR | j }| jd k }|r$tj| jdd� t�� }�zt� | j
| j� | jrJg nd t_}| j
r`dt_
|r�dt_t�� }tj}tj}z@|t_|t_t| |dd�} | tkr�|�� }
|�|
� |�� W 5 |t_|t_X n| jt_t| || j d�} |�rdd lm m� � fdd�|D �}nd }t�� | }t|| ||�W �S |�rFt�� d t_X d S )NT)�exitF)�display_failurer c s g | ]}� � |��d ��qS )zus-ascii)Ztostring�decode)�.0�x�ZETr r �
<listcomp>� s z_runtest.<locals>.<listcomp>)Zverbose3Ztimeout�faulthandlerZdump_traceback_later�time�perf_counterZcancel_dump_traceback_laterr Zjunit_xml_listZset_match_testsZmatch_testsZignore_testsZxmlpathZfailfast�verbose�io�StringIO�sys�stdout�stderr�_runtest_innerr �getvalue�write�flushZxml.etree.ElementTreeZetreeZElementTreer5 )
r r Zoutput_on_failureZuse_timeoutZ
start_timeZxml_list�streamZorig_stdoutZorig_stderrr �outputZxml_datar r r; r �_runtestr sP
�
�rL c C sV zt | |�W S | js>t�� }td|� d|� �tjdd� t|tdd� Y S X dS )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 �� }|�| �}|jD ]}t|tjd� q|jr:td��t� |� d S )N)rP zerrors while loading tests)
�unittestZ
TestLoaderZloadTestsFromModule�errorsrT rC rE � Exceptionr Zrun_unittest)�
the_module�loaderr/ �errorr r r �_test_module� s
r^ c C s� t | |�}t�|� t�|�}t|dd �}|d kr>t�t|�}z"| jrTt| ||�}n
|� d}W 5 t || j
� X t�
� tjr�dt_t|� dttj�� d�� t�tj� tj�� t�� |S )NZ test_mainFTz created z uncollectable object(s).)r4 r Zunload� importlib�
import_module�getattr� functools�partialr^ �cleanup_test_droppingsr@ Z
huntrleaksr �
gc_collect�gcZgarbage�environment_alteredr �len�
FOUND_GARBAGE�extend�clearZ
reap_children)r r Zabstestr[ Ztest_runner�refleakr r r �_runtest_inner2� s(
rm Tc
C s� dt _| jrd}z8t� t|| j| j| jd��}t| |�}W 5 Q R X W �nj t jk
r� } z.| js~| js~t |� d|� �dd� t
W Y �S d }~X Y �n tjk
r� } z.| js�| js�t |� d|� �dd� t
W Y �S d }~X Y n� t jk
�r@ } z<d|� d�}|�r|� d|� �}t |tjdd � t W Y �S d }~X Y nt t jk
�rZ t Y S tk
�rx t � t Y S | j�s�t�� }t d|� d
|� �tjdd � t Y S X |�r�tS |j�r�tS tS )NF)rQ z skipped -- T)rI rM z failedz -- rO rN )r rg rQ r r r@ �quietrm ZResourceDeniedrT r rX ZSkipTestr Z
TestFailedrC rE rU Z
TestDidNotRunr �KeyboardInterrupt�INTERRUPTEDrR rS Zchangedr r )r r r7 Zenvironmentrl rV �excr r r rF sN �
rF c C s t �� t jfD ]�}tj�|�s"qtj�|�rDdd l}d|j }}n*tj� |�r^dtj
}}ntd|�d���|r�t| � d|� d|��� dt _
z.dd l}t�||j|jB |jB � ||� W q tk
�r } z"t| � d|� d|�d |� �� W 5 d }~X Y qX qd 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 ZTESTFNr r! �exists�isdir�shutilZrmtree�isfile�unlink�RuntimeErrorr rg �stat�chmod�S_IRWXU�S_IRWXG�S_IRWXOrZ )r r@ r0 ru ZkindZnukerry rq r r r rd 0 s& |