a
    Kb                     @   s8  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ddlm  m	Z
 ddlmZ G dd dejZG dd dZdd	d
ZdddZedkr4G 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 )z=Test runner and result class for the regression test suite.

    N)datetimec                       s   e 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 )RegressionTestResultc                    sT   t  j|||rdndd d| _td| _| jdt 	d d | _
d | _d S )N   r   )streamdescriptions	verbosityTZ	testsuitestart )super__init__bufferETZElement_RegressionTestResult__suitesetr   ZutcnowZ	isoformat_RegressionTestResult__e!_RegressionTestResult__start_time)selfr   r   r   	__class__ (lib/python3.9/test/support/testresult.pyr      s    

zRegressionTestResult.__init__c                 C   sR   z
|j }W n ty$   t| Y S 0 z| W S  tyH   t| Y S 0 t|S N)idAttributeErrorstr	TypeErrorrepr)clstestZtest_idr   r   r   Z__getId   s    
zRegressionTestResult.__getIdc                    s.   t  | t| jd | _}t | _d S )NZtestcase)	r
   	startTestr   
SubElementr   r   timeperf_counterr   )r   r   er   r   r   r   (   s    zRegressionTestResult.startTestFc              	   K   sD  | j }d | _ |d u rd S |d|d| | |d|dd |d|dd | jrz|dt | j d |r| jd ur| j 	 }|t
|d_| jd ur| j 	 }|t
|d	_| D ]l\}}|r|sqt
||}	t|d
r4| D ],\}
}|
r$|	|
t| n
t||	_qqt||	_qd S )NnameZstatusrunresultZ	completedr!   z0.6fz
system-outz
system-erritems)r   r   pop_RegressionTestResult__getIdr   r!   r"   Z_stdout_buffergetvaluerstripr   r    textZ_stderr_bufferr'   hasattrr   )r   r   Zcaptureargsr#   stdoutstderrkvZe2Zk2Zv2r   r   r   _add_result-   s4    

z RegressionTestResult._add_resultc                 C   sl   t |tr0|jdkr|j}q8|j d|j }nt|}t||d }t|||}|d|d|dS )Nbuiltins. )typemessager6   )
isinstancer7   
__module____name__r   	tracebackformat_exceptionjoin)r   Zerr_typeZ	err_valueZerr_tbtypenamemsgtbr   r   r   Z__makeErrorDictM   s    

z$RegressionTestResult.__makeErrorDictc                    s(   | j |d| j| d t || d S )NT)error)r3   $_RegressionTestResult__makeErrorDictr
   addErrorr   r   errr   r   r   rD   `   s    zRegressionTestResult.addErrorc                    s(   | j |d| j| d t || d S )NT)output)r3   rC   r
   addExpectedFailurerE   r   r   r   rH   d   s    z'RegressionTestResult.addExpectedFailurec                    s(   | j |d| j| d t || d S )NT)Zfailure)r3   rC   r
   
addFailurerE   r   r   r   rI   h   s    zRegressionTestResult.addFailurec                    s    | j ||d t || d S )N)Zskipped)r3   r
   addSkip)r   r   reasonr   r   r   rJ   l   s    zRegressionTestResult.addSkipc                    s   |  | t | d S r   )r3   r
   
addSuccessr   r   r   r   r   rL   p   s    
zRegressionTestResult.addSuccessc                    s   | j |dd t | d S )NZUNEXPECTED_SUCCESS)Zoutcome)r3   r
   addUnexpectedSuccessrM   r   r   r   rN   t   s    z)RegressionTestResult.addUnexpectedSuccessc                 C   sH   | j }|dt| j |dtt| j |dtt| j |S )NZtestserrorsfailures)r   r   r   ZtestsRunlenrO   rP   )r   r#   r   r   r   get_xml_elementx   s
    z$RegressionTestResult.get_xml_element)F)r;   r:   __qualname__r   classmethodr)   r   r3   rC   rD   rH   rI   rJ   rL   rN   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   r&   r   )r   r   r   r   r   r   r      s    z"QuietRegressionTestRunner.__init__c                 C   s   || j  | j S r   )r&   rM   r   r   r   r%      s    
zQuietRegressionTestRunner.runN)F)r;   r:   rS   r   r%   r   r   r   r   rV      s   
rV   Fc                 C   s&   | rt jtjt|| dS t jt|dS )N)Zresultclassr   r   )r   )	functoolspartialunittestZTextTestRunnerr   rV   )r   r   r   r   r   get_test_runner_class   s    rZ   c                 C   s   t ||| S r   )rZ   )r   r   Zcapture_outputr   r   r   get_test_runner   s    r[   __main__c                   @   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   s    zTestTests.test_pass_slowc                 C   s*   t dtjd t dtjd | d d S )Nr/   filer0   zfailure message)printsysr/   r0   Z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d S )Nr/   rb   r0   zerror message)rd   re   r/   r0   RuntimeErrorr^   r   r   r   
test_error   s    zTestTests.test_errorN)r;   r:   rS   r_   ra   rf   rh   r   r   r   r   r]      s   r]   c                 c   s   | ]}|d kV  qdS )z-vNr   ).0ar   r   r   	<genexpr>       rk   zOutput:zXML: r6   )end)F)F)'__doc__rW   iore   r!   r<   rY   Zxml.etree.ElementTreeZetreeZElementTreer   r   ZTextTestResultr   rV   rZ   r[   r;   ZTestCaser]   Z	TestSuiteZsuiteZaddTestZ	makeSuiteStringIOr   sumargvZ
runner_clsr/   Zrunnerr%   r&   rd   r*   ZtostringlistrR   sdecoder   r   r   r   <module>   s2   o	




