o
    HXh0                     @   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
Z	G dd dejZG dd dZG dd deejZe je	 fdd	ZG d
d deejZde	  ZG dd deejZG dd deejZedkr{e  dS dS )    Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestPackagesc                 C   s    t j||}t|d  d S )Nwb)ospathjoinopenclose)selfZ	directoryfilenamefullname r   =/opt/python-3.10.19/usr/lib/python3.10/test/test_ensurepip.pytouch   s   zTestPackages.touchc              
   C   s   t  W}| |d | |d tjjtdd ) tjjtd| | t	 d W d    n1 s7w   Y  W d    n1 sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )Nz pip-1.2.3b1-py2.py3-none-any.whl"setuptools-49.1.3-py3-none-any.whl	_PACKAGES_WHEEL_PKG_DIRz1.2.3b1)
tempfileTemporaryDirectoryr   unittestmockpatchobject	ensurepipassertEqualversion)r	   tmpdirr   r   r   test_version   s   
 "zTestPackages.test_versionc              	   C   s   t jjtdd . t jjtdd  t }| tjt  W d    n1 s+w   Y  W d    n1 s:w   Y  | 	|d j
 | 	|d j
 d S )Nr   r   pip
setuptools)r   r   r   r   r   _get_packagesr   Z_PIP_VERSIONr   ZassertIsNotNoneZ
wheel_name)r	   packagesr   r   r   test_get_packages_no_dir   s    z%TestPackages.test_get_packages_no_dirc              
   C   s6  d}d}t  }| || | || | |d tjjtdd % tjjtd| t }W d    n1 s=w   Y  W d    n1 sLw   Y  | 	|d j
d | 	|d jtj|| | 	|d j
d	 | 	|d jtj|| | 	t|ddg W d    d S 1 sw   Y  d S )
Nr   zpip-20.2.2-py2.py3-none-any.whlz!wheel-0.34.2-py2.py3-none-any.whlr   r   r   z49.1.3r   z20.2.2)r   r   r   r   r   r   r   r   r   r   r   Z
wheel_pathr   r   r   sorted)r	   Zsetuptools_filenameZpip_filenamer   r    r   r   r   test_get_packages_with_dir)   s.   

 "z'TestPackages.test_get_packages_with_dirN)__name__
__module____qualname__r   r   r!   r#   r   r   r   r   r      s
    	r   c                   @   s   e Zd Zdd ZdS )EnsurepipMixinc                 C   s|   t jd}| | _d| j_| |j tj	}t jd}| }tj
|_
| |j ||_	tj|_tj  | _|_d S )Nzensurepip._run_pipr   zensurepip.os)r   r   r   startrun_pipreturn_valueZ
addCleanupstopr   devnulllistdirr   environcopy
os_environ)r	   Zrun_pip_patchZreal_devnullZos_patchZ
patched_osr   r   r   setUpE   s   
zEnsurepipMixin.setUpN)r$   r%   r&   r1   r   r   r   r   r'   C   s    r'   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestBootstrapc              	   C   sP   t   | jddddtjjddgtjj | jjd d }| t	|d	 d S 
Ninstall--no-cache-dir
--no-index--find-linksr   r   r         )
r   	bootstrapr)   assert_called_once_withr   r   ANY	call_argsr   len)r	   additional_pathsr   r   r   test_basic_bootstrappingY   s   
z&TestBootstrap.test_basic_bootstrappingc                 C   s8   t jdd | jddddtjjdddd	g	tjj d S )
Nz	/foo/bar/)rootr4   r5   r6   r7   z--rootr   r   r   r:   r)   r;   r   r   r<   r	   r   r   r   test_bootstrapping_with_rootg   s   
z*TestBootstrap.test_bootstrapping_with_rootc              
   C   6   t jdd | jddddtjjddd	gtjj d S )
NT)userr4   r5   r6   r7   z--userr   r   rB   rC   r   r   r   test_bootstrapping_with_users      z*TestBootstrap.test_bootstrapping_with_userc              
   C   rE   )
NT)Zupgrader4   r5   r6   r7   z	--upgrader   r   rB   rC   r   r   r   test_bootstrapping_with_upgrade~   rH   z-TestBootstrap.test_bootstrapping_with_upgradec              
   C   rE   )
Nr8   	verbosityr4   r5   r6   r7   -vr   r   rB   rC   r   r   r   #test_bootstrapping_with_verbosity_1   rH   z1TestBootstrap.test_bootstrapping_with_verbosity_1c              
   C   rE   )
Nr9   rJ   r4   r5   r6   r7   -vvr   r   rB   rC   r   r   r   #test_bootstrapping_with_verbosity_2   rH   z1TestBootstrap.test_bootstrapping_with_verbosity_2c              
   C   rE   )
N   rJ   r4   r5   r6   r7   -vvvr   r   rB   rC   r   r   r   #test_bootstrapping_with_verbosity_3   rH   z1TestBootstrap.test_bootstrapping_with_verbosity_3c                 C   s   t   | | jd d d S )NENSUREPIP_OPTIONSr4   r   r:   r   r0   rC   r   r   r   'test_bootstrapping_with_regular_install   s   z5TestBootstrap.test_bootstrapping_with_regular_installc                 C   s"   t jdd | | jd d d S )NT)
altinstallrS   rV   rT   rC   r   r   r   #test_bootstrapping_with_alt_install   s   z1TestBootstrap.test_bootstrapping_with_alt_installc                 C   s   t jdd | d| j d S )NT)default_piprS   )r   r:   assertNotInr0   rC   r   r   r   #test_bootstrapping_with_default_pip   s   z1TestBootstrap.test_bootstrapping_with_default_pipc                 C   sJ   |  t tjddd W d    n1 sw   Y  | | jj d S )NT)rV   rX   )assertRaises
ValueErrorr   r:   assertFalser)   calledrC   r   r   r   $test_altinstall_default_pip_conflict   s   z2TestBootstrap.test_altinstall_default_pip_conflictc                 C   s$   d| j d< t  | d| j  d S Nztest fodderZPIP_THIS_SHOULD_GO_AWAY)r0   r   r:   rY   rC   r   r   r   &test_pip_environment_variables_removed   s   
z4TestBootstrap.test_pip_environment_variables_removedc                 C   s    t   | | jd tj d S NZPIP_CONFIG_FILE)r   r:   r   r0   r   r,   rC   r   r   r   test_pip_config_file_disabled   s   z+TestBootstrap.test_pip_config_file_disabledN)r$   r%   r&   r@   rD   rG   rI   rM   rO   rR   rU   rW   rZ   r_   ra   rc   r   r   r   r   r2   W   s    r2   c              	   #   s     d u rd }nG  fddd}| }t  }tjd|}|tjd< z|V  W ||u r2tjd= d S |tjd< d S ||u rBtjd= w |tjd< w )Nc                       s   e Zd Z ZdS )zfake_pip.<locals>.FakePipN)r$   r%   r&   __version__r   r   r   r   FakePip   s    rf   r   )r   sysmodulesget)r   r   rf   sentinelZorig_pipr   re   r   fake_pip   s    
rk   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestUninstallc                 C   sB   t d  t  W d    n1 sw   Y  | | jj d S )N)rk   r   _uninstall_helperr]   r)   r^   rC   r   r   r   )test_uninstall_skipped_when_not_installed   s   

z7TestUninstall.test_uninstall_skipped_when_not_installedc              	   C   s   t d! tj }t  W d    n1 sw   Y  W d    n1 s(w   Y  |  }| d| | 	| j
j d S )Nznot a valid versionz!only uninstall a matching version)rk   testsupportZcaptured_stderrr   rm   getvaluestripZassertInr]   r)   r^   )r	   stderrwarningr   r   r   5test_uninstall_skipped_with_warning_for_wrong_version   s   

zCTestUninstall.test_uninstall_skipped_with_warning_for_wrong_versionc                 C   sB   t   t  W d    n1 sw   Y  | jg d d S )N	uninstall-y--disable-pip-version-checkr   r   rk   r   rm   r)   r;   rC   r   r   r   test_uninstall   s   
zTestUninstall.test_uninstallc                 C   F   t   tjdd W d    n1 sw   Y  | jg d d S )Nr8   rJ   )rw   rx   ry   rL   r   r   rz   rC   r   r   r   test_uninstall_with_verbosity_1      z-TestUninstall.test_uninstall_with_verbosity_1c                 C   r|   )Nr9   rJ   )rw   rx   ry   rN   r   r   rz   rC   r   r   r   test_uninstall_with_verbosity_2  r~   z-TestUninstall.test_uninstall_with_verbosity_2c                 C   r|   )NrP   rJ   )rw   rx   ry   rQ   r   r   rz   rC   r   r   r   test_uninstall_with_verbosity_3  r~   z-TestUninstall.test_uninstall_with_verbosity_3c                 C   sJ   d| j d< t  t  W d    n1 sw   Y  | d| j  d S r`   )r0   rk   r   rm   rY   rC   r   r   r   ra     s
   

z4TestUninstall.test_pip_environment_variables_removedc                 C   sF   t   t  W d    n1 sw   Y  | | jd tj d S rb   )rk   r   rm   r   r0   r   r,   rC   r   r   r   rc     s   
z+TestUninstall.test_pip_config_file_disabledN)r$   r%   r&   rn   ru   r{   r}   r   r   ra   rc   r   r   r   r   rl      s    	rl   zpip c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestBootstrappingMainFunctionc              	   C   s   t j #}| t tdg W d    n1 sw   Y  W d    n1 s+w   Y  |  }| 	|t
 | | jj d S Nz	--version)ro   rp   captured_stdoutr[   
SystemExitr   _mainrq   rr   r   EXPECTED_VERSION_OUTPUTr]   r)   r^   r	   stdoutresultr   r   r   test_bootstrap_version-  s   z4TestBootstrappingMainFunction.test_bootstrap_versionc              	   C   s^   t g }| jddddtjjddgtjj | jjd d }| t	|d	 | |d d S r3   )
r   r   r)   r;   r   r   r<   r=   r   r>   )r	   	exit_coder?   r   r   r   r@   5  s   

z6TestBootstrappingMainFunction.test_basic_bootstrappingc                 C   s"   d| j _tg }| |d d S Nr9   )r)   r*   r   r   r   r	   r   r   r   r   test_bootstrapping_error_codeD  s   
z;TestBootstrappingMainFunction.test_bootstrapping_error_codeN)r$   r%   r&   r   r@   r   r   r   r   r   r   +  s    r   c                   @   r   )TestUninstallationMainFunctionc              	   C   s   t j $}| t tjdg W d    n1 sw   Y  W d    n1 s,w   Y  | 	 }| 
|t | | jj d S r   )ro   rp   r   r[   r   r   
_uninstallr   rq   rr   r   r   r]   r)   r^   r   r   r   r   test_uninstall_versionL  s   z5TestUninstallationMainFunction.test_uninstall_versionc                 C   sR   t   tjg }W d    n1 sw   Y  | jg d | |d d S )Nrv   r   )rk   r   r   r   r)   r;   r   r   r   r   r   test_basic_uninstallT  s   z3TestUninstallationMainFunction.test_basic_uninstallc                 C   sJ   t   d| j_tjg }W d    n1 sw   Y  | |d d S r   )rk   r)   r*   r   r   r   r   r   r   r   r   test_uninstall_error_codea  s
   z8TestUninstallationMainFunction.test_uninstall_error_codeN)r$   r%   r&   r   r   r   r   r   r   r   r   J  s    r   __main__)
contextlibr   Zos.pathrg   r   Ztest.supportro   r   Zunittest.mockr   Zensurepip._uninstallZTestCaser   r'   r2   contextmanagerr   rk   rl   r   r   r   r$   mainr   r   r   r   <module>   s,    5qN