
.c`õ(  ã               @   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)ÚinstallHandlerTzÔExamples:
  %(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| }  |  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.5/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 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__TÚ	tb_localsFc            C   s(  t  | t ƒ rZ t | ƒ |  _ xB | j d ƒ d d  … D] } t |  j | ƒ |  _ q8 Wn	 | |  _ | d  k rx t j } | |  _ | |  _	 |	 |  _
 | |  _ |
 |  _ | |  _ | 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Úbufferr    ÚwarnoptionsÚwarningsÚdefaultTestÚ
testRunnerÚ
testLoaderr   r   ÚbasenameÚprogNameÚ	parseArgsÚrunTests)Úselfr%   r1   r)   r2   r3   r*   r-   r+   r,   r.   r0   r    Úpartr   r   r   Ú__init__:   s,     												zTestProgram.__init__c             C   sD   | r t  | ƒ |  j d  k r) |  j ƒ  |  j ƒ  t j d ƒ d  S)Né   )ÚprintÚ_discovery_parserÚ_initArgParsersÚ_print_helpr(   r*   )r8   Úmsgr   r   r   Ú	usageExit`   s    


zTestProgram.usageExitc             O   sw   |  j  d  k rI t |  j j ƒ  ƒ t t d |  j i ƒ |  j j ƒ  n* t |  j j ƒ  ƒ t t d |  j i ƒ d  S)NÚprog)	r%   r<   Ú_main_parserZformat_helpÚMAIN_EXAMPLESr5   r=   Ú
print_helpÚMODULE_EXAMPLES)r8   ÚargsÚkwargsr   r   r   r?   h   s    zTestProgram._print_helpc             C   sE  |  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 r7d  |  _ 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_discoveryrC   Ú
parse_argsÚtestsr   Ú	testNamesÚ__name__r1   r"   r#   ÚlistÚcreateTests)r8   r)   r   r   r   r6   q   s(    
(		zTestProgram.parseArgsc             C   sL   |  j  d  k r* |  j j |  j ƒ |  _ n |  j j |  j  |  j ƒ |  _ d  S)N)rN   r3   ZloadTestsFromModuler%   ÚtestZloadTestsFromNames)r8   r   r   r   rQ   Ž   s    zTestProgram.createTestsc             C   s4   |  j  ƒ  } |  j | ƒ |  _ |  j | ƒ |  _ d  S)N)Ú_getParentArgParserÚ_getMainArgParserrC   Ú_getDiscoveryArgParserr=   )r8   Zparent_parserr   r   r   r>   •   s    zTestProgram._initArgParsersc             C   s3  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 d d d d d d ƒ|  j d  k r» | j d d d d d d d d ƒd |  _ |  j d  k rõ | j d d d d d d d d ƒd |  _ |  j d  k r/| j d d d d d d d d  ƒd |  _ | S)!NZadd_helpFz-vz	--verboseÚdestr-   ÚactionZstore_constZconstr;   ÚhelpzVerbose outputz-qz--quietr   zQuiet outputz--localsr    Ú
store_truez"Show local variables in tracebacksz-fz
--failfastr+   z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.   )r8   Úparserr   r   r   rS   š   s4    			zTestProgram._getParentArgParserc             C   sJ   t  j d | g ƒ } |  j | _ |  j | _ | j d d d d d ƒ| S)NÚparentsrM   ÚnargsÚ*rX   z?a list of any number of test modules, classes and test methods.)rZ   r[   r5   rB   r?   rE   r\   )r8   Úparentr]   r   r   r   rT   ¸   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-directoryrV   ÚstartrX   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)rZ   r[   r5   rB   Zepilogr\   ZSUPPRESS)r8   ra   r]   Úargr   r   r   rU   Ã   s    		z"TestProgram._getDiscoveryArgParserc             C   s–   d |  _  d |  _ d  |  _ | d  k	 rS |  j d  k r@ |  j ƒ  |  j j | |  ƒ | d  k rh |  j n | ƒ  } | j |  j  |  j |  j ƒ |  _ d  S)Nr   ztest*.py)	rb   rc   rd   r=   r>   rL   r3   rI   rR   )r8   r)   ÚLoaderr   r   r   r   rK   Ø   s    			
zTestProgram._do_discoveryc             C   s)  |  j  r t ƒ  |  j d  k r+ t j |  _ t |  j t ƒ rç y† y= |  j d |  j d |  j d |  j	 d |  j
 d |  j ƒ } WnB t k
 rÁ |  j d |  j d |  j d |  j	 d |  j
 ƒ } Yn XWqð t k
 rã |  j ƒ  } Yqð Xn	 |  j } | j |  j ƒ |  _ |  j r%t j |  j j ƒ  ƒ d  S)Nr-   r+   r.   r0   r    )r,   r   r2   r   ZTextTestRunnerr"   Útyper-   r+   r.   r0   r    Ú	TypeErrorZrunrR   Úresultr*   r(   ZwasSuccessful)r8   r2   r   r   r   r7   æ   s.    								zTestProgram.runTests)rO   Ú
__module__Ú__qualname__Ú__doc__r%   r-   r+   r,   r.   r5   r0   r=   r   ZdefaultTestLoaderr:   rA   r?   r6   rQ   r>   rS   rT   rU   rK   r7   r   r   r   r   r   0   s&   		#	r   )rm   r(   rZ   r   Ú r   r   Zsignalsr   Z
__unittestrD   rF   r   r   Úobjectr   Úmainr   r   r   r   Ú<module>   s   	Ó