a 5êdg0Wã@s&ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z m Z mZmZmZmZddlZddlZddlmZz ddlZWney®dZYn0e ejejkpÊejejkd¡Zddd„ZGdd„dejƒZ Gd d „d e ƒZ!eGd d „d e ƒƒZ"e#d kr"e $¡dS)éN)Úcaptured_stdoutÚcaptured_stderrÚ requires_zlibÚ can_symlinkÚEnvironmentVarGuardÚrmtreeÚ import_moduleÚ*skip_if_broken_multiprocessing_synchronize)Úpatchz:cannot run venv.create from within a venv on this platformcCsBtj|tjtj|d}| ¡\}}|jr:t |j|||¡‚||fS)N)ÚstdoutÚstderrÚencoding)Ú subprocessÚPopenÚPIPEÚ communicateÚ returncodeÚCalledProcessError)Úcmdr ÚpÚoutÚerr©rú*/usr/local/lib/python3.9/test/test_venv.pyÚ check_output%sý  ÿrc@s>eZdZdZdd„Zdd„Zdd„Zdd „Zd d œd d „ZdS)ÚBaseTesti cCs tj t ¡¡|_tjdkr0d|_d|_d|_ n$d|_ddt j dd…f|_d |_ t j }tj  |¡d |_t jd kr–tj |¡r–tj |¡s–d |_nd |_dS)NÚntÚScripts©ÚLibÚIncludeÚbinÚlibú python%d.%déÚincludeéÿÿÿÿÚwin32TF)ÚosÚpathÚrealpathÚtempfileÚmkdtempÚenv_dirÚnameÚbindirr"r%ÚsysÚ version_infoÚ_base_executableÚsplitÚexeÚplatformÚlexistsÚexistsÚcannot_link_exe)ÚselfÚ executablerrrÚsetUp4s"   ÿ þzBaseTest.setUpcCst|jƒdS©N)rr-©r9rrrÚtearDownGszBaseTest.tearDownc OsjtƒD}tƒ}||i|¤ŽWdƒn1s20YWdƒn1sP0Y| ¡| ¡fSr<)rrÚgetvalue)r9ÚfuncÚargsÚkwargsÚoutputÚerrorrrrÚrun_with_captureJsJzBaseTest.run_with_capturecGstjj|jg|¢RŽSr<)r(r)Újoinr-)r9rArrrÚ get_env_filePszBaseTest.get_env_filezutf-8©r cGs@t|j|Žd|d}| ¡}Wdƒn1s20Y|S)NÚrrH)ÚopenrGÚread)r9r rAÚfÚresultrrrÚget_text_file_contentsSs&zBaseTest.get_text_file_contentsN) Ú__name__Ú __module__Ú __qualname__ZmaxDiffr;r>rErGrNrrrrr0s rc @s>eZdZdd„Zdd„Zdd„Zdd„Zed d „ƒZe j d krDd Z n4d dddde j dd…fdde j dd…dffZ dd„Z dd„Zdd„Zdd„Zdd„Zdd „Ze eƒd!¡d"d#„ƒZed$d%„ƒZe eƒd!¡d&d'„ƒZe ejd(kd)¡d*d+„ƒZed,d-„ƒZe ejd(kd.¡d/d0„ƒZe e j d1kd2¡d3d4„ƒZdS)5Ú BasicTestcGs |j|Ž}| tj |¡¡dSr<)rGÚ assertTruer(r)Úisdir)r9rAÚfnrrrrT[s zBasicTest.isdircCs$t|jƒ| tj|j¡| |j¡| |j¡|j|jŽ|  d¡}t   d¡dkoht j dkohtjdk}|r‚| t j |¡¡n| t j |¡¡| d¡}tj}t j |¡}| d||¡|  |j|j¡}t j |¡s|  |j¡}td|ƒtd t  |¡ƒ| t j |¡d |¡dS) NZlib64ÚPéÚposixÚdarwinú pyvenv.cfgz home = %súContents of %r:ú %rúFile %r should exist.)rr-rEÚvenvÚcreaterTr/r%r"rGÚstructÚcalcsizer(r.r0r5rSr)ÚislinkÚ assertFalser7rNr2ÚdirnameÚassertInr4ÚprintÚlistdir)r9rZ conditionsÚdatar:r)rUÚbdrrrÚ test_defaults_s,     ÿ    zBasicTest.test_defaultscCs0tj |j¡d}t|jƒt ¡}| |j|j¡|  |j¡}|  d¡}|  |j d|¡|  d|¡t|jƒtjdd}| |j|j¡|  |j¡}|  d¡}|  |j d¡| d|¡t|jƒtjd d}tj t ¡¡}| |j|j¡|  |j¡}|  d¡}|  |j d|¡| d ||¡dS) NérZz(%s) z prompt = z My prompt)Úpromptz (My prompt) zprompt = 'My prompt' Ú.zprompt = '%s' )r(r)r3r-rr^Ú EnvBuilderrEr_Úensure_directoriesrNÚ assertEqualrlZ assertNotInreÚbasenameÚgetcwd)r9Zenv_nameÚbuilderÚcontextrhÚcwdrrrÚ test_prompt{s.             zBasicTest.test_promptc s¨t ¡}tjdkrdnd‰tjdkr(dnd‰t ¡`‰‡‡‡‡fdd„}| ˆ¡}td|ƒ| |¡Wdƒn1s|0YWdƒn1sš0YdS) Nr'rr!z python.exeÚpythonc s*ˆ |tj ˆˆˆ¡ddddddg¡dS)Nú-mÚpipÚinstallz --upgradeZ setuptools)rpr(r)rF)r©Zbin_pathZ fake_env_dirZ python_exer9rrÚpip_cmd_checkersùþz.pip_cmd_checkerzvenv.subprocess.check_call) r^rnr0r5r+ÚTemporaryDirectoryror Zupgrade_dependencies)r9rsr|Z fake_contextrr{rÚtest_upgrade_dependencies—s   z#BasicTest.test_upgrade_dependenciescCs˜t|jƒ| tj|j¡tj |j|j|j ¡}|ddg}d|jfd|jfdt j fdt j ffD]4\}}d||d<t |ƒ\}}| | ¡| ¡¡q^dS)Nú-cÚprefixÚ exec_prefixÚ base_prefixÚbase_exec_prefixzimport sys; print(sys.%s)r$)rr-rEr^r_r(r)rFr/r4r0r‚rƒrrpÚstripÚencode)r9Úenvpyrr€ZexpectedrrrrrÚ test_prefixes¯s  ü   zBasicTest.test_prefixesr'))r)r r)rú site-packages)r!)r%)r"r"r#Nr$rˆc Csp|D]f}tjj|jg|¢RŽ}t |¡tj ||¡}t|dƒ}| d¡Wdƒq1s`0YqdS)NÚwbó Still here?)r(r)rFr-ÚmkdirrJÚwrite)r9ÚpathsÚfilenameÚsubdirsÚdrUrLrrrÚcreate_contentsÒs   zBasicTest.create_contentsc Csà| |jd¡t |j¡|jD]j}tjj|jg|d¢RŽ}| tj  |¡¡t |dƒ }|  |  ¡d¡Wdƒq 1s€0Yq tj dd}| |j¡|jD]0}tjj|jg|d¢RŽ}| tj  |¡¡qªdS)NÚfoo)r’ÚrbrŠT©Úclear)r‘Ú ENV_SUBDIRSr^r_r-r(r)rFrSr7rJrprKrnrc)r9rrUrLrsrrrÚtest_overwrite_existingÞs   0   z!BasicTest.test_overwrite_existingcCsZt |¡D]J}tj ||¡}tj |¡s4tj |¡r@t |¡q tj |¡r t|ƒq dSr<) r(rgr)rFrbÚisfileÚremoverTr)r9r)rUrrrÚclear_directoryðs   zBasicTest.clear_directoryc Cs„|jdd…D]p}tjj|jg|¢RŽ}t|dƒ}| d¡Wdƒn1sR0Y| tt ft j |j¡|  |j¡qdS)Nér‰ó) r–r(r)rFr-rJrŒZ assertRaisesÚ ValueErrorÚOSErrorr^r_rš)r9rrUrLrrrÚtest_unoverwritable_failsøs  (z#BasicTest.test_unoverwritable_failscCs¬dD]¢}tj|d}| |j|j¡| |j¡| |j¡|j|jŽ|  |j|j ¡}t j   |¡sŽ|  |j¡}td|ƒtdt  |¡ƒ| t j   |¡d|¡qdS)N©FT)Úupgrader[r\r])r^rnrEr_r-rTr/r%r"rGr4r(r)r7rfrgrS)r9r¡rsrUrirrrÚ test_upgrades       zBasicTest.test_upgradecCsFdD]<\}}tjd|d}| |j¡| d¡}| d||¡qdS)N))TÚtrue)FZfalseT)r•Úsystem_site_packagesrZz"include-system-site-packages = %s )r^rnr_r-rNre)r9ZsspÚsrsrhrrrÚtest_isolations    zBasicTest.test_isolationzNeeds symlinkscCshdD]^}tjd|d}| |j¡| |j|j¡}|r|jrP| t j   |¡¡q|  t j   |¡¡qdS)Nr T©r•Úsymlinks) r^rnr_r-rGr/r4r8rcr(r)rbrS)r9ZuslrsrUrrrÚtest_symlinking s zBasicTest.test_symlinkingcCsbt|jƒ| tj|j¡tj tj |j¡|j |j ¡}t |ddgƒ\}}|  |  ¡| ¡¡dS)Nrú!import sys; print(sys.executable))rr-rEr^r_r(r)rFr*r/r4rrpr„r…©r9r†rrrrrÚtest_executable8s ÿÿ zBasicTest.test_executablecCslt|jƒtjddd}| |j¡tj tj |j¡|j |j ¡}t |ddgƒ\}}|  |  ¡| ¡¡dS)NTr§rrª©rr-r^rnr_r(r)rFr*r/r4rrpr„r…©r9rsr†rrrrrÚtest_executable_symlinksEs  ÿÿ z"BasicTest.test_executable_symlinksrzonly relevant on WindowscCsŽt|jƒtj tj |j¡d¡}tjdd}| |¡tj ||j d¡}tj ||j |j ¡}t |d|j ddgdd \}}|  |  ¡d ¡dS) Nu ϼўТλФЙTr”z activate.batú&rzprint(0)ZoemrHÚ0)rr-r(r)rFr*r^rnr_r/r4rrpr„)r9r-rsÚactivater†rrrrrÚtest_unicode_in_batch_fileSs   þ z$BasicTest.test_unicode_in_batch_filecCshtƒt|jƒ| tj|j¡tj tj  |j¡|j |j ¡}t |ddgƒ\}}|  | ¡d ¡¡dS)Nrzrfrom multiprocessing import Pool; pool = Pool(1); print(pool.apply_async("Python".lower).get(3)); pool.terminate()rw)r rr-rEr^r_r(r)rFr*r/r4rrpr„r…r«rrrÚtest_multiprocessingds ÿÿ zBasicTest.test_multiprocessingznot relevant on WindowscCsÒt d¡}|dur| d¡t|jƒtjdd}| |j¡tj   |j|j d¡}tj   |jd¡}t |dƒ"}|  d|›d ¡Wdƒn1s”0Yt||gƒ\}}| |d  ¡¡| |d  ¡¡dS) NÚbashzbash required for this testTr”r²ztest_strict.shÚwzset -euo pipefail source z deactivate Ú)ÚshutilÚwhichZskipTestrr-r^rnr_r(r)rFr/rJrŒrrpr…)r9rµrsr²Z test_scriptrLrrrrrÚ%test_deactivate_with_strict_bash_optsys      ÿ(z/BasicTest.test_deactivate_with_strict_bash_optsrYzonly relevant on macOScCsft|jƒt ¡}| |j¡tj tj |j¡|j |j ¡}t |ddgƒ\}}|  |  ¡d ¡¡dS)Nrz5import os; print("__PYVENV_LAUNCHER__" in os.environ)ÚFalser­r®rrrÚtest_macos_envŒs  ÿÿ zBasicTest.test_macos_env) rOrPrQrTrjrvr~ÚrequireVenvCreater‡r0r5r–r1r‘r—ršrŸr¢r¦ÚunittestÚ skipUnlessrr©r¬r¯r(r.r³r´ZskipIfrºr¼rrrrrRXsD  û         rRc@sNeZdZdd„Zdd„Zdd„Zdd„Zd d „Ze  e d ¡e ƒd d „ƒƒZ dS)Ú EnsurePipTestcCsdtj tj |j¡|j|j¡}t|ddgƒ\}}| d¡}|  |d¡| d¡}|  |  ¡d¡dS)Nrz1try: import pip except ImportError: print("OK")úlatin-1r·ZOK) r(r)rFr*r-r/r4rÚdecoderpr„r«rrrÚassert_pip_not_installed›sÿÿ    z&EnsurePipTest.assert_pip_not_installedcCs&t|jƒ| tj|j¡| ¡dSr<©rr-rEr^r_rÃr=rrrÚtest_no_pip_by_default¨s z$EnsurePipTest.test_no_pip_by_defaultcCs*t|jƒ|jtj|jdd| ¡dS)NF)Úwith_piprÄr=rrrÚtest_explicit_no_pip­s z"EnsurePipTest.test_explicit_no_pipcCsTttjdƒ }| | ¡d¡Wdƒn1s20Y| tj tj¡¡dS)Nr“rœ)rJr(ÚdevnullrprKrSr)r7)r9rLrrrÚ test_devnull²s.zEnsurePipTest.test_devnullc Cs’t|jƒtƒ0}d|d<d|d<t ¡ö}||d<d}d}d}|fD]b\}}tj ||¡} t | ¡tj | |¡} t | d ƒ} |   |¡WdƒqH1s 0YqHz|j t j |j|d d WnLtjy} z0| jjd d } d}| | | | ¡¡WYd} ~ n d} ~ 00Wdƒn1s*0YWdƒn1sJ0Ytj tj |j¡|j|j¡}t|ddddddgƒ\}}| d¡}| |d¡| d¡}d t ¡¡}| |dt|ƒ…|¡t |j¡ d¡}| ||¡tƒ(}t|dddddgƒ\}}Wdƒn1s&0Y| d¡}tjdd|tj d}| | !¡d¡| d¡}| d|¡| d|¡|sŽ| "¡dS)NÚeZPYTHONWARNINGSÚ1ZPIP_NO_INSTALLÚHOMEz[global] no-install=1)ryzpip.ini)z.pipzpip.confr¶T)r¤rÆÚreplace)Úerrorsz{} **Subprocess Output** {}z-Wzignore::DeprecationWarningz-Irxryz --versionrÁr·zpip {}zensurepip._uninstallzl^(WARNING: )?The directory .* or its parent directory is not owned or is not writable by the current user.*$)ÚflagszSuccessfully uninstalled pipz#Successfully uninstalled setuptools)#rr-rr+r}r(r)rFr‹rJrŒrEr^r_rrrCrÂZfailÚformatr*r/r4rrpÚ ensurepipÚversionÚlenÚfsencodereÚreÚsubÚ MULTILINEÚrstriprÃ)r9r¤ÚenvvarsZhome_dirZ bad_configZ win_locationZposix_locationrdZfnameÚdirpathZfpathrLÚexcZdetailsÚmsgr†rrZexpected_versionr-rrrÚdo_test_with_pip¼sf     * þ h ÿ     þ* þ   zEnsurePipTest.do_test_with_pipzpip requires ctypescCs| d¡| d¡dS)NFT)rÝr=rrrÚ test_with_pips zEnsurePipTest.test_with_pipN) rOrPrQrÃrÅrÇrÉrÝr¾r¿ÚctypesrrÞrrrrrÀ˜s  Z rÀÚ__main__)N)%rÑr(Zos.pathrÕr¸r`rr0r+Z test.supportrrrrrrrr r¾r^Z unittest.mockr rßÚ ImportErrorr¿r€r‚r2r:r½rZTestCaserrRrÀrOÚmainrrrrÚs>(      ý (B