a 5êdgÜdã@sfddlZddlZddlmZddlmZddlmZmZmZmZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZddlmZejjrÊe d¡‚ddlZdadd „Zd d „ZGd d „d ejƒZ Gdd„de!ƒZ"Gdd„dejƒZ#Gdd„dejƒZ$e %ej&dkd¡Gdd„dejƒƒZ'e(dkrbe )¡dS)é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°eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd e fdd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Ze ejd¡dd„ƒZdd „Zd!d"„Zd#d$„Zd%d&„Zd'S)(ÚHelperFunctionsTestscCs@tjdd…|_tj|_tj|_tj|_ t j |_ t t j ƒ|_dSr)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¡dSr)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 r/)Ú.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)Nz%s not in sys.modulesr) r:Úimportedr Úmodulesr r/Ú good_dir_pathr Ú assertFalserr6Ú 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ÚsetrDrBrrrÚ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 r1r.ÚopenÚ addCleanupÚwrite)r)ÚcontentsÚpth_dirZpth_nameZ pth_basenamerCrrUrÚ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 rJrMZ assertRegexÚgetvalueÚreÚescaperr r.©r)r]rVÚ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_ÚModuleNotFoundErrorrarerrrÚ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^rr@r rJrMZmaxDiffr0rbr r Ú isinstanceÚstrÚ assertNotIn)r)r]rVrfr rrrÚ#test_addpackage_import_bad_pth_file¤s4  z8HelperFunctionsTests.test_addpackage_import_bad_pth_filecCsPtƒ}|jddz.| ¡t |jtƒ¡| |¡W| ¡n | ¡0dSrE)rGrHrIr rrKrMrDrBrrrÚtest_addsitedir¯s  z$HelperFunctionsTests.test_addsitedircCs| t ¡t ¡¡dSr)r0r Ú _getuserbaser$r(rrrÚtest__getuserbase¾sz&HelperFunctionsTests.test__getuserbasecCsBtjdkrtjrd}n tjd}| t t ¡¡t   d|¡¡dS)NÚdarwinZosx_framework_userÚ_userZpurelib) r ÚplatformÚ _frameworkrÚnamer0r Ú _get_pathrpr$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_attrrMÚaddusersitepackagesZassert_called_once_withZassert_not_calledr@)r)rrŠrZ mock_isdirZmock_addsitedirÚ known_pathsrrrÚtest_no_home_directory%s0ÿÿN ÿ þ  z+HelperFunctionsTests.test_no_home_directoryN)Ú__name__Ú __module__Ú __qualname__r*r-r4r<rDrNrr^rgrirnrorqryrÚ skipUnlessr rr…r‹rŽr˜ržrrrrr;s&        ' rc@s0eZdZedddfdd„Zdd„Zd d d „Zd S) rGÚtimeZ __testdir__Z__badcCsj|d|_tj d¡|_tj |j|j¡|_||_||_||_ tj |j|j¡|_ tj |j|j ¡|_ dS)NrPrj) rLrr r1rKr.Ú file_pathr=Ú good_dirnameÚ bad_dirnamer?rA)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)NrQz#import @bad module name©ÚfileÚ z import %s) rYr¤Úprintr=r¥r¦ÚcloserÚmkdirr?)r)ÚFILErrrrIVs   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 ¡dSr) rr r6r¤rTr r>Úgetr=Zimported_moduler?ÚrmdirrA)r)rFrrrrHls   zPthFile.cleanupN)F)rŸr r¡rr¨rIrHrrrrrGGs ÿ rGc@s–eZdZdd„Zdd„Zdd„Zdd„Ze d ¡d d „ƒZ d d „Z dd„Z dd„Z dd„Z dd„Zej d¡ejje eejdƒd¡dd„ƒƒƒZdS)ÚImportSideEffectTestscCstjdd…|_dSr)r r rr(rrrr*szImportSideEffectTests.setUpcCs|jtjdd…<dSr)rr r r(rrrr-…szImportSideEffectTests.tearDowncCs*dtjd_t ¡| tjdj¡dS)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 ÚremoveduppathsrMr r rmÚ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Úwin32rr5ZcpÚmbcszdid not alias mbcs) r rtÚ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)Nr5ZHEAD)ÚmethodéÈz Can't find )Úmsg)rÃÚ_Printer__dataÚsplitÚurllibÚrequestZRequestrZÚ urlcleanuprZtransient_internetÚurlopenZgetcodeÚerrorÚ HTTPErrorÚcoder0)r)ÚurlZreqÚdatarßÚerrrÚtest_license_exists_at_urlÇs Hz0ImportSideEffectTests.test_license_exists_at_urlN)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ú-Irzz!import sys; print(repr(sys.path))rR)ÚstdoutrSrz*.pthzfound z .pth files in: z-vz#import sys; print(set(sys.modules)))rçÚstderrrSr >rcÚ sre_compileÚ_sreÚ sre_parseÚ sre_constantsrÉÚcopyreg> Ú collectionsÚweakrefÚkeywordÚ _collectionsÚheapqÚ functoolsÚ itertoolsÚtypesÚreprlibÚoperator)r€ÚPopenr r‚ÚPIPEÚ communicater0Ú returncodeÚreprÚevalÚglobrr r.rdZskipTestr•r:r@Ú intersectionrmÚ 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)Nrzú9import sys; sys.exit(hasattr(sys, "__interactivehook__"))z''__interactivehook__' not added by site©r€rør r‚Úwaitrˆ©r)ÚrrrrÚtest_startup_interactivehook s ÿ z/StartupImportTests.test_startup_interactivehookcCs(t tjdddg¡ ¡}| |d¡dS)Nrærzrz,'__interactivehook__' added in isolated mode)r€rør r‚rr@rrrrÚ%test_startup_interactivehook_isolateds ÿ z8StartupImportTests.test_startup_interactivehook_isolatedcCs(t tjdddg¡ ¡}| |d¡dS)NrærzzYimport site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))z6'__interactivehook__' not added by enablerlcompleter()rrrrrÚ.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)Nrr5z._pthrQr©)Ú_winapiÚtempfileÚmkdtemprZr³rÚrmtreerr r.rØr r‚ZGetModuleFileNameZ dllhandleÚshutilr ÚsplitextrYr¬) r)ÚlinesÚexe_pthr Ztemp_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 r1r.Ú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©r7Ú_©Zlibpathrrr8BrXz;_pthFileTests.test_underpth_nosite_file..rÕrjú # commentúfrom-envÚ PYTHONPATHú{};{}ÚPATHrzzCimport sys; print("\n".join(sys.path) if sys.flags.no_site else "")Úansi)r|rSr«zsys.flags.no_site was Falseúsys.path is incorrect)rr ÚdirnamerËÚ__file__r r‚Úrangerrrr ÚformatÚgetenvr€Ú check_outputÚrstriprØrˆr0)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|]}ˆ‘qSrrrr rrr8^rXz4_pthFileTests.test_underpth_file..rÕrjr!ú import siter"r#r$r%rzú£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*rr r+r,r€rr.rˆ©r)r/rrr|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|]}ˆ‘qSrrrr rrr8wrXz8_pthFileTests.test_underpth_dll_file..rÕrjr!r2F)rr"r#r$r%rzr3r{r'r4r5rr rÚtest_underpth_dll_filers<ÿþýüûú    ýþÿùz$_pthFileTests.test_underpth_dll_fileN)T)rŸr r¡rrr1r6r7rrrrr s   r Ú__main__)*rZ test.supportr³rrrrrrr¿rËrþrrcrr€r r$rZ urllib.errorrÙZurllib.requestrr ÚflagsÚno_siterr r rrZTestCaserr›rGr²rår¢rtr rŸÚmainrrrrÚsD     7]Dk