o
    g#                     @   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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rzee"  dS dS )z$Tests for distutils.command.install.    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   R/Users/admin/.pyenv/versions/3.10.0/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	   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&   libdirr0   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)r:   r;   r9   r=   r<   r(   r7   r!   r"   r)   	user_base	user_siter>   r@   r?   Z
addCleanupr   ZassertInr   r	   r   Zuser_optionsrE   ZassertFalseexistsr-   Z
assertTrueZconfig_vars)r   r8   rA   keyr1   r2   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 )NrB   z	path,dirs)r   
extra_pathr"   dirs zpath,dirs,again)	r	   r   Zhandle_extra_pathr$   rN   Z
extra_dirsZ	path_fileassertRaisesr
   r   r1   r2   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   rB   prefixbaser,   rE   )	r	   r   rT   r.   rQ   r
   Zfinalize_optionsr,   rE   rR   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rC   liner   r   r   rD          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_dirr1   r2   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 foundrB   z
xxmodule.c)Zext_modulesr   r   rW   c                 S   rX   r   rY   r[   r   r   r   rD      r]   z:InstallTestCase.test_record_extensions.<locals>.<listcomp>r^   r_   )test_supportZmissing_compiler_executableZskipTestr(   r`   r   r!   ra   r   Zcopy_xxmodule_cr   Zfixup_build_extr-   r   r+   rb   r"   r)   rc   rd   re   rf   rg   rh   r   r/   rk   r$   )
r   r2   rl   rm   r1   Zbuildextcmdrn   ro   rp   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   rq   ZassertGreater)r   Zold_logs_lenr   r   r   test_debug_mode   s   

zInstallTestCase.test_debug_mode)__name__
__module____qualname__r   r   r4   unittestZ
skipUnlessr   rM   rS   rV   rq   rs   rv   __classcell__r   r   r   r   r      s    
%
8!r   c                   C   s
   t tS r   )rz   Z	makeSuiter   r   r   r   r   
test_suite   s   
r|   __main__)$__doc__r!   r/   rz   r:   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   testrr   r   ZTempdirManagerZEnvironGuardZLoggingSilencerZTestCaser   r|   rw   r   r   r   r   <module>   s6     f