B
@ϙ("o @ st d Z ddlZddlZddlZddlmZmZ ddlmZ dZ dZ
dZd d
Zdd Z
d
d ZG dd deZeZdS )zUnittest main program N )loaderrunner)installHandlerTa 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
%(prog)s path/to/test_file.py - run tests from test_file.py
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 sx t j| rt| drtt j| rXt j| t }t j|sP|t j rT| S |} | d d
dd
ddS | S )Nz.py\./)ospathisfilelowerendswithisabsrelpathgetcwd
startswithpardirreplace)nameZrel_path r 2/opt/alt/python37/lib64/python3.7/unittest/main.py
_convert_name s r c C s dd | D S )Nc S s g | ]}t |qS r )r ).0r r r r
. s z"_convert_names..r )namesr r r _convert_names- s r c C s d| krd| } | S )N*z*%s*r )patternr r r _convert_select_pattern1 s r c @ s e Zd ZdZdZdZd Z Z Z Z Z
ZdZdddde
jddddddfdddd Zdd
dZdd
Zdd ZdddZdd Zdd Zdd Zdd Zd ddZdd ZdS )!TestProgramzA command-line program that runs a set of tests; this is primarily
for making test modules conveniently executable.
Nr __main__TF) tb_localsc C s t |tr@t|| _x0|ddd D ]}
t| j|
| _q(W n|| _|d krTtj}|| _|| _ | | _
|| _|
| _|| _
|d krtjsd| _n|| _|| _|| _|| _tj|d | _| | | d S )Nr r defaultr )
isinstancestr
__import__modulesplitgetattrsysargvexitfailfast
catchbreak verbositybufferr" warnoptionswarningsdefaultTest
testRunner
testLoaderr
r basenameprogName parseArgsrunTests)selfr' r3 r+ r4 r5 r, r/ r- r. r0 r2 r" partr r r __init__A s,
zTestProgram.__init__c C s4 |rt | | jd kr| | td d S )N )print_discovery_parser_initArgParsers_print_helpr* r, )r: msgr r r usageExitg s
zTestProgram.usageExitc O sZ | j d kr6t| j ttd| ji | j n t| j ttd| ji d S )Nprog) r' r> _main_parserZformat_help
MAIN_EXAMPLESr7 r?
print_helpMODULE_EXAMPLES)r: argskwargsr r r rA o s
zTestProgram._print_helpc C s | | jd krpt|dkrD|d dkrD| |dd d S | j|dd | | js| g d S n| j|dd | | jrt| j| _ t
dkrd | _n6| jd krd | _ n$t| jt
r| jf| _ nt| j| _ | d S )Nr discoverr= r! )r@ r' lenr
_do_discoveryrE
parse_argstestsr testNames__name__r3 r$ r% listcreateTests)r: r+ r r r r8 x s(
zTestProgram.parseArgsc C st | j r| j | j_ |r@|d kr"| jn| }|| j| j| j| _n0| jd kr\| j| j | _n| j
| j| j | _d S )N)testNamePatternsr5 rK startr toptestrP ZloadTestsFromModuler' ZloadTestsFromNames)r: from_discoveryLoaderr r r r rS s
zTestProgram.createTestsc C s$ | }| || _| || _d S )N)_getParentArgParser_getMainArgParserrE _getDiscoveryArgParserr? )r: Z
parent_parserr r r r@ s zTestProgram._initArgParsersc C s t jdd}|jddddddd |jd
ddddd
d |jddddd | jd krn|jdddddd d| _| jd kr|jdddddd d| _| jd kr|jdddddd d| _| jd kr|jdd d!td"d# g | _|S )$NF)Zadd_helpz-vz --verboser/ Zstore_constr= zVerbose output)destactionZconsthelpz-qz--quietr zQuiet outputz--localsr"
store_truez"Show local variables in tracebacks)r] r^ r_ z-fz
--failfastr- zStop on first fail or errorz-cz--catchr. z'Catch Ctrl-C and display results so farz-bz--bufferr0 z%Buffer stdout and stderr during testsz-krT appendz.Only run tests which match the given substring)r] r^ typer_ )argparseArgumentParseradd_argumentr- r. r0 rT r )r: parserr r r rZ s>
zTestProgram._getParentArgParserc C s2 t j|gd}| j|_| j|_|jdddd |S )N)parentsrO r z?a list of any number of test modules, classes and test methods.)nargsr_ )rc rd r7 rD rA rG re )r: parentrf r r r r[ s zTestProgram._getMainArgParserc C s~ t j|gd}d| j |_d|_|jddddd |jd d
ddd |jd
dddd x"dD ]}|j|dt jt jd q\W |S )N)rg z%s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directoryrU z*Directory to start discovery ('.' default))r] r_ z-pz --patternr z+Pattern to match tests ('test*.py' default)z-tz--top-level-directoryrV z