a 5êdgÜdã@sjdZddlZddlZddlmZddlmZddlmZmZmZm Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZejjrÎe d¡‚ddlZdad d „Zd d „ZGd d„dej ƒZ!Gdd„de"ƒZ#Gdd„dej ƒZ$Gdd„dej ƒZ%e &ej'dkd¡Gdd„dej ƒƒZ(e)dkrfe *¡dS)zTests for 'site'. Tests assume the initial paths in sys.path once the interpreter has begun executing have not been removed. éN)Úsupport)Ú socket_helper)Úcaptured_stderrÚTESTFNÚEnvironmentVarGuardÚ change_cwd)Úmock)ÚcopyzPython was invoked with -Sc Cs|tjdd…atjrxtj tj¡sxzt tj¡t  tj¡Wn8t yv}z t   dtj|f¡‚WYd}~n d}~00dS)Nz-unable to create user site directory (%r): %s) ÚsysÚpathÚ OLD_SYS_PATHÚsiteÚENABLE_USER_SITEÚosÚisdirÚ USER_SITEÚmakedirsÚ addsitedirÚPermissionErrorÚunittestÚSkipTest)Úexc©rú*/usr/local/lib/python3.9/test/test_site.pyÚ setUpModule(s ÿrcCsttjdd…<dS©N)r r r rrrrÚtearDownModule7src@s´eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z de fdd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Ze ejd¡dd„ƒZd d!„Zd"d#„Zd$d%„Zd&d'„Zd(S))ÚHelperFunctionsTestsz Tests for helper functions. cCs@tjdd…|_tj|_tj|_tj|_ t j |_ t t j ƒ|_dS)zSave a copy of sys.pathN)r r Úsys_pathr Ú USER_BASEÚold_baserÚold_siteÚPREFIXESÚ old_prefixesÚ sysconfigÚ _CONFIG_VARSÚ original_varsr Úold_vars©ÚselfrrrÚsetUp?s zHelperFunctionsTests.setUpcCsV|jtjdd…<|jt_|jt_|jt_ |j t _ t j durRt j   ¡t j  |j¡dS©zRestore sys.pathN)rr r r r rr!rr#r"r&r$r%ÚclearÚupdater'r(rrrÚtearDownHs  zHelperFunctionsTests.tearDowncCshd}tjj|Ž}tj|Ž\}}| tj |¡|¡|tj |¡krP| ||¡n| tj |¡|¡dS)N)Z BeginningZEnd)rr Újoinr ÚmakepathÚ assertEqualÚabspathÚnormcase)r)Ú path_partsZ original_dirZabs_dirZnorm_dirrrrÚ test_makepathTs z"HelperFunctionsTests.test_makepathcCs8t ¡}dd„tjDƒD]}| ||d||f¡qdS)NcSs*g|]"}|rtj |¡rt |¡d‘qS)é)rr Úexistsr r0)Ú.0r rrrÚ csÿz;HelperFunctionsTests.test_init_pathinfo..zB%s from sys.path not found in set returned by _init_pathinfo(): %s)r Ú_init_pathinfor r ÚassertIn)r)Zdir_setÚentryrrrÚtest_init_pathinfoasÿÿz'HelperFunctionsTests.test_init_pathinfocCsJ| |jtjd|j¡| t |j¡dtj¡| t j  |j ¡¡dS)z>Contain common code for testing results of reading a .pth filez%s not in sys.modulesrN) r;Úimportedr Úmodulesr r0Ú good_dir_pathr Ú assertFalserr7Ú bad_dir_path©r)Úpth_filerrrÚpth_file_testsis  ÿz#HelperFunctionsTests.pth_file_testscCsTtƒ}|jddz2| ¡t |j|jtƒ¡| |¡W| ¡n | ¡0dS©NT)Úprep) ÚPthFileÚcleanupÚcreater Ú addpackageÚbase_dirÚfilenameÚsetrErCrrrÚtest_addpackageps  z$HelperFunctionsTests.test_addpackageÚ.csttj |¡}|d}tj ||¡‰tˆddd,}| ‡fdd„¡| |¡Wdƒn1sb0Y||fS)Nú.pthÚwúutf-8)Úencodingcs t ˆ¡Sr)rÚremover©Úpth_fnrrÚ…óz/HelperFunctionsTests.make_pth..)rr r2r/ÚopenÚ addCleanupÚwrite)r)ÚcontentsÚpth_dirZpth_nameZ pth_basenamerDrrVrÚmake_pths (zHelperFunctionsTests.make_pthc Cs¨| d¡\}}tƒ }t ||tƒ¡Wdƒn1s:0Y| | ¡d¡| | ¡t t j   ||¡¡¡| | ¡d¡| | ¡d¡| | ¡d¡dS)Nzimport bad-syntax zline 1Ú Tracebackzimport bad-syntaxÚ SyntaxError© r_rr rKrNZ assertRegexÚgetvalueÚreÚescaperr r/©r)r^rWÚerr_outrrrÚ!test_addpackage_import_bad_syntax‰s. ÿz6HelperFunctionsTests.test_addpackage_import_bad_syntaxc Cs˜| d¡\}}tƒ }t ||tƒ¡Wdƒn1s:0Y| | ¡d¡| | ¡t t j   ||¡¡¡| | ¡d¡| | ¡d¡dS)Nzrandompath import nosuchmodule zline 2r`ÚModuleNotFoundErrorrbrfrrrÚtest_addpackage_import_bad_exec˜s. ÿz4HelperFunctionsTests.test_addpackage_import_bad_execcCs†| d¡\}}tƒ&}| t ||tƒ¡¡Wdƒn1s@0Yd|_| | ¡d¡t j D]}t |t ƒrf|  d|¡qfdS)Nzabcdef Úzabcdef)r_rrAr rKrNZmaxDiffr1rcr r Ú isinstanceÚstrÚ assertNotIn)r)r^rWrgr rrrÚ#test_addpackage_import_bad_pth_file¤s4  z8HelperFunctionsTests.test_addpackage_import_bad_pth_filecCsPtƒ}|jddz.| ¡t |jtƒ¡| |¡W| ¡n | ¡0dSrF)rHrIrJr rrLrNrErCrrrÚtest_addsitedir¯s  z$HelperFunctionsTests.test_addsitedircCs| t ¡t ¡¡dSr)r1r Ú _getuserbaser$r(rrrÚtest__getuserbase¾sz&HelperFunctionsTests.test__getuserbasecCsBtjdkrtjrd}n tjd}| t t ¡¡t   d|¡¡dS)NÚdarwinZosx_framework_userÚ_userZpurelib) r ÚplatformÚ _frameworkrÚnamer1r Ú _get_pathrqr$Zget_path)r)ÚschemerrrÚ test_get_pathÁs   ÿz"HelperFunctionsTests.test_get_pathz.rÚAPPDATAú~z os.path.isdirF)Z return_valuerrT)r rrrrZpatchrˆr‰rŠrr”rÚobjectrZ swap_attrrNÚaddusersitepackagesZassert_called_once_withZassert_not_calledrA)r)r€r‹rŽZ mock_isdirZmock_addsitedirÚ known_pathsrrrÚtest_no_home_directory%s0ÿÿN ÿ þ  z+HelperFunctionsTests.test_no_home_directoryN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r*r.r5r=rErOrr_rhrjrorprrrzrÚ skipUnlessr rr†rŒrr™rŸrrrrr;s(        ' rc@s4eZdZdZedddfdd„Zdd„Zd d d „Zd S)rHz/Helper class for handling testing of .pth filesÚtimeZ __testdir__Z__badcCsj|d|_tj d¡|_tj |j|j¡|_||_||_||_ tj |j|j¡|_ tj |j|j ¡|_ dS)zInitialize instance variablesrQrkN) rMrr r2rLr/Ú file_pathr>Ú good_dirnameÚ bad_dirnamer@rB)r)Ú filename_baser>r§r¨rrrÚ__init__Js zPthFile.__init__cCszt|jdƒ}zRtd|dtd|dtd|j|dt|j|dt|j|dW| ¡n | ¡0t |j ¡dS)aoCreate a .pth file with a comment, blank lines, an ``import ``, a line with self.good_dirname, and a line with self.bad_dirname. Creation of the directory for self.good_dir_path (based off of self.good_dirname) is also performed. Make sure to call self.cleanup() to undo anything done by this method. rRz#import @bad module name©ÚfileÚ z import %sN) rZr¦Úprintr>r§r¨ÚcloserÚmkdirr@)r)ÚFILErrrrJVs   zPthFile.createFcCsŒtj |j¡rt |j¡|r@tj |j¡|_ |j rTtj|j=n|j rT|j tj|j<tj |j ¡rnt  |j ¡tj |j ¡rˆt  |j ¡dS)z°Make sure that the .pth file is deleted, self.imported is not in sys.modules, and that both self.good_dirname and self.bad_dirname are not existing directories.N) rr r7r¦rUr r?Úgetr>Zimported_moduler@ÚrmdirrB)r)rGrrrrIls   zPthFile.cleanupN)F)r r¡r¢r£rrªrJrIrrrrrHGs ÿ rHc@sšeZdZdZdd„Zdd„Zdd„Zdd „Ze  d ¡d d „ƒZ d d„Z dd„Z dd„Z dd„Zdd„Zej d¡ejje eejdƒd¡dd„ƒƒƒZdS)ÚImportSideEffectTestsz(Test side-effects from importing 'site'.cCstjdd…|_dS)zMake a copy of sys.pathN)r r rr(rrrr*szImportSideEffectTests.setUpcCs|jtjdd…<dSr+)rr r r(rrrr.…szImportSideEffectTests.tearDowncCs*dtjd_t ¡| tjdj¡dS)z“Test for __cached__ is None. Regarding to PEP 3147, __cached__ can be None. See also: https://bugs.python.org/issue30167 NÚtest)r r?Ú __cached__r Ú abs_pathsZ assertIsNoner(rrrÚtest_abs_paths_cached_None‰s z0ImportSideEffectTests.test_abs_paths_cached_NonecCs4t ¡tƒ}tjD]}| ||¡| |¡qdSr)r ÚremoveduppathsrNr r rnÚadd)r)Z seen_pathsr rrrÚtest_no_duplicate_paths”s   z-ImportSideEffectTests.test_no_duplicate_pathsztest not implementedcCsdSrrr(rrrÚtest_add_build_dirsz(ImportSideEffectTests.test_add_build_dircCs$| ttdƒ¡| ttdƒ¡dS)NÚquitÚexit©r‰ÚhasattrÚbuiltinsr(rrrÚtest_setting_quit¤sz'ImportSideEffectTests.test_setting_quitcCs4| ttdƒ¡| ttdƒ¡| ttdƒ¡dS)NÚ copyrightÚcreditsÚlicenser¿r(rrrÚtest_setting_copyright©sz,ImportSideEffectTests.test_setting_copyrightcCs| ttdƒ¡dS)NÚhelpr¿r(rrrÚtest_setting_help¯sz'ImportSideEffectTests.test_setting_helpcCsPtjdkrLddl}| ¡d d¡rLtjj ¡D]}|dkr0qLq0| d¡dS)NÚwin32rr6ZcpÚmbcszdid not alias mbcs) r ruÚlocaleÚgetdefaultlocalerŠÚ encodingsÚaliasesÚvaluesÚfail)r)rËÚvaluerrrÚtest_aliasing_mbcs³s z(ImportSideEffectTests.test_aliasing_mbcscCs8dtjvr4z ddl}Wnty(Yn 0| d¡dS)NÚ sitecustomizerz(sitecustomize not imported automatically)r r?rÓÚ ImportErrorrÐ)r)rÓrrrÚtest_sitecustomize_executed½s    z1ImportSideEffectTests.test_sitecustomize_executedZnetworkZ HTTPSHandlerz$need SSL support to download licensec CsÖtj ¡d}tjj|dd}| tjj¡zbt  |¡Dtj  |¡}|  ¡}Wdƒn1sd0YWdƒn1s‚0YWn.tj j y¼}z|j}WYd}~n d}~00|j|dd|ddS)Nr6ZHEAD)ÚmethodéÈz Can't find )Úmsg)rÅÚ_Printer__dataÚsplitÚurllibÚrequestZRequestr[Ú urlcleanuprZtransient_internetÚurlopenZgetcodeÚerrorÚ HTTPErrorÚcoder1)r)ÚurlZreqÚdataráÚerrrÚtest_license_exists_at_urlÇs Hz0ImportSideEffectTests.test_license_exists_at_urlN)r r¡r¢r£r*r.r¸r»rÚskipr¼rÂrÆrÈrÒrÕrµrZrequires_resourceZsystem_must_validate_certr¤rÀrÛrÜrårrrrr´~s$     ÿr´c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚStartupImportTestsc Cs8tjtjdddgtjdd}| ¡d}| |jdt|ƒ¡t |ƒ}|D]<}t   t j   t  |¡d¡¡}|rH| dt|ƒ›d |›¡qHtjtjdd dd gtjtjdd }| ¡\}}| |jd||f¡t |ƒ}| d |¡hd£}| | |¡|¡| d||¡| d||¡hd£ tj¡} | | | ¡|¡dS)Nú-Ir{z!import sys; print(repr(sys.path))rS)ÚstdoutrTrz*.pthzfound z .pth files in: z-vz#import sys; print(set(sys.modules)))réÚstderrrTr >Ú sre_parserdÚ_sreÚ sre_constantsÚ sre_compilerËÚcopyreg> ÚreprlibÚtypesÚ itertoolsÚheapqÚ _collectionsÚweakrefÚoperatorÚ functoolsÚkeywordÚ collections)rÚPopenr rƒÚPIPEÚ communicater1Ú returncodeÚreprÚevalÚglobrr r/reZskipTestr–r;rAÚ intersectionrnÚ differenceÚbuiltin_module_names) r)ÚpopenréZisolated_pathsr Z pth_filesrêr?Zre_modsZcollection_modsrrrÚtest_startup_importsÝs@ ÿý ÿü  ýz'StartupImportTests.test_startup_importscCs&t tjddg¡ ¡}| |d¡dS)Nr{ú9import sys; sys.exit(hasattr(sys, "__interactivehook__"))z''__interactivehook__' not added by site©rrúr rƒÚwaitr‰©r)ÚrrrrÚtest_startup_interactivehook s ÿ z/StartupImportTests.test_startup_interactivehookcCs(t tjdddg¡ ¡}| |d¡dS)Nrèr{rz,'__interactivehook__' added in isolated mode)rrúr rƒrrAr rrrÚ%test_startup_interactivehook_isolateds ÿ z8StartupImportTests.test_startup_interactivehook_isolatedcCs(t tjdddg¡ ¡}| |d¡dS)Nrèr{zYimport site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))z6'__interactivehook__' not added by enablerlcompleter()rr rrrÚ.test_startup_interactivehook_isolated_explicits ÿ zAStartupImportTests.test_startup_interactivehook_isolated_explicitN)r r¡r¢rr r r rrrrrçÛs0rçrÉzonly supported on Windowsc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „Zd S)Ú _pthFileTestsTc Csîddl}t ¡}| tjj|¡tj  |tj  t j ¡d¡}|  t j¡}tj  |tj  |¡d¡}t t j |¡t ||¡|r–tj |¡dd}ntj |¡dd}t|dƒ&} |D]} t| | dqºWdƒn1sà0Y|S)Nrr6z._pthrRr«)Ú_winapiÚtempfileÚmkdtempr[rµrÚrmtreerr r/rÚr rƒZGetModuleFileNameZ dllhandleÚshutilr ÚsplitextrZr®) r)ÚlinesÚexe_pthrZtemp_dirÚexe_fileZ dll_src_fileZdll_fileZ _pth_fileÚfÚlinerrrÚ_create_underpth_exe"s   ,z"_pthFileTests._create_underpth_execCsDg}|D]6}|r|ddkrqtj tj ||¡¡}| |¡q|S)Nrú#)rr r2r/Úappend)r)Ú sys_prefixrrrZabs_pathrrrÚ"_calc_sys_path_for_underpth_nosite4s z0_pthFileTests._calc_sys_path_for_underpth_nositecsÐtj tj tj¡¡‰tj tj¡}dg‡fdd„tdƒDƒ¢d‘d‘}| |¡}|  tj |¡|¡}tj   ¡}d|d<d   |t  d ¡¡|d <tj|d d g|d d}| ¡ d¡}| |d¡| ||d¡dS)Núfake-path-namecsg|]}ˆ‘qSrr©r8Ú_©Zlibpathrrr9BrYz;_pthFileTests.test_underpth_nosite_file..r×rkú # commentúfrom-envÚ PYTHONPATHú{};{}ÚPATHr{zCimport sys; print("\n".join(sys.path) if sys.flags.no_site else "")Úansi)r}rTr­zsys.flags.no_site was Falseúsys.path is incorrect)rr ÚdirnamerÍÚ__file__r rƒÚrangerrr€r ÚformatÚgetenvrÚ check_outputÚrstriprÚr‰r1)r)Ú exe_prefixZ pth_linesrrr}ÚoutputZactual_sys_pathrr"rÚtest_underpth_nosite_file=s<ÿþýü  þ ÿþ ýz'_pthFileTests.test_underpth_nosite_filec sÈtj tj tj¡¡‰tj tj¡}| dg‡fdd„tdƒDƒ¢d‘d‘d‘¡}tj |¡}tj   ¡}d|d <d   |t  d ¡¡|d <t j|d d tj |d¡ˆtj |d¡fg|d}| |d¡dS)Nrcsg|]}ˆ‘qSrrr r"rrr9^rYz4_pthFileTests.test_underpth_file..r×rkr#ú import siter$r%r&r'r{ú£import sys; sys.exit(not sys.flags.no_site and %r in sys.path and %r in sys.path and %r not in sys.path and all("\r" not in p and "\n" not in p for p in sys.path))r|r)©rr r*rÍr+r rƒrr,r€r r-r.rr‚r/r‰©r)r1rrr}r…rr"rÚtest_underpth_fileYs8ÿþýüû    ýþÿùz _pthFileTests.test_underpth_filec sÌtj tj tj¡¡‰tj tj¡}|jdg‡fdd„tdƒDƒ¢d‘d‘d‘dd }tj |¡}tj   ¡}d |d <d   |t  d ¡¡|d <t j|ddtj |d¡ˆtj |d ¡fg|d}| |d¡dS)Nrcsg|]}ˆ‘qSrrr r"rrr9wrYz8_pthFileTests.test_underpth_dll_file..r×rkr#r4F)rr$r%r&r'r{r5r|r)r6r7rr"rÚtest_underpth_dll_filers<ÿþýüûú    ýþÿùz$_pthFileTests.test_underpth_dll_fileN)T)r r¡r¢rrr3r8r9rrrrrs   rÚ__main__)+r£rZ test.supportrµrrrrrrrÁrÍrrrdrrr r$rZ urllib.errorrÛZurllib.requestrr ÚflagsÚno_siterr r rrZTestCaserrœrHr´rçr¤rurr ÚmainrrrrÚsF     7]Dk