o
    FXîh#  ã                   @   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
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ryee!ƒ ƒ dS dS )é    N)Úcaptured_stdoutÚrun_unittest)Ú	sysconfig)ÚinstallÚHAS_USER_SITE)r   )Ú	build_ext)ÚINSTALL_SCHEMES)ÚDistribution)ÚDistutilsOptionError)Ú	Extension)Úsupportc                 C   s   | t  d¡ S )NZ
EXT_SUFFIX)r   Zget_config_var)Úmodname© r   úF/opt/python-3.10.19/usr/lib/python3.10/distutils/tests/test_install.pyÚ_make_ext_name   s   r   c                       sl   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Ze ed¡dd	„ ƒZ	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚInstallTestCasec                    s   t ƒ  ¡  ttjƒ| _d S ©N)ÚsuperÚsetUpÚdictr   Ú_config_varsÚ_backup_config_vars©Úself©Ú	__class__r   r   r       s   
zInstallTestCase.setUpc                    s&   t ƒ  ¡  tj ¡  tj | j¡ d S r   )r   ÚtearDownr   r   ÚclearÚupdater   r   r   r   r   r   $   s   

zInstallTestCase.tearDownc                    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 r   )ÚosÚpathÚnormpathÚassertEqual)ZgotÚexpectedr   r   r   Ú
check_path?   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_schemezneed user sitec                    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„}ˆ  |¡ trVdD ]}ˆ  |t¡ qMt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   Ú_expanduser\   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   Úcleanupa   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>r   s    z2InstallTestCase.test_user_site.<locals>.<listcomp>Úuseré   ÚuserbaseZusersite)r9   r:   r8   r<   r;   r(   r6   r!   r"   r)   Ú	user_baseÚ	user_siter=   r?   r>   Z
addCleanupr   ZassertInr   r	   r   Zuser_optionsrD   ZassertFalseÚexistsr,   Z
assertTrueZconfig_vars)r   r7   r@   Úkeyr0   r1   Úoptionsr   r   r   Útest_user_siteN   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 )NrA   z	path,dirs)r   Ú
extra_pathr"   ÚdirsÚ zpath,dirs,again)	r	   r   Zhandle_extra_pathr$   rM   Z
extra_dirsZ	path_fileÚassertRaisesr
   ©r   r0   r1   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   rA   ÚprefixÚbaser+   rD   )	r	   r   rS   r-   rP   r
   Zfinalize_optionsr+   rD   rQ   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| ¡  w 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   ó   g | ]}t j |¡‘qS r   ©r!   r"   Úbasename©rB   Úliner   r   r   rC   Í   ó    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_dirr0   r1   Ú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| ¡  w dd	„ | ¡ D ƒ}tdƒd
tjd d…  g}	|  ||	¡ d S )NzThe %r command is not foundrA   z
xxmodule.c)Zext_modulesr   r   rV   c                 S   rW   r   rX   rZ   r   r   r   rC   ï   r\   z:InstallTestCase.test_record_extensions.<locals>.<listcomp>r]   r^   )Útest_supportZmissing_compiler_executableZskipTestr(   r_   r   r!   r`   r   Zcopy_xxmodule_cr   Zfixup_build_extr,   r   r*   ra   r"   r)   rb   rc   rd   re   rf   rg   r   r.   rj   r$   )
r   r1   rk   rl   r0   Zbuildextcmdrm   rn   ro   r%   r   r   r   Útest_record_extensionsÓ   s8   
ÿ






ÿz&InstallTestCase.test_record_extensionsc                 C   sh   t | jƒ}dt_ztƒ  |  ¡  W d   ƒ n1 sw   Y  W dt_ndt_w |  t | jƒ|¡ d S )NTF)ÚlenZlogsr=   ÚDEBUGr   rp   ZassertGreater)r   Zold_logs_lenr   r   r   Útest_debug_modeô   s   

ÿ€zInstallTestCase.test_debug_mode)Ú__name__Ú
__module__Ú__qualname__r   r   r3   ÚunittestZ
skipUnlessr   rL   rR   rU   rp   rr   ru   Ú__classcell__r   r   r   r   r      s    
%
8!r   c                   C   s
   t  t¡S r   )ry   Z	makeSuiter   r   r   r   r   Ú
test_suite   s   
r{   Ú__main__)#r!   r.   ry   r9   Ztest.supportr   r   Z	distutilsr   Zdistutils.command.installr   r   Zdistutils.commandr=   Zdistutils.command.build_extr   r   Zdistutils.corer	   Zdistutils.errorsr
   Zdistutils.extensionr   Zdistutils.testsr   Útestrq   r   ZTempdirManagerZEnvironGuardZLoggingSilencerZTestCaser   r{   rv   r   r   r   r   Ú<module>   s6    ý fÿ