
][\<                 @   s   d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d Z Gd d   d e	  Z
 Gd	 d
   d
 e j  Z Gd d   d e	  Z d S)zRunning tests    N   )result)registerResultTc               @   s=   e  Z d  Z d Z d d   Z d d   Z d d d  Z d S)	_WritelnDecoratorz@Used to decorate file-like objects with a handy 'writeln' methodc             C   s   | |  _  d  S)N)stream)selfr    r   %/usr/lib/python3.4/unittest/runner.py__init__   s    z_WritelnDecorator.__init__c             C   s+   | d k r t  |   n  t |  j |  S)Nr   __getstate__)zstreamz__getstate__)AttributeErrorgetattrr   )r   attrr   r   r	   __getattr__   s    z_WritelnDecorator.__getattr__Nc             C   s'   | r |  j  |  n  |  j  d  d  S)N
)write)r   argr   r   r	   writeln   s    z_WritelnDecorator.writeln)__name__
__module____qualname____doc__r
   r   r   r   r   r   r	   r      s   r   c                   s   e  Z d  Z d Z d d Z d d Z   f d d   Z 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   f d d   Z d d   Z d d   Z   S)TextTestResultzhA test result class that can print formatted text results to a stream.

    Used by TextTestRunner.
    =F   -c                sP   t  t |   j | | |  | |  _ | d k |  _ | d k |  _ | |  _ d  S)Nr   )superr   r
   r   showAlldotsdescriptions)r   r   r   	verbosity)	__class__r   r	   r
   %   s
    	zTextTestResult.__init__c             C   sB   | j    } |  j r4 | r4 d j t |  | f  St |  Sd  S)Nr   )ZshortDescriptionr   joinstr)r   testZdoc_first_liner   r   r	   getDescription,   s    zTextTestResult.getDescriptionc                s\   t  t |   j |  |  j rX |  j j |  j |   |  j j d  |  j j   n  d  S)Nz ... )r   r   	startTestr   r   r   r%   flush)r   r$   )r!   r   r	   r&   3   s
    	zTextTestResult.startTestc                s_   t  t |   j |  |  j r2 |  j j d  n) |  j r[ |  j j d  |  j j   n  d  S)Nok.)	r   r   
addSuccessr   r   r   r   r   r'   )r   r$   )r!   r   r	   r*   :   s    		zTextTestResult.addSuccessc                sb   t  t |   j | |  |  j r5 |  j j d  n) |  j r^ |  j j d  |  j j   n  d  S)NERRORE)	r   r   addErrorr   r   r   r   r   r'   )r   r$   err)r!   r   r	   r-   B   s    		zTextTestResult.addErrorc                sb   t  t |   j | |  |  j r5 |  j j d  n) |  j r^ |  j j d  |  j j   n  d  S)NFAILF)	r   r   
addFailurer   r   r   r   r   r'   )r   r$   r.   )r!   r   r	   r1   J   s    		zTextTestResult.addFailurec                sk   t  t |   j | |  |  j r> |  j j d j |   n) |  j rg |  j j d  |  j j	   n  d  S)Nzskipped {0!r}s)
r   r   addSkipr   r   r   formatr   r   r'   )r   r$   reason)r!   r   r	   r3   R   s    		zTextTestResult.addSkipc                sb   t  t |   j | |  |  j r5 |  j j d  n) |  j r^ |  j j d  |  j j   n  d  S)Nzexpected failurex)	r   r   addExpectedFailurer   r   r   r   r   r'   )r   r$   r.   )r!   r   r	   r7   Z   s    		z!TextTestResult.addExpectedFailurec                s_   t  t |   j |  |  j r2 |  j j d  n) |  j r[ |  j j d  |  j j   n  d  S)Nzunexpected successu)	r   r   addUnexpectedSuccessr   r   r   r   r   r'   )r   r$   )r!   r   r	   r9   b   s    		z#TextTestResult.addUnexpectedSuccessc             C   sL   |  j  s |  j r" |  j j   n  |  j d |  j  |  j d |  j  d  S)Nr+   r/   )r   r   r   r   printErrorListerrorsfailures)r   r   r   r	   printErrorsj   s    zTextTestResult.printErrorsc             C   sx   xq | D]i \ } } |  j  j |  j  |  j  j d | |  j |  f  |  j  j |  j  |  j  j d |  q Wd  S)Nz%s: %sz%s)r   r   
separator1r%   
separator2)r   Zflavourr;   r$   r.   r   r   r	   r:   p   s
    #zTextTestResult.printErrorList)r   r   r   r   r>   r?   r
   r%   r&   r*   r-   r1   r3   r7   r9   r=   r:   r   r   )r!   r	   r      s   

r   c            	   @   sU   e  Z d  Z d Z e Z d d d d d d d d d  Z d d	   Z d
 d   Z d S)TextTestRunnerzA test runner class that displays results in textual form.

    It prints out the names of tests as they are run, errors as they
    occur, and a summary of the results at the end of the test run.
    NTr   Fc             C   sp   | d  k r t  j } n  t |  |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | d  k	 rl | |  _	 n  d  S)N)
sysstderrr   r   r   r    failfastbufferwarningsresultclass)r   r   r   r    rC   rD   rF   rE   r   r   r	   r
      s    					zTextTestRunner.__init__c             C   s   |  j  |  j |  j |  j  S)N)rF   r   r   r    )r   r   r   r	   _makeResult   s    zTextTestRunner._makeResultc             C   s  |  j    } t |  |  j | _ |  j | _ t j    |  j r t j |  j  |  j d k r t j d d t d d q n  t	 j	   } t
 | d d  } | d k	 r |   n  z | |  Wd t
 | d	 d  } | d k	 r |   n  Xt	 j	   } Wd QX| | } | j   t | d
  r;|  j j | j  n  | j } |  j j d | | d k red phd | f  |  j j   d }	 }
 } y% t t | j | j | j f  } Wn t k
 rYn X| \ }	 }
 } g  } | j   sO|  j j d  t | j  t | j  } } | r2| j d |  n  | r_| j d |  q_n |  j j d  | ry| j d |  n  |	 r| j d |	  n  |
 r| j d |
  n  | r|  j j d d j |  f  n |  j j d  | S)z&Run the given test case or test suite.defaultalwaysmodulecategorymessagezPlease use assert\w+ instead.startTestRunNstopTestRunr?   zRan %d test%s in %.3fsr   r2    r   ZFAILEDzfailures=%dz	errors=%dZOKz
skipped=%dzexpected failures=%dzunexpected successes=%dz (%s)z, r   )zdefaultzalways)rG   r   rC   rD   rE   catch_warningssimplefilterfilterwarningsDeprecationWarningtimer   r=   hasattrr   r   r?   ZtestsRunmaplenZexpectedFailuresunexpectedSuccessesskippedr   ZwasSuccessfulr   r<   r;   appendr"   )r   r$   r   Z	startTimerM   rN   ZstopTimeZ	timeTakenrunZexpectedFailsrX   rY   ZresultsZinfosZfailedZerroredr   r   r	   r[      sp    
	


	##zTextTestRunner.run)	r   r   r   r   r   rF   r
   rG   r[   r   r   r   r	   r@   x   s   	r@   )r   rA   rT   rE   rO   r   Zsignalsr   Z
__unittestobjectr   Z
TestResultr   r@   r   r   r   r	   <module>   s   [