a
    ze!                     @   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re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   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 qt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__)#__doc__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>   s2    [