o EŸhVeã@sèddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlmZddlmZddlmZddlmZddlmZejZGdd „d e jƒZed krre  ¡dSdS) éN)Úsupport)Ú import_helper)Ú os_helper)Ú script_helper)Ú socket_helper)Úwarnings_helperc@sêeZdZedd„ƒZedd„ƒZdd„Zdd„Zd d „Zd d „Z e   d ¡dd„ƒZ dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Ze  eed&ƒd'¡d(d)„ƒZd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Z d4d5„Z!d6d7„Z"d8d9„Z#d:d;„Z$dd?„Z&d@dA„Z'dBdC„Z(dDdE„Z)dFdG„Z*dHdI„Z+dJdK„Z,dLdM„Z-GdNdO„dOƒZ.GdPdQ„dQƒZ/dRdS„Z0dTdU„Z1dVdW„Z2e  eedXƒoÏeedYƒdZ¡d[d\„ƒZ3dld^d_„Z4d`da„Z5dbdc„Z6ddde„Z7dfdg„Z8dhdi„Z9djdk„Z:d]S)mÚ TestSupportcCsDttjƒ}tjddd|_tjddd|_ttjƒ|dks J‚dS)Nztest.support.warnings_helperz.*used in test_support.*)Úlikeztest.test_supportz!.*You should NOT be seeing this.*é)ÚlenÚwarningsÚfiltersrÚignore_deprecations_fromÚ_warnings_helper_tokenÚ_test_support_token©ÚclsÚorig_filter_len©rú(/usr/lib/python3.10/test/test_support.pyÚ setUpClasss ÿÿzTestSupport.setUpClasscCs4ttjƒ}t |j|j¡ttjƒ|dksJ‚dS)Nr )r r r rÚclear_ignored_deprecationsrrrrrrÚ tearDownClass&s þzTestSupport.tearDownClasscCsdtjdd}t ¡t dt¡dd„|Dƒ}Wdƒn1s"wY| t|ƒd|¡dS)z9Test support.ignore_deprecations_from() silences warningsT)ÚrecordzYou should NOT be seeing this.cSóg|]}t|jƒ‘qSr©ÚstrÚmessage©Ú.0ÚwrrrÚ 4ózDTestSupport.test_ignored_deprecations_are_silent..Nr)r Úcatch_warningsrÚ_warn_about_deprecationÚwarnÚDeprecationWarningÚ assertEqualr )ÚselfÚ warning_objsÚmessagesrrrÚ$test_ignored_deprecations_are_silent/s  ýz0TestSupport.test_ignored_deprecations_are_silentcCs t d¡| tjtjd¡dS)NÚftplibÚfoo)rÚ import_moduleÚ assertRaisesÚunittestÚSkipTest©r(rrrÚtest_import_module7s ÿzTestSupport.test_import_modulecCst d¡dS)Nr,)rÚimport_fresh_moduler2rrrÚtest_import_fresh_module<sz$TestSupport.test_import_fresh_modulecCs.| t |d¡|j¡| tjtj|d¡dS)NÚtest_get_attributer-)r'rÚ get_attributer6r/r0r1r2rrrr6?sÿzTestSupport.test_get_attributezfailing buildbotscCs| t ¡tj¡dS©N)r'rÚget_original_stdoutÚsysÚstdoutr2rrrÚtest_get_original_stdoutDsz$TestSupport.test_get_original_stdoutcCs2ddl}| dtj¡t d¡| dtj¡dS)NrÚsched)r=ÚassertInr:ÚmodulesrÚunloadÚ assertNotIn)r(r=rrrÚ test_unloadHs zTestSupport.test_unloadcCsXttddd}Wdƒn1swYt t¡| tj t¡¡t t¡dS)Nr úutf-8©Úencoding)ÚopenÚTESTFNrÚunlinkÚ assertFalseÚosÚpathÚexists)r(ÚfrrrÚ test_unlinkNs ÿ zTestSupport.test_unlinkcCs`tjd}tj |d¡}t |¡t |¡t |¡| tj |¡¡t   t dd¡ t |¡Wdƒn1s;wYt |¡t |¡t  |t j t jB¡t   t dd¡ t |¡Wdƒn1skwY| tj |¡¡t |¡t |¡t  |d¡t   t dd¡ t |¡Wdƒn1s wY| tj |¡¡dS)NÚdÚsubdirÚverboser)rrGrJrKÚjoinÚmkdirÚrmtreerIrLrÚ swap_attrÚchmodÚstatÚS_IRUSRÚS_IXUSR)r(ÚdirpathÚ subdirpathrrrÚ test_rmtreeUs.     ÿ   ÿ    ÿzTestSupport.test_rmtreec CsÊtd}t|ddd}td|dWdƒn1swYtj dtj¡t  ¡z(t tƒ}|  ttj ¡t  t¡| ttj ¡Wtjd=t |¡t d¡dStjd=t |¡t d¡w) Nz.pyr rCrDzfoo = 1©ÚfilerÚ __pycache__)rGrFÚprintr:rKÚinsertrJÚcurdirÚ importlibÚinvalidate_cachesÚ __import__r>r?rÚforgetrArrHrT)r(Ú mod_filenamerMÚmodrrrÚ test_forgetms"ÿ  þ  zTestSupport.test_forgetcCst tjdf¡}| ¡dS)Nr)ÚsocketÚ create_serverrÚHOSTÚclose©r(ÚsrrrÚ test_HOST~s zTestSupport.test_HOSTcCs$t ¡}t tj|f¡}| ¡dSr8)rÚfind_unused_portrjrkrlrm)r(ÚportrorrrÚtest_find_unused_port‚s z!TestSupport.test_find_unused_portcCs&t ¡}t |¡| ¡| ¡dSr8)rjrÚ bind_portÚlistenrmrnrrrÚtest_bind_port‡s  zTestSupport.test_bind_portc Cs¬t ¡}tj |¡}zEtj |d¡}| tj |¡¡t  |¡}|  ||¡|  tj |¡¡Wdƒn1s:wY| tj |¡¡Wt  |¡dSt  |¡w)z8Test that temp_dir() creates and destroys its directory.ÚtempN) ÚtempfileÚmkdtemprJrKÚrealpathrRrIÚisdirrÚtemp_dirr'Ú assertTruerT)r(Ú parent_dirrKÚ temp_pathrrrÚ test_temp_dirs   þzTestSupport.test_temp_dircCsPt ¡}| tj |¡¡Wdƒn1swY| tj |¡¡dS)zTest passing no path.N)rr|r}rJrKr{rI)r(rrrrÚtest_temp_dir__path_nonežs ÿz$TestSupport.test_temp_dir__path_nonec Csldd„}t ¡}tj |¡}z!| tj |¡¡| t||¡| tj |¡¡Wt   |¡dSt   |¡w)z-Test passing a directory that already exists.cSó(t |¡}tdƒ‚1s wYdS©Nzshould not get here)rr|Ú Exception)rKrrrrÚ call_temp_dir¦ó ÿzMTestSupport.test_temp_dir__existing_dir__quiet_default..call_temp_dirN) rxryrJrKrzr}r{r/ÚFileExistsErrorÚshutilrT)r(r…rKrrrÚ*test_temp_dir__existing_dir__quiet_default¤s z6TestSupport.test_temp_dir__existing_dir__quiet_defaultc Csìt ¡}tj |¡}zIt ¡-}tj|dd}|  ||¡Wdƒn1s(wYdd„|j Dƒ}Wdƒn1s?wY|  tj  |¡¡Wt  |¡nt  |¡w|  t|ƒd|¡|d}|  | d|›d ¡|¡dS) z=Test passing a directory that already exists with quiet=True.T©ÚquietNcSrrrrrrrr!½r"zGTestSupport.test_temp_dir__existing_dir__quiet_true..érz5tests may fail, unable to create temporary directory ú: )rxryrJrKrzrÚcheck_warningsrr|r'r r}r{rˆrTr Ú startswith)r(rKÚrecorderrr r%rrrÚ'test_temp_dir__existing_dir__quiet_true´s$  ÿý ÿþz3TestSupport.test_temp_dir__existing_dir__quiet_trueÚforkztest requires os.forkcCst dt d¡¡dS)z?Test that a forked child process does not remove the directory.ú-ca import os from test import support from test.support import os_helper with os_helper.temp_cwd() as temp_path: pid = os.fork() if pid != 0: # parent process # wait for the child to terminate support.wait_process(pid, exitcode=0) # Make sure that temp_path is still present. When the child # process leaves the 'temp_cwd'-context, the __exit__()- # method of the context must not remove the temporary # directory. if not os.path.isdir(temp_path): raise AssertionError("Child removed temp_path.") N)rÚassert_python_okÚtextwrapÚdedentr2rrrÚtest_temp_dir__forked_childÉsz'TestSupport.test_temp_dir__forked_childc CsŠt ¡}t ¡+}t |¡}| ||¡| t ¡|¡Wdƒn1s'wYWdƒn1s6wY| t ¡|¡dSr8)rJÚgetcwdrr|Ú change_cwdr')r(Ú original_cwdrÚnew_cwdrrrÚtest_change_cwdäs   þ€ÿzTestSupport.test_change_cwdcCsht ¡}dd„}t ¡}tj |d¡}| t||¡Wdƒn1s%wY| t ¡|¡dS)z&Test passing a non-existent directory.cSr‚rƒ)rr™r„)rKr›rrrÚcall_change_cwdòr†zFTestSupport.test_change_cwd__non_existent_dir..call_change_cwdÚdoes_not_existN) rJr˜rr|rKrRr/ÚFileNotFoundErrorr')r(ršrr~Únon_existent_dirrrrÚ!test_change_cwd__non_existent_dirîs ÿþz-TestSupport.test_change_cwd__non_existent_dirc Csøt ¡}t ¡P}tj |d¡}t ¡5}tj|dd}|  ||¡|  t ¡|¡Wdƒn1s5wYdd„|j Dƒ}Wdƒn1sLwYWdƒn1s[wY|  t |ƒd|¡|d}|  |  d |›d ¡|¡dS) z6Test passing a non-existent directory with quiet=True.ržTrŠNcSrrrrrrrr!r"zMTestSupport.test_change_cwd__non_existent_dir__quiet_true..rŒrúBtests may fail, unable to change the current working directory to r)rJr˜rr|rKrRrrŽr™r'r r r}r)r(ršr~Úbad_dirrr›r r%rrrÚ-test_change_cwd__non_existent_dir__quiet_trueýs&   þü€þ þýz9TestSupport.test_change_cwd__non_existent_dir__quiet_truec Cs¦td}t ¡'}tj|ddWdƒn1swYdd„|jDƒ}Wdƒn1s2wY| t|ƒd|¡|d}| |  d |›d ¡|¡dS) z0Check the warning message when os.chdir() fails.Ú_does_not_existT)rKr‹NcSrrrrrrrr!r"z>TestSupport.test_change_cwd__chdir_warning..rŒrr¢r) rGrrŽrr™r r'r r}r)r(rKrr*ÚmsgrrrÚtest_change_cwd__chdir_warnings ÿý þýz*TestSupport.test_change_cwd__chdir_warningcCsrt ¡}tjtd| tj t ¡¡t¡Wdƒn1s!wY| tj  t¡¡| t ¡|¡dS)N©Úname) rJr˜rÚtemp_cwdrGr'rKÚbasenamerIrL)r(ÚhererrrÚ test_temp_cwd#s ÿzTestSupport.test_temp_cwdcCsvt ¡}tjdd}| ||¡| tj |¡¡| t ¡|¡Wdƒn1s,wY| t ¡|¡dS)z Test passing None to temp_cwd().Nr¨) rJr˜rrªÚassertNotEqualr}rKr{r')r(ršr›rrrÚtest_temp_cwd__name_none+s ýz$TestSupport.test_temp_cwd__name_nonecCs| t ddddœ¡d¡dS)Nér rŒ)r°r rŒz{1: 1, 2: 2, 3: 3})r'rÚsortdictr2rrrÚ test_sortdict4szTestSupport.test_sortdictcCsTt ¡}| t¡}t |d¡Wdƒn1swY| |jjtj ¡dS)Nsfoo) rÚ make_bad_fdr/ÚOSErrorrJÚwriter'Ú exceptionÚerrnoÚEBADF)r(ÚfdÚcmrrrÚtest_make_bad_fd7s  ÿzTestSupport.test_make_bad_fdcCsNtj|dddd| t¡t |d¡WdƒdS1s wYdS)Nz def classrŒé)ÚlinenoÚoffsetzx=1)rÚcheck_syntax_errorr/ÚAssertionErrorr2rrrÚtest_check_syntax_error=s "ÿz#TestSupport.test_check_syntax_errorcCsBddl}t d¡| d¡WdƒdS1swYdS)NrÚpprint)rcrÚ CleanImportr.)r(rcrrrÚtest_CleanImportBs  "ÿzTestSupport.test_CleanImportcCsht dd¡| dtj¡| dtj¡Wdƒn1swY| dtj¡| dtj¡dS)Nr-Úbar)rÚ DirsOnSysPathr>r:rKrAr2rrrÚtest_DirsOnSysPathGs þzTestSupport.test_DirsOnSysPathcCsDt ¡ }tdƒWdƒn1swY| | ¡d¡dS)NÚhelloúhello )rÚcaptured_stdoutr`r'Úgetvalue)r(r;rrrÚtest_captured_stdoutNs  ÿz TestSupport.test_captured_stdoutcCsJt ¡}tdtjdWdƒn1swY| | ¡d¡dS)NrÈr]rÉ)rÚcaptured_stderrr`r:Ústderrr'rË)r(rÎrrrÚtest_captured_stderrSs ÿz TestSupport.test_captured_stderrcCsRt ¡}| d¡| d¡tƒ}Wdƒn1swY| |d¡dS)NrÉrrÈ)rÚcaptured_stdinrµÚseekÚinputr')r(ÚstdinÚcapturedrrrÚtest_captured_stdinXs   üzTestSupport.test_captured_stdincCs t ¡dSr8)rÚ gc_collectr2rrrÚtest_gc_collect`s zTestSupport.test_gc_collectcCs| t ¡t¡dSr8)ÚassertIsInstancerÚpython_is_optimizedÚboolr2rrrÚtest_python_is_optimizedcsz$TestSupport.test_python_is_optimizedcCs Gdd„dƒ}|ƒ}d|_t |dd¡}| |jd¡| |d¡Wdƒn1s,wY| |jd¡t |dd¡}| |jd¡| |¡Wdƒn1sVwY| t|dƒ¡t |dd¡ |`Wdƒn1swwY| t|dƒ¡dS)Nc@s eZdZdS)z'TestSupport.test_swap_attr..ObjN)Ú__name__Ú __module__Ú __qualname__rrrrÚObjgsrßrŒÚxr¼Úy)ràrrUr'ráÚ assertIsNonerIÚhasattr)r(rßÚobjràrárrrÚtest_swap_attrfs"þ þÿzTestSupport.test_swap_attrcCsúddi}t |dd¡}| |dd¡| |d¡Wdƒn1s$wY| |dd¡t |dd¡}| |dd¡| |¡Wdƒn1sPwY| d|¡t |dd¡ |d=Wdƒn1spwY| d|¡dS)NràrŒr¼rá)rÚ swap_itemr'rârA)r(ÚDràrárrrÚtest_swap_itemwsþ þ ÿzTestSupport.test_swap_itemc@óeZdZdZdZdZdZdS)zTestSupport.RefClassN)rÜrÝrÞÚ attribute1Ú attribute2Ú_hidden_attribute1Ú __magic_1__rrrrÚRefClass…ó rîc@ré)zTestSupport.OtherClassN)rÜrÝrÞrëÚ attribute3ríÚ __magic_2__rrrrÚ OtherClass‹rïròcCsBt |j|j¡}| dh|¡t |j|j¡}| ddh|¡dS)Nrêrðrñ)rÚdetect_api_mismatchrîròr')r(Ú missing_itemsrrrÚtest_detect_api_mismatch‘sÿÿz$TestSupport.test_detect_api_mismatchcCsPgd¢}tj|j|j|d}| tƒ|¡tj|j|j|d}| tƒ|¡dS)N)rêrðrñÚ not_in_either)Úignore)rrórîròr'Úset)r(r÷rôrrrÚ test_detect_api_mismatch__ignorešs ÿ ÿz,TestSupport.test_detect_api_mismatch__ignorecCsXdh}dh}tj|t||dddh}hd£}tj|td||d| ttj|t¡dS)NÚtempdirÚtemplate)ÚextraÚ not_exportedÚTextTestResultÚinstallHandler>Ú load_testsÚ TestProgramÚ BaseTestSuite)zunittest.resultz unittest.casezunittest.suitezunittest.loaderz unittest.mainzunittest.runnerzunittest.signalszunittest.async_case)rÚ check__all__rxr0r/rÀ)r(rürýrrrÚtest_check__all__¥s ýù zTestSupport.test_check__all__ÚwaitpidÚWNOHANGz need os.waitpid() and os.WNOHANGcCsät ¡t ¡}|dkrt d¡t ¡}t ¡tj}tj}zHdt_t   ¡} t ¡|kr3|  d¡t j }z |t _ t ¡W|t _ n|t _ wtjrKnt d¡q(d|}| || ¡¡| tj¡W|t_n|t_wt ¡dS)NrFTÚtimeoutgš™™™™™¹?z2Warning -- reap_children() reaped child process %s)rÚ reap_childrenrJr’Ú_exitÚtimeÚ monotonicÚ SHORT_TIMEOUTÚenvironment_alteredÚioÚStringIOÚfailr:Ú __stderr__Úsleepr>rËr})r(ÚpidÚt0ÚdeadlineÚ was_alteredrÎÚ old_stderrr¦rrrÚtest_reap_children»s6     ï zTestSupport.test_reap_childrenNcCs†d|›d|›d}tjg|¢d‘|‘}dd„tj ¡Dƒ}tj|tjtjd|d}|dur/|}|  |j   ¡t |ƒ¡|  |j d ¡dS) Nzfrom test.support import z ; print(repr(z()))r“cSs i|] \}}| d¡s||“qS)ÚPYTHON)r)rÚkeyÚvaluerrrÚ ïs  ÿz-TestSupport.check_options..T)r;rÎÚuniversal_newlinesÚenvr)r:Ú executablerJÚenvironÚitemsÚ subprocessÚrunÚPIPEÚDEVNULLr'r;ÚrstripÚreprÚ returncode)r(ÚargsÚfuncÚexpectedÚcodeÚcmdrÚprocrrrÚ check_optionsìsüzTestSupport.check_optionscCs²gdgdgdgdgdgdgdgdgd gd gd gd d ggd¢d dgd dgd dgd dgd dgfD]}|j|d| |d¡Wdƒn1sGwYq.| gd¢ddg¡dS)Nz-Bú-sz-Sú-Ez-vz-bz-qú-Iz-bbz-vvvú-Wignoreú-XÚdev)r3r4r5Ú faulthandlerÚ importtimeÚ showrefcountÚ tracemallocz tracemalloc=3©ÚoptsÚargs_from_interpreter_flags)r2r1r0©ÚsubTestr/©r(r;rrrÚ test_args_from_interpreter_flagsûs6èÿ€ ÿz,TestSupport.test_args_from_interpreter_flagsc CsTgdgdgdgfD]}|j|d| |d¡Wdƒn1s"wYq dS)Nz-Oz-OOz-OOOOr:Ú!optim_args_from_interpreter_flagsr=r?rrrÚ&test_optim_args_from_interpreter_flagssûÿ€ùz2TestSupport.test_optim_args_from_interpreter_flagscCsðGdd„dƒ}|dƒ}|dƒ}t tdd¡ãt g¡| t |¡¡| t |¡¡t dd¡| t |¡¡| t |¡¡t | ¡gd¡| t |¡¡| t |¡¡t dgd¡| t |¡¡| t |¡¡t dgd¡| t |¡¡| t |¡¡t dgd¡| t |¡¡t d gd¡| t |¡¡t d gd¡| t |¡¡| t |¡¡t | ¡| ¡gd¡| t |¡¡| t |¡¡t d d gd¡| t |¡¡| t |¡¡Wdƒn1süwYt tdd¡åtjgd | t |¡¡| t |¡¡t dd¡| t |¡¡| t |¡¡t d| ¡g¡| t |¡¡| t |¡¡t ddg¡| t |¡¡| t |¡¡t ddg¡| t |¡¡| t |¡¡t ddg¡| t |¡¡t dd g¡| t |¡¡t dd g¡| t |¡¡| t |¡¡t d| ¡| ¡g¡| t |¡¡| t |¡¡t dd d g¡| t |¡¡| t |¡¡WdƒdS1sñwYdS)Nc@seZdZdd„Zdd„ZdS)z)TestSupport.test_match_test..TestcSs ||_dSr8©Útest_id)r(rDrrrÚ__init__+s z2TestSupport.test_match_test..Test.__init__cSs|jSr8rCr2rrrÚid.sz,TestSupport.test_match_test..Test.idN)rÜrÝrÞrErFrrrrÚTest*s rGz"test.test_os.FileTests.test_accessz'test.test_os.Win32ErrorTests.test_chdirÚ_match_test_funcÚtest_osztest_*Ú filetestsÚ FileTestsz*test_os.*.test_*Ú test_accessÚ DONTMATCH)Úignore_patterns)rrUÚset_match_testsr}Ú match_testrFrI)r(rGrLÚ test_chdirrrrÚtest_match_test)s~  Ô/  $ÔzTestSupport.test_match_testc CsNt ¡}t ttj¡}z t ¡}Wt |¡nt |¡w| ||d¡dS)NrŒ)rÚfd_countrJrFÚ__file__ÚO_RDONLYrmr')r(Ústartr¹ÚmorerrrÚ test_fd_count’s  zTestSupport.test_fd_countcCsFt ¡}tj}z |t_t |¡W|t_n|t_w| | ¡|¡dSr8)rrr:rrÚ print_warningr'rË)r(r¦r+rÎrrrrÚcheck_print_warningžs zTestSupport.check_print_warningcCs| dd¡| dd¡dS)Nr¦zWarning -- msg za bzWarning -- a Warning -- b )rZr2rrrÚtest_print_warningªs ÿÿzTestSupport.test_print_warningr8);rÜrÝrÞÚ classmethodrrr+r3r5r6r0Úskipr<rBrNr\rirprsrvr€rr‰r‘Ú skipUnlessrãrJr—rœr¡r¤r§r­r¯r²r»rÁrÄrÇrÌrÏrÕr×rÛrårèrîròrõrùrrr/r@rBrRrXrZr[rrrrrst        ÿ  /" i rÚ__main__)r·rcrrJrˆrjrWr"r:rxr•r r0r ÚtestrÚ test.supportrrrrrrGÚTestCaserrÜÚmainrrrrÚs<      3 ÿ