a
    "h<0                     @  s  d dl m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 d dl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	d"d#d$d%d&Z)d@d'd(Z*de%e'fd)d*Z+d"d+d+d,d-d.Z,d"d+d	d,d/d0Z-d"d+d	d,d1d2Z.d3d4 Z/d"d+d#d,d5d6Z0dAd"d+d#d	d8d9d:Z1d+d;d<d=d>d?Z2dS )B    )annotationsN)support)dash_Rclear_caches)	Namespace)saved_test_environment)format_durationprint_warningc                   @  s0   e Zd Zdddddddd	Zdd
ddZdS )
TestResult        Nstrfloatlist[str] | NoneNone)nameduration_secxml_datareturnc                 C  s   || _ || _|| _d S N)r   r   r   )selfr   r   r    r   @/opt/python-3.9.21/usr/lib/python3.9/test/libregrtest/runtest.py__init__   s    zTestResult.__init__r   c                 C  s   | j  dS )Nz	 finishedr   r   r   r   r   __str__    s    zTestResult.__str__)r   N)__name__
__module____qualname__r   r   r   r   r   r   r
      s     
r
   c                   @  s   e Zd ZddddZdS )Passedr   r   c                 C  s   | j  dS )Nz passedr   r   r   r   r   r   %   s    zPassed.__str__Nr   r   r   r   r   r   r   r   r    $   s   r    c                      s<   e Zd Zdddddddd fd	d
ZddddZ  ZS )Failedr   Nr   r   r   zlist[tuple[str, str]] | Noner   )r   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__r   c              
   C  s   | j rl| jrlt| j }t| j}d|dkr.dnd }d|dkrBdnd }| j d| d| d| d| d	
S | j rt| j }d|dkrdnd }| j d| d| d	S | jrt| j}d|dkrdnd }| j d| d| d	S | j d
S )Nerror   s Zfailurez	 failed ( z, ) failed)r#   r$   lenr   )r   leZlfZerror_sZ	failure_sr   r   r   r   6   s    

$

zFailed.__str__)r   NNN)r   r   r   r   r   __classcell__r   r   r&   r   r"   )   s       r"   c                   @  s   e Zd ZddddZdS )UncaughtExceptionr   r   c                 C  s   | j  dS )Nz failed (uncaught exception)r   r   r   r   r   r   L   s    zUncaughtException.__str__Nr!   r   r   r   r   r2   K   s   r2   c                   @  s   e Zd ZddddZdS )
EnvChangedr   r   c                 C  s   | j  dS )Nz failed (env changed)r   r   r   r   r   r   Q   s    zEnvChanged.__str__Nr!   r   r   r   r   r3   P   s   r3   c                   @  s   e Zd ZddddZdS )RefLeakr   r   c                 C  s   | j  dS )Nz failed (reference leak)r   r   r   r   r   r   V   s    zRefLeak.__str__Nr!   r   r   r   r   r4   U   s   r4   c                   @  s   e Zd ZddddZdS )Skippedr   r   c                 C  s   | j  dS )Nz skippedr   r   r   r   r   r   [   s    zSkipped.__str__Nr!   r   r   r   r   r5   Z   s   r5   c                   @  s   e Zd ZddddZdS )ResourceDeniedr   r   c                 C  s   | j  dS )Nz skipped (resource denied)r   r   r   r   r   r   `   s    zResourceDenied.__str__Nr!   r   r   r   r   r6   _   s   r6   c                   @  s   e Zd ZddddZdS )Interruptedr   r   c                 C  s   | j  dS )Nz interruptedr   r   r   r   r   r   e   s    zInterrupted.__str__Nr!   r   r   r   r   r7   d   s   r7   c                   @  s   e Zd ZddddZdS )
ChildErrorr   r   c                 C  s   | j  dS )Nz crashedr   r   r   r   r   r   j   s    zChildError.__str__Nr!   r   r   r   r   r8   i   s   r8   c                   @  s   e Zd ZddddZdS )	DidNotRunr   r   c                 C  s   | j  dS )Nz ran no testsr   r   r   r   r   r   o   s    zDidNotRun.__str__Nr!   r   r   r   r   r9   n   s   r9   c                   @  s   e Zd ZddddZdS )Timeoutr   r   c                 C  s   | j  dt| j dS )Nz timed out (r-   )r   r   r   r   r   r   r   r   t   s    zTimeout.__str__Nr!   r   r   r   r   r:   s   s   r:   g      >@)
Ztest_grammarZtest_opcodesZ	test_dictZtest_builtinZtest_exceptionsZ
test_typesZtest_unittestZtest_doctestZtest_doctest2Ztest_supportr   bool)resultnsr   c                 C  s   t | tr|jS t | tS r   )
isinstancer3   Zfail_env_changedr"   )r<   r=   r   r   r   	is_failed   s    
r?   c                 C  s   | pt jt jtpt jS r   )ospathdirname__file__curdir)rA   r   r   r   findtestdir   s    rE   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.pyr+   )rE   r@   listdirsetrA   splitextappendsorted)	testdirZstdtestsZnottestsnamestestsZothersr   modextr   r   r   	findtests   s    
 rQ   r   )r=   	test_namer   c                 C  s    | ds| jr|S d| S d S )Nztest.)
startswithrL   )r=   rR   r   r   r   get_abs_module   s    rT   c                   sn  | 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}zN|t_|t_t| |dd}	t|	ts| }
||
 |  W |t_|t_q|t_|t_0 n| jt_t| || j d}	|r$dd lm  m   fdd|D |	_t | |	_|	W |rDt  d t_S d t_n|rbt  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>   s   z_runtest.<locals>.<listcomp>)Zverbose3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>   r    getvaluewriteflushZxml.etree.ElementTreeZetreeZElementTreer   r   Zcancel_dump_traceback_later)r=   rR   Zoutput_on_failureZuse_timeoutZ
start_timeZxml_liststreamZorig_stdoutZorig_stderrr<   outputr   rZ   r   _runtest   sd    





  rl   c                 C  sP   zt | |W S    | js>t }td| d| tjdd t| Y S 0 d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fileri   N)rl   pgo	traceback
format_excprintrc   re   r"   )r=   rR   msgr   r   r   runtest   s    rv   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loadTestsFromModuler#   rt   rc   re   	Exceptionr   Zrun_unittest)
the_moduleloaderrN   r(   r   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).)rT   r   Zunload	importlibimport_modulegetattr	functoolspartialr{   Z
huntrleaksr   cleanup_test_droppingsr`   
gc_collectgcZgarbageenvironment_alteredr	   r/   FOUND_GARBAGEextendclearreap_children)r=   rR   Zabstestry   Ztest_runnerrefleakr   r   r   _runtest_inner2
  s(    



r   T)r=   rR   rV   r   c              
   C  sd  dt _| jrd}zLt  t|| j| j| jd}t| |}W d    n1 sN0    Y  W n t jy } z6| js| jst	| d| dd t|W  Y d }~S d }~0  t
j y } z6| js| jst	| d| dd t|W  Y d }~S d }~0  t jyd } zNd| d}|r.| d| }t	|tjdd	 t||j|jd
W  Y d }~S d }~0  t jy } zDd| d}|r| d| }t	|tjdd	 t|W  Y d }~S d }~0  t jy   t| Y S  ty   t	  t| Y S    | js0t }t	d| d| tjdd	 t| Y S 0 |rLt|S |jr\t|S t|S )NF)rq   z skipped -- T)ri   rm   r.   z -- ro   )r#   r$   rn   )r   r   rq   r   r   r`   quietr   r6   rt   rw   ZSkipTestr5   ZTestFailedWithDetailsrc   re   r"   r#   r$   Z
TestFailedZTestDidNotRunr9   KeyboardInterruptr7   rr   rs   r2   r4   changedr3   r    )r=   rR   rV   Zenvironmentr   ru   excr   r   r   rf   6  sX    .&rf   intr   )rR   r`   r   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	directoryrp   zos.path says z) exists but is neither directory nor filez left behind r,   Tz and it couldn't be removed: )r   r   ZTESTFNr@   rA   existsisdirshutilrmtreeisfileunlinkRuntimeErrorr	   r   statchmodS_IRWXUS_IRWXGS_IRWXOrx   )rR   r`   r   r   kindZnukerr   r   r   r   r   r   n  s*    r   )N)T)3Z
__future__r   r]   r   r   r|   ra   r@   rc   r^   rr   rw   testr   Ztest.libregrtest.refleakr   r   Ztest.libregrtest.cmdliner   Ztest.libregrtest.save_envr   Ztest.libregrtest.utilsr   r	   r
   r    r"   r2   r3   r4   r5   r6   r7   r8   r9   r:   ZPROGRESS_MIN_TIMEZSTDTESTSrH   ZNOTTESTSr   r?   rE   rQ   rT   rl   rv   r{   r   rf   r   r   r   r   r   <module>   sT   "
9
- 8