U .‘cK`ã@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*dZ+Gd d „d ƒZ,d d d „Z-dS)éN)Ú _parse_args)Ú findtestsÚruntestÚget_abs_moduleÚSTDTESTSÚNOTTESTSÚPASSEDÚFAILEDÚ ENV_CHANGEDÚSKIPPEDÚRESOURCE_DENIEDÚ INTERRUPTEDÚ CHILD_ERRORÚTEST_DID_NOT_RUNÚTIMEOUTÚPROGRESS_MIN_TIMEÚformat_test_resultÚ is_failed)Ú setup_tests)Úsetup_pgo_tests)ÚremovepyÚcountÚformat_durationÚ printlist)Úsupportg^@c@sÞeZdZdZdd„Zdd„Zd7dd„Zd8d d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd9d1d2„Zd3d4„Zd5d6„Zd0S):ÚRegrtestalExecute a test suite. This also parses command-line options and modifies its behavior accordingly. tests -- a list of strings containing test names (optional) testdir -- the directory in which to look for tests (optional) Users other than the Python test suite will certainly want to specify testdir; if it's omitted, the directory containing the Python test suite is searched for. If the tests argument is omitted, the tests listed on the command-line will be used. If that's empty, too, then all *.py files beginning with test_ will be used. The other default arguments (verbose, quiet, exclude, single, randomize, findleaks, use_resources, trace, coverdir, print_slow, and random_seed) allow programmers calling main() directly to set the values that would normally be set by flags on the command line. cCs’d|_g|_g|_g|_g|_g|_g|_g|_g|_g|_ d|_ d|_ g|_ d|_ t ¡|_d|_d|_d|_d|_d|_d|_d|_d|_dS)NFÚé)ÚnsÚtestsÚselectedÚgoodÚbadÚskippedÚresource_deniedsÚenvironment_changedÚ run_no_testsÚrerunÚ first_resultÚ interruptedÚ test_timesÚtracerÚtimeÚ monotonicÚ start_timeÚ test_countÚtest_count_widthÚnext_single_testÚnext_single_filenameÚ testsuite_xmlÚwin_load_trackerÚtmp_dirÚworker_test_name©Úself©r9ú:/opt/alt/python38/lib64/python3.8/test/libregrtest/main.pyÚ__init__6s. zRegrtest.__init__cCs<t|jƒt|jƒBt|jƒBt|jƒBt|jƒBt|jƒBS©N)Úsetr!r"r#r$r%r&r7r9r9r:Ú get_executed`sÿÿþzRegrtest.get_executedFc Csˆ|j}|j}|ttfkr.|s.|j |j|f¡|tkrD|j |¡n´|t tfkrb|sø|j  |¡n–|t krx|j  |¡n€|t krŽ|j |¡nj|tkr°|j |¡|j |¡nH|tkrÆ|j |¡n2|tkrÖd|_n"|tkrì|j  |¡n td|ƒ‚|r|t tthkr|j  |¡|j}|r„ddlmm}|D]F}z|j | |¡¡Wn(|jk r~t|tj d‚YnXq}| dd¡d}|  ¡}| |¡}|dk rœ|j | ¡¡qœW5QRXt|jƒ|jjrt|jƒtdd…}t ¡}|jjrX|jjD]$} | |krB| | ¡| | ¡q*g|j_|jjrxt |jjt!ƒt"ƒƒ} nt |jj||ƒ} |jj s¬|jp¦|jjp¦| |_#n|j|_#|jjr|j#dd…|_#z"|  $|j#d¡} | | d|_%Wnt&k rYnX|jj'r\z|j#d|j# $|jj'¡…=Wn,t(k rZt)d|jj't*j+dYnX|jj,rœ|jj-dkr‚t. /d ¡|j_-t. 0|jj-¡t. 1|j#¡dS) NZ pynexttestÚrz\btest_[a-zA-Z0-9_]+\bú#rrz1Couldn't find starting test (%s), using all testsr?i€–˜)2rrÚsinglerorpÚjoinr5r2ÚopenÚreadÚstripÚOSErrorZfromfileÚreÚcompilerÚSAVEDCWDÚsplitÚsearchrCÚgrouprr_rrrÚcopyZexcluderjrFÚaddZtestdirrÚlistr=r Úindexr1Ú IndexErrorÚstartrErKrLrlÚ randomizeÚ random_seedÚrandomZ randrangeZseedZshuffle) r8rÚfpZ next_testZregexrXÚmatchZstdtestsZnottestsÚargZalltestsÚposr9r9r:Ú find_testsÉsr               ÿÿ  zRegrtest.find_testscCs|jD] }t|ƒqdSr<)r rK)r8Únamer9r9r:Ú list_testss zRegrtest.list_testscCsX|D]N}t|tjjƒrqt|tjƒr0| |¡qt|tjƒrt |¡rt |  ¡ƒqdSr<) Ú isinstanceÚunittestÚloaderZ _FailedTestZ TestSuiteÚ _list_casesZTestCaserZ match_testrKÚid)r8ÚsuiteÚtestr9r9r:r™s    zRegrtest._list_casesc Cs²dt_t |jj|jj¡|jD]N}t|j|ƒ}ztj   |¡}|  |¡Wq tj k rl|j  |¡Yq Xq |j r®ttjdttt|j ƒdƒdtjdt|j tjddS)NFr?rœúskipped:)rÚverboseZset_match_testsrZ match_testsZ ignore_testsr rr—ZdefaultTestLoaderZloadTestsFromNamer™ZSkipTestr#rCrKrLrlrr^r)r8rAZabstestr›r9r9r:Ú list_cases s    zRegrtest.list_casescCsÄd|j_d|j_d|j_| ¡|_| ¡| d¡|jdd…|_|jD]F}| d|›d¡d|j_t |j|ƒ}|j |dd|j t krJq’qJ|jr¸t tt|jƒdƒdƒt|jƒ| ¡dS) NTFz'Re-running failed tests in verbose modez Re-running z in verbose mode)r'rœz failed again:)rržÚfailfastZverbose3Úget_tests_resultr(rZr"r'rrQrBr rKrr^rÚdisplay_result)r8rArBr9r9r:Úrerun_failed_tests1s$      zRegrtest.rerun_failed_testscCs |jjr dStƒtd| ¡ƒ|jr0tdƒt|jƒ| ¡}|rhtƒttt |ƒdƒdƒt |ƒ|j r¾|jj s¾tƒ|j s¨|js¨|js¨t |j ƒdkr¨tdddttt |j ƒdƒd ƒ|jjr|jjd d tƒtd ƒ|jdd …D]\}}td|t|ƒfƒqò|j r>tƒttt |j ƒdƒdƒt |j ƒ|jrptƒtd tt |jƒdƒ¡ƒt |jƒ|jr¨|jj s¨tƒttt |jƒdƒdƒt |jƒ|jrØtƒtdtt |jƒdƒƒt |jƒ|jrtƒttt |jƒdƒdƒt |jƒdS)Nz== Tests result: %s ==z(Test suite interrupted by signal SIGINT.rœzomitted:rZAllrR)ÚendzOK.T)Úreversez10 slowest tests:é z- %s: %szfailed:z%{} altered the execution environment:rz%s:z re-run testz run no tests:)rr_rKr¡r)r=r r>rr^rr!r]r"r#Z print_slowr*Úsortrr%Úformatr'r&)r8ZomittedrDrœr9r9r:r¢Ksdÿþ ý   ÿ   zRegrtest.display_resultcCsŽ|jjr ddl}|jddd|_tj ¡}d}|jjrJ|dt|jjƒ7}|  |¡d}t |j dƒD]\}}t   ¡}|}|rŠd||f}| ||¡|jrÈd } ttƒƒ} |jj| tƒ| d | d } nt|j|ƒ} | | ¡| jtkrîq|t| ƒ}t   ¡|} | tkrd |t| ƒf}n| jtkr.d}tj ¡D]&} | |kr8|  d ¡r8t | ¡q8|jjrdt| |jƒrdq|qd|rŠt|ƒdS)NrFT)ÚtracerzRun tests sequentiallyz (timeout: %s)rz%s -- %szDresult = runtest(self.ns, test_name); self.accumulate_result(result))ÚglobalsÚlocalsrBz%s in %sztest.) rr©ZTracer+rLÚmodulesÚkeysZtimeoutrrZÚ enumeraterr,r-rbÚdictr«ZrunctxrªrrQrBr rrrÚ startswithrZunloadr rrK)r8r©Z save_modulesrvZ previous_testr`rAr.raÚcmdrrBrDÚmoduler9r9r:Úrun_tests_sequential†sJ            zRegrtest.run_tests_sequentialccs6|D]*}|V|jrdS|jjr|jrdSqqdSr<)r"rÚfail_env_changedr%)r8rrAr9r9r:Ú _test_forever½s zRegrtest._test_forevercCsvtdt ¡ftj ¡žŽtdtjdddtjƒtdt ¡ƒt  ¡}|rXtd|ƒtdt   d¡t  ¡fƒdS) Nz==T)Zaliasedz %s-endianz== cwd:z == CPU count:z== encodings: locale=%s, FS=%sF) rKÚplatformZpython_implementationrLÚversionrƒÚ byteorderroÚgetcwdÚ cpu_countÚlocaleZgetpreferredencodingÚgetfilesystemencoding)r8rºr9r9r:Údisplay_headerÆsÿ ÿÿzRegrtest.display_headercCs–g}|jr| d¡n@|jjr0|jr0| d¡n&t|j|j|j|j|jfƒsV| d¡|jrf| d¡|st| d¡d  |¡}|j r’d|j |f}|S)NÚFAILUREz ENV CHANGEDz NO TEST RUNr ÚSUCCESSz, z %s then %s) r"rCrr´r%Úanyr!r#r)r{r()r8rBr9r9r:r¡Ós"  ÿ    zRegrtest.get_tests_resultcCsþ|jjs.|jjs6|jjs6|jjs6|js6|jjs6| ¡|jjrh|jj\}}}|dkrhd}t |t j dd|jj r~t d|jj ƒ|jjr¦| t|jƒ¡|_d|_d|_n.t|jƒ|_d t|jƒ¡|_t|jƒd|_|jjròd d lm}||ƒn| ¡dS) NézhWARNING: Running tests with --huntrleaks/-R and less than 3 warmup repetitions can give false positives!TrdzUsing random seedrz/{}rr)Úrun_tests_multiprocess)rÚheaderr_r]rzrrjr½rkrKrLÚstdoutrŒrZforeverrµrˆr r/r0Úiterr¨r^Zuse_mprirÂr³)r8rsrtrurvrÂr9r9r:Ú run_testsès<ÿÿÿþþ   zRegrtest.run_testsc Cs¸|jrB|jr6t|jdƒ}| |jd¡W5QRXn t |j¡|jrf|j ¡}|jdd|j j dt ƒt   ¡|j}t dt|ƒƒt d| ¡ƒ|j jr´t dt ¡¡dS)NÚwÚ T)Z show_missingZsummaryÚcoverdirzTotal duration: %szTests result: %szleaks %d)r2r1r|ÚwriteroÚunlinkr+ZresultsZ write_resultsrrÉrKr,r-r.rr¡ZrunleaksÚsystemÚgetpid)r8rrxZdurationr9r9r:Úfinalizes   ÿzRegrtest.finalizec Csú|jjs|jsdSddlmm}| d¡}ddddœ}|jD]N}| |¡|D]:}z ||t|  |d¡ƒ7<WqRt k rŠYqRXqRq@|  ¡D]\}}|  |t |ƒ¡q˜tj tj|jj¡}t|dƒ }| |¡D]} | | ¡qÜW5QRXdS)NrZ testsuites)rÚerrorsZfailuresÚwb)rrgr3rHrIrJZElementrCrWÚgetrEÚitemsr=Ústrrorpr{rr‚r|Z tostringlistrÊ) r8rOÚrootZtotalsr›ÚkÚvrgÚfÚsr9r9r:Úsave_xml_results$       zRegrtest.save_xml_resultcCst|jjr|jj|_|js`t ¡rVt d¡|_|jdkrBt d¡|_tj |jd¡|_n t   ¡|_tj  |j¡|_dS)NZ abs_builddirZsrcdirZbuild) rrnr5Ú sysconfigZis_python_buildZget_config_varrorpr{ÚtempfileZ gettempdirÚabspathr7r9r9r:Ú set_temp_dir6s     zRegrtest.set_temp_dircCsLtj|jddt ¡}|jdk r.d |¡}n d |¡}tj |j|¡}|S)NT)Úexist_okztest_python_worker_{}ztest_python_{})roÚmakedirsr5rÍr6r¨rpr{)r8ÚpidÚtest_cwdr9r9r:Úcreate_temp_dirLs   zRegrtest.create_temp_dircCszddl}tj | |j¡d¡}td|jƒ| |¡D]>}tj |¡r^td|ƒt  |¡q6td|ƒt  |¡q6dS)Nrz test_python_*zCleanup %s directoryzRemove directory: %szRemove file: %s) Úglobrorpr{Úescaper5rKÚisdirrZrmtreerË)r8rãrpr”r9r9r:ÚcleanupZs    zRegrtest.cleanupNc Ks¨| |¡| ¡|jjr,| ¡t d¡| ¡}z2tj|dd||j_ |  ||¡W5QRXWn<t k r¢}zt j tddt |j¡W5d}~XYnXdS)NrT)r])rm)rwrÝrrærLrmrârZtemp_cwdrnÚ_mainÚ SystemExitÚ faulthandlerZdump_traceback_laterÚ EXIT_TIMEOUTÚcode)r8rrrráÚexcr9r9r:Úmaings  z Regrtest.maincCs.|jdk r|j ¡Sttdƒr*t ¡dSdS)NrUr)r4rUÚhasattrror7r9r9r:rU…s     zRegrtest.getloadavgc Csš|jdk r$ddlm}||j|jƒ|jjr4tdƒ|jjt_|jj t_ t |jƒ|  |¡|jj rv|  ¡t d¡|jjr| ¡t d¡tjdkrî|jdkrîddlm}z |ƒ|_Wn0tk rì}ztd|›ƒW5d}~XYnXz.| ¡| ¡|jjr|jr| ¡W5|jdk r:|j ¡d|_X| ¡| ¡|jr^t d¡|jrpt d¡|jj rŒ|j!rŒt d ¡t d¡dS) Nr)Úrun_tests_workerzPress any key to continue...Zwin32)ÚWindowsLoadTrackerz%Failed to create WindowsLoadTracker: reé‚rÁ)"r6rirïrÚwaitÚinputr_rZPGOZ pgo_extendedZ PGO_EXTENDEDrr“r•rLrmrŸr¶Ztest.libregrtest.win_utilsrðr4ÚFileNotFoundErrorrKÚcloserÆr¢Zverbose2r"r£rÎrÙr)r´r%)r8rrrrïrðÚerrorr9r9r:rçŽsL                 zRegrtest._main)F)r)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r;r>rQrZrbrwr“r•r™rŸr£r¢r³rµr½r¡rÆrÎrÙrÝrârærírUrçr9r9r9r:rs4* )  I ;7     rcKstƒjfd|i|—ŽdS)zRun the Python suite.rN)rrí)rrrr9r9r:ríÉsrí)N).rVrér»ror¶rŽr€rLrÚrÛr,r—Ztest.libregrtest.cmdlinerZtest.libregrtest.runtestrrrrrrr r r r r rrrrrrZtest.libregrtest.setuprZtest.libregrtest.pgorZtest.libregrtest.utilsrrrrrœrrêrrír9r9r9r:Ús2 L   /