o
    fn                     @   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rd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 qe!  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| qt||
_qqqt|	|
_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
	



