
][\&                 @   s   d  Z  d d l Z d d l Z d d l Z d d l m Z m Z d d l m Z d Z	 d Z
 d Z d	 d
   Z d d   Z Gd d   d e  Z e Z d S)zUnittest main program    N   )loaderrunner)installHandlerTzExamples:
  %(prog)s test_module               - run tests from test_module
  %(prog)s module.TestClass          - run tests from module.TestClass
  %(prog)s module.Class.test_method  - run specified test method
aF  Examples:
  %(prog)s                           - run default set of tests
  %(prog)s MyTestSuite               - run suite 'MyTestSuite'
  %(prog)s MyTestCase.testSomething  - run MyTestCase.testSomething
  %(prog)s MyTestCase                - run all 'test*' test methods
                                       in MyTestCase
c             C   s   t  j j |   r |  j   j d  r t  j j |   r t  j j |  t  j    } t  j j |  sx | j t  j	  r| |  S| }  n  |  d  d  j
 d d  j
 d d  S|  S)Nz.py   \./)ospathisfilelowerendswithisabsrelpathgetcwd
startswithpardirreplace)nameZrel_path r   #/usr/lib/python3.4/unittest/main.py_convert_name   s    '$	&r   c             C   s   d d   |  D S)Nc             S   s   g  |  ] } t  |   q Sr   )r   ).0r   r   r   r   
<listcomp>-   s   	 z"_convert_names.<locals>.<listcomp>r   )namesr   r   r   _convert_names,   s    r   c               @   s   e  Z d  Z d Z d Z d Z d Z Z Z Z	 Z
 d Z d d d d e j d d d d d d d 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 d d d  Z d d   Z d S)TestProgramzA command-line program that runs a set of tests; this is primarily
       for making test modules conveniently executable.
    Nr   __main__Tc             C   s"  t  | t  rZ t |  |  _ xB | j d  d d   D] } t |  j |  |  _ q8 Wn	 | |  _ | d  k r{ t j } n  | |  _ | |  _	 |	 |  _
 | |  _ |
 |  _ | d  k r t j r d |  _ n	 | |  _ | |  _ | |  _ | |  _ t j j | d  |  _ |  j |  |  j   d  S)Nr   r   defaultr   )
isinstancestr
__import__modulesplitgetattrsysargvexitfailfast
catchbreak	verbositybufferwarnoptionswarningsdefaultTest
testRunner
testLoaderr   r   basenameprogName	parseArgsrunTests)selfr$   r0   r(   r1   r2   r)   r,   r*   r+   r-   r/   partr   r   r   __init__:   s*     										zTestProgram.__init__c             C   sJ   | r t  |  n  |  j d  k r/ |  j   n  |  j   t j d  d  S)N   )print_discovery_parser_initArgParsers_print_helpr'   r)   )r7   msgr   r   r   	usageExit_   s    
zTestProgram.usageExitc             O   sy   |  j  d  k rJ t |  j j    t t i |  j d 6 |  j j   n+ t |  j j    t t i |  j d 6 d  S)Nprog)	r$   r;   _main_parserZformat_helpMAIN_EXAMPLESr4   r<   
print_helpMODULE_EXAMPLES)r7   argskwargsr   r   r   r>   g   s    zTestProgram._print_helpc             C   sH  |  j    |  j d  k r t |  d k r\ | d j   d k r\ |  j | d d    d  S|  j j | d d   |   |  j s |  j g   d  Sn |  j j | d d   |   |  j r t |  j  |  _	 t
 d k r:d  |  _ q:nQ |  j d  k rd  |  _	 n6 t |  j t  r(|  j f |  _	 n t |  j  |  _	 |  j   d  S)Nr   discoverr:   r   )r=   r$   lenr   _do_discoveryrB   
parse_argstestsr   	testNames__name__r0   r!   r"   listcreateTests)r7   r(   r   r   r   r5   p   s(    
(		zTestProgram.parseArgsc             C   sL   |  j  d  k r* |  j j |  j  |  _ n |  j j |  j  |  j  |  _ d  S)N)rM   r2   ZloadTestsFromModuler$   testZloadTestsFromNames)r7   r   r   r   rP      s    zTestProgram.createTestsc             C   s4   |  j    } |  j |  |  _ |  j |  |  _ d  S)N)_getParentArgParser_getMainArgParserrB   _getDiscoveryArgParserr<   )r7   Zparent_parserr   r   r   r=      s    zTestProgram._initArgParsersc             C   s  t  j d d  } | j d d d d d d d	 d
 d d | j d d d d d d d	 d d d |  j d  k r | j d d d d d d d d d |  _ n  |  j d  k r | j d d d d d d d d d |  _ n  |  j d  k r| j d d d d d d d d d |  _ n  | S)NZadd_helpFz-vz	--verbosedestr,   actionZstore_constZconstr:   helpzVerbose outputz-qz--quietr   zQuiet outputz-fz
--failfastr*   
store_truezStop on first fail or errorz-cz--catchr+   z'Catch ctrl-C and display results so farz-bz--bufferr-   z%Buffer stdout and stderr during tests)argparseArgumentParseradd_argumentr*   r+   r-   )r7   parserr   r   r   rR      s.    zTestProgram._getParentArgParserc             C   sJ   t  j d | g  } |  j | _ |  j | _ | j d d d d d | S)NparentsrL   nargs*rW   z?a list of any number of test modules, classes and test methods.)rY   rZ   r4   rA   r>   rD   r[   )r7   parentr\   r   r   r   rS      s    zTestProgram._getMainArgParserc          	   C   s   t  j d | g  } d |  j | _ d | _ | j d d d d d d	 | j d
 d d d d d | j d d d d d d x3 d D]+ } | j | d d d t  j d t  j q W| S)Nr]   z%s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directoryrU   startrW   z*Directory to start discovery ('.' default)z-pz	--patternpatternz+Pattern to match tests ('test*.py' default)z-tz--top-level-directorytopz<Top level directory of project (defaults to start directory)r^   ?r    )zstartzpatternztop)rY   rZ   r4   rA   Zepilogr[   ZSUPPRESS)r7   r`   r\   argr   r   r   rT      s    		z"TestProgram._getDiscoveryArgParserc             C   s   d |  _  d |  _ d  |  _ | d  k	 rY |  j d  k rC |  j   n  |  j j | |   n  | d  k rn |  j n |   } | j |  j  |  j |  j  |  _ d  S)Nr   ztest*.py)	ra   rb   rc   r<   r=   rK   r2   rH   rQ   )r7   r(   ZLoaderr   r   r   r   rJ      s    			zTestProgram._do_discoveryc             C   s   |  j  r t   n  |  j d  k r1 t j |  _ n  t |  j t  r y4 |  j d |  j d |  j d |  j	 d |  j
  } Wq t k
 r |  j   } Yq Xn	 |  j } | j |  j  |  _ |  j r t j |  j j    n  d  S)Nr,   r*   r-   r/   )r+   r   r1   r   ZTextTestRunnerr!   typer,   r*   r-   r/   	TypeErrorZrunrQ   resultr)   r'   ZwasSuccessful)r7   r1   r   r   r   r6      s     	
				zTestProgram.runTests)rN   
__module____qualname____doc__r$   r,   r*   r+   r-   r4   r/   r<   r   ZdefaultTestLoaderr9   r@   r>   r5   rP   r=   rR   rS   rT   rJ   r6   r   r   r   r   r   0   s&   		"	r   )rk   r'   rY   r    r   r   Zsignalsr   Z
__unittestrC   rE   r   r   objectr   mainr   r   r   r   <module>   s   	