o
    éT•jn  ã                   @   s2  d 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G dd„ dejƒZG dd„ dƒZ	ddd	„Z
dd
d„Zedkr—ddlm  mZ de_G dd„ dejƒZe ¡ Ze e e¡¡ e ¡ Ze
edd„ ejD ƒƒƒZeejƒZe e¡Z e!de "¡ ƒ e!ddd� e #e  $¡ ¡D ]
Z%e!e% &¡ dd� q‡e!ƒ  dS dS )z=Test runner and result class for the regression test suite.

é    Nc                       sž   e Zd ZdZ‡ fdd„Zedd„ ƒZ‡ fdd„Zddd	„Zed
d„ ƒZ	‡ fdd„Z
‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )ÚRegressionTestResultFc                    sx   t ƒ j|||r	dndd� d| _| jr7ddlm} ddlm} || _| d¡| _	| j	 
d| ¡  d	¡¡ d | _d | _d S )
Né   r   )ÚstreamÚdescriptionsÚ	verbosityT)ÚElementTree)ÚdatetimeÚ	testsuiteÚstartú )ÚsuperÚ__init__ÚbufferÚUSE_XMLÚ	xml.etreer   r   Ú_RegressionTestResult__ETÚElementÚ_RegressionTestResult__suiteÚsetÚutcnowÚ	isoformatÚ_RegressionTestResult__eÚ!_RegressionTestResult__start_time)Úselfr   r   r   ÚETr   ©Ú	__class__© ú./usr/lib/python3.10/test/support/testresult.pyr      s   

ÿ
zRegressionTestResult.__init__c                 C   sJ   z|j }W n ty   t|ƒ Y S w z|ƒ W S  ty$   t|ƒ Y S w ©N)ÚidÚAttributeErrorÚstrÚ	TypeErrorÚrepr)ÚclsÚtestÚtest_idr   r   r   Ú__getId   s   
ÿÿzRegressionTestResult.__getIdc                    s6   t ƒ  |¡ | jr| j | jd¡ | _}t ¡ | _	d S )NÚtestcase)
r   Ú	startTestr   r   Ú
SubElementr   r   ÚtimeÚperf_counterr   )r   r&   Úer   r   r   r*   (   s   zRegressionTestResult.startTestc              	   K   sN  | j sd S | j}d | _|d u rd S | j}| d| d|  |¡¡¡ | d| dd¡¡ | d| dd¡¡ | jrE| dt ¡ | j d›¡ |rm| j	d urZ| j	 
¡  ¡ }|| |d¡_| jd urm| j 
¡  ¡ }|| |d	¡_| ¡ D ]3\}}	|ry|	szqq| ||¡}
t|	d
ƒrŸ|	 ¡ D ]\}}|r˜|
 |t|ƒ¡ q‰t|ƒ|
_q‰qqt|	ƒ|
_qqd S )NÚnameÚstatusÚrunÚresultÚ	completedr,   z0.6fz
system-outz
system-errÚitems)r   r   r   r   ÚpopÚ_RegressionTestResult__getIdr   r,   r-   Ú_stdout_bufferÚgetvalueÚrstripr+   ÚtextÚ_stderr_bufferr4   Úhasattrr"   )r   r&   ÚcaptureÚargsr.   r   ÚstdoutÚstderrÚkÚvÚe2Úk2Úv2r   r   r   Ú_add_result.   s>   


üõz RegressionTestResult._add_resultc                 C   sl   t |tƒr|jdkr|j}n|j› d|j› �}nt|ƒ}t ||d ¡}t |||¡}|d |¡d |¡dœS )NÚbuiltinsÚ.Ú )ÚtypeÚmessagerI   )Ú
isinstancerJ   Ú
__module__Ú__name__r$   Ú	tracebackÚformat_exceptionÚjoin)r%   Úerr_typeÚ	err_valueÚerr_tbÚtypenameÚmsgÚtbr   r   r   Ú__makeErrorDictR   s   

ýz$RegressionTestResult.__makeErrorDictc                    ó(   | j |d| j|Ž d� tƒ  ||¡ d S )NT)Úerror)rF   Ú$_RegressionTestResult__makeErrorDictr   ÚaddError©r   r&   Úerrr   r   r   r\   e   ó   zRegressionTestResult.addErrorc                    rY   )NT)Úoutput)rF   r[   r   ÚaddExpectedFailurer]   r   r   r   ra   i   r_   z'RegressionTestResult.addExpectedFailurec                    rY   )NT)Úfailure)rF   r[   r   Ú
addFailurer]   r   r   r   rc   m   r_   zRegressionTestResult.addFailurec                    s    | j ||d� tƒ  ||¡ d S )N)Úskipped)rF   r   ÚaddSkip)r   r&   Úreasonr   r   r   re   q   s   zRegressionTestResult.addSkipc                    s   |   |¡ tƒ  |¡ d S r   )rF   r   Ú
addSuccess©r   r&   r   r   r   rg   u   s   
zRegressionTestResult.addSuccessc                    s   | j |dd� tƒ  |¡ d S )NÚUNEXPECTED_SUCCESS)Úoutcome)rF   r   ÚaddUnexpectedSuccessrh   r   r   r   rk   y   s   z)RegressionTestResult.addUnexpectedSuccessc                 C   sV   | j stdƒ‚| j}| dt| jƒ¡ | dtt| jƒƒ¡ | dtt| jƒƒ¡ |S )NzUSE_XML is falseÚtestsÚerrorsÚfailures)	r   Ú
ValueErrorr   r   r"   ÚtestsRunÚlenrm   rn   )r   r.   r   r   r   Úget_xml_element}   s   z$RegressionTestResult.get_xml_element©F)rN   rM   Ú__qualname__r   r   Úclassmethodr6   r*   rF   r[   r\   ra   rc   re   rg   rk   rr   Ú__classcell__r   r   r   r   r      s     

$
r   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚQuietRegressionTestRunnerFc                 C   s   t |d dƒ| _|| j_d S )Nr   )r   r2   r   )r   r   r   r   r   r   r   ‡   s   z"QuietRegressionTestRunner.__init__c                 C   s   || j ƒ | j S r   )r2   rh   r   r   r   r1   ‹   s   
zQuietRegressionTestRunner.runNrs   )rN   rM   rt   r   r1   r   r   r   r   rw   †   s    
rw   Fc                 C   s&   | rt jtjt|| d�S t jt|d�S )N)Úresultclassr   r   )r   )Ú	functoolsÚpartialÚunittestÚTextTestRunnerr   rw   )r   r   r   r   r   Úget_test_runner_class�   s   ýr}   c                 C   s   t ||ƒ| ƒS r   )r}   )r   r   Úcapture_outputr   r   r   Úget_test_runner—   ó   r   Ú__main__Tc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	TestTestsc                 C   s   d S r   r   ©r   r   r   r   Ú	test_passŸ   s   zTestTests.test_passc                 C   s   t  d¡ d S )Ng      ð?)r,   Úsleeprƒ   r   r   r   Útest_pass_slow¢   r€   zTestTests.test_pass_slowc                 C   s*   t dtjd� t dtjd� |  d¡ d S )Nr?   ©Úfiler@   zfailure message)ÚprintÚsysr?   r@   Úfailrƒ   r   r   r   Ú	test_fail¥   s   zTestTests.test_failc                 C   s$   t dtjd� t dtjd� tdƒ‚)Nr?   r‡   r@   zerror message)r‰   rŠ   r?   r@   ÚRuntimeErrorrƒ   r   r   r   Ú
test_errorª   s   zTestTests.test_errorN)rN   rM   rt   r„   r†   rŒ   rŽ   r   r   r   r   r‚   ž   s
    r‚   c                 c   s   � | ]}|d kV  qdS )z-vNr   )Ú.0Úar   r   r   Ú	<genexpr>²   s   € r‘   zOutput:zXML: rI   )Úendrs   )'Ú__doc__ry   ÚiorŠ   r,   rO   r{   ÚTextTestResultr   rw   r}   r   rN   Úxml.etree.ElementTreeÚetreer   r   r   ÚTestCaser‚   Ú	TestSuiteÚsuiteÚaddTestÚ	makeSuiteÚStringIOr   ÚsumÚargvÚ
runner_clsr?   Úrunnerr1   r2   r‰   r8   Útostringlistrr   ÚsÚdecoder   r   r   r   Ú<module>   s6    z
	



á