g.~ ddlZddlZddlZddlZddlmZmZddlmZdZ dZ dZ dZ d Z d Zd ZGd d eZeZy)N)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 c,tjj|r|jj drtjj |rttjj |tj}tjj |s|jtjr|S|}tjj|ddjddjddS|S)Nz.py\./) ospathisfilelowerendswithisabsrelpathgetcwd startswithpardirnormpathreplace)namerel_paths 4/opt/alt/python312/lib64/python3.12/unittest/main.py _convert_namers  ww~~d 5 5e < 77== wwtRYY[9Hww}}X&(*=*=bii*H Dww%cr*224=EEc3OO Kc>|Dcgc] }t|c}Scc}wN)r)namesrs r_convert_namesr!/s,1 2EDM$ E 22 2scd|vrd|z}|S)N*z*%s*)patterns r_convert_select_patternr&3s '>7" Nrc eZdZ dZdZdxZxZxZxZxZ Z dZ dddde jddddddf ddddZddZd Zd Zdd Zd Zd ZdZdZddZdZy) TestProgramNr__main__TF) tb_locals durationsc >t|trEt||_|j dddD]}t |j||_n||_|t j}||_||_ | |_ ||_ | |_ | |_ | |_| t jsd|_n| |_||_||_||_t(j*j-|d|_|j1||j3y)Nr rdefaultr) isinstancestr __import__modulesplitgetattrsysargvexitfailfast catchbreak verbositybufferr*r+ warnoptionswarnings defaultTest testRunner testLoaderr rbasenameprogName parseArgsrunTests)selfr1r=r5r>r?r6r9r7r8r:r<r*r+parts r__init__zTestProgram.__init__Cs fc "$V,DK S)!"-%dkk48 .!DK <88D   $" ""  COO&DM%DM&$$((a1  t rctjdt|r t||j|j |j tjdy)NzHTestProgram.usageExit() is deprecated and will be removed in Python 3.13) r<warnDeprecationWarningprint_discovery_parser_initArgParsers _print_helpr4r6)rDmsgs r usageExitzTestProgram.usageExitksP 01C E  #J  ! ! )  "   rcV|j\t|jjttd|j iz|j jyt|jjttd|j izy)Nprog) r1rK _main_parser format_help MAIN_EXAMPLESrArL print_helpMODULE_EXAMPLES)rDargskwargss rrNzTestProgram._print_helpusx ;;  $##//1 2 -64=="99 :  " " - - / $##//1 2 /VT]]$;; ""48,    ( (ab4 8::""2&    ( (ab4 8 ::+DJJ7DN:%"    %!DN ((# ."..0DN!$"2"23DN rc|jr|j|j_|rM| |jn|}|j|j|j|j |_y|j+|jj|j|_y|jj|j|j|_yr) testNamePatternsr?r[startr%toptestr`loadTestsFromModuler1loadTestsFromNames)rDfrom_discoveryLoaderrs rrczTestProgram.createTestss  /3/D/DDOO , (.T__FHF' DLL$((KDI ^^ #;;DKKHDI::4>>;?;;HDIrc||j}|j||_|j||_yr)_getParentArgParser_getMainArgParserrS_getDiscoveryArgParserrL)rD parent_parsers rrMzTestProgram._initArgParserss6002  22=A!%!tjd}|jdddddd |jd d ddd d |jdddd|jddtddd|j|jdddddd|_|j |jdddddd|_|j |jd d!d"dd#d|_|j!|jd$d%d&td'(g|_|S))NF)add_helpz-vz --verboser9 store_constrHzVerbose output)destactionconsthelpz-qz--quietrz Quiet outputz--localsr* store_truez"Show local variables in tracebacks)rurvrxz --durationsr+Nz+Show the N slowest test cases (N=0 for all))rutyper-metavarrxz-fz --failfastr7zStop on first fail or errorz-cz--catchr8z'Catch Ctrl-C and display results so farz-bz--bufferr:z%Buffer stdout and stderr during testsz-kreappendz.Only run tests which match the given substring)rurvr{rx) argparseArgumentParser add_argumentintr7r8r:rer&)rDparsers rrnzTestProgram._getParentArgParsersr((%8D+K#0!1  3 D)+#0!/  1 J[#/!E  G M #$(#!N  P ==   l'3%B  D"DM ?? "   il'3%N  P$DO ;;    jx'3%L  N DK  (   +='/6M%U  W%'D ! rctj|g}|j|_|j|_|j ddd|S)Nparentsr_r#z?a list of any number of test modules, classes and test methods.)nargsrx)r~rrArRrNrVr)rDparentrs rrozTestProgram._getMainArgParsersP((&:mm  ,,G3"8  9 rcXtj|g}d|jz|_d|_|j dddd|j d d d d |j d ddddD]3}|j |dtj tj 5|S)Nrz %s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directoryrfz*Directory to start discovery ('.' default))rurxz-pz --patternr%z+Pattern to match tests ('test*.py' default)z-tz--top-level-directoryrgzrTextTestRunnerr.r{r9r7r:r<r*r+ TypeErrorrunrhresultr6testsRunr\skippedr4_NO_TESTS_EXITCODE wasSuccessful)rDr>s rrCzTestProgram.runTestssa ??   ?? "$33DO doot , / I!%4>>:>--8< :>--;?>>;?>> "1"KJ"J nnTYY/ 99{{##q(S1D1D-E-J+,**,  !I!%4>>:>--8< :>--"1"IJI  /!__.  /s,AE<C" &P=: HL $L * =!rr()r4r~r r<rrsignalsr __unittestrrUrWrr!r&objectr(mainr$rrrsX  #    3 g&gTr