j f&@sdZddlZddlZddlZddlmZmZddlmZdZ dZ dZ d d Z d d Z Gd ddeZeZdS)zUnittest main programN)loaderrunner)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 aFExamples: %(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 cCstjj|r|jjdrtjj|rtjj|tj}tjj|sx|jtj r||S|}n|ddj ddj ddS|S)Nz.py\./) ospathisfilelowerendswithisabsrelpathgetcwd startswithpardirreplace)nameZrel_pathr2/opt/alt/python34/lib64/python3.4/unittest/main.py _convert_names'$ &rcCsdd|DS)NcSsg|]}t|qSr)r).0rrrr -s z"_convert_names..r)namesrrr_convert_names,src @seZdZdZdZdZdZZZZ Z dZ dddde j dddddddd Zddd Zd d Zd d ZddZddZddZddZddZdddZddZdS) TestProgramzA command-line program that runs a set of tests; this is primarily for making test modules conveniently executable. Nr__main__Tc Cs"t|trZt||_xB|jdddD]} t|j| |_q8Wn ||_|dkr{tj}n||_||_ | |_ ||_ | |_ | dkrtj rd|_n | |_||_||_||_tjj|d|_|j||jdS)Nrrdefaultr) isinstancestr __import__modulesplitgetattrsysargvexitfailfast catchbreak verbositybuffer warnoptionswarnings defaultTest testRunner testLoaderr r basenameprogName parseArgsrunTests) selfr$r0r(r1r2r)r,r*r+r-r/partrrr__init__:s*               zTestProgram.__init__cCsJ|rt|n|jdkr/|jn|jtjddS)N)print_discovery_parser_initArgParsers _print_helpr'r))r7msgrrr usageExit_s    zTestProgram.usageExitcOsy|jdkrJt|jjtti|jd6|jjn+t|jjtti|jd6dS)Nprog) r$r; _main_parserZ format_help MAIN_EXAMPLESr4r< print_helpMODULE_EXAMPLES)r7argskwargsrrrr>gs zTestProgram._print_helpcCsH|j|jdkrt|dkr\|djdkr\|j|dddS|jj|dd||js|jgdSn|jj|dd||jrt|j|_ t dkr:d|_q:nQ|j dkrd|_ n6t |j t r(|j f|_ nt|j |_ |jdS)Nrdiscoverr:r)r=r$lenr _do_discoveryrB parse_argstestsr testNames__name__r0r!r"list createTests)r7r(rrrr5ps( (     zTestProgram.parseArgscCsL|jdkr*|jj|j|_n|jj|j|j|_dS)N)rMr2ZloadTestsFromModuler$testZloadTestsFromNames)r7rrrrPszTestProgram.createTestscCs4|j}|j||_|j||_dS)N)_getParentArgParser_getMainArgParserrB_getDiscoveryArgParserr<)r7Z parent_parserrrrr=s zTestProgram._initArgParsersc Cstjdd}|jddddddd d d d |jd dddddd dd d|jdkr|jddddddd dd|_n|jdkr|jddddddd dd|_n|jdkr|jddddddd dd|_n|S)NZadd_helpFz-vz --verbosedestr,actionZ store_constZconstr:helpzVerbose outputz-qz--quietrz Quiet outputz-fz --failfastr* store_truezStop 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)argparseArgumentParser add_argumentr*r+r-)r7parserrrrrRs.     zTestProgram._getParentArgParsercCsJtjd|g}|j|_|j|_|jddddd|S)NparentsrLnargs*rWz?a list of any number of test modules, classes and test methods.)rYrZr4rAr>rDr[)r7parentr\rrrrSs   zTestProgram._getMainArgParserc Cstjd|g}d|j|_d|_|jdddddd |jd d dd dd |jddddddx3dD]+}|j|dddtjdtjqW|S)Nr]z %s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directoryrUstartrWz*Directory to start discovery ('.' default)z-pz --patternpatternz+Pattern to match tests ('test*.py' default)z-tz--top-level-directorytopzr5rPr=rRrSrTrJr6rrrrr0s&    "     r)rkr'rYr rrZsignalsrZ __unittestrCrErrobjectrmainrrrrs