o
    ±ó®g X  ã                   @   s.  	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZ d dlmZmZmZ d dlZd dlZd dlmZ zd dlZW n eyZ   dZY nw e ejejkphejejkd¡Zddd„ZG dd	„ d	ejƒZ G d
d„ de ƒZ!eG dd„ de ƒƒZ"e#dkr•e $¡  dS dS )é    N)Úcaptured_stdoutÚcaptured_stderrÚrequires_zlibÚ*skip_if_broken_multiprocessing_synchronize)Úcan_symlinkÚEnvironmentVarGuardÚrmtree)Úpatchz:cannot run venv.create from within a venv on this platformc                 C   sB   t j| t jt j|d}| ¡ \}}|jrt  |j| ||¡‚||fS )N)ÚstdoutÚstderrÚencoding)Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚCalledProcessError)Úcmdr   ÚpÚoutÚerr© r   úD/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_venv.pyÚcheck_output$   s   ý
ÿr   c                   @   s@   e Zd Z	 dZdd„ Zdd„ Zdd„ Zdd	„ Zd
dœdd„ZdS )ÚBaseTesti   c                 C   s¢   t j t ¡ ¡| _t jdkrd| _d| _d| _	nd| _ddt
jd d…  f| _d	| _	t
j}t j |¡d
 | _t
jdkrLt j |¡rLt j |¡sLd| _d S d| _d S )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Ú
executabler   r   r   ÚsetUp3   s"   


ÿ
þ

zBaseTest.setUpc                 C   s   t | jƒ d S ©N)r   r,   ©r8   r   r   r   ÚtearDownF   s   zBaseTest.tearDownc              	   O   sj   t ƒ "}tƒ }||i |¤Ž W d   ƒ n1 sw   Y  W d   ƒ n1 s(w   Y  | ¡ | ¡ fS r;   )r   r   Úgetvalue)r8   ÚfuncÚargsÚkwargsÚoutputÚerrorr   r   r   Úrun_with_captureI   s   ÿ€ÿzBaseTest.run_with_capturec                 G   s   t jj| jg|¢R Ž S r;   )r'   r(   Újoinr,   )r8   r@   r   r   r   Úget_env_fileO   s   zBaseTest.get_env_filezutf-8©r   c                G   sB   t | j|Ž d|d}| ¡ }W d   ƒ |S 1 sw   Y  |S )NÚrrG   )ÚopenrF   Úread)r8   r   r@   ÚfÚresultr   r   r   Úget_text_file_contentsR   s   

ÿþzBaseTest.get_text_file_contentsN)	Ú__name__Ú
__module__Ú__qualname__ZmaxDiffr:   r=   rD   rF   rM   r   r   r   r   r   /   s    r   c                	   @   s@  e Zd Z	 dd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZe	j
dkr#dZnddddde	jdd…  fdde	jdd…  dffZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Ze eƒ d!¡d"d#„ ƒZed$d%„ ƒZe eƒ d!¡d&d'„ ƒZe ejd(kd)¡d*d+„ ƒZed,d-„ ƒZe ejd(kd.¡d/d0„ ƒZe e	j
d1kd2¡d3d4„ ƒZdS )5Ú	BasicTestc                 G   s    | j |Ž }|  tj |¡¡ d S r;   )rF   Ú
assertTruer'   r(   Úisdir)r8   r@   Úfnr   r   r   rS   Z   s   
zBasicTest.isdirc                 C   s$  	 t | jƒ |  tj| j¡ |  | j¡ |  | j¡ | j| jŽ  |  	d¡}t
 d¡dko5tjdko5tjdk}|rB|  tj |¡¡ n	|  tj |¡¡ |  d¡}tj}tj |¡}|  d| |¡ |  	| j| j¡}tj |¡s„|  	| j¡}td| ƒ td	t |¡ ƒ |  tj |¡d
| ¡ d S )NZlib64ÚPé   ÚposixÚdarwinú
pyvenv.cfgz	home = %súContents of %r:ú    %rúFile %r should exist.)r   r,   rD   ÚvenvÚcreaterS   r.   r$   r!   rF   ÚstructÚcalcsizer'   r-   r/   r4   rR   r(   ÚislinkÚassertFalser6   rM   r1   ÚdirnameÚassertInr3   ÚprintÚlistdir)r8   r   Z
conditionsÚdatar9   r(   rT   Úbdr   r   r   Útest_defaults^   s.   

ÿ
zBasicTest.test_defaultsc                 C   s0  t j | j¡d }t| jƒ t ¡ }|  |j| j¡ | 	| j¡}|  
d¡}|  |jd| ¡ |  d|¡ t| jƒ tjdd}|  |j| j¡ | 	| j¡}|  
d¡}|  |jd¡ |  d|¡ t| jƒ tjd	d}t j t  ¡ ¡}|  |j| j¡ | 	| j¡}|  
d¡}|  |jd| ¡ |  d
| |¡ d S )Né   rY   z(%s) z	prompt = z	My prompt)Úpromptz(My prompt) zprompt = 'My prompt'
Ú.zprompt = '%s'
)r'   r(   r2   r,   r   r]   Ú
EnvBuilderrD   r^   Úensure_directoriesrM   ÚassertEqualrk   ZassertNotInrd   ÚbasenameÚgetcwd)r8   Zenv_nameÚbuilderÚcontextrg   Úcwdr   r   r   Útest_promptz   s.   





zBasicTest.test_promptc              	      sº   t  ¡ }tjdkrdnd‰ tjdkrdnd‰t ¡ 9‰‡ ‡‡‡fdd„}| ˆ¡}td|ƒ | |¡ W d   ƒ n1 s>w   Y  W d   ƒ d S W d   ƒ d S 1 sVw   Y  d S )	Nr&   r   r    z
python.exeÚpythonc              
      s*   ˆ  | tj ˆˆ ˆ¡ddddddg¡ d S )Nú-mÚpipZinstallz	--upgradeZ
setuptools)ro   r'   r(   rE   )r   ©Zbin_pathZfake_env_dirZ
python_exer8   r   r   Úpip_cmd_checkerœ   s   ùþz<BasicTest.test_upgrade_dependencies.<locals>.pip_cmd_checkerzvenv.subprocess.check_call)	r]   rm   r/   r4   r*   ÚTemporaryDirectoryrn   r	   Zupgrade_dependencies)r8   rr   rz   Zfake_contextr   ry   r   Útest_upgrade_dependencies–   s   

ÿï"ïz#BasicTest.test_upgrade_dependenciesc                 C   sš   	 t | jƒ |  tj| j¡ tj | j| j| j	¡}|dd g}d| jfd| jfdt
jfdt
jffD ]\}}d| |d< t|ƒ\}}|  | ¡ | ¡ ¡ q0d S )Nú-cÚprefixÚexec_prefixÚbase_prefixÚbase_exec_prefixzimport sys; print(sys.%s)r#   )r   r,   rD   r]   r^   r'   r(   rE   r.   r3   r/   r€   r   r   ro   ÚstripÚencode)r8   Úenvpyr   r~   Zexpectedr   r   r   r   r   Útest_prefixes®   s   

üùzBasicTest.test_prefixesr&   ))r   )r   r   )r   úsite-packages)r    )r$   )r!   r!   r"   Nr#   r†   c              	   C   sr   	 |D ]3}t jj| jg|¢R Ž }t  |¡ t j ||¡}t|dƒ}| d¡ W d   ƒ q1 s1w   Y  qd S )NÚwbó   Still here?)r'   r(   rE   r,   ÚmkdirrI   Úwrite)r8   ÚpathsÚfilenameÚsubdirsÚdrT   rK   r   r   r   Úcreate_contentsÑ   s   
ÿüzBasicTest.create_contentsc              	   C   sâ   	 |   | jd¡ t | j¡ | jD ]5}tjj| jg|d ¢R Ž }|  tj 	|¡¡ t
|dƒ}|  | ¡ d¡ W d   ƒ q1 sAw   Y  qtjdd}| | j¡ | jD ]}tjj| jg|d ¢R Ž }|  tj 	|¡¡ qVd S )NÚfoo)r   Úrbrˆ   T©Úclear)r   ÚENV_SUBDIRSr]   r^   r,   r'   r(   rE   rR   r6   rI   ro   rJ   rm   rb   )r8   r   rT   rK   rr   r   r   r   Útest_overwrite_existingÝ   s   
ÿ
þz!BasicTest.test_overwrite_existingc                 C   sZ   t  |¡D ]%}t j ||¡}t j |¡st j |¡r t  |¡ qt j |¡r*t|ƒ qd S r;   )	r'   rf   r(   rE   ra   ÚisfileÚremoverS   r   )r8   r(   rT   r   r   r   Úclear_directoryï   s   €ûzBasicTest.clear_directoryc              	   C   s„   | j d d… D ]8}tjj| jg|¢R Ž }t|dƒ}| d¡ W d   ƒ n1 s)w   Y  |  tt	ft
j| j¡ |  | j¡ qd S )Né   r‡   ó    )r”   r'   r(   rE   r,   rI   rŠ   ZassertRaisesÚ
ValueErrorÚOSErrorr]   r^   r˜   )r8   r‹   rT   rK   r   r   r   Útest_unoverwritable_fails÷   s   ÿûz#BasicTest.test_unoverwritable_failsc                 C   s®   	 dD ]Q}t j|d}|  |j| j¡ |  | j¡ |  | j¡ | j| jŽ  |  	| j| j
¡}tj |¡sH|  	| j¡}td| ƒ tdt |¡ ƒ |  tj |¡d| ¡ qd S )N©FT)ÚupgraderZ   r[   r\   )r]   rm   rD   r^   r,   rS   r.   r$   r!   rF   r3   r'   r(   r6   re   rf   rR   )r8   rŸ   rr   rT   rh   r   r   r   Útest_upgrade   s   ôzBasicTest.test_upgradec                 C   sH   	 dD ]\}}t jd|d}| | j¡ |  d¡}|  d| |¡ qd S )N))TÚtrue)FZfalseT)r“   Úsystem_site_packagesrY   z"include-system-site-packages = %s
)r]   rm   r^   r,   rM   rd   )r8   ZsspÚsrr   rg   r   r   r   Útest_isolation  s   
üzBasicTest.test_isolationzNeeds symlinksc                 C   sj   	 dD ]/}t jd|d}| | j¡ |  | j| j¡}|r2| jr)|  t	j
 |¡¡ q|  t	j
 |¡¡ qd S )Nrž   T©r“   Úsymlinks)r]   rm   r^   r,   rF   r.   r3   r7   rb   r'   r(   ra   rR   )r8   Zuslrr   rT   r   r   r   Útest_symlinking  s   €ózBasicTest.test_symlinkingc                 C   sd   	 t | jƒ |  tj| j¡ tj tj | j¡| j	| j
¡}t|ddgƒ\}}|  | ¡ | ¡ ¡ d S )Nr}   ú!import sys; print(sys.executable))r   r,   rD   r]   r^   r'   r(   rE   r)   r.   r3   r   ro   r‚   rƒ   ©r8   r„   r   r   r   r   r   Útest_executable7  s   
ÿ
ÿzBasicTest.test_executablec                 C   sn   	 t | jƒ tjddd}| | j¡ tj tj | j¡| j	| j
¡}t|ddgƒ\}}|  | ¡ | ¡ ¡ d S )NTr¥   r}   r¨   ©r   r,   r]   rm   r^   r'   r(   rE   r)   r.   r3   r   ro   r‚   rƒ   ©r8   rr   r„   r   r   r   r   r   Útest_executable_symlinksD  s   
ÿ
ÿz"BasicTest.test_executable_symlinksr   zonly relevant on Windowsc                 C   s   	 t | jƒ tj tj | j¡d¡}tjdd}| |¡ tj || j	d¡}tj || j	| j
¡}t|d| j
ddgdd	\}}|  | ¡ d
¡ d S )Nu   Ï¼ÑžÐ¢Î»Ð¤Ð™Tr’   zactivate.batú&r}   zprint(0)ZoemrG   Ú0)r   r,   r'   r(   rE   r)   r]   rm   r^   r.   r3   r   ro   r‚   )r8   r,   rr   Úactivater„   r   r   r   r   r   Útest_unicode_in_batch_fileR  s   


þz$BasicTest.test_unicode_in_batch_filec                 C   sj   	 t ƒ  t| jƒ |  tj| j¡ tj tj 	| j¡| j
| j¡}t|ddgƒ\}}|  | ¡ d ¡ ¡ d S )Nr}   zrfrom multiprocessing import Pool; pool = Pool(1); print(pool.apply_async("Python".lower).get(3)); pool.terminate()rv   )r   r   r,   rD   r]   r^   r'   r(   rE   r)   r.   r3   r   ro   r‚   rƒ   r©   r   r   r   Útest_multiprocessingc  s   
ÿ
ÿzBasicTest.test_multiprocessingznot relevant on Windowsc                 C   sÒ   t  d¡}|d u r|  d¡ t| jƒ tjdd}| | j¡ tj	 
| j| jd¡}tj	 
| jd¡}t|dƒ}| d|› d	¡ W d   ƒ n1 sJw   Y  t||gƒ\}}|  |d
 ¡ ¡ |  |d
 ¡ ¡ d S )NÚbashzbash required for this testTr’   r°   ztest_strict.shÚwzset -euo pipefail
source z
deactivate
Ú )ÚshutilÚwhichZskipTestr   r,   r]   rm   r^   r'   r(   rE   r.   rI   rŠ   r   ro   rƒ   )r8   r³   rr   r°   Ztest_scriptrK   r   r   r   r   r   Ú%test_deactivate_with_strict_bash_optsx  s    


ÿÿz/BasicTest.test_deactivate_with_strict_bash_optsrX   zonly relevant on macOSc                 C   sf   t | jƒ t ¡ }| | j¡ tj tj | j¡| j	| j
¡}t|ddgƒ\}}|  | ¡ d ¡ ¡ d S )Nr}   z5import os; print("__PYVENV_LAUNCHER__" in os.environ)ÚFalser«   r¬   r   r   r   Útest_macos_env‹  s   
ÿ
ÿzBasicTest.test_macos_env) rN   rO   rP   rS   ri   ru   r|   ÚrequireVenvCreater…   r/   r4   r”   r0   r   r•   r˜   r   r    r¤   ÚunittestÚ
skipUnlessr   r§   rª   r­   r'   r-   r±   r²   ZskipIfr¸   rº   r   r   r   r   rQ   W   sH    

û	






rQ   c                   @   sP   e Zd Z	 dd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
d¡eƒ dd„ ƒƒZdS )ÚEnsurePipTestc                 C   sd   t j t j | j¡| j| j¡}t|ddgƒ\}}| d¡}|  	|d¡ | d¡}|  	| 
¡ d¡ d S )Nr}   z1try:
 import pip
except ImportError:
 print("OK")úlatin-1rµ   ZOK)r'   r(   rE   r)   r,   r.   r3   r   Údecodero   r‚   r©   r   r   r   Úassert_pip_not_installedš  s   ÿ
ÿ

z&EnsurePipTest.assert_pip_not_installedc                 C   s&   t | jƒ |  tj| j¡ |  ¡  d S r;   ©r   r,   rD   r]   r^   rÁ   r<   r   r   r   Útest_no_pip_by_default§  s   
z$EnsurePipTest.test_no_pip_by_defaultc                 C   s*   t | jƒ | jtj| jdd |  ¡  d S )NF)Úwith_piprÂ   r<   r   r   r   Útest_explicit_no_pip¬  s   
z"EnsurePipTest.test_explicit_no_pipc                 C   sT   t tjdƒ}|  | ¡ d¡ W d   ƒ n1 sw   Y  |  tj tj¡¡ d S )Nr‘   rš   )rI   r'   Údevnullro   rJ   rR   r(   r6   )r8   rK   r   r   r   Útest_devnull±  s   ÿzEnsurePipTest.test_devnullc                 C   sž  t | jƒ tƒ –}d|d< d|d< t ¡ z}||d< d}d}d}|fD ]1\}}tj ||¡}	t |	¡ tj |	|¡}
t	|
d	ƒ}| 
|¡ W d   ƒ q#1 sOw   Y  q#z| jtj| j|d
d W n% tjy‡ } z|jjdd}d}|  | ||¡¡ W Y d }~nd }~ww W d   ƒ n1 s’w   Y  W d   ƒ n1 s¡w   Y  tj tj | j¡| j| j¡}t|ddddddddg	ƒ\}}| d¡}|  |d¡ | d¡}d t ¡ ¡}|  |d t|ƒ… |¡ t | j¡ d¡}|  ||¡ tƒ }d|d< t|dddddddgƒ\}}W d   ƒ n	1 sw   Y  | d¡}tjdd|tj d}|  | !¡ d¡ | d¡}|  d|¡ |  d|¡ |sM|  "¡  d S d S )NÚignoreZPYTHONWARNINGSÚ1ZPIP_NO_INSTALLÚHOMEz[global]
no-install=1)rx   zpip.ini)z.pipzpip.confr´   T)r¢   rÄ   Úreplace)Úerrorsz{}

**Subprocess Output**
{}z-Wzignore::DeprecationWarningzignore::ImportWarningz-Irw   rx   z	--versionr¿   rµ   zpip {}zensurepip._uninstallzl^(WARNING: )?The directory .* or its parent directory is not owned or is not writable by the current user.*$)ÚflagszSuccessfully uninstalled pipz#Successfully uninstalled setuptools)#r   r,   r   r*   r{   r'   r(   rE   r‰   rI   rŠ   rD   r]   r^   r   r   rB   rÀ   ZfailÚformatr)   r.   r3   r   ro   Ú	ensurepipÚversionÚlenÚfsencoderd   ÚreÚsubÚ	MULTILINEÚrstriprÁ   )r8   r¢   ZenvvarsZhome_dirZ
bad_configZwin_locationZposix_locationrc   ÚfnameÚdirpathZfpathrK   ÚexcZdetailsÚmsgr„   r   r   Zexpected_versionr,   r   r   r   Údo_test_with_pip»  s~   


ÿ
þ€û€ë€ó)
þ

ýü

þ
ÿzEnsurePipTest.do_test_with_pipzpip requires ctypesc                 C   s   |   d¡ |   d¡ d S )NFT)rÛ   r<   r   r   r   Útest_with_pip  s   
zEnsurePipTest.test_with_pipN)rN   rO   rP   rÁ   rÃ   rÅ   rÇ   rÛ   r¼   r½   Úctypesr   rÜ   r   r   r   r   r¾   —  s    

_r¾   Ú__main__r;   )%rÏ   r'   Zos.pathrÓ   r¶   r_   r   r/   r*   Ztest.supportr   r   r   r   Ztest.support.os_helperr   r   r   r¼   r]   Zunittest.mockr	   rÝ   ÚImportErrorr½   r~   r€   r1   r9   r»   r   ZTestCaser   rQ   r¾   rN   Úmainr   r   r   r   Ú<module>   sH    ÿ
ý
(  B 	ÿ