a
    åze¤!  ã                   @   sì   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 )é    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   ú2/usr/lib/python3.9/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|ƒ tj |tjd
¡}||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   Zscript_namer   ZDummyCommandÚcommand_objr   ÚhomeÚensure_finalizedr   Úinstall_baseZinstall_platbaseZinstall_libÚsysÚ
platlibdirZinstall_platlibZinstall_purelibZinstall_headersZinstall_scriptsZinstall_data)r   ZbuilddirZdestinationÚdistÚcmdr   Úlibdirr$   r   r   r   Útest_home_installation_scheme    s0    þÿz-InstallTestCase.test_home_installation_schemec                    sV  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„}ˆ  |¡ dD ]}ˆ  |t¡ q–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 r   )Útmpdir)r   r   r   r   Ú_expanduserR   s    z3InstallTestCase.test_user_site.<locals>._expanduserc                      s.   ˆ j t_ˆ jt_ˆ j t_ˆ jt_ˆ jtj_	d S r   )
Úold_user_baseÚsiteÚ	USER_BASEÚold_user_siteÚ	USER_SITEÚinstall_moduleÚ
old_expandr   r   Ú
expanduserr   r   r   r   ÚcleanupW   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>g   ó    z2InstallTestCase.test_user_site.<locals>.<listcomp>Úuseré   ÚuserbaseZusersite)r.   r/   r-   r1   r0   r   r+   r   r   r   Ú	user_baseÚ	user_siter2   r4   r3   Z
addCleanupZassertInr   r   r   Zuser_optionsr:   ZassertFalseÚexistsr!   Z
assertTrueZconfig_vars)r   r,   r5   Úkeyr%   r&   Úoptionsr   r   r   Útest_user_siteE   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 )Nr6   z	path,dirs)r   Ú
extra_pathr   ÚdirsÚ zpath,dirs,again)	r   r   Zhandle_extra_pathr   rC   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   r6   ÚprefixÚbaser    r:   )	r   r   rI   r"   rF   r	   Zfinalize_optionsr    r:   rG   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 | ¡  n
| ¡  0 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©r7   Úliner   r   r   r8   Â   r9   z/InstallTestCase.test_record.<locals>.<listcomp>zhello.%s.pycúUNKNOWN-0.0.0-py%s.%s.egg-infoé   )r   Úcreate_distr   ÚchdirZ
write_filer   r   Úrootr   r   Úrecordr!   ÚrunÚopenÚreadÚcloseÚ
splitlinesr#   Ú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 u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 | ¡  n
| ¡  0 dd	„ | ¡ D ƒ}tdƒd
tjd d…  g}	|  ||	¡ d S )NzThe %r command is not foundr6   z
xxmodule.c)Zext_modulesr   r   rL   c                 S   s   g | ]}t j |¡‘qS r   rM   rO   r   r   r   r8   ä   r9   z:InstallTestCase.test_record_extensions.<locals>.<listcomp>rQ   rR   )Útest_supportZmissing_compiler_executableZskipTestr   rS   r
   r   rT   r   Zcopy_xxmodule_cr   Zfixup_build_extr!   r   r   rU   r   r   rV   rW   rX   rY   rZ   r[   r   r#   r^   r   )
r   r&   r_   r`   r%   Zbuildextcmdra   rb   rc   r   r   r   r   Útest_record_extensionsÈ   s8    
ÿ






ÿz&InstallTestCase.test_record_extensionsc                 C   sh   t | jƒ}dt_z8tƒ  |  ¡  W d   ƒ n1 s60    Y  W dt_ndt_0 |  t | jƒ|¡ d S )NTF)ÚlenZlogsr2   ÚDEBUGr   rd   ZassertGreater)r   Zold_logs_lenr   r   r   Útest_debug_modeé   s    
(zInstallTestCase.test_debug_modeN)
Ú__name__Ú
__module__Ú__qualname__r(   rB   rH   rK   rd   rf   ri   r   r   r   r   r      s   %7!r   c                   C   s
   t  t¡S r   )ÚunittestZ	makeSuiter   r   r   r   r   Ú
test_suiteõ   s    rn   Ú__main__)"r   r#   rm   r.   Ztest.supportr   r   Z	distutilsr   Zdistutils.command.installr   Zdistutils.commandr2   Zdistutils.command.build_extr   r   Zdistutils.corer   Zdistutils.errorsr	   Zdistutils.extensionr
   Zdistutils.testsr   Útestre   r   ZTempdirManagerZEnvironGuardZLoggingSilencerZTestCaser   rn   rj   r   r   r   r   Ú<module>   s0   ý [