B
    È S]W!  ã               @   sð   d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ dd„ ZG dd„ dejejejejƒZ dd„ Z!e"dkrìee!ƒ ƒ dS )z$Tests for distutils.command.install.é    N)Úcaptured_stdoutÚrun_unittest)Ú	sysconfig)Úinstall)Ú	build_ext)ÚINSTALL_SCHEMES)ÚDistribution)ÚDistutilsOptionError)Ú	Extension)Úsupportc             C   s   | t  d¡ S )NZ
EXT_SUFFIX)r   Zget_config_var)Úmodname© r   ú-lib/python3.7/distutils/tests/test_install.pyÚ_make_ext_name   s    r   c               @   sD   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S )ÚInstallTestCasec                s  ˆ   ¡ }tj |d¡}tddiƒ}tj |d¡|_tj|tj |d¡d|jd< t	|ƒ}||_
| ¡  ˆ  |j|¡ ˆ  |j|¡ ‡ fdd	„}tj |dd
¡}||j|ƒ ||j|ƒ ||j|ƒ ||jtj |dd
d¡ƒ ||jtj |d¡ƒ ||j|ƒ d S )NZinstallationÚnameZfoopkgzsetup.pyÚlib)Z
build_baseZ	build_libZbuildc                s(   t j | ¡} t j |¡}ˆ  | |¡ d S )N)ÚosÚpathÚnormpathÚassertEqual)ZgotÚexpected)Úselfr   r   Ú
check_path6   s    zAInstallTestCase.test_home_installation_scheme.<locals>.check_pathZpythonZincludeÚbin)Úmkdtempr   r   Újoinr   Úscript_namer   ZDummyCommandÚcommand_objr   ÚhomeÚensure_finalizedr   Úinstall_baseZinstall_platbaseZinstall_libZinstall_platlibZinstall_purelibZinstall_headersZinstall_scriptsZinstall_data)r   ZbuilddirZdestinationÚdistÚcmdr   Zlibdirr   )r   r   Útest_home_installation_scheme    s*    z-InstallTestCase.test_home_installation_schemec                sZ  t jˆ _t jˆ _ˆ  ¡ ˆ _tj 	ˆ jd¡ˆ _
tj 	ˆ jd¡ˆ _ˆ j
t _ˆ jt _ˆ j
t_ˆ jt_‡ fdd„}tjjˆ _|tj_‡ fdd„}ˆ  |¡ xdD ]}ˆ  |t¡ q˜W tdd	iƒ}t|ƒ}d
d„ |jD ƒ}ˆ  d|¡ d|_ˆ  tj ˆ j
¡¡ ˆ  tj ˆ j¡¡ | ¡  ˆ  tj ˆ j
¡¡ ˆ  tj ˆ j¡¡ ˆ  d|j¡ ˆ  d|j¡ d S )NÚBÚSc                s   ˆ j S )N)Útmpdir)r   )r   r   r   Ú_expanduserQ   s    z3InstallTestCase.test_user_site.<locals>._expanduserc                  s.   ˆ j t_ˆ jt_ˆ j t_ˆ jt_ˆ jtj_	d S )N)
Úold_user_baseÚsiteÚ	USER_BASEÚold_user_siteÚ	USER_SITEÚinstall_moduleÚ
old_expandr   r   Ú
expanduserr   )r   r   r   ÚcleanupV   s
    z/InstallTestCase.test_user_site.<locals>.cleanup)Znt_userZ	unix_userr   Úxxc             S   s   g | ]\}}}|‘qS r   r   )Ú.0r   ZshortZlabler   r   r   ú
<listcomp>f   s    z2InstallTestCase.test_user_site.<locals>.<listcomp>Úuseré   ÚuserbaseZusersite)r*   r+   r)   r-   r,   r   r'   r   r   r   Ú	user_baseÚ	user_siter.   r0   r/   Z
addCleanupZassertInr   r   r   Zuser_optionsr5   ZassertFalseÚexistsr    Z
assertTrueZconfig_vars)r   r(   r1   Úkeyr"   r#   Zoptionsr   )r   r   Útest_user_siteD   s:    




zInstallTestCase.test_user_sitec             C   sÞ   t dddœƒ}t|ƒ}| ¡  |  |jddg¡ |  |jd¡ |  |jd¡ dg|_| ¡  |  |jdg¡ |  |jd¡ |  |jd¡ d  |_|_| ¡  |  |jd ¡ |  |jd¡ |  |jd ¡ d|_|  t|j¡ d S )Nr2   z	path,dirs)r   Ú
extra_pathr   ÚdirsÚ zpath,dirs,again)	r   r   Zhandle_extra_pathr   r=   Z
extra_dirsZ	path_fileÚassertRaisesr	   )r   r"   r#   r   r   r   Útest_handle_extra_path{   s$    z&InstallTestCase.test_handle_extra_pathc             C   sf   t ddiƒ}t|ƒ}d|_d|_|  t|j¡ d |_d|_|  t|j¡ d |_d|_|  t|j¡ d S )Nr   r2   ÚprefixÚbaser   r5   )	r   r   rB   r!   r@   r	   Zfinalize_optionsr   r5   )r   r"   r#   r   r   r   Útest_finalize_options—   s    z%InstallTestCase.test_finalize_optionsc       	      C   sÞ   |   ¡ }| jdgdgd\}}t |¡ |  dd¡ |  dd¡ t|ƒ}||jd< ||_tj 	|d¡|_
| ¡  | ¡  t|j
ƒ}z| ¡ }W d | ¡  X d	d
„ | ¡ D ƒ}ddtjj ddtjd d…  g}|  ||¡ d S )NZhelloZsayhi)Z
py_modulesZscriptszhello.pyzdef main(): print('o hai')zfrom hello import main; main()r   Úfilelistc             S   s   g | ]}t j |¡‘qS r   )r   r   Úbasename)r3   Úliner   r   r   r4   Á   s    z/InstallTestCase.test_record.<locals>.<listcomp>zhello.%s.pyczUNKNOWN-0.0.0-py%s.%s.egg-infoé   )r   Úcreate_distr   ÚchdirZ
write_filer   r   Úrootr   r   Úrecordr    ÚrunÚopenÚreadÚcloseÚ
splitlinesÚsysÚimplementationÚ	cache_tagÚversion_infor   )	r   Úinstall_dirÚproject_dirr"   r#   ÚfÚcontentÚfoundr   r   r   r   Útest_record¬   s*    



zInstallTestCase.test_recordc       
      C   s  t  ¡ }|d k	r|  d| ¡ |  ¡ }| jtddgƒgd\}}t |¡ t 	|¡ t
|ƒ}t |¡ | ¡  t|ƒ}||jd< ||jd< ||_tj |d¡|_| ¡  | ¡  t|jƒ}z| ¡ }W d | ¡  X dd	„ | ¡ D ƒ}tdƒd
tjd d…  g}	|  ||	¡ d S )NzThe %r command is not foundr2   z
xxmodule.c)Zext_modulesr   r   rE   c             S   s   g | ]}t j |¡‘qS r   )r   r   rF   )r3   rG   r   r   r   r4   ã   s    z:InstallTestCase.test_record_extensions.<locals>.<listcomp>zUNKNOWN-0.0.0-py%s.%s.egg-inforH   )Útest_supportZmissing_compiler_executableZskipTestr   rI   r
   r   rJ   r   Zcopy_xxmodule_cr   Zfixup_build_extr    r   r   rK   r   r   rL   rM   rN   rO   rP   rQ   r   rR   rU   r   )
r   r#   rV   rW   r"   ZbuildextcmdrX   rY   rZ   r   r   r   r   Útest_record_extensionsÇ   s4    






z&InstallTestCase.test_record_extensionsc          	   C   sN   t | jƒ}dt_ztƒ  |  ¡  W d Q R X W d dt_X |  t | jƒ|¡ d S )NTF)ÚlenZlogsr.   ÚDEBUGr   r[   ZassertGreater)r   Zold_logs_lenr   r   r   Útest_debug_modeè   s    
zInstallTestCase.test_debug_modeN)
Ú__name__Ú
__module__Ú__qualname__r$   r<   rA   rD   r[   r]   r`   r   r   r   r   r      s   $7!r   c               C   s
   t  t¡S )N)ÚunittestZ	makeSuiter   r   r   r   r   Ú
test_suiteô   s    re   Ú__main__)#Ú__doc__r   rR   rd   r*   Ztest.supportr   r   Z	distutilsr   Zdistutils.command.installr   Zdistutils.commandr.   Zdistutils.command.build_extr   r   Zdistutils.corer   Zdistutils.errorsr	   Zdistutils.extensionr
   Zdistutils.testsr   Ztestr\   r   ZTempdirManagerZEnvironGuardZLoggingSilencerZTestCaser   re   ra   r   r   r   r   Ú<module>   s0    W