a
    äze°?  ć                   @   s   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ G dd dejZG dd dejZed	kre ”  dS )
z#Test harness for the zipapp module.é    N)Śrequires_zlib)Śpatchc                   @   s
  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
e dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Ze ej d2kd3”d4d5 Z!e ej d2kd3”d6d7 Z"d8S )9Ś
ZipAppTestz!Test zipapp module functionality.c                 C   s&   t  ” }|  |j” t |j”| _d S ©N©ŚtempfileŚTemporaryDirectoryZ
addCleanupŚcleanupŚpathlibŚPathŚnameŚtmpdir©Śselfr   © r   ś&/usr/lib/python3.9/test/test_zipapp.pyŚsetUp   s    zZipAppTest.setUpc                 C   sN   | j d }| ”  |d  ”  | j d }t t|t|” |  | ” ” d S ©NŚsourceś__main__.pyś
source.pyz©r   ŚmkdirŚtouchŚzipappŚcreate_archiveŚstrŚ
assertTrueŚis_file©r   r   Śtargetr   r   r   Śtest_create_archive   s    

zZipAppTest.test_create_archivec                 C   sF   | j d }| ”  |d  ”  | j d }t ||” |  | ” ” d S r   )r   r   r   r   r   r   r   r   r   r   r   Ś test_create_archive_with_pathlib!   s    

z+ZipAppTest.test_create_archive_with_pathlibc                 C   sø   | j d }| ”  |d  ”  |d  ”  |d  ”  |d d  ”  t ” }t t||” | d” t	 
|d”0}|  d| ” ” |  d	| ” ” W d    n1 sŖ0    Y  d S )
Nr   r   ŚfooZbarz__init__.pyr   Śrzfoo/zbar/)r   r   r   ŚioŚBytesIOr   r   r   ŚseekŚzipfileŚZipFileŚassertInŚnamelist©r   r   r    Śzr   r   r   Ś test_create_archive_with_subdirs*   s    

z+ZipAppTest.test_create_archive_with_subdirsc                 C   sø   dd }| j d }| ”  |d  ”  |d  ”  |d  ”  | j d }tj|||d t |d	”@}|  d| ” ” |  d| ” ” |  	d| ” ” W d    n1 sŖ0    Y  d S )
Nc                 S   s
   | j dkS )Nz.pyc)Śsuffix©Śpathr   r   r   Śskip_pyc_files<   s    zBZipAppTest.test_create_archive_with_filter.<locals>.skip_pyc_filesr   r   śtest.pyztest.pycr   ©Śfilterr$   )
r   r   r   r   r   r(   r)   r*   r+   ZassertNotIn)r   r2   r   r    r-   r   r   r   Śtest_create_archive_with_filter9   s    

z*ZipAppTest.test_create_archive_with_filterc                 C   sĢ   dd }| j d }| ”  |d  ”  |d  ”  |d  ”  |d d  ”  | j d }tj|||d	 t |d
”D}|  t| 	” d” |  
d| 	” ” |  
d| 	” ” W d    n1 s¾0    Y  d S )Nc                 S   s   | j d dkS )Nr   Śdummy)Śpartsr0   r   r   r   Śskip_dummy_dirO   s    zIZipAppTest.test_create_archive_filter_exclude_dir.<locals>.skip_dummy_dirr   r   r3   r7   ztest2.pyr   r4   r$   é   )r   r   r   r   r   r(   r)   ŚassertEqualŚlenr+   r*   )r   r9   r   r    r-   r   r   r   Ś&test_create_archive_filter_exclude_dirK   s    

z1ZipAppTest.test_create_archive_filter_exclude_dirc                 C   sH   | j d }| ”  |d  ”  t t|” | j d }|  | ” ” d S r   r   )r   r   Zexpected_targetr   r   r   Ś"test_create_archive_default_target_   s    

z-ZipAppTest.test_create_archive_default_targetc                 C   s   | j d }| ”  |d  ”  |d  ”  | j d }tj||dd t |d”0}dD ]}|  | |”j	tj
” qVW d    n1 s0    Y  d S )	Nr   r   r3   r   T)Ś
compressedr$   )r   r3   )r   r   r   r   r   r(   r)   r;   ZgetinfoZcompress_typeŚZIP_DEFLATED)r   r   r    r-   r   r   r   r   Ś$test_create_archive_with_compressionh   s    

’z/ZipAppTest.test_create_archive_with_compressionc                 C   sl   | j d }| ”  |d  ”  | j d }|  tj”$ t t|t|” W d    n1 s^0    Y  d S )Nr   śfoo.pyr   ©r   r   r   ŚassertRaisesr   ŚZipAppErrorr   r   r   r   r   r   Śtest_no_mainw   s    

zZipAppTest.test_no_mainc                 C   sp   | j d }| ”  |d  ”  | j d }|  tj”( tjt|t|dd W d    n1 sb0    Y  d S )Nr   r   r   ś
pkg.mod:fn©ŚmainrC   r   r   r   r   Śtest_main_and_main_py   s    

z ZipAppTest.test_main_and_main_pyc                 C   s   | j d }| ”  |d  ”  | j d }tjt|t|dd t t|d”2}|  d| 	” ” |  d| 
d”” W d    n1 s0    Y  d S )	Nr   rB   r   rG   rH   r$   r   s   pkg.mod.fn())r   r   r   r   r   r   r(   r)   r*   r+   Śreadr,   r   r   r   Śtest_main_written   s    

zZipAppTest.test_main_writtenc                 C   s   | j d }| ”  |d  ”  |d  ”  | j d }tjt|t|dd t t|d”&}|  d| 	”  
d	”” W d    n1 s0    Y  d S )
Nr   rB   zbar.pyr   rG   rH   r$   é   r   )r   r   r   r   r   r   r(   r)   r;   r+   Ścountr,   r   r   r   Śtest_main_only_written_once   s    

z&ZipAppTest.test_main_only_written_oncec              
   C   s¢   | j d }| ”  | j d }g d¢}|D ]t}| j|dT |  tj”( tjt|t||d W d    n1 st0    Y  W d    q(1 s0    Y  q(d S )Nr   r   )
Ś r#   zfoo:z:barz12:barza.b.c.:dz.a:bza:b.za:.bza:silly namerH   )r   r   ZsubTestrD   r   rE   r   r   )r   r   r    ZproblemsrI   r   r   r   Śtest_main_validation„   s    

zZipAppTest.test_main_validationc                 C   s|   | j d }| ”  |d  ”  | j d }t t|t|” | d”"}|  | d”d” W d    n1 sn0    Y  d S )Nr   r   r   Śrbr:   ó   #!)	r   r   r   r   r   r   ŚopenZassertNotEqualrK   ©r   r   r    Śfr   r   r   Śtest_default_no_shebang³   s    

z"ZipAppTest.test_default_no_shebangc                 C   s   | j d }| ”  |d  ”  | j d }tjt|t|dd | d”2}|  | d”d” |  d	| 	” ” W d    n1 s0    Y  d S )
Nr   r   r   Śpython©ZinterpreterrR   r:   rS   s   python
)
r   r   r   r   r   r   rT   r;   rK   ŚreadlinerU   r   r   r   Śtest_custom_interpreter½   s    

z"ZipAppTest.test_custom_interpreterc                 C   sR   | j d }| ”  |d  ”  t ” }tjt||dd |  | 	”  
d”” d S )Nr   r   rX   rY   s	   #!python
)r   r   r   r%   r&   r   r   r   r   ŚgetvalueŚ
startswithr   r   r   r   Śtest_pack_to_fileobjÉ   s    
zZipAppTest.test_pack_to_fileobjc                 C   sZ   | j d }| ”  |d  ”  | j d }tjt|t|dd |  t t|”d” d S ©Nr   r   r   rX   rY   ©r   r   r   r   r   r   r;   Śget_interpreterr   r   r   r   Śtest_read_shebangŅ   s    

zZipAppTest.test_read_shebangc                 C   sV   | j d }| ”  |d  ”  | j d }t t|t|” |  t t|”d ” d S r   r`   r   r   r   r   Śtest_read_missing_shebangŪ   s    

z$ZipAppTest.test_read_missing_shebangc                 C   s|   | j d }| ”  |d  ”  | j d }tjt|t|dd | j d }tjt|t|dd |  t t|”d” d S )Nr   r   r   rX   rY   śchanged.pyzś	python2.7r`   ©r   r   r    Ś
new_targetr   r   r   Śtest_modify_shebangä   s    


zZipAppTest.test_modify_shebangc                 C   st   | j d }| ”  |d  ”  | j d }tjt|t|dd t ” }tjt||dd |  | 	”  
d”” d S )Nr   r   r   rX   rY   re   ó   #!python2.7
)r   r   r   r   r   r   r%   r&   r   r\   r]   rf   r   r   r   Śtest_write_shebang_to_fileobjļ   s    

z(ZipAppTest.test_write_shebang_to_fileobjc                 C   sh   | j d }| ”  |d  ”  | j d }| j d }tj||dd tj||dd |  t |”d” d S )Nr   r   ztarget1.pyzztarget2.pyzrX   rY   re   )r   r   r   r   r   r;   ra   )r   r   Ztarget1Ztarget2r   r   r   Śtest_read_from_pathobjū   s    


z!ZipAppTest.test_read_from_pathobjc                 C   s~   | j d }| ”  |d  ”  | j d }t ” }tjt||dd t ” }| d” tj||dd |  	| 
”  d”” d S )	Nr   r   r   rX   rY   r   re   ri   )r   r   r   r%   r&   r   r   r   r'   r   r\   r]   )r   r   r    Ztemp_archiverg   r   r   r   Śtest_read_from_fileobj  s    


z!ZipAppTest.test_read_from_fileobjc                 C   s|   | j d }| ”  |d  ”  | j d }tjt|t|dd | j d }tjt|t|d d |  t t|”d ” d S )Nr   r   r   rX   rY   rd   r`   rf   r   r   r   Śtest_remove_shebang  s    


zZipAppTest.test_remove_shebangc                 C   s¬   | j d }| ”  |d  ”  t ” }tjt||dd t ” }| d” tj||d d | d” t	 
|d”&}|  t| ” dh” W d    n1 s0    Y  d S )Nr   r   rX   rY   r   r$   )r   r   r   r%   r&   r   r   r   r'   r(   r)   r;   Śsetr+   )r   r   r    rg   r-   r   r   r   Śtest_content_of_copied_archive  s    


z)ZipAppTest.test_content_of_copied_archiveŚwin32z*Windows does not support an executable bitc                 C   sZ   | j d }| ”  |d  ”  | j d }tjt|t|dd |  | ” jtj	@ ” d S r_   )
r   r   r   r   r   r   r   ŚstatŚst_modeŚS_IEXECr   r   r   r   Śtest_shebang_is_executable.  s    

z%ZipAppTest.test_shebang_is_executablec                 C   sZ   | j d }| ”  |d  ”  | j d }tjt|t|d d |  | ” jtj	@ ” d S )Nr   r   r   rY   )
r   r   r   r   r   r   ZassertFalserq   rr   rs   r   r   r   r   Ś!test_no_shebang_is_not_executable9  s    

z,ZipAppTest.test_no_shebang_is_not_executableN)#Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r!   r"   r.   r6   r=   r>   r   rA   rF   rJ   rL   rO   rQ   rW   r[   r^   rb   rc   rh   rj   rk   rl   rm   ro   ŚunittestZskipIfŚsysŚplatformrt   ru   r   r   r   r   r      sD   			
		
			’
	’r   c                   @   s^   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dejddd Zdd ZdS )ŚZipAppCmdlineTestz$Test zipapp module command line API.c                 C   s&   t  ” }|  |j” t |j”| _d S r   r   r   r   r   r   r   I  s    zZipAppCmdlineTest.setUpc                 C   s8   | j d }| ”  |d  ”  | j d }t ||” |S r   )r   r   r   r   r   r   r   r   r   Śmake_archiveN  s    

zZipAppCmdlineTest.make_archivec                 C   sN   | j d }| ”  |d  ”  t|g}t |” | d”}|  | ” ” d S )Nr   r   z.pyz)	r   r   r   r   r   rI   Świth_suffixr   r   )r   r   Śargsr    r   r   r   Śtest_cmdline_createW  s    



z%ZipAppCmdlineTest.test_cmdline_createc                 C   s@   |   ” }| jd }t|dt|g}t |” |  | ” ” d S ©Nś
target.pyzś-o)r~   r   r   r   rI   r   r   )r   Śoriginalr    r   r   r   r   Śtest_cmdline_copya  s
    

z#ZipAppCmdlineTest.test_cmdline_copyc                 C   sj   |   ” }| jd }t|dt|g}|  t”}t |” W d    n1 sN0    Y  |  |jj	” d S r   ©
r~   r   r   rD   Ś
SystemExitr   rI   r   Ś	exceptionŚcode©r   r   r    r   Ścmr   r   r   Śtest_cmdline_copy_inplacei  s    
(z+ZipAppCmdlineTest.test_cmdline_copy_inplacec                 C   sn   |   ” }| jd }t|dt|ddg}|  t”}t |” W d    n1 sR0    Y  |  |jj	” d S )Nr   r   z-mzfoo:barr   r   r   r   r   Śtest_cmdline_copy_change_mains  s    
(z/ZipAppCmdlineTest.test_cmdline_copy_change_mainz
sys.stdout)Znew_callablec                 C   sl   |   ” }t|dg}|  t”}t |” W d    n1 s>0    Y  |  |jjd” |  | 	” d” d S )Nś--infor   zInterpreter: <none>
)
r~   r   rD   r   r   rI   r;   r   r   r\   )r   Zmock_stdoutr    r   r   r   r   r   Śtest_info_command}  s    (z#ZipAppCmdlineTest.test_info_commandc                 C   s\   | j d }t|dg}|  t”}t |” W d    n1 s@0    Y  |  |jj” d S )Nz	dummy.pyzr   )	r   r   rD   r   r   rI   r   r   r   )r   r    r   r   r   r   r   Śtest_info_error  s
    
(z!ZipAppCmdlineTest.test_info_errorN)rv   rw   rx   ry   r   r~   r   r   r   r   r   r%   ŚStringIOr   r   r   r   r   r   r}   E  s   	




r}   Ś__main__)ry   r%   r
   rq   r{   r   rz   r   r(   Ztest.supportr   Zunittest.mockr   ZTestCaser   r}   rv   rI   r   r   r   r   Ś<module>   s      8M