o
    JAf#                     @   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   3/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