o
    f1                  	   @   sB  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 d dlmZ d dlmZ d dlmZmZmZ G dd dZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ G dd deZ!dZ"g d Z#e$ Z%g Z&d!ed"ed#e'fd$d%Z(d>d&d'Z)de#e%fd(d)Z*d"ed*e+d#e+fd+d,Z,d"ed*e+d#efd-d.Z-d"ed*e+d#efd/d0Z.d1d2 Z/d"ed*e+fd3d4Z0d"ed*e+d#e'fd5d6Z1	7d?d"ed*e+d8e'd#efd9d:Z2d*e+d;e3d#dfd<d=Z4dS )@    N)support)	os_helper)	Namespace)saved_test_environment)clear_cachesformat_durationprint_warningc                	   @   sB   e Zd Z		ddededee dB ddfddZdefd	d
ZdS )
TestResult        Nnameduration_secxml_datareturnc                 C   s   || _ || _|| _d S N)r   r   r   )selfr   r   r    r   //usr/lib/python3.10/test/libregrtest/runtest.py__init__   s   
zTestResult.__init__c                 C      | j  dS )Nz	 finishedr   r   r   r   r   __str__      zTestResult.__str__)r
   N)__name__
__module____qualname__strfloatlistr   r   r   r   r   r   r	      s    


r	   c                   @      e Zd ZdefddZdS )Passedr   c                 C   r   )Nz passedr   r   r   r   r   r   #   r   zPassed.__str__Nr   r   r   r   r   r   r   r   r   r    "       r    c                       sv   e Zd Z				ddededee dB deeeef  dB deeeef  dB ddf fd	d
ZdefddZ  Z	S )Failedr
   Nr   r   r   errorsfailuresr   c                    s"   t  j|||d || _|| _d S )N)r   r   )superr   r$   r%   )r   r   r   r   r$   r%   	__class__r   r   r   (   s   
zFailed.__init__c              
   C   s   | j r6| jr6t| j }t| j}d|dkrdnd }d|dkr!dnd }| j d| d| d| d| d	
S | j rTt| j }d|dkrEdnd }| j d| d| d	S | jrrt| j}d|dkrcdnd }| j d| d| d	S | j d
S )Nerror   s failurez	 failed ( z, ) failed)r$   r%   lenr   )r   lelferror_s	failure_sr   r   r   r   4   s   

$

zFailed.__str__)r
   NNN)
r   r   r   r   r   r   tupler   r   __classcell__r   r   r'   r   r#   '   s&    
r#   c                   @   r   )UncaughtExceptionr   c                 C   r   )Nz failed (uncaught exception)r   r   r   r   r   r   J   r   zUncaughtException.__str__Nr!   r   r   r   r   r8   I   r"   r8   c                   @   r   )
EnvChangedr   c                 C   r   )Nz failed (env changed)r   r   r   r   r   r   O   r   zEnvChanged.__str__Nr!   r   r   r   r   r9   N   r"   r9   c                   @   r   )RefLeakr   c                 C   r   )Nz failed (reference leak)r   r   r   r   r   r   T   r   zRefLeak.__str__Nr!   r   r   r   r   r:   S   r"   r:   c                   @   r   )Skippedr   c                 C   r   )Nz skippedr   r   r   r   r   r   Y   r   zSkipped.__str__Nr!   r   r   r   r   r;   X   r"   r;   c                   @   r   )ResourceDeniedr   c                 C   r   )Nz skipped (resource denied)r   r   r   r   r   r   ^   r   zResourceDenied.__str__Nr!   r   r   r   r   r<   ]   r"   r<   c                   @   r   )Interruptedr   c                 C   r   )Nz interruptedr   r   r   r   r   r   c   r   zInterrupted.__str__Nr!   r   r   r   r   r=   b   r"   r=   c                   @   r   )
ChildErrorr   c                 C   r   )Nz crashedr   r   r   r   r   r   h   r   zChildError.__str__Nr!   r   r   r   r   r>   g   r"   r>   c                   @   r   )	DidNotRunr   c                 C   r   )Nz ran no testsr   r   r   r   r   r   m   r   zDidNotRun.__str__Nr!   r   r   r   r   r?   l   r"   r?   c                   @   r   )Timeoutr   c                 C   s   | j  dt| j dS )Nz timed out (r/   )r   r   r   r   r   r   r   r   r   s   zTimeout.__str__Nr!   r   r   r   r   r@   q   r"   r@   g      >@)
test_grammartest_opcodes	test_dicttest_builtintest_exceptions
test_typestest_unittesttest_doctesttest_doctest2test_supportresultnsr   c                 C   s   t | tr|jS t | tS r   )
isinstancer9   fail_env_changedr#   )rK   rL   r   r   r   	is_failed   s   

rO   c                 C   s   | pt jt jtpt jS r   )ospathdirname__file__curdir)rQ   r   r   r   findtestdir   s   rU   c           	      C   sr   t | } t| }g }t||B }|D ]}tj|\}}|dd dkr2|dv r2||vr2|| q|t| S )z-Return a list of all applicable test modules.N   test_)z.pyr,   )rU   rP   listdirsetrQ   splitextappendsorted)	testdirstdtestsnottestsnamestestsothersr   modextr   r   r   	findtests   s   
 
re   	test_namec                 C   s   | ds| jr
|S d| S )Nztest.)
startswithr]   rL   rf   r   r   r   get_abs_module   s   ri   c                    sX  | j }| jd u}|rtj| jdd t }zt| j| j	 | j
r$g nd  t_}| jr/dt_|rmdt_t }tj}tj}z'|t_|t_t| |dd}	t|	ts^| }
||
 |  W |t_|t_n|t_|t_w | jt_t| || j d}	|rdd lm  m   fdd|D |	_t | |	_|	W |rt  d t_S |rt  d t_w )NT)exitF)display_failurer   c                    s   g | ]
}  |d qS )zus-ascii)tostringdecode).0xETr   r   
<listcomp>   s    z_runtest.<locals>.<listcomp>)verbose3timeoutfaulthandlerdump_traceback_latertimeperf_counterr   set_match_testsmatch_testsignore_testsxmlpathjunit_xml_listfailfastverboseioStringIOsysstdoutstderr_runtest_innerrM   r    getvaluewriteflushxml.etree.ElementTreeetreeElementTreer   r   cancel_dump_traceback_later)rL   rf   output_on_failureuse_timeout
start_timexml_liststreamorig_stdoutorig_stderrrK   outputr   rp   r   _runtest   s^   



r   c                 C   sJ   zt | |W S    | jst }td| d| tjdd t| Y S )a  Run a single test.

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

    Returns a TestResult sub-class depending on the kind of result received.

    If ns.xmlpath is not None, xml_data is a list containing each
    generated testsuite element.
    test  crashed -- Tfiler   )r   pgo	traceback
format_excprintr   r   r#   )rL   rf   msgr   r   r   runtest   s   r   c                 C   sH   t  }|| }|jD ]	}t|tjd q|jrtdt	| d S )N)r   zerrors while loading tests)
unittest
TestLoaderloadTestsFromModuler$   r   r   r   	Exceptionr   run_unittest)
the_moduleloaderra   r)   r   r   r   _test_module   s   

r   c                 C   s   t || j| j| jdS )N)r   )r   r   quietr   rh   r   r   r   save_env  s   r   c              	   C   s  t | |}ztj|= W n	 ty   Y nw t|}| jr#ddlm} t	|dd }|d u r3t
t|}z,t| | | jrD|| ||}n|  d}W d    n1 sSw   Y  W t|| j nt|| j w t  tjrdt_t| dttj d ttj tj  t  |S )Nr   )dash_R	test_mainFTz	 created z uncollectable object(s).)ri   r   modulesKeyError	importlibimport_module
huntrleakstest.libregrtest.refleakr   getattr	functoolspartialr   r   cleanup_test_droppingsr   r   
gc_collectgcgarbageenvironment_alteredr   r1   FOUND_GARBAGEextendclearreap_children)rL   rf   abstestr   r   test_runnerrefleakr   r   r   _runtest_inner2  s<   


r   Trk   c              
   C   sF  dt _| jrd}zt  t| | t| |}W d    n1 s!w   Y  W n t jyO } z| jsA| jsAt| d| dd t|W  Y d }~S d }~w t	j
yv } z| jsh| jsht| d| dd t|W  Y d }~S d }~w t jy } z&d| d}|r| d| }t|tjdd t||j|jd	W  Y d }~S d }~w t jy } z!d| d}|r| d| }t|tjdd t|W  Y d }~S d }~w t jy   t| Y S  ty   t  t| Y S    | js
t }td| d
| tjdd t| Y S |rt|S t jrt|S t|S )NFz skipped -- T)r   r   r0   z -- r   )r$   r%   r   )r   r   r   r   r   r   r<   r   r   r   SkipTestr;   TestFailedWithDetailsr   r   r#   r$   r%   
TestFailedTestDidNotRunr?   KeyboardInterruptr=   r   r   r8   r:   r9   r    )rL   rf   rk   r   r   excr   r   r   r   ?  sd   r   r   c                 C   s  t   tjfD ]x}tj|sqtj|r"dd l}d|j	}}ntj
|r/dtj}}ntd|d|rHt|  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 }~ww d S )
Nr   	directoryr   zos.path says z) exists but is neither directory nor filez left behind r.   Tz and it couldn't be removed: )r   r   r   TESTFNrP   rQ   existsisdirshutilrmtreeisfileunlinkRuntimeErrorr   r   statchmodS_IRWXUS_IRWXGS_IRWXOr   )rf   r   r   r   kindnukerr   r   r   r   r   r   w  s0   r   r   )T)5ru   r   r   r   r   rP   r   rw   r   r   testr   test.supportr   test.libregrtest.cmdliner   test.libregrtest.save_envr   test.libregrtest.utilsr   r   r   r	   r    r#   r8   r9   r:   r;   r<   r=   r>   r?   r@   PROGRESS_MIN_TIMESTDTESTSrY   NOTTESTSr   boolrO   rU   re   r   ri   r   r   r   r   r   r   intr   r   r   r   r   <module>   sf    "
9
4
8