B
    u9aÀ&  ã               @   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ræe  ¡  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.7/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   sN   t  ¡  | j dddtjjddgtjj¡ | jjd d }|  t	|ƒd¡ d S )	NÚinstallz
--no-indexz--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   s6   t jdd | j dddtjjddddgtjj¡ d S )	Nz	/foo/bar/)Úrootr   z
--no-indexz--find-linksz--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   s4   t jdd | j dddtjjdddgtjj¡ d S )	NT)Úuserr   z
--no-indexz--find-linksz--userr   r   )r   r"   r   r#   r   r   r$   )r   r   r   r	   Útest_bootstrapping_with_user@   s
    z*TestBootstrap.test_bootstrapping_with_userc          	   C   s4   t jdd | j dddtjjdddgtjj¡ d S )	NT)Zupgrader   z
--no-indexz--find-linksz	--upgrader   r   )r   r"   r   r#   r   r   r$   )r   r   r   r	   Útest_bootstrapping_with_upgradeK   s
    z-TestBootstrap.test_bootstrapping_with_upgradec          	   C   s4   t jdd | j dddtjjdddgtjj¡ d S )	Nr    )Ú	verbosityr   z
--no-indexz--find-linksz-vr   r   )r   r"   r   r#   r   r   r$   )r   r   r   r	   Ú#test_bootstrapping_with_verbosity_1V   s
    z1TestBootstrap.test_bootstrapping_with_verbosity_1c          	   C   s4   t jdd | j dddtjjdddgtjj¡ d S )	Nr!   )r.   r   z
--no-indexz--find-linksz-vvr   r   )r   r"   r   r#   r   r   r$   )r   r   r   r	   Ú#test_bootstrapping_with_verbosity_2a   s
    z1TestBootstrap.test_bootstrapping_with_verbosity_2c          	   C   s4   t jdd | j dddtjjdddgtjj¡ d S )	Né   )r.   r   z
--no-indexz--find-linksz-vvvr   r   )r   r"   r   r#   r   r   r$   )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)Ú
altinstallr3   r5   )r   r"   r   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_pipr3   )r   r"   ÚassertNotInr   )r   r   r   r	   Ú#test_bootstrapping_with_default_pip   s    z1TestBootstrap.test_bootstrapping_with_default_pipc          	   C   s6   |   t¡ tjddd W d Q R X |  | jj¡ d S )NT)r5   r7   )ÚassertRaisesÚ
ValueErrorr   r"   ÚassertFalser   Úcalled)r   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 fodderÚPIP_THIS_SHOULD_GO_AWAY)r   r   r"   r8   )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 )NÚ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(   r*   r,   r-   r/   r0   r2   r4   r6   r9   r>   r@   rB   r   r   r   r	   r   $   s   r   c          	   #   sr   ˆ d krd }nG ‡ fdd„dƒ}|ƒ }t ƒ }tj d|¡}|tjd< z
|V  W d ||krbtjd= n
|tjd< X 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   rD   r   )ÚobjectÚsysÚmodulesÚget)r   r   rD   ÚsentinelZorig_pipr   )r   r	   Úfake_pip•   s    


rJ   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   s.   t d ƒ t ¡  W d Q R X |  | jj¡ d S )N)rJ   r   Ú_uninstall_helperr<   r   r=   )r   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 Q R X W d Q R X | ¡  ¡ }|  d|¡ |  	| j
j¡ d S )Nznot a valid versionz!only uninstall a matching version)rJ   ÚtestÚsupportZcaptured_stderrr   rL   ÚgetvalueÚstripZassertInr<   r   r=   )r   ÚstderrZwarningr   r   r	   Ú5test_uninstall_skipped_with_warning_for_wrong_version¯   s    
zCTestUninstall.test_uninstall_skipped_with_warning_for_wrong_versionc          	   C   s4   t ƒ  t ¡  W d Q R X | j dddddg¡ d S )NÚ	uninstallz-yz--disable-pip-version-checkr   r   )rJ   r   rL   r   r#   )r   r   r   r	   Útest_uninstall¸   s
    zTestUninstall.test_uninstallc          	   C   s:   t ƒ  tjdd W d Q R X | j ddddddg¡ d S )	Nr    )r.   rT   z-yz--disable-pip-version-checkz-vr   r   )rJ   r   rL   r   r#   )r   r   r   r	   Útest_uninstall_with_verbosity_1Ã   s
    
z-TestUninstall.test_uninstall_with_verbosity_1c          	   C   s:   t ƒ  tjdd W d Q R X | j ddddddg¡ d S )	Nr!   )r.   rT   z-yz--disable-pip-version-checkz-vvr   r   )rJ   r   rL   r   r#   )r   r   r   r	   Útest_uninstall_with_verbosity_2Î   s
    
z-TestUninstall.test_uninstall_with_verbosity_2c          	   C   s:   t ƒ  tjdd W d Q R X | j ddddddg¡ d S )	Nr1   )r.   rT   z-yz--disable-pip-version-checkz-vvvr   r   )rJ   r   rL   r   r#   )r   r   r   r	   Útest_uninstall_with_verbosity_3Ù   s
    z-TestUninstall.test_uninstall_with_verbosity_3c          	   C   s6   d| j d< tƒ  t ¡  W d Q R X |  d| j ¡ d S )Nztest fodderr?   )r   rJ   r   rL   r8   )r   r   r   r	   r@   ä   s    
z4TestUninstall.test_pip_environment_variables_removedc          	   C   s2   t ƒ  t ¡  W d Q R X |  | jd tj¡ d S )NrA   )rJ   r   rL   r   r   r   r   )r   r   r   r	   rB   ì   s    z+TestUninstall.test_pip_config_file_disabledN)r   r   r   rM   rS   rU   rV   rW   rX   r@   rB   r   r   r   r	   rK   ¨   s   	rK   zpip c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBootstrappingMainFunctionc          
   C   sb   t j ¡ (}|  t¡ t dg¡ W d Q R X W d Q R X | ¡  ¡ }|  	|t
¡ |  | jj¡ d S )Nz	--version)rN   rO   Úcaptured_stdoutr:   Ú
SystemExitr   Ú_mainrP   rQ   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tjjddgtjj¡ | jjd d }|  t	|ƒd¡ |  |d¡ d S )	Nr   z
--no-indexz--find-linksr   r   r   r    r!   )
r   r\   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   r\   r   )r   ra   r   r   r	   Útest_bootstrapping_error_code  s    
z;TestBootstrappingMainFunction.test_bootstrapping_error_codeN)r   r   r   r`   r(   rb   r   r   r   r	   rY   ø   s   rY   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestUninstallationMainFunctionc          
   C   sd   t j ¡ *}|  t¡ tj dg¡ W d Q R X W d Q R X | ¡  	¡ }|  
|t¡ |  | jj¡ d S )Nz	--version)rN   rO   rZ   r:   r[   r   Ú
_uninstallr\   rP   rQ   r   r]   r<   r   r=   )r   r^   r_   r   r   r	   Útest_uninstall_version  s    "z5TestUninstallationMainFunction.test_uninstall_versionc          	   C   sD   t ƒ  tj g ¡}W d Q R X | j dddddg¡ |  |d¡ d S )NrT   z-yz--disable-pip-version-checkr   r   r   )rJ   r   rd   r\   r   r#   r   )r   ra   r   r   r	   Útest_basic_uninstall!  s    z3TestUninstallationMainFunction.test_basic_uninstallc          	   C   s6   t ƒ  d| j_tj g ¡}W d Q R X |  |d¡ d S )Nr!   )rJ   r   r   r   rd   r\   r   )r   ra   r   r   r	   Útest_uninstall_error_code.  s    z8TestUninstallationMainFunction.test_uninstall_error_codeN)r   r   r   re   rf   rg   r   r   r   r	   rc     s   rc   Ú__main__)r   Zunittest.mockZtest.supportrN   r   Zos.pathÚ
contextlibrF   r   Zensurepip._uninstallZTestCaser   r   r   Úcontextmanagerr   rJ   rK   r]   rY   rc   r   Úmainr   r   r   r	   Ú<module>   s&   qN
