B
    18™\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 )NÚ
EXT_SUFFIX)r   Úget_config_var)Úmodname© r   ú`/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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)Ú
build_baseÚ	build_libÚbuildc                s(   t j | ¡} t j |¡}ˆ  | |¡ d S )N)ÚosÚpathÚnormpathÚassertEqual)ÚgotÚexpected)Úselfr   r   Ú
check_path6   s    zAInstallTestCase.test_home_installation_scheme.<locals>.check_pathÚpythonÚincludeÚbin)Úmkdtempr   r   Újoinr   Úscript_namer   ÚDummyCommandÚcommand_objr   ÚhomeÚensure_finalizedr   Úinstall_baseÚinstall_platbaseÚinstall_libÚinstall_platlibÚinstall_purelibÚinstall_headersÚinstall_scriptsÚinstall_data)r   ZbuilddirÚ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)Únt_userZ	unix_userr   Úxxc             S   s   g | ]\}}}|‘qS r   r   )Ú.0r   ÚshortÚlabler   r   r   ú
<listcomp>f   s    z2InstallTestCase.test_user_site.<locals>.<listcomp>Úuseré   ÚuserbaseZusersite)r;   r<   r:   r>   r=   r#   r8   r   r   r$   Ú	user_baseÚ	user_siter?   rA   r@   Ú
addCleanupÚassertInr   r   r   Úuser_optionsrI   ÚassertFalseÚexistsr)   Ú
assertTrueZconfig_vars)r   r9   rB   Úkeyr3   r4   Ú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 )NrD   z	path,dirs)r   Ú
extra_pathr   ÚdirsÚ zpath,dirs,again)	r   r   Zhandle_extra_pathr   rW   Z
extra_dirsZ	path_fileÚassertRaisesr	   )r   r3   r4   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   rD   ÚprefixÚbaser(   rI   )	r   r   r\   r*   rZ   r	   Úfinalize_optionsr(   rI   )r   r3   r4   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)Ú
py_modulesÚ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)rE   Úliner   r   r   rH   Á   s    z/InstallTestCase.test_record.<locals>.<listcomp>zhello.%s.pyczUNKNOWN-0.0.0-py%s.%s.egg-infoé   )r#   Úcreate_distr   ÚchdirÚ
write_filer   r'   Úrootr   r$   Úrecordr)   ÚrunÚopenÚreadÚcloseÚ
splitlinesÚsysÚimplementationÚ	cache_tagÚversion_infor   )	r   Úinstall_dirÚproject_dirr3   r4   Ú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 foundrD   z
xxmodule.c)Úext_modulesr   r   rb   c             S   s   g | ]}t j |¡‘qS r   )r   r   rc   )rE   rd   r   r   r   rH   ã   s    z:InstallTestCase.test_record_extensions.<locals>.<listcomp>zUNKNOWN-0.0.0-py%s.%s.egg-infore   )Útest_supportÚmissing_compiler_executableÚskipTestr#   rf   r
   r   rg   r   Úcopy_xxmodule_cr   Úfixup_build_extr)   r   r'   ri   r   r$   rj   rk   rl   rm   rn   ro   r   rp   rs   r   )
r   r4   rt   ru   r3   Zbuildextcmdrv   rw   rx   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)ÚlenÚlogsr?   ÚDEBUGr   ry   ÚassertGreater)r   Zold_logs_lenr   r   r   Útest_debug_modeè   s    
zInstallTestCase.test_debug_modeN)
Ú__name__Ú
__module__Ú__qualname__r5   rV   r[   r_   ry   r€   r…   r   r   r   r   r      s   $7!r   c               C   s
   t  t¡S )N)ÚunittestÚ	makeSuiter   r   r   r   r   Ú
test_suiteô   s    r‹   Ú__main__)#Ú__doc__r   rp   r‰   r;   Ztest.supportr   r   Ú	distutilsr   Zdistutils.command.installr   Údistutils.commandr?   Údistutils.command.build_extr   r   Údistutils.corer   Zdistutils.errorsr	   Údistutils.extensionr
   Údistutils.testsr   Útestr{   r   ÚTempdirManagerÚEnvironGuardÚLoggingSilencerÚTestCaser   r‹   r†   r   r   r   r   Ú<module>   s0    W