
    dafB                         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$                          yy)z#Test harness for the zipapp module.    N)requires_zlib)	os_helper)patchc                   p   e Zd 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 jB                  dk(  d      e"jF                  d               Z$ ej>                  e jB                  dk(  d      d        Z%y) 
ZipAppTestz!Test zipapp module functionality.c                     t        j                         }| j                  |j                         t	        j
                  |j                        | _        y NtempfileTemporaryDirectory
addCleanupcleanuppathlibPathnametmpdirselfr   s     +/root/Python-3.12.4/Lib/test/test_zipapp.pysetUpzZipAppTest.setUp   4    ,,.'ll6;;/    c                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |             | j                  |j                                y 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   sc    x'	-	&&(|+c&k3v;7()r   c                     | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  ||       | j                  |j                                y r   )r   r   r    r!   r"   r$   r%   r&   s      r    test_create_archive_with_pathlibz+ZipAppTest.test_create_archive_with_pathlib"   s[    x'	-	&&(|+ff-()r   c                 >   | j                   dz  }|j                          |dz  j                          |dz  j                          |dz  j                          |dz  dz  j                          t        j                         }t        j                  t        |      |       |j                  d       t        j                  |d      5 }| j                  d|j                                | j                  d	|j                                d d d        y # 1 sw Y   y xY w)
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+   s    x'	-	&&(	% 	% 	%-	'..0c&k62A__VS) 	0QMM&!**,/MM&!**,/	0 	0 	0s   	ADDc                 .   | j                   dz  }|j                          |dz  j                          |dz  j                          |dz  dz  j                          |dz  dz  j                          |dz  j                          t        j                         }t        j                  t        |      |       |j                  d       t        j                  |d      5 }| j                  |j                         g d	       d d d        y # 1 sw Y   y xY w)
Nr   zed.pybinquxbazr   r   r.   )r   zbin/zbin/bazzbin/quxr:   )r   r   r    r/   r0   r!   r"   r#   r1   r2   r3   assertEqualr5   )r   r   r'   zfs       r   test_create_sorted_archivez%ZipAppTest.test_create_sorted_archive:   s    x'	(	!!#	% 	%%	&&(	%%	&&(	-	&&(c&k62A__VS) 	IRR[[]GI	I 	I 	Is   #DDc                    d }| j                   dz  }|j                          |dz  j                          |dz  j                          |dz  j                          | j                   dz  }t        j                  |||       t        j                  |d      5 }| j                  d|j                                | j                  d|j                                | j                  d|j                                d d d        y # 1 sw Y   y xY w)	Nc                      | j                   dk7  S )Nz.pyc)suffixpaths    r   skip_pyc_fileszBZipAppTest.test_create_archive_with_filter.<locals>.skip_pyc_filesM   s    ;;&((r   r   r   test.pyztest.pycr   filterr.   )
r   r   r    r!   r"   r2   r3   r4   r5   assertNotIn)r   rF   r   r'   r7   s        r   test_create_archive_with_filterz*ZipAppTest.test_create_archive_with_filterJ   s    	)x'	-	&&(	)	""$	*	##%|+ff^D__VS) 	7QMM-6MM)QZZ\2Z6	7 	7 	7s   A!DDc                 \   d }| j                   dz  }|j                          |dz  j                          |dz  j                          |dz  j                          |dz  dz  j                          | j                   dz  }t        j                  |||       t        j                  |d	      5 }| j                  t        |j                               d
       | j                  d|j                                | j                  d|j                                d d d        y # 1 sw Y   y xY w)Nc                 &    | j                   d   dk7  S )Nr   dummy)partsrD   s    r   skip_dummy_dirzIZipAppTest.test_create_archive_filter_exclude_dir.<locals>.skip_dummy_dir`   s    ::a=G++r   r   r   rG   rN   ztest2.pyr   rH   r.      )r   r   r    r!   r"   r2   r3   r>   lenr5   r4   )r   rP   r   r'   r7   s        r   &test_create_archive_filter_exclude_dirz1ZipAppTest.test_create_archive_filter_exclude_dir\   s    	,x'	-	&&(	)	""$	'	  "	'	J	&--/|+ff^D__VS) 	3QS.2MM-6MM)QZZ\2	3 	3 	3s   /A*D""D+c                     | j                   dz  }|j                          |dz  j                          t        j                  t        |             | j                   dz  }| j                  |j                                y r   r   )r   r   expected_targets      r   "test_create_archive_default_targetz-ZipAppTest.test_create_archive_default_targetp   s_    x'	-	&&(c&k*++4//12r   c                    | j                   dz  }|j                          |dz  j                          |dz  j                          | j                   dz  }t        j                  ||d       t        j                  |d      5 }dD ];  }| j                  |j                  |      j                  t
        j                         = 	 d d d        y # 1 sw Y   y xY w)	Nr   r   rG   r   T)
compressedr.   )r   rG   )r   r   r    r!   r"   r2   r3   r>   getinfocompress_typeZIP_DEFLATED)r   r   r'   r7   r   s        r   $test_create_archive_with_compressionz/ZipAppTest.test_create_archive_with_compressiony   s     x'	-	&&(	)	""$|+ff>__VS) 	7Q2 7  4!>!>!(!5!577	7 	7 	7s   ACCc                 >   | j                   dz  }|j                          |dz  j                          | j                   dz  }| j                  t        j
                        5  t	        j                  t        |      t        |             d d d        y # 1 sw Y   y xY w)Nr   foo.pyr   r   r   r    assertRaisesr!   ZipAppErrorr"   r#   r&   s      r   test_no_mainzZipAppTest.test_no_main   sy    x'	(	!!#|+v112 	<!!#f+s6{;	< 	< 	<s   !)BBc                 B   | j                   dz  }|j                          |dz  j                          | j                   dz  }| j                  t        j
                        5  t	        j                  t        |      t        |      d       d d d        y # 1 sw Y   y xY w)Nr   r   r   
pkg.mod:fnmainr_   r&   s      r   test_main_and_main_pyz ZipAppTest.test_main_and_main_py   s    x'	-	&&(|+v112 	O!!#f+s6{N	O 	O 	Os   !+BBc                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       t        j                  t        |      d      5 }| j                  d|j                                | j                  d|j                  d             d d d        y # 1 sw Y   y xY w)	Nr   r^   r   rd   re   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&k3v;\J__S[#. 	B!MM-6MM/166-+@A	B 	B 	Bs   ACCc                    | j                   dz  }|j                          |dz  j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       t        j                  t        |      d      5 }| j                  d|j                         j                  d	             d d d        y # 1 sw Y   y xY w)
Nr   r^   zbar.pyr   rd   re   r.      r   )r   r   r    r!   r"   r#   r2   r3   r>   r5   countr6   s       r   test_main_only_written_oncez&ZipAppTest.test_main_only_written_once   s     x'
 
(	!!#	(	!!#|+c&k3v;\J__S[#. 	C!Q

 2 2= AB	C 	C 	Cs   0CC c           	         | j                   dz  }|j                          | j                   dz  }g d}|D ]o  }| j                  |      5  | j                  t        j
                        5  t	        j                  t        |      t        |      |       d d d        d d d        q y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   )
 r,   zfoo:z:barz12:barza.b.c.:dz.a:bza:b.za:.bza:silly namere   )r   r   subTestr`   r!   ra   r"   r#   )r   r   r'   problemsrf   s        r   test_main_validationzZipAppTest.test_main_validation   s    x'|+
  	OD4( O&&v'9'9: O))#f+s6{NOO O	OO OO Os$   
 B4*+B(B4(B1-B44B=	c                 d   | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |             |j                  d      5 }| j                  |j                  d      d       d d d        y # 1 sw Y   y xY w)Nr   r   r   rbrQ      #!)	r   r   r    r!   r"   r#   openassertNotEqualri   r   r   r'   fs       r   test_default_no_shebangz"ZipAppTest.test_default_no_shebang   s    x'	-	&&(|+c&k3v;7[[ 	2!q	51	2 	2 	2s   ;"B&&B/c                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       |j                  d      5 }| j                  |j                  d      d       | j                  d	|j                                d d d        y # 1 sw Y   y xY w)
Nr   r   r   pythoninterpreterru   rQ   rv   s   python
)
r   r   r    r!   r"   r#   rw   r>   ri   readlinery   s       r   test_custom_interpreterz"ZipAppTest.test_custom_interpreter   s     x'	-	&&(|+c&k3v;HM[[ 	8!QVVAY.[!**,7	8 	8 	8s   =ACCc                 .   | j                   dz  }|j                          |dz  j                          t        j                         }t        j                  t        |      |d       | j                  |j                         j                  d             y )Nr   r   r}   r~   s	   #!python
)r   r   r    r/   r0   r!   r"   r#   r$   getvalue
startswithr&   s      r   test_pack_to_fileobjzZipAppTest.test_pack_to_fileobj   si    x'	-	&&(c&k6xH)44]CDr   c                 6   | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       | j                  t        j                  t        |            d       y Nr   r   r   r}   r~   r   r   r    r!   r"   r#   r>   get_interpreterr&   s      r   test_read_shebangzZipAppTest.test_read_shebang   sq    x'	-	&&(|+c&k3v;HM//F<hGr   c                 2   | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |             | j                  t        j                  t        |            d        y r   r   r&   s      r   test_read_missing_shebangz$ZipAppTest.test_read_missing_shebang   so    x'	-	&&(|+c&k3v;7//F<dCr   c                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       | j                   dz  }t        j                  t        |      t        |      d       | j                  t        j                  t        |            d       y )Nr   r   r   r}   r~   changed.pyz	python2.7r   r   r   r'   
new_targets       r   test_modify_shebangzZipAppTest.test_modify_shebang   s    x'	-	&&(|+c&k3v;HM[[=0
c&k3z?T//J@+Nr   c                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       t        j                         }t        j                  t        |      |d       | j                  |j                         j                  d             y )Nr   r   r   r}   r~   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&k3v;HMZZ\
c&k:;O
++-889IJKr   c                    | j                   dz  }|j                          |dz  j                          t        j                  t        |            }t        j                  t        | j                   dz              }t        j                  t        | j                   dz              }t        j                  ||d       t        j                  ||d       | j                  t        j                  |      d       y )Nr   r   ztarget1.pyzztarget2.pyzr}   r~   r   )
r   r   r    r   FakePathr#   r!   r"   r>   r   )r   r   target1target2s       r   test_read_from_pathlike_objz&ZipAppTest.test_read_from_pathlike_obj  s     x'	-	&&(##CK0$$S})D%EF$$S})D%EFfg8DgwKH//8+Fr   c                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                         }t        j                  t        |      |d       t        j                         }|j                  d       t        j                  ||d       | j                  |j                         j                  d             y )	Nr   r   r   r}   r~   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'	-	&&(|+zz|c&k<XNZZ\
!lJKP
++-889IJKr   c                    | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       | j                   dz  }t        j                  t        |      t        |      d        | j                  t        j                  t        |            d        y )Nr   r   r   r}   r~   r   r   r   s       r   test_remove_shebangzZipAppTest.test_remove_shebang&  s    x'	-	&&(|+c&k3v;HM[[=0
c&k3z?M//J@$Gr   c                    | j                   dz  }|j                          |dz  j                          t        j                         }t        j                  t        |      |d       t        j                         }|j                  d       t        j                  ||d        |j                  d       t        j                  |d      5 }| j                  t        |j                               dh       d d d        y # 1 sw Y   y xY w)Nr   r   r}   r~   r   r.   )r   r   r    r/   r0   r!   r"   r#   r1   r2   r3   r>   setr5   )r   r   r'   r   r7   s        r   test_content_of_copied_archivez)ZipAppTest.test_content_of_copied_archive1  s    x'	-	&&(c&k6xHZZ\
AfjdC__Z- 	AS.@	A 	A 	As   +D  D	win32z*Windows does not support an executable bitc                 N   | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d       | j                  |j                         j                  t        j                  z         y r   )
r   r   r    r!   r"   r#   r$   statst_modeS_IEXECr&   s      r   test_shebang_is_executablez%ZipAppTest.test_shebang_is_executable@  su    
 x'	-	&&(|+c&k3v;HM--<=r   c                 N   | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  t        |      t        |      d        | j                  |j                         j                  t        j                  z         y )Nr   r   r   r~   )
r   r   r    r!   r"   r#   assertFalser   r   r   r&   s      r   !test_no_shebang_is_not_executablez,ZipAppTest.test_no_shebang_is_not_executableL  sw     x'	-	&&(|+c&k3v;DI..=>r   N)&__name__
__module____qualname____doc__r   r(   r*   r8   r@   rK   rS   rV   r   r\   rb   rg   rj   rn   rs   r{   r   r   r   r   r   r   r   r   r   r   unittestskipIfsysplatformr   skip_unless_working_chmodr   r    r   r   r   r      s   +0
**0I 7$3(3 _7 7<O	BC"O2
8EHD	O
LGL	HA X__S\\W,AC((> )C> X__S\\W,AC?C?r   r   c                   n    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y)ZipAppCmdlineTestz$Test zipapp module command line API.c                     t        j                         }| j                  |j                         t	        j
                  |j                        | _        y r	   r
   r   s     r   r   zZipAppCmdlineTest.setUp\  r   r   c                     | j                   dz  }|j                          |dz  j                          | j                   dz  }t        j                  ||       |S r   )r   r   r    r!   r"   r&   s      r   make_archivezZipAppCmdlineTest.make_archivea  sM    x'	-	&&(|+ff-r   c                 
   | j                   dz  }|j                          |dz  j                          t        |      g}t	        j
                  |       |j                  d      }| j                  |j                                y )Nr   r   z.pyz)	r   r   r    r#   r!   rf   with_suffixr$   r%   )r   r   argsr'   s       r   test_cmdline_createz%ZipAppCmdlineTest.test_cmdline_createj  sd    x'	-	&&(F}D##F+()r   c                     | j                         }| j                  dz  }t        |      dt        |      g}t        j                  |       | j                  |j                                y N
target.pyz-o)r   r   r#   r!   rf   r$   r%   )r   originalr'   r   s       r   test_cmdline_copyz#ZipAppCmdlineTest.test_cmdline_copyt  sQ    $$&|+HtS[1D()r   c                 8   | j                         }| j                  dz  }t        |      dt        |      g}| j                  t              5 }t        j                  |       d d d        | j                  j                  j                         y # 1 sw Y   /xY wr   
r   r   r#   r`   
SystemExitr!   rf   r$   	exceptioncoder   r   r'   r   cms        r   test_cmdline_copy_inplacez+ZipAppCmdlineTest.test_cmdline_copy_inplace|  s{    $$&|+HtS]3z* 	bKK	 	))*	 	s   BBc                 <   | j                         }| j                  dz  }t        |      dt        |      ddg}| j                  t              5 }t        j                  |       d d d        | j                  j                  j                         y # 1 sw Y   /xY w)Nr   r   z-mzfoo:barr   r   s        r   test_cmdline_copy_change_mainz/ZipAppCmdlineTest.test_cmdline_copy_change_main  s    $$&|+HtS[$	Bz* 	bKK	 	))*	 	s   BBz
sys.stdout)new_callablec                 H   | j                         }t        |      dg}| j                  t              5 }t	        j
                  |       d d d        | j                  j                  j                  d       | j                  |j                         d       y # 1 sw Y   PxY w)N--infor   zInterpreter: <none>
)
r   r#   r`   r   r!   rf   r>   r   r   r   )r   mock_stdoutr'   r   r   s        r   test_info_commandz#ZipAppCmdlineTest.test_info_command  s     ""$FX&z* 	bKK	 	**A.--/1HI		 	s   BB!c                    | j                   dz  }t        |      dg}| j                  t              5 }t	        j
                  |       d d d        | j                  j                  j                         y # 1 sw Y   /xY w)Nz	dummy.pyzr   )	r   r#   r`   r   r!   rf   r$   r   r   )r   r'   r   r   s       r   test_info_errorz!ZipAppCmdlineTest.test_info_error  sg    {*FX&z* 	bKK	 	))*	 	s   A66A?N)r   r   r   r   r   r   r   r   r   r   r   r/   StringIOr   r   r   r   r   r   r   X  sI    .0
**++ <bkk2J 3J+r   r   __main__)r   r/   r   r   r   r   r   r!   r2   test.supportr   r   unittest.mockr   TestCaser   r   r   rf   r   r   r   <module>r      sm    ) 	   
     & " E?"" E?P
J+)) J+Z zHMMO r   