o ?Og+@stdZddlZddlZddlZddlmZmZddlmZdZ dZ dZ d d Z d d Z d dZGdddeZeZdS)zUnittest main programN)loaderrunner)installHandlerTaExamples: %(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 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 cCstj|r>|dr>tj|r,tj|t}tj|s(|tj r*|S|}tj |dd dd ddS|S)Nz.py\./) ospathisfilelowerendswithisabsrelpathgetcwd startswithpardirnormpathreplace)nameZrel_pathr4/opt/alt/python310/lib64/python3.10/unittest/main.py _convert_names $rcCsdd|DS)NcSsg|]}t|qSr)r).0rrrr .sz"_convert_names..r)namesrrr_convert_names-srcCsd|vrd|}|S)N*z*%s*r)patternrrr_convert_select_pattern1sr c @seZdZdZdZdZdZZZZ Z Z dZ dddde jddddddf dddd Zdd d Zd d ZddZdddZddZddZddZddZdddZddZdS) TestProgramzA command-line program that runs a set of tests; this is primarily for making test modules conveniently executable. Nr__main__TF) tb_localsc Cst|trt||_|dddD] } t|j| |_qn||_|dur(tj}||_||_ | |_ ||_ | |_ | |_ | durEtjsEd|_n| |_||_||_||_tj|d|_|||dS)Nrrdefaultr) isinstancestr __import__modulesplitgetattrsysargvexitfailfast catchbreak verbositybufferr# warnoptionswarnings defaultTest testRunner testLoaderr r basenameprogName parseArgsrunTests)selfr(r4r,r5r6r-r0r.r/r1r3r#partrrr__init__As.    zTestProgram.__init__cCs4|rt||jdur||tddS)N)print_discovery_parser_initArgParsers _print_helpr+r-)r;msgrrr usageExitgs  zTestProgram.usageExitcOs\|jdurt|jttd|ji|jdSt|jttd|jidS)Nprog) r(r? _main_parserZ format_help MAIN_EXAMPLESr8r@ print_helpMODULE_EXAMPLES)r;argskwargsrrrrBos zTestProgram._print_helpcCs||jdur8t|dkr"|ddkr"||dddS|j|dd||js7|gdSn |j|dd||jrTt|j|_ t dkrSd|_n|j dur]d|_ nt |j t ri|j f|_ nt|j |_ |dS)Nrdiscoverr>r")rAr(lenr _do_discoveryrF parse_argstestsr testNames__name__r4r%r&list createTests)r;r,rrrr9xs,        zTestProgram.parseArgscCsx|jr|j|j_|r!|dur|jn|}||j|j|j|_dS|jdur0|j|j |_dS|j |j|j |_dSN) testNamePatternsr6rLstartrtoptestrQZloadTestsFromModuler(ZloadTestsFromNames)r;from_discoveryLoaderrrrrrTs    zTestProgram.createTestscCs$|}|||_|||_dSrU)_getParentArgParser_getMainArgParserrF_getDiscoveryArgParserr@)r;Z parent_parserrrrrAs zTestProgram._initArgParserscCstjdd}|jddddddd |jd d ddd d d |jddddd|jdur7|jddddddd|_|jdurI|jddddddd|_|jdur[|jddddddd|_|jdurm|jdd d!td"d#g|_|S)$NF)Zadd_helpz-vz --verboser0Z store_constr>zVerbose output)destactionZconsthelpz-qz--quietrz Quiet outputz--localsr# store_truez"Show local variables in tracebacks)r_r`raz-fz --failfastr.zStop on first fail or errorz-cz--catchr/z'Catch Ctrl-C and display results so farz-bz--bufferr1z%Buffer stdout and stderr during testsz-krVappendz.Only run tests which match the given substring)r_r`typera)argparseArgumentParser add_argumentr.r/r1rVr )r;parserrrrr\sL          zTestProgram._getParentArgParsercCs2tj|gd}|j|_|j|_|jdddd|S)NparentsrPrz?a list of any number of test modules, classes and test methods.)nargsra)rerfr8rErBrHrg)r;parentrhrrrr]szTestProgram._getMainArgParsercCsztj|gd}d|j|_d|_|jddddd|jd d d d d|jd dddddD] }|j|dtjtjdq-|S)Nriz %s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directoryrWz*Directory to start discovery ('.' default))r_raz-pz --patternrz+Pattern to match tests ('test*.py' default)z-tz--top-level-directoryrXzs  ]