
    0hhWF                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSK	Jr  SSKJr   " S S\R                  5      r " S S	\R                  5      r\S
:X  a  \R$                  " 5         gg)z#Test harness for the zipapp module.    N)requires_zlib)	os_helper)patchc                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS r\" 5       S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r \!RD                  " \#RH                  S:H  S5      \%RL                  S  5       5       r'\!RD                  " \#RH                  S:H  S5      S! 5       r(S"r)g#)$
ZipAppTest   z!Test zipapp module functionality.c                     [         R                  " 5       nU R                  UR                  5        [        R
                  " UR                  5      U l        g NtempfileTemporaryDirectory
addCleanupcleanuppathlibPathnametmpdirselfr   s     9/opt/python-3.13.8/usr/lib/python3.13/test/test_zipapp.pysetUpZipAppTest.setUp   4    ,,.'ll6;;/    c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      5        U R                  UR                  5       5        g Nsource__main__.py
source.pyzr   mkdirtouchzipappcreate_archivestr
assertTrueis_filer   r   targets      r   test_create_archiveZipAppTest.test_create_archive   sc    x'	-	&&(|+c&k3v;7()r   c                     U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " X5        U R                  UR                  5       5        g r   )r   r!   r"   r#   r$   r&   r'   r(   s      r    test_create_archive_with_pathlib+ZipAppTest.test_create_archive_with_pathlib"   sY    x'	-	&&(|+f-()r   c                 N   U R                   S-  nUR                  5         US-  R                  5         US-  R                  5         US-  R                  5         US-  S-  R                  5         [        R                  " 5       n[
        R                  " [        U5      U5        UR                  S5        [        R                  " US5       nU R                  SUR                  5       5        U R                  S	UR                  5       5        S S S 5        g ! , (       d  f       g = f)
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_subdirs+ZipAppTest.test_create_archive_with_subdirs+   s    x'	-	&&(	% 	% 	%-	'..0c&k62A__VS)QMM&!**,/MM&!**,/ *))s   AD
D$c                 >   U R                   S-  nUR                  5         US-  R                  5         US-  R                  5         US-  S-  R                  5         US-  S-  R                  5         US-  R                  5         [        R                  " 5       n[
        R                  " [        U5      U5        UR                  S5        [        R                  " US5       nU R                  UR                  5       / S	Q5        S S S 5        g ! , (       d  f       g = f)
Nr   zed.pybinquxbazr   r   r2   )r   zbin/zbin/bazzbin/quxr?   )r   r!   r"   r3   r4   r#   r$   r%   r5   r6   r7   assertEqualr9   )r   r   r)   zfs       r   test_create_sorted_archive%ZipAppTest.test_create_sorted_archive:   s    x'	(	!!#	% 	%%	&&(	%%	&&(	-	&&(c&k62A__VS)RR[[]GI *))s   "#D
Dc                 $   S nU R                   S-  nUR                  5         US-  R                  5         US-  R                  5         US-  R                  5         U R                   S-  n[        R                  " X#US9  [
        R                  " US5       nU R                  SUR                  5       5        U R                  SUR                  5       5        U R                  SUR                  5       5        S S S 5        g ! , (       d  f       g = f)	Nc                      U R                   S:g  $ )Nz.pyc)suffixpaths    r   skip_pyc_filesBZipAppTest.test_create_archive_with_filter.<locals>.skip_pyc_filesM   s    ;;&((r   r   r   test.pyztest.pycr   filterr2   )
r   r!   r"   r#   r$   r6   r7   r8   r9   assertNotIn)r   rL   r   r)   r;   s        r   test_create_archive_with_filter*ZipAppTest.test_create_archive_with_filterJ   s    	)x'	-	&&(	)	""$	*	##%|+f^D__VS)QMM-6MM)QZZ\2Z6 *))s   A!D
Dc                    U R                   nUS-  R                  5         US-  R                  5         U R                   S-  n[        R                  " X5        [        R
                  " US5       nU R                  [        UR                  5       5      S5        U R                  SUR                  5       5        U R                  SUR                  5       5        S S S 5        g ! , (       d  f       g = f)Nr   rN   
target.pyzr2      )
r   r"   r#   r$   r6   r7   rC   lenr9   r8   r:   s       r   "test_create_archive_self_insertion-ZipAppTest.test_create_archive_self_insertion\   s     	-	&&(	)	""$|+f-__VS)QS.2MM-6MM)QZZ\2 *))s   /A*C""
C0c                 
   U R                   nUS-  R                  5         US-  nUR                  5         U R                  [        R                  5         [        R
                  " X5        S S S 5        g ! , (       d  f       g = f)Nr   rU   )r   r"   assertRaisesr#   ZipAppErrorr$   r(   s      r   "test_target_overwrites_source_file-ZipAppTest.test_target_overwrites_source_filej   s]    	-	&&(,&v112!!&1 322s   A44
Bc                 b   S nU R                   S-  nUR                  5         US-  R                  5         US-  R                  5         US-  R                  5         US-  S-  R                  5         U R                   S-  n[        R                  " X#US9  [
        R                  " US	5       nU R                  [        UR                  5       5      S
5        U R                  SUR                  5       5        U R                  SUR                  5       5        S S S 5        g ! , (       d  f       g = f)Nc                 &    U R                   S   S:g  $ )Nr   dummy)partsrJ   s    r   skip_dummy_dirIZipAppTest.test_create_archive_filter_exclude_dir.<locals>.skip_dummy_dirx   s    ::a=G++r   r   r   rN   ra   ztest2.pyr   rO   r2   rV   )r   r!   r"   r#   r$   r6   r7   rC   rW   r9   r8   )r   rc   r   r)   r;   s        r   &test_create_archive_filter_exclude_dir1ZipAppTest.test_create_archive_filter_exclude_dirt   s    	,x'	-	&&(	)	""$	'	  "	'	J	&--/|+f^D__VS)QS.2MM-6MM)QZZ\2 *))s   -A*D  
D.c                    U R                   S-  nUR                  5         US-  R                  5         [        R                  " [        U5      5        U R                   S-  nU R                  UR                  5       5        g r   r    )r   r   expected_targets      r   "test_create_archive_default_target-ZipAppTest.test_create_archive_default_target   s_    x'	-	&&(c&k*++4//12r   c                    U R                   S-  nUR                  5         US-  R                  5         US-  R                  5         U R                   S-  n[        R                  " XSS9  [
        R                  " US5       nS H<  nU R                  UR                  U5      R                  [
        R                  5        M>     S S S 5        g ! , (       d  f       g = f)	Nr   r   rN   r   T)
compressedr2   )r   rN   )r   r!   r"   r#   r$   r6   r7   rC   getinfocompress_typeZIP_DEFLATED)r   r   r)   r;   r   s        r   $test_create_archive_with_compression/ZipAppTest.test_create_archive_with_compression   s     x'	-	&&(	)	""$|+f>__VS)Q2  4!>!>!(!5!57 3 *))s   AC
Cc                 J   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  nU R                  [        R
                  5         [        R                  " [        U5      [        U5      5        S S S 5        g ! , (       d  f       g = f)Nr   foo.pyr   r   r!   r"   r[   r#   r\   r$   r%   r(   s      r   test_no_mainZipAppTest.test_no_main   sp    x'	(	!!#|+v112!!#f+s6{; 322s   !*B
B"c                 H   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  nU R                  [        R
                  5         [        R                  " [        U5      [        U5      SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   r   
pkg.mod:fnmainrt   r(   s      r   test_main_and_main_py ZipAppTest.test_main_and_main_py   sr    x'	-	&&(|+v112!!#f+s6{N 322s   !)B
B!c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  [        R                  " [        U5      S5       nU R                  SUR                  5       5        U R                  SUR                  S5      5        S S S 5        g ! , (       d  f       g = f)	Nr   rs   r   rx   ry   r2   r   s   pkg.mod.fn())r   r!   r"   r#   r$   r%   r6   r7   r8   r9   readr:   s       r   test_main_writtenZipAppTest.test_main_written   s    x'	(	!!#|+c&k3v;\J__S[#.!MM-6MM/166-+@A /..s   
AC
C#c                    U R                   S-  nUR                  5         US-  R                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  [        R                  " [        U5      S5       nU R                  SUR                  5       R                  S	5      5        S S S 5        g ! , (       d  f       g = f)
Nr   rs   zbar.pyr   rx   ry   r2      r   )r   r!   r"   r#   r$   r%   r6   r7   rC   r9   countr:   s       r   test_main_only_written_once&ZipAppTest.test_main_only_written_once   s     x'
 
(	!!#	(	!!#|+c&k3v;\J__S[#.!Q

 2 2= AB /..s   0C
C$c           	         U R                   S-  nUR                  5         U R                   S-  n/ SQnU Hk  nU R                  US9   U R                  [        R
                  5         [        R                  " [        U5      [        U5      US9  S S S 5        S S S 5        Mm     g ! , (       d  f       N= f! , (       d  f       M  = f)Nr   r   )
 r0   zfoo:z:barz12:barza.b.c.:dz.a:bza:b.za:.bza:silly namery   )r   r!   subTestr[   r#   r\   r$   r%   )r   r   r)   problemsrz   s        r   test_main_validationZipAppTest.test_main_validation   s    x'|+
 D4(&&v'9'9:))#f+s6{N ; )( :: )(s$    B6')B%B6%
B3/B66
C	c                 p   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      5        UR                  S5       nU R                  UR                  S5      S5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   rbrV      #!)	r   r!   r"   r#   r$   r%   openassertNotEqualr~   r   r   r)   fs       r   test_default_no_shebang"ZipAppTest.test_default_no_shebang   s    x'	-	&&(|+c&k3v;7[[!q	51 s   <"B''
B5c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  UR                  S5       nU R                  UR                  S5      S5        U R                  S	UR                  5       5        S S S 5        g ! , (       d  f       g = f)
Nr   r   r   pythoninterpreterr   rV   r   s   python
)
r   r!   r"   r#   r$   r%   r   rC   r~   readliner   s       r   test_custom_interpreter"ZipAppTest.test_custom_interpreter   s     x'	-	&&(|+c&k3v;HM[[!QVVAY.[!**,7 s   ;AC
Cc                 ,   U R                   S-  nUR                  5         US-  R                  5         [        R                  " 5       n[
        R                  " [        U5      USS9  U R                  UR                  5       R                  S5      5        g )Nr   r   r   r   s	   #!python
)r   r!   r"   r3   r4   r#   r$   r%   r&   getvalue
startswithr(   s      r   test_pack_to_fileobjZipAppTest.test_pack_to_fileobj   si    x'	-	&&(c&k6xH)44]CDr   c                 4   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  U R                  [        R                  " [        U5      5      S5        g Nr   r   r   r   r   r   r!   r"   r#   r$   r%   rC   get_interpreterr(   s      r   test_read_shebangZipAppTest.test_read_shebang   sq    x'	-	&&(|+c&k3v;HM//F<hGr   c                 6   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      5        U R                  [        R                  " [        U5      5      S 5        g r   r   r(   s      r   test_read_missing_shebang$ZipAppTest.test_read_missing_shebang  so    x'	-	&&(|+c&k3v;7//F<dCr   c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  U R                   S-  n[        R                  " [        U5      [        U5      SS9  U R                  [        R                  " [        U5      5      S5        g )Nr   r   r   r   r   changed.pyz	python2.7r   r   r   r)   
new_targets       r   test_modify_shebangZipAppTest.test_modify_shebang  s    x'	-	&&(|+c&k3v;HM[[=0
c&k3z?T//J@+Nr   c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  [        R                  " 5       n[        R                  " [        U5      USS9  U R                  UR                  5       R                  S5      5        g )Nr   r   r   r   r   r      #!python2.7
)r   r!   r"   r#   r$   r%   r3   r4   r&   r   r   r   s       r   test_write_shebang_to_fileobj(ZipAppTest.test_write_shebang_to_fileobj  s     x'	-	&&(|+c&k3v;HMZZ\
c&k:;O
++-889IJKr   c                    U R                   S-  nUR                  5         US-  R                  5         [        R                  " [        U5      5      n[        R                  " [        U R                   S-  5      5      n[        R                  " [        U R                   S-  5      5      n[        R                  " XSS9  [        R                  " X#SS9  U R                  [        R                  " U5      S5        g )Nr   r   ztarget1.pyzztarget2.pyzr   r   r   )
r   r!   r"   r   FakePathr%   r#   r$   rC   r   )r   r   target1target2s       r   test_read_from_pathlike_obj&ZipAppTest.test_read_from_pathlike_obj$  s     x'	-	&&(##CK0$$S})D%EF$$S})D%EFf8DgKH//8+Fr   c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " 5       n[
        R                  " [        U5      USS9  [        R                  " 5       nUR                  S5        [
        R                  " X4SS9  U R                  UR                  5       R                  S5      5        g )	Nr   r   r   r   r   r   r   r   )r   r!   r"   r3   r4   r#   r$   r%   r5   r&   r   r   )r   r   r)   temp_archiver   s        r   test_read_from_fileobj!ZipAppTest.test_read_from_fileobj1  s    x'	-	&&(|+zz|c&k<XNZZ\
!lKP
++-889IJKr   c                    U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  U R                   S-  n[        R                  " [        U5      [        U5      S S9  U R                  [        R                  " [        U5      5      S 5        g )Nr   r   r   r   r   r   r   r   s       r   test_remove_shebangZipAppTest.test_remove_shebang>  s    x'	-	&&(|+c&k3v;HM[[=0
c&k3z?M//J@$Gr   c                    U R                   S-  nUR                  5         US-  R                  5         [        R                  " 5       n[
        R                  " [        U5      USS9  [        R                  " 5       nUR                  S5        [
        R                  " X#S S9  UR                  S5        [        R                  " US5       nU R                  [        UR                  5       5      S15        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r   r2   )r   r!   r"   r3   r4   r#   r$   r%   r5   r6   r7   rC   setr9   )r   r   r)   r   r;   s        r   test_content_of_copied_archive)ZipAppTest.test_content_of_copied_archiveI  s    x'	-	&&(c&k6xHZZ\
AfdC__Z-S.@ .--s   
+C>>
Dwin32z*Windows does not support an executable bitc                 J   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      SS9  U R                  UR                  5       R                  [        R                  -  5        g r   )
r   r!   r"   r#   r$   r%   r&   statst_modeS_IEXECr(   s      r   test_shebang_is_executable%ZipAppTest.test_shebang_is_executableX  su    
 x'	-	&&(|+c&k3v;HM--<=r   c                 J   U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " [        U5      [        U5      S S9  U R                  UR                  5       R                  [        R                  -  5        g )Nr   r   r   r   )
r   r!   r"   r#   r$   r%   assertFalser   r   r   r(   s      r   !test_no_shebang_is_not_executable,ZipAppTest.test_no_shebang_is_not_executabled  sw     x'	-	&&(|+c&k3v;DI..=>r   r   N)*__name__
__module____qualname____firstlineno____doc__r   r*   r-   r<   rE   rR   rX   r]   re   ri   r   rp   ru   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipIfsysplatformr   skip_unless_working_chmodr   r   __static_attributes__ r   r   r   r      s   +0
**0I 7$323(3 _7 7<O	BC"O2
8EHD	O
LGL	HA __S\\W,AC((> )C> __S\\W,AC?C?r   r   c                   p    \ rS rSrSrS rS rS rS rS r	S r
\" S	\R                  S
9S 5       rS rSrg)ZipAppCmdlineTestip  z$Test zipapp module command line API.c                     [         R                  " 5       nU R                  UR                  5        [        R
                  " UR                  5      U l        g r
   r   r   s     r   r   ZipAppCmdlineTest.setUpt  r   r   c                     U R                   S-  nUR                  5         US-  R                  5         U R                   S-  n[        R                  " X5        U$ r   )r   r!   r"   r#   r$   r(   s      r   make_archiveZipAppCmdlineTest.make_archivey  sK    x'	-	&&(|+f-r   c                    U R                   S-  nUR                  5         US-  R                  5         [        U5      /n[        R
                  " U5        UR                  S5      nU R                  UR                  5       5        g )Nr   r   z.pyz)	r   r!   r"   r%   r#   rz   with_suffixr&   r'   )r   r   argsr)   s       r   test_cmdline_create%ZipAppCmdlineTest.test_cmdline_create  sd    x'	-	&&(F}D##F+()r   c                     U R                  5       nU R                  S-  n[        U5      S[        U5      /n[        R                  " U5        U R                  UR                  5       5        g NrU   -o)r   r   r%   r#   rz   r&   r'   )r   originalr)   r   s       r   test_cmdline_copy#ZipAppCmdlineTest.test_cmdline_copy  sQ    $$&|+HtS[1D()r   c                 D   U R                  5       nU R                  S-  n[        U5      S[        U5      /nU R                  [        5       n[
        R                  " U5        S S S 5        U R                  WR                  R                  5        g ! , (       d  f       N4= fr   
r   r   r%   r[   
SystemExitr#   rz   r&   	exceptioncoder   r   r)   r   cms        r   test_cmdline_copy_inplace+ZipAppCmdlineTest.test_cmdline_copy_inplace  st    $$&|+HtS]3z*bKK + 	))* +*s   B
Bc                 H   U R                  5       nU R                  S-  n[        U5      S[        U5      SS/nU R                  [        5       n[
        R                  " U5        S S S 5        U R                  WR                  R                  5        g ! , (       d  f       N4= f)NrU   r   z-mzfoo:barr   r   s        r   test_cmdline_copy_change_main/ZipAppCmdlineTest.test_cmdline_copy_change_main  sx    $$&|+HtS[$	Bz*bKK + 	))* +*s   B
B!z
sys.stdout)new_callablec                 T   U R                  5       n[        U5      S/nU R                  [        5       n[        R
                  " U5        S S S 5        U R                  WR                  R                  S5        U R                  UR                  5       S5        g ! , (       d  f       NU= f)N--infor   zInterpreter: <none>
)
r   r%   r[   r   r#   rz   rC   r   r   r   )r   mock_stdoutr)   r   r   s        r   test_info_command#ZipAppCmdlineTest.test_info_command  s     ""$FX&z*bKK + 	**A.--/1HI	 +*s   B
B'c                    U R                   S-  n[        U5      S/nU R                  [        5       n[        R
                  " U5        S S S 5        U R                  WR                  R                  5        g ! , (       d  f       N4= f)Nz	dummy.pyzr   )	r   r%   r[   r   r#   rz   r&   r   r   )r   r)   r   r   s       r   test_info_error!ZipAppCmdlineTest.test_info_error  s`    {*FX&z*bKK + 	))* +*s   A77
Br   N)r   r   r   r   r   r   r   r   r   r   r   r   r3   StringIOr   r  r   r   r   r   r   r   p  sI    .0
**++ <bkk2J 3J+r   r   __main__)r   r3   r   r   r   r   r   r#   r6   test.supportr   r   unittest.mockr   TestCaser   r   r   rz   r   r   r   <module>r
     sk    ) 	   
     & " ]?"" ]?@J+)) J+Z zMMO r   