a
    zeP'                     @   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G dd de j
ZG dd dZG dd dee j
Zejejfdd	ZG d
d dee j
Zdej ZG dd dee j
ZG dd dee j
Zedkre   dS )    Nc                   @   s   e Zd Zdd ZdS )TestEnsurePipVersionc                 C   s   |  tjt  d S N)assertEqual	ensurepip_PIP_VERSIONversionself r
   )/usr/lib/python3.9/test/test_ensurepip.pytest_returns_version   s    z)TestEnsurePipVersion.test_returns_versionN)__name__
__module____qualname__r   r
   r
   r
   r   r      s   r   c                   @   s   e Zd Zdd ZdS )EnsurepipMixinc                 C   st   t jd}| | _d| j_| |j tj	}t jd}| }| |j ||_	tj
|_
tj  | _|_d S )Nzensurepip._run_pipr   zensurepip.os)unittestmockZpatchstartrun_pipreturn_valueZ
addCleanupstoposdevnullpathenvironcopy
os_environ)r	   Zrun_pip_patchZreal_devnullZos_patchZ
patched_osr
   r
   r   setUp   s    
zEnsurepipMixin.setUpN)r   r   r   r   r
   r
   r
   r   r      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-links
setuptoolspipr         )
r   	bootstrapr   assert_called_once_withr   r   ANY	call_argsr   len)r	   additional_pathsr
   r
   r   test_basic_bootstrapping&   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/)rootr    r!   r"   r#   z--rootr$   r%   r   r(   r   r)   r   r   r*   r   r
   r
   r   test_bootstrapping_with_root4   s    
z*TestBootstrap.test_bootstrapping_with_rootc              
   C   s6   t jdd | jddddtjjddd	gtjj d S )
NT)userr    r!   r"   r#   z--userr$   r%   r0   r   r
   r
   r   test_bootstrapping_with_user@   s    z*TestBootstrap.test_bootstrapping_with_userc              
   C   s6   t jdd | jddddtjjddd	gtjj d S )
NT)Zupgrader    r!   r"   r#   z	--upgrader$   r%   r0   r   r
   r
   r   test_bootstrapping_with_upgradeK   s    z-TestBootstrap.test_bootstrapping_with_upgradec              
   C   s6   t jdd | jddddtjjddd	gtjj d S )
Nr&   	verbosityr    r!   r"   r#   -vr$   r%   r0   r   r
   r
   r   #test_bootstrapping_with_verbosity_1V   s    z1TestBootstrap.test_bootstrapping_with_verbosity_1c              
   C   s6   t jdd | jddddtjjddd	gtjj d S )
Nr'   r5   r    r!   r"   r#   -vvr$   r%   r0   r   r
   r
   r   #test_bootstrapping_with_verbosity_2a   s    z1TestBootstrap.test_bootstrapping_with_verbosity_2c              
   C   s6   t jdd | jddddtjjddd	gtjj d S )
N   r5   r    r!   r"   r#   -vvvr$   r%   r0   r   r
   r
   r   #test_bootstrapping_with_verbosity_3l   s    z1TestBootstrap.test_bootstrapping_with_verbosity_3c                 C   s   t   | | jd d d S )NENSUREPIP_OPTIONSr    r   r(   r   r   r   r
   r
   r   'test_bootstrapping_with_regular_installw   s    z5TestBootstrap.test_bootstrapping_with_regular_installc                 C   s"   t jdd | | jd d d S )NT)
altinstallr>   rA   r?   r   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_pipr>   )r   r(   assertNotInr   r   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.0    Y  | | jj d S )NT)rA   rC   )assertRaises
ValueErrorr   r(   assertFalser   calledr   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)r   r   r(   rD   r   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   r   r   r   r   r
   r
   r   test_pip_config_file_disabled   s    z+TestBootstrap.test_pip_config_file_disabledN)r   r   r   r.   r1   r3   r4   r8   r:   r=   r@   rB   rE   rJ   rL   rN   r
   r
   r
   r   r   $   s   r   c              	   #   s    d u rd }nG  fddd}| }t  }tjd|}|tjd< z&|V  W ||u r`tjd= q|tjd< n||u r~tjd= n
|tjd< 0 d S )Nc                       s   e Zd Z ZdS )zfake_pip.<locals>.FakePipN)r   r   r   __version__r
   r   r
   r   FakePip   s   rQ   r%   )objectsysmodulesget)r   r%   rQ   sentinelZorig_pipr
   rP   r   fake_pip   s    


rW   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&0    Y  | | jj d S r   )rW   r   _uninstall_helperrH   r   rI   r   r
   r
   r   )test_uninstall_skipped_when_not_installed   s    
&z7TestUninstall.test_uninstall_skipped_when_not_installedc              	   C   s   t dB tj }t  W d    n1 s20    Y  W d    n1 sP0    Y  |  }| d| | 	| j
j d S )Nznot a valid versionz!only uninstall a matching version)rW   testsupportZcaptured_stderrr   rY   getvaluestripZassertInrH   r   rI   )r	   stderrwarningr
   r
   r   5test_uninstall_skipped_with_warning_for_wrong_version   s    
DzCTestUninstall.test_uninstall_skipped_with_warning_for_wrong_versionc                 C   sB   t   t  W d    n1 s$0    Y  | jg d d S )N	uninstall-y--disable-pip-version-checkr%   r$   rW   r   rY   r   r)   r   r
   r
   r   test_uninstall   s
    &zTestUninstall.test_uninstallc                 C   sF   t   tjdd W d    n1 s(0    Y  | jg d d S )Nr&   r5   )rc   rd   re   r7   r%   r$   rf   r   r
   r
   r   test_uninstall_with_verbosity_1   s
    *z-TestUninstall.test_uninstall_with_verbosity_1c                 C   sF   t   tjdd W d    n1 s(0    Y  | jg d d S )Nr'   r5   )rc   rd   re   r9   r%   r$   rf   r   r
   r
   r   test_uninstall_with_verbosity_2   s
    *z-TestUninstall.test_uninstall_with_verbosity_2c                 C   sF   t   tjdd W d    n1 s(0    Y  | jg d d S )Nr;   r5   )rc   rd   re   r<   r%   r$   rf   r   r
   r
   r   test_uninstall_with_verbosity_3   s
    *z-TestUninstall.test_uninstall_with_verbosity_3c                 C   sJ   d| j d< t  t  W d    n1 s.0    Y  | d| j  d S rK   )r   rW   r   rY   rD   r   r
   r
   r   rL      s    
&z4TestUninstall.test_pip_environment_variables_removedc                 C   sF   t   t  W d    n1 s$0    Y  | | jd tj d S rM   )rW   r   rY   r   r   r   r   r   r
   r
   r   rN      s    &z+TestUninstall.test_pip_config_file_disabledN)r   r   r   rZ   ra   rg   rh   ri   rj   rL   rN   r
   r
   r
   r   rX      s   	rX   zpip c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestBootstrappingMainFunctionc              	   C   s   t j F}| t tdg W d    n1 s80    Y  W d    n1 sV0    Y  |  }| 	|t
 | | jj d S Nz	--version)r[   r\   captured_stdoutrF   
SystemExitr   _mainr]   r^   r   EXPECTED_VERSION_OUTPUTrH   r   rI   r	   stdoutresultr
   r
   r   test_bootstrap_version   s    H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 r   )
r   ro   r   r)   r   r   r*   r+   r   r,   )r	   	exit_coder-   r
   r
   r   r.     s    

z6TestBootstrappingMainFunction.test_basic_bootstrappingc                 C   s"   d| j _tg }| |d d S Nr'   )r   r   r   ro   r   r	   ru   r
   r
   r   test_bootstrapping_error_code  s    
z;TestBootstrappingMainFunction.test_bootstrapping_error_codeN)r   r   r   rt   r.   rx   r
   r
   r
   r   rk      s   rk   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestUninstallationMainFunctionc              	   C   s   t j H}| t tjdg W d    n1 s:0    Y  W d    n1 sX0    Y  | 	 }| 
|t | | jj d S rl   )r[   r\   rm   rF   rn   r   
_uninstallro   r]   r^   r   rp   rH   r   rI   rq   r
   r
   r   test_uninstall_version  s    Jz5TestUninstallationMainFunction.test_uninstall_versionc                 C   sR   t   tjg }W d    n1 s(0    Y  | jg d | |d d S )Nrb   r   )rW   r   rz   ro   r   r)   r   rw   r
   r
   r   test_basic_uninstall!  s    *z3TestUninstallationMainFunction.test_basic_uninstallc                 C   sJ   t  $ d| j_tjg }W d    n1 s00    Y  | |d d S rv   )rW   r   r   r   rz   ro   r   rw   r
   r
   r   test_uninstall_error_code.  s    *z8TestUninstallationMainFunction.test_uninstall_error_codeN)r   r   r   r{   r|   r}   r
   r
   r
   r   ry     s   ry   __main__)r   Zunittest.mockZtest.supportr[   r   Zos.path
contextlibrS   r   Zensurepip._uninstallZTestCaser   r   r   contextmanagerr   rW   rX   rp   rk   ry   r   mainr
   r
   r
   r   <module>   s&   qN
