B
    v9a                 @   sX   d dl Z d dlZd dlZddlmZ d dlmZ dZdd ZdZ	d	Z
G d
d deZdS )    N   )util)wrapsTc                s   t   fdd}|S )Nc                s$   t | ddr|    | f||S )NfailfastF)getattrstop)selfargskw)method /usr/lib/python3.7/result.pyinner   s    zfailfast.<locals>.inner)r   )r   r   r   )r   r   r      s    r   z
Stdout:
%sz
Stderr:
%sc               @   s   e Zd ZdZdZdZd-ddZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zedd Zedd Zdd Zdd Zdd Zdd Zedd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, ZdS ).
TestResultNFc             C   sb   d| _ g | _g | _d| _g | _g | _g | _d| _d| _d| _	d | _
d | _tj| _tj| _d| _d S )NFr   )r   failureserrorstestsRunskippedexpectedFailuresunexpectedSuccesses
shouldStopbuffer	tb_locals_stdout_buffer_stderr_buffersysstdout_original_stdoutstderr_original_stderr_mirrorOutput)r   streamZdescriptions	verbosityr   r   r   __init__&   s    zTestResult.__init__c             C   s   d S )Nr   )r   r   r   r   printErrors7   s    zTestResult.printErrorsc             C   s    |  j d7  _ d| _|   d S )Nr   F)r   r    _setupStdout)r   testr   r   r   	startTest:   s    zTestResult.startTestc             C   s8   | j r4| jd kr$t | _t | _| jt_| jt_d S )N)r   r   ioStringIOr   r   r   r   )r   r   r   r   r%   @   s    


zTestResult._setupStdoutc             C   s   d S )Nr   )r   r   r   r   startTestRunH   s    zTestResult.startTestRunc             C   s   |    d| _d S )NF)_restoreStdoutr    )r   r&   r   r   r   stopTestN   s    zTestResult.stopTestc             C   s   | j r| jrltj }tj }|rF|ds6|d7 }| jt	|  |rl|ds\|d7 }| j
t|  | jt_| j
t_| jd | j  | jd | j  d S )N
r   )r   r    r   r   getvaluer   endswithr   writeSTDOUT_LINEr   STDERR_LINEr   seektruncater   )r   outputerrorr   r   r   r+   S   s$    




zTestResult._restoreStdoutc             C   s   d S )Nr   )r   r   r   r   stopTestRunh   s    zTestResult.stopTestRunc             C   s"   | j || ||f d| _d S )NT)r   append_exc_info_to_stringr    )r   r&   errr   r   r   addErrorn   s    zTestResult.addErrorc             C   s"   | j || ||f d| _d S )NT)r   r8   r9   r    )r   r&   r:   r   r   r   
addFailurev   s    zTestResult.addFailurec             C   sZ   |d k	rVt | ddr|   t|d |jr4| j}n| j}||| ||f d| _d S )Nr   Fr   T)	r   r   
issubclassfailureExceptionr   r   r8   r9   r    )r   r&   Zsubtestr:   r   r   r   r   
addSubTest}   s    zTestResult.addSubTestc             C   s   d S )Nr   )r   r&   r   r   r   
addSuccess   s    zTestResult.addSuccessc             C   s   | j ||f d S )N)r   r8   )r   r&   reasonr   r   r   addSkip   s    zTestResult.addSkipc             C   s   | j || ||f d S )N)r   r8   r9   )r   r&   r:   r   r   r   addExpectedFailure   s    zTestResult.addExpectedFailurec             C   s   | j | d S )N)r   r8   )r   r&   r   r   r   addUnexpectedSuccess   s    zTestResult.addUnexpectedSuccessc             C   s>   t | jt | j  kodkn  o<t| d p<t | jdkS )Nr   r   )lenr   r   hasattrr   )r   r   r   r   wasSuccessful   s    $zTestResult.wasSuccessfulc             C   s
   d| _ d S )NT)r   )r   r   r   r   r      s    zTestResult.stopc             C   s   |\}}}x|r"|  |r"|j}qW ||jkr:| |}nd }tj||||| jd}t| }| j	rt
j }	t
j }
|	r|	ds|	d7 }	|t|	  |
r|
ds|
d7 }
|t|
  d|S )N)limitcapture_localsr-    )_is_relevant_tb_leveltb_nextr>   _count_relevant_tb_levels	tracebackTracebackExceptionr   listformatr   r   r   r.   r   r/   r8   r1   r2   join)r   r:   r&   exctypevaluetblengthZtb_eZmsgLinesr5   r6   r   r   r   r9      s*    






zTestResult._exc_info_to_stringc             C   s   d|j jkS )N
__unittest)tb_frame	f_globals)r   rU   r   r   r   rK      s    z TestResult._is_relevant_tb_levelc             C   s*   d}x |r$|  |s$|d7 }|j}qW |S )Nr   r   )rK   rL   )r   rU   rV   r   r   r   rM      s
    
z$TestResult._count_relevant_tb_levelsc             C   s&   dt | j| jt| jt| jf S )Nz!<%s run=%i errors=%i failures=%i>)r   Zstrclass	__class__r   rE   r   r   )r   r   r   r   __repr__   s    zTestResult.__repr__)NNN)__name__
__module____qualname__Z_previousTestClassZ_testRunEnteredZ_moduleSetUpFailedr#   r$   r'   r%   r*   r,   r+   r7   r   r;   r<   r?   r@   rB   rC   rD   rG   r   r9   rK   rM   r[   r   r   r   r   r      s0   
	r   )r(   r   rN   rJ   r   	functoolsr   rW   r   r1   r2   objectr   r   r   r   r   <module>   s   