o
    JAf'8  ã                   @   s´  d 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Zddlm	Z	 ddl
mZmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ zddlZddlZdZW n eyi   dZY nw zddl Z dZ!W n ey   edƒZ!Y nw zddl"Z"dZ#W n ey“   dZ#Y nw zddl$Z$W n ey¥   dZ$Y nw zddl%Z%W n ey·   dZ%Y nw dd„ Z&G dd„ dej'ej(ej)ƒZ*dd„ Z+e,dkrØee+ƒ ƒ dS dS )z!Tests for distutils.archive_util.é    N)Ú
splitdrive)Úarchive_util)Úcheck_archive_formatsÚmake_tarballÚmake_zipfileÚmake_archiveÚARCHIVE_FORMATS)Úfind_executableÚspawn)Úsupport)Úrun_unittestÚpatch)Ú
change_cwd)Úcheck_warningsTFÚzipc                 C   s6   t jjrdS z
|  t ¡ ¡ W dS  ty   Y dS w )zF
    Return True if the filename can be saved in the file system.
    TF)ÚosÚpathÚsupports_unicode_filenamesÚencodeÚsysÚgetfilesystemencodingÚUnicodeEncodeError)Úfilename© r   ú8/usr/lib/python3.10/distutils/tests/test_archive_util.pyÚcan_fs_encode1   s   þÿr   c                   @   s¨  e Zd Ze ed¡dBdd„ƒZe ed¡dd„ ƒZe ed¡dd	„ ƒZ	e e
d
¡dd„ ƒZe edƒd¡dd„ ƒZe edƒd¡dd„ ƒZdd„ Zdd„ Zg d¢Zdd„ eD ƒZdd„ Ze edƒogedƒoged¡d d!„ ƒZe ed"ƒd#¡d$d%„ ƒZe eoed&¡d'd(„ ƒZe ed)¡d*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Ze ed¡d4d5„ ƒZe ed¡d6d7„ ƒZe e
d8¡d9d:„ ƒZ d;d<„ Z!e ed=¡e e"d>¡d?d@„ ƒƒZ#dAS )CÚArchiveUtilTestCasezNeed zlib support to runÚarchivec                 C   s,   |   ¡ }|  ||d¡ | j||dd d d S )Nú.tar.gzú.tar©Úcompress©Ú_create_filesÚ_make_tarball)ÚselfÚnameÚtmpdirr   r   r   Útest_make_tarballB   s   z%ArchiveUtilTestCase.test_make_tarballc                 C   ó   |   ¡ }| j|dddd d S )Nr   r   Úgzipr    r"   ©r%   r'   r   r   r   Útest_make_tarball_gzipJ   ó   z*ArchiveUtilTestCase.test_make_tarball_gzipzNeed bz2 support to runc                 C   r)   )Nr   z.tar.bz2Úbzip2r    r"   r+   r   r   r   Útest_make_tarball_bzip2O   r-   z+ArchiveUtilTestCase.test_make_tarball_bzip2zNeed lzma support to runc                 C   r)   )Nr   z.tar.xzÚxzr    r"   r+   r   r   r   Útest_make_tarball_xzT   r-   z(ArchiveUtilTestCase.test_make_tarball_xzõ   Ã¥rchivz'File system cannot handle this filenamec                 C   ó   |   d¡ dS )zV
        Mirror test_make_tarball, except filename contains latin characters.
        r2   N©r(   ©r%   r   r   r   Útest_make_tarball_latin1Y   s   z,ArchiveUtilTestCase.test_make_tarball_latin1õ   ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–c                 C   r3   )z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        r7   Nr4   r5   r   r   r   Útest_make_tarball_extendeda   s   z.ArchiveUtilTestCase.test_make_tarball_extendedc                 K   sª   |   ¡ }t t|ƒd t|ƒd kd¡ tj ||¡}t|ƒ tt|ƒd dfi |¤Ž W d   ƒ n1 s7w   Y  || }|  	tj 
|¡¡ |  |  |¡| j¡ d S )Nr   z)source and target should be on same driveé   Údist)ÚmkdtempÚunittestÚ
skipUnlessr   r   r   Újoinr   r   Ú
assertTrueÚexistsÚassertEqualÚ_tarinfoÚ_created_files)r%   r'   Útarget_nameÚsuffixÚkwargsÚtmpdir2Ú	base_nameÚtarballr   r   r   r$   j   s   ÿ
ÿz!ArchiveUtilTestCase._make_tarballc                 C   s4   t  |¡}z| ¡ }| ¡  |W | ¡  S | ¡  w ©N)ÚtarfileÚopenZgetnamesÚsortÚclose)r%   r   ÚtarÚnamesr   r   r   rB   z   s   
zArchiveUtilTestCase._tarinfo)zdist/z
dist/file1z
dist/file2z	dist/sub/zdist/sub/file3z
dist/sub2/c                 C   s   g | ]}|  d ¡‘qS )ú/)Úrstrip)Ú.0Úpr   r   r   Ú
<listcomp>…   s    zArchiveUtilTestCase.<listcomp>c                 C   s~   |   ¡ }tj |d¡}t |¡ |  |dgd¡ |  |dgd¡ t tj |d¡¡ |  |ddgd¡ t tj |d¡¡ |S )Nr:   Zfile1ÚxxxZfile2ÚsubZfile3Zsub2)r;   r   r   r>   ÚmkdirZ
write_file)r%   r'   r:   r   r   r   r#   ‡   s   
z!ArchiveUtilTestCase._create_filesrO   r*   z*Need the tar, gzip and zlib command to runc           	   	   C   sÔ  |   ¡ }|  ¡ }tj |d¡}t ¡ }t |¡ zt|dƒ W t |¡ nt |¡ w |d }|  tj 	|¡¡ tj |d¡}g d¢}g d¢}t ¡ }t |¡ zt
|ƒ t
|ƒ W t |¡ nt |¡ w |  tj 	|¡¡ |  |  |¡| j¡ |  |  |¡| j¡ tj |d¡}t ¡ }t |¡ zt|dd d W t |¡ nt |¡ w |d }|  tj 	|¡¡ tj |d¡}t ¡ }t |¡ zt|dd d	d
 W t |¡ nt |¡ w |d }|  tj 	|¡¡ d S )Nr   r:   r   zarchive2.tar.gz)rO   z-cfúarchive2.tarr:   )r*   z-fz-9rY   r    r   T©r!   Údry_run)r#   r;   r   r   r>   ÚgetcwdÚchdirr   r?   r@   r
   rA   rB   rC   )	r%   r'   rG   rH   Úold_dirrI   Ztarball2Ztar_cmdZgzip_cmdr   r   r   Útest_tarfile_vs_tar“   sL   




z'ArchiveUtilTestCase.test_tarfile_vs_tarr!   z The compress program is requiredc              	   C   sR  |   ¡ }tj |  ¡ d¡}t ¡ }t |¡ z&tƒ }t 	d¡ t
|ddd W d   ƒ n1 s1w   Y  W t |¡ nt |¡ w |d }|  tj |¡¡ |  t|jƒd¡ t |¡ t ¡ }t |¡ z'tƒ }t 	d¡ t
|dddd	 W d   ƒ n1 sƒw   Y  W t |¡ nt |¡ w |  tj |¡¡ |  t|jƒd¡ d S )
Nr   Úalwaysr:   r!   r    z.tar.Zr9   TrZ   )r#   r   r   r>   r;   r\   r]   r   ÚwarningsÚsimplefilterr   r?   r@   rA   ÚlenÚremoveZassertFalse)r%   r'   rH   r^   ÚwrI   r   r   r   Útest_compress_deprecatedÌ   s8   

þ€


ÿþ€z,ArchiveUtilTestCase.test_compress_deprecatedz Need zip and zlib support to runc                 C   s¬   |   ¡ }tj |  ¡ d¡}t|ƒ t|dƒ W d   ƒ n1 s!w   Y  |d }|  tj |¡¡ t	 
|¡}|  t| ¡ ƒ| j¡ W d   ƒ d S 1 sOw   Y  d S )Nr   r:   ú.zip)r#   r   r   r>   r;   r   r   r?   r@   ÚzipfileÚZipFilerA   ÚsortedÚnamelistÚ_zip_created_files)r%   r'   rH   rI   Úzfr   r   r   Útest_make_zipfileí   s   
ÿ"ÿz%ArchiveUtilTestCase.test_make_zipfilezNeed zip support to runc                    s   t | tjdd ƒ g ‰ tj‰‡ ‡fdd„}t | tjd|ƒ |  ¡ }tj |  ¡ d¡}t	|ƒ t
|dƒ W d   ƒ n1 s=w   Y  |d }|  ˆ |dfd	tjifg¡ |  tj |¡¡ t |¡}|  t| ¡ ƒ| j¡ W d   ƒ d S 1 syw   Y  d S )
NÚzlibc                     s.   |  dd ¡tjkrˆ  | |f¡ ˆ| i |¤ŽS )NÚcompression)Úgetrh   Ú
ZIP_STOREDÚappend)ÚaÚkw©ZcalledZzipfile_classr   r   Úfake_zipfile  s   zCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfileri   r   r:   rg   re   rp   )r   r   rh   ri   r#   r   r   r>   r;   r   r   rA   rr   r?   r@   rj   rk   rl   )r%   rw   r'   rH   rI   rm   r   rv   r   Útest_make_zipfile_no_zlibü   s$   
ÿÿ"ÿz-ArchiveUtilTestCase.test_make_zipfile_no_zlibc                 C   s*   |   tg d¢ƒd¡ |  tg d¢ƒ¡ d S )N)ÚgztarrV   r   rV   )ry   ÚbztarÚxztarZztarrO   r   )rA   r   ZassertIsNoner5   r   r   r   Útest_check_archive_formats  s   ÿz.ArchiveUtilTestCase.test_check_archive_formatsc                 C   s*   |   ¡ }tj |d¡}|  tt|d¡ d S )Nr   rV   )r;   r   r   r>   ZassertRaisesÚ
ValueErrorr   )r%   r'   rH   r   r   r   Útest_make_archive  s   z%ArchiveUtilTestCase.test_make_archivec                 C   sd   t  ¡ }dd„ }|g dftd< zztdd|  ¡ d W n   Y |  t  ¡ |¡ W td= d S td= w )Nc                  _   s   t ƒ ‚rJ   )ÚRuntimeError)Úargsru   r   r   r   Ú_breaks#  s   z:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breakszxxx filerV   )Úroot_dir)r   r\   r   r   r;   rA   )r%   Zcurrent_dirr   r   r   r   Útest_make_archive_cwd!  s   z)ArchiveUtilTestCase.test_make_archive_cwdc                 C   óf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rO   r:   zarchive.tar©r#   r   r   r>   r;   r   r?   r@   rA   ÚbasenamerB   rC   ©r%   Úbase_dirrH   Úresr   r   r   Útest_make_archive_tar/  s   z)ArchiveUtilTestCase.test_make_archive_tarc                 C   r„   )Nr   ry   r:   zarchive.tar.gzr…   r‡   r   r   r   Útest_make_archive_gztar7  ó   z+ArchiveUtilTestCase.test_make_archive_gztarc                 C   r„   )Nr   rz   r:   zarchive.tar.bz2r…   r‡   r   r   r   Útest_make_archive_bztar@  rŒ   z+ArchiveUtilTestCase.test_make_archive_bztarzNeed xz support to runc                 C   r„   )Nr   r{   r:   zarchive.tar.xzr…   r‡   r   r   r   Útest_make_archive_xztarI  rŒ   z+ArchiveUtilTestCase.test_make_archive_xztarc                 C   sâ   t rt d¡d }t d¡d }nd }}|  ¡ }|  ¡ }tj 	|  ¡ d¡}t
|d||||d}|  tj |¡¡ t
|d||ƒ}|  tj |¡¡ t
|d||||d}|  tj |¡¡ t
|d||ddd}|  tj |¡¡ d S )	Nr   Úrootr   r   )ÚownerÚgrouprO   Z	kjhkjhkjgZoihohoh)ÚUID_GID_SUPPORTÚgrpÚgetgrgidÚpwdÚgetpwuidr#   r;   r   r   r>   r   r?   r@   )r%   r‘   r   rˆ   r‚   rH   r‰   r   r   r   Útest_make_archive_owner_groupR  s*   ÿ
ÿ
ÿz1ArchiveUtilTestCase.test_make_archive_owner_groupzRequires zlibzRequires grp and pwd supportc           	   	   C   sÖ   |   ¡ }tj |  ¡ d¡}t ¡ }t |¡ t d¡d }t	 
d¡d }zt|dd ||d}W t |¡ nt |¡ w |  tj |¡¡ t |¡}z| ¡ D ]}|  |jd¡ |  |jd¡ qNW | ¡  d S | ¡  w )Nr   r   r:   )r!   r   r‘   )r#   r   r   r>   r;   r\   r]   r“   r”   r•   r–   r   r?   r@   rK   rL   Z
getmembersrA   ÚuidÚgidrN   )	r%   r'   rH   r^   r‘   r   Úarchive_namer   Úmemberr   r   r   Útest_tarfile_root_ownerm  s&   
ÿ
þz+ArchiveUtilTestCase.test_tarfile_root_ownerN)r   )$Ú__name__Ú
__module__Ú__qualname__r<   r=   ÚZLIB_SUPPORTr(   r,   Úbz2r/   Úlzmar1   r   r6   r8   r$   rB   rl   rC   r#   r	   r_   rf   ÚZIP_SUPPORTrn   rx   r|   r~   rƒ   rŠ   r‹   r   rŽ   r—   r’   rœ   r   r   r   r   r   >   sf    







ÿ

ÿ
	þ

6ÿ

ÿ










r   c                   C   s
   t  t¡S rJ   )r<   Z	makeSuiter   r   r   r   r   Ú
test_suiteˆ  s   
r¤   Ú__main__)-Ú__doc__r<   r   r   rK   Zos.pathr   ra   Z	distutilsr   Zdistutils.archive_utilr   r   r   r   r   Zdistutils.spawnr	   r
   Zdistutils.testsr   Ztest.supportr   r   Ztest.support.os_helperr   Ztest.support.warnings_helperr   r“   r•   r’   ÚImportErrorrh   r£   ro   r    r¡   r¢   r   ZTempdirManagerZLoggingSilencerZTestCaser   r¤   r   r   r   r   r   Ú<module>   sl   ÿÿÿÿÿþ  Lÿ