o
    IXīh°?  ć                   @   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rJe ”  dS 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   ó&   t  ” }|  |j” t |j”| _d S ©N©ŚtempfileŚTemporaryDirectoryZ
addCleanupŚcleanupŚpathlibŚPathŚnameŚtmpdir©Śselfr   © r   ś:/opt/python-3.10.19/usr/lib/python3.10/test/test_zipapp.pyŚsetUp   ó   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”}|  d| ” ” |  d	| ” ” W d    d S 1 sVw   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    d S 1 sVw   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   r4   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
”#}|  t| 	” d” |  
d| 	” ” |  
d| 	” ” W d    d S 1 s`w   Y  d S )Nc                 S   s   | j d dkS )Nr   Śdummy)Śpartsr2   r   r   r   Śskip_dummy_dirO   s   zIZipAppTest.test_create_archive_filter_exclude_dir.<locals>.skip_dummy_dirr   r   r5   r9   ztest2.pyr   r6   r&   é   )r   r   r   r   r   r*   r+   ŚassertEqualŚlenr-   r,   )r   r;   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”}dD ]}|  | |”j	tj
” q+W d    d S 1 sDw   Y  d S )	Nr   r   r5   r   T)Ś
compressedr&   )r   r5   )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   sn   | j d }| ”  |d  ”  | j d }|  tj” t t|t|” W d    d S 1 s0w   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   sr   | j d }| ”  |d  ”  | j d }|  tj” tjt|t|dd W d    d S 1 s2w   Y  d S )Nr   r   r   ś
pkg.mod:fn©ŚmainrE   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”}|  d| 	” ” |  d| 
d”” W d    d S 1 sEw   Y  d S )	Nr   rD   r   rI   rJ   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    d S 1 sEw   Y  d S )
Nr   rD   zbar.pyr   rI   rJ   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 ]:}| j|d* |  tj” tjt|t||d W d    n1 s:w   Y  W d    n1 sIw   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 namerJ   )r   r   ZsubTestrF   r   rG   r   r   )r   r   r"   ZproblemsrK   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    d S 1 s8w   Y  d S )Nr   r   r   Śrbr<   ó   #!)	r   r   r   r   r   r   ŚopenZassertNotEqualrM   ©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”}|  | d”d” |  d	| 	” ” W d    d S 1 sBw   Y  d S )
Nr   r   r   Śpython©ZinterpreterrT   r<   rU   s   python
)
r   r   r   r   r   r   rV   r=   rM   ŚreadlinerW   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   rZ   r[   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   rZ   r[   ©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   rb   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   rZ   r[   śchanged.pyzś	python2.7rb   ©r   r   r"   Ś
new_targetr   r   r   Śtest_modify_shebangä   ó   


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   rZ   r[   rg   ó   #!python2.7
)r   r   r   r   r   r   r'   r(   r   r^   r_   rh   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.pyzrZ   r[   rg   )r   r   r   r   r   r=   rc   )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   rZ   r[   r   rg   rl   )r   r   r   r'   r(   r   r   r   r)   r   r^   r_   )r   r   r"   Ztemp_archiveri   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   rZ   r[   rf   rb   rh   r   r   r   Śtest_remove_shebang  rk   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    d S 1 sPw   Y  d S )Nr   r   rZ   r[   r   r&   )r   r   r   r'   r(   r   r   r   r)   r*   r+   r=   Śsetr-   )r   r   r"   ri   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 ra   )
r   r   r   r   r   r   r   ŚstatŚst_modeŚS_IEXECr!   r   r   r   Śtest_shebang_is_executable.  ó   

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   r[   )
r   r   r   r   r   r   ZassertFalsert   ru   rv   r!   r   r   r   Ś!test_no_shebang_is_not_executable9  rx   z,ZipAppTest.test_no_shebang_is_not_executableN)#Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r#   r$   r0   r8   r?   r@   r   rC   rH   rL   rN   rQ   rS   rY   r]   r`   rd   re   rj   rm   rn   ro   rp   rr   ŚunittestZskipIfŚsysŚplatformrw   ry   r   r   r   r   r      sF    			
		
			’
	’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   r   r   r   r   r   r   r   r   I  r   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   rK   Ś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   rK   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 s'w   Y  |  |jj	” d S r   ©
r   r   r   rF   Ś
SystemExitr   rK   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 s)w   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w   Y  |  |jjd” |  | 	” d” d S )Nś--infor   zInterpreter: <none>
)
r   r   rF   r   r   rK   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 w   Y  |  |jj” d S )Nz	dummy.pyzr   )	r   r   rF   r   r   rK   r   r   r   )r   r"   r   r   r   r   r   Śtest_info_error  s   
’z!ZipAppCmdlineTest.test_info_errorN)rz   r{   r|   r}   r   r   r   r   r   r   r   r'   ŚStringIOr   r   r   r   r   r   r   E  s    	




r   Ś__main__)r}   r'   r   rt   r   r   r~   r   r*   Ztest.supportr   Zunittest.mockr   ZTestCaser   r   rz   rK   r   r   r   r   Ś<module>   s$      8M’