
    <e?                         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 ddlmZ  G d dej                  Z G d d	ej                  Zed
k    r ej                     dS dS )z#Test harness for the zipapp module.    N)requires_zlib)	os_helper)patchc                   h   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
 e            d	             Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej        ej         dk    d          e!j"        d                         Z# ej        ej         dk    d          d             Z$dS )
ZipAppTestz!Test zipapp module functionality.c                     t          j                    }|                     |j                   t	          j        |j                  | _        d S NtempfileTemporaryDirectory
addCleanupcleanuppathlibPathnametmpdirselfr   s     '/usr/lib/python3.11/test/test_zipapp.pysetUpzZipAppTest.setUp   ;    ,..'''l6;//    c                 0   | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |                     |                     |                                           d S Nsource__main__.py
source.pyzr   mkdirtouchzipappcreate_archivestr
assertTrueis_filer   r   targets      r   test_create_archivezZipAppTest.test_create_archive   s    x'	-	&&(((|+c&kk3v;;777(()))))r   c                     | j         dz  }|                                 |dz                                   | j         dz  }t          j        ||           |                     |                                           d S r   )r   r   r    r!   r"   r$   r%   r&   s      r    test_create_archive_with_pathlibz+ZipAppTest.test_create_archive_with_pathlib"   ss    x'	-	&&(((|+ff---(()))))r   c                    | j         dz  }|                                 |dz                                   |dz                                   |dz                                   |dz  dz                                   t          j                    }t          j        t          |          |           |                    d           t          j
        |d          5 }|                     d|                                           |                     d	|                                           d d d            d S # 1 swxY w Y   d S )
Nr   r   foobarz__init__.pyr   rzfoo/zbar/)r   r   r    ioBytesIOr!   r"   r#   seekzipfileZipFileassertInnamelistr   r   r'   zs       r    test_create_archive_with_subdirsz+ZipAppTest.test_create_archive_with_subdirs+   sW   x'	-	&&(((	%   	%   	%-	'..000c&kk6222A_VS)) 	0QMM&!**,,///MM&!**,,///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   AD;;D?D?c                 `   d }| j         dz  }|                                 |dz                                   |dz                                   |dz                                   | j         dz  }t          j        |||           t          j        |d          5 }|                     d|                                           |                     d|                                           | 	                    d|                                           d d d            d S # 1 swxY w Y   d S )	Nc                     | j         dk    S )Nz.pyc)suffixpaths    r   skip_pyc_fileszBZipAppTest.test_create_archive_with_filter.<locals>.skip_pyc_files=   s    ;&((r   r   r   test.pyztest.pycr   filterr.   )
r   r   r    r!   r"   r2   r3   r4   r5   assertNotIn)r   r>   r   r'   r7   s        r   test_create_archive_with_filterz*ZipAppTest.test_create_archive_with_filter:   s\   	) 	) 	)x'	-	&&(((	)	""$$$	*	##%%%|+ff^DDDD_VS)) 	7QMM-666MM)QZZ\\222Z666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A9D##D'*D'c                    d }| j         dz  }|                                 |dz                                   |dz                                   |dz                                   |dz  dz                                   | j         dz  }t          j        |||           t          j        |d	          5 }|                     t          |	                                          d
           | 
                    d|	                                           | 
                    d|	                                           d d d            d S # 1 swxY w Y   d S )Nc                 $    | j         d         dk    S )Nr   dummy)partsr<   s    r   skip_dummy_dirzIZipAppTest.test_create_archive_filter_exclude_dir.<locals>.skip_dummy_dirP   s    :a=G++r   r   r   r?   rF   ztest2.pyr   r@   r.      )r   r   r    r!   r"   r2   r3   assertEquallenr5   r4   )r   rH   r   r'   r7   s        r   &test_create_archive_filter_exclude_dirz1ZipAppTest.test_create_archive_filter_exclude_dirL   s   	, 	, 	,x'	-	&&(((	)	""$$$	'	  """	'	J	&--///|+ff^DDDD_VS)) 	3QS..222MM-666MM)QZZ\\222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   7BE

EEc                    | j         dz  }|                                 |dz                                   t          j        t          |                     | j         dz  }|                     |                                           d S r   r   )r   r   expected_targets      r   "test_create_archive_default_targetz-ZipAppTest.test_create_archive_default_target`   sy    x'	-	&&(((c&kk***+4//1122222r   c                    | j         dz  }|                                 |dz                                   |dz                                   | j         dz  }t          j        ||d           t          j        |d          5 }dD ]:}|                     |                    |          j	        t
          j
                   ;	 d d d            d S # 1 swxY w Y   d S )	Nr   r   r?   r   T)
compressedr.   )r   r?   )r   r   r    r!   r"   r2   r3   rJ   getinfocompress_typeZIP_DEFLATED)r   r   r'   r7   r   s        r   $test_create_archive_with_compressionz/ZipAppTest.test_create_archive_with_compressioni   s(    x'	-	&&(((	)	""$$$|+ff>>>>_VS)) 	7Q2 7 7  4!>!(!57 7 7 77	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   >CCCc                 R   | j         dz  }|                                 |dz                                   | j         dz  }|                     t          j                  5  t	          j        t          |          t          |                     d d d            d S # 1 swxY w Y   d S )Nr   foo.pyr   r   r   r    assertRaisesr!   ZipAppErrorr"   r#   r&   s      r   test_no_mainzZipAppTest.test_no_mainx   s    x'	(	!!###|+v122 	< 	<!#f++s6{{;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   0BB #B c                 V   | j         dz  }|                                 |dz                                   | j         dz  }|                     t          j                  5  t	          j        t          |          t          |          d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   
pkg.mod:fnmainrX   r&   s      r   test_main_and_main_pyz ZipAppTest.test_main_and_main_py   s    x'	-	&&(((|+v122 	O 	O!#f++s6{{NNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   2BB"%B"c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           t          j        t          |          d          5 }|                     d|	                                           |                     d|
                    d                     d d d            d S # 1 swxY w Y   d S )	Nr   rW   r   r]   r^   r.   r   s   pkg.mod.fn())r   r   r    r!   r"   r#   r2   r3   r4   r5   readr6   s       r   test_main_writtenzZipAppTest.test_main_written   s*   x'	(	!!###|+c&kk3v;;\JJJJ_S[[#.. 	B!MM-666MM/166-+@+@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AC22C69C6c                     | j         dz  }|                                 |dz                                   |dz                                   | j         dz  }t          j        t          |          t          |          d           t          j        t          |          d          5 }|                     d|	                                
                    d	                     d d d            d S # 1 swxY w Y   d S )
Nr   rW   zbar.pyr   r]   r^   r.      r   )r   r   r    r!   r"   r#   r2   r3   rJ   r5   countr6   s       r   test_main_only_written_oncez&ZipAppTest.test_main_only_written_once   s5    x'
 
(	!!###	(	!!###|+c&kk3v;;\JJJJ_S[[#.. 	C!Q

 2 2= A ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   *<C33C7:C7c           	         | j         dz  }|                                 | j         dz  }g d}|D ]}|                     |          5  |                     t          j                  5  t	          j        t          |          t          |          |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nr   r   )
 r,   zfoo:z:barz12:barza.b.c.:dz.a:bza:b.za:.bza:silly namer^   )r   r   subTestrY   r!   rZ   r"   r#   )r   r   r'   problemsr_   s        r   test_main_validationzZipAppTest.test_main_validation   ss   x'|+
 
 
  	O 	OD4(( O O&&v'9:: O O)#f++s6{{NNNNO O O O O O O O O O O O O O OO O O O O O O O O O O O O O O	O 	Os6    B<'2B%B<%B))B<,B)-B<<C 	C 	c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |                     |                    d          5 }|                     |                    d          d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rbrI      #!)	r   r   r    r!   r"   r#   openassertNotEqualrb   r   r   r'   fs       r   test_default_no_shebangz"ZipAppTest.test_default_no_shebang   s    x'	-	&&(((|+c&kk3v;;777[[ 	2!q		5111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   *B;;B?B?c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           |                    d          5 }|                     |                    d          d           |                     d	|	                                           d d d            d S # 1 swxY w Y   d S )
Nr   r   r   pythoninterpreterrn   rI   ro   s   python
)
r   r   r    r!   r"   r#   rp   rJ   rb   readlinerr   s       r   test_custom_interpreterz"ZipAppTest.test_custom_interpreter   s    x'	-	&&(((|+c&kk3v;;HMMMM[[ 	8!QVVAYY...[!**,,777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   AC%%C),C)c                 R   | j         dz  }|                                 |dz                                   t          j                    }t          j        t          |          |d           |                     |	                                
                    d                     d S )Nr   r   rv   rw   s	   #!python
)r   r   r    r/   r0   r!   r"   r#   r$   getvalue
startswithr&   s      r   test_pack_to_fileobjzZipAppTest.test_pack_to_fileobj   s    x'	-	&&(((c&kk6xHHHH))44]CCDDDDDr   c                 P   | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           |                     t          j        t          |                    d           d S Nr   r   r   rv   rw   r   r   r    r!   r"   r#   rJ   get_interpreterr&   s      r   test_read_shebangzZipAppTest.test_read_shebang   s    x'	-	&&(((|+c&kk3v;;HMMMM/F<<hGGGGGr   c                 L   | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |                     |                     t          j        t          |                    d            d S r   r   r&   s      r   test_read_missing_shebangz$ZipAppTest.test_read_missing_shebang   s    x'	-	&&(((|+c&kk3v;;777/F<<dCCCCCr   c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           | j         dz  }t          j        t          |          t          |          d           |                     t          j        t          |                    d           d S )Nr   r   r   rv   rw   changed.pyz	python2.7r   r   r   r'   
new_targets       r   test_modify_shebangzZipAppTest.test_modify_shebang   s    x'	-	&&(((|+c&kk3v;;HMMMM[=0
c&kk3z??TTTT/J@@+NNNNNr   c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           t          j                    }t          j        t          |          |d           |                     |	                                
                    d                     d S )Nr   r   r   rv   rw   r      #!python2.7
)r   r   r    r!   r"   r#   r/   r0   r$   r|   r}   r   s       r   test_write_shebang_to_fileobjz(ZipAppTest.test_write_shebang_to_fileobj   s     x'	-	&&(((|+c&kk3v;;HMMMMZ\\
c&kk:;OOOO
++--889IJJKKKKKr   c                 D   | j         dz  }|                                 |dz                                   | j         dz  }| j         dz  }t          j        ||d           t          j        ||d           |                     t          j        |          d           d S )Nr   r   ztarget1.pyzztarget2.pyzrv   rw   r   )r   r   r    r!   r"   rJ   r   )r   r   target1target2s       r   test_read_from_pathobjz!ZipAppTest.test_read_from_pathobj   s     x'	-	&&(((+-+-fg8DDDDgwKHHHH/88+FFFFFr   c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j                    }t          j        t          |          |d           t          j                    }|                    d           t          j        ||d           | 	                    |
                                                    d                     d S )	Nr   r   r   rv   rw   r   r   r   )r   r   r    r/   r0   r!   r"   r#   r1   r$   r|   r}   )r   r   r'   temp_archiver   s        r   test_read_from_fileobjz!ZipAppTest.test_read_from_fileobj  s    x'	-	&&(((|+z||c&kk<XNNNNZ\\
!lJKPPPP
++--889IJJKKKKKr   c                    | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           | j         dz  }t          j        t          |          t          |          d            |                     t          j        t          |                    d            d S )Nr   r   r   rv   rw   r   r   r   s       r   test_remove_shebangzZipAppTest.test_remove_shebang  s    x'	-	&&(((|+c&kk3v;;HMMMM[=0
c&kk3z??MMMM/J@@$GGGGGr   c                 N   | j         dz  }|                                 |dz                                   t          j                    }t          j        t          |          |d           t          j                    }|                    d           t          j        ||d            |                    d           t          j
        |d          5 }|                     t          |                                          dh           d d d            d S # 1 swxY w Y   d S )Nr   r   rv   rw   r   r.   )r   r   r    r/   r0   r!   r"   r#   r1   r2   r3   rJ   setr5   )r   r   r'   r   r7   s        r   test_content_of_copied_archivez)ZipAppTest.test_content_of_copied_archive   sM   x'	-	&&(((c&kk6xHHHHZ\\
AfjdCCCC_Z-- 	AS..@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   7DD!Dwin32z*Windows does not support an executable bitc                 X   | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d           |                     |                                j        t          j	        z             d S r   )
r   r   r    r!   r"   r#   r$   statst_modeS_IEXECr&   s      r   test_shebang_is_executablez%ZipAppTest.test_shebang_is_executable/  s    
 x'	-	&&(((|+c&kk3v;;HMMMM-<=====r   c                 X   | j         dz  }|                                 |dz                                   | j         dz  }t          j        t          |          t          |          d            |                     |                                j        t          j	        z             d S )Nr   r   r   rw   )
r   r   r    r!   r"   r#   assertFalser   r   r   r&   s      r   !test_no_shebang_is_not_executablez,ZipAppTest.test_no_shebang_is_not_executable;  s     x'	-	&&(((|+c&kk3v;;DIIII.=>>>>>r   N)%__name__
__module____qualname____doc__r   r(   r*   r8   rC   rL   rO   r   rU   r[   r`   rc   rg   rl   rt   rz   r~   r   r   r   r   r   r   r   r   unittestskipIfsysplatformr   skip_unless_working_chmodr   r    r   r   r   r      sA       ++0 0 0
* * ** * *0 0 07 7 7$3 3 3(3 3 3 ]__7 7 _7< < <O O O	B 	B 	BC C C"O O O2 2 2
8 
8 
8E E EH H HD D D	O 	O 	O
L 
L 
L
G 
G 
GL L L	H 	H 	HA A A X_S\W,AC C(> > )(C C> X_S\W,AC C? ?C C? ? ?r   r   c                   r    e Zd ZdZd Zd Zd Zd Zd Zd Z	 e
dej        	          d
             Zd ZdS )ZipAppCmdlineTestz$Test zipapp module command line API.c                     t          j                    }|                     |j                   t	          j        |j                  | _        d S r	   r
   r   s     r   r   zZipAppCmdlineTest.setUpK  r   r   c                     | j         dz  }|                                 |dz                                   | j         dz  }t          j        ||           |S r   )r   r   r    r!   r"   r&   s      r   make_archivezZipAppCmdlineTest.make_archiveP  sV    x'	-	&&(((|+ff---r   c                 0   | j         dz  }|                                 |dz                                   t          |          g}t	          j        |           |                    d          }|                     |                                           d S )Nr   r   z.pyz)	r   r   r    r#   r!   r_   with_suffixr$   r%   )r   r   argsr'   s       r   test_cmdline_createz%ZipAppCmdlineTest.test_cmdline_createY  s    x'	-	&&(((F}D##F++(()))))r   c                     |                                  }| j        dz  }t          |          dt          |          g}t          j        |           |                     |                                           d S N
target.pyz-o)r   r   r#   r!   r_   r$   r%   )r   originalr'   r   s       r   test_cmdline_copyz#ZipAppCmdlineTest.test_cmdline_copyc  si    $$&&|+HtS[[1D(()))))r   c                 J   |                                  }| j        dz  }t          |          dt          |          g}|                     t                    5 }t          j        |           d d d            n# 1 swxY w Y   |                     |j        j	                   d S r   
r   r   r#   rY   
SystemExitr!   r_   r$   	exceptioncoder   r   r'   r   cms        r   test_cmdline_copy_inplacez+ZipAppCmdlineTest.test_cmdline_copy_inplacek  s    $$&&|+HtS]]3z** 	bK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)*****s   A99A= A=c                 N   |                                  }| j        dz  }t          |          dt          |          ddg}|                     t                    5 }t          j        |           d d d            n# 1 swxY w Y   |                     |j        j	                   d S )Nr   r   z-mzfoo:barr   r   s        r   test_cmdline_copy_change_mainz/ZipAppCmdlineTest.test_cmdline_copy_change_mainu  s    $$&&|+HtS[[$	Bz** 	bK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)*****s   A;;A?A?z
sys.stdout)new_callablec                 l   |                                  }t          |          dg}|                     t                    5 }t	          j        |           d d d            n# 1 swxY w Y   |                     |j        j        d           |                     |	                                d           d S )N--infor   zInterpreter: <none>
)
r   r#   rY   r   r!   r_   rJ   r   r   r|   )r   mock_stdoutr'   r   r   s        r   test_info_commandz#ZipAppCmdlineTest.test_info_command  s     ""$$FX&z** 	bK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	*A...--//1HIIIIIs    A!!A%(A%c                    | j         dz  }t          |          dg}|                     t                    5 }t	          j        |           d d d            n# 1 swxY w Y   |                     |j        j                   d S )Nz	dummy.pyzr   )	r   r#   rY   r   r!   r_   r$   r   r   )r   r'   r   r   s       r   test_info_errorz!ZipAppCmdlineTest.test_info_error  s    {*FX&z** 	bK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)*****s   AAAN)r   r   r   r   r   r   r   r   r   r   r   r/   StringIOr   r   r   r   r   r   r   G  s        ..0 0 0
  * * ** * *+ + ++ + + U<bk222J J 32J+ + + + +r   r   __main__)r   r/   r   r   r   r   r   r!   r2   test.supportr   r   unittest.mockr   TestCaser   r   r   r_   r   r   r   <module>r      s   ) ) 				   



     & & & & & & " " " " " "      t? t? t? t? t?" t? t? t?n	J+ J+ J+ J+ J+) J+ J+ J+Z zHMOOOOO r   