o
    éT•j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 ¡ }z‹t | 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�}	|r�dd lm  m‰  ‡ fdd„|D ƒ|	_t ¡ | |	_|	W |ržt ¡  d t_S |r¨t ¡  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r‰d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