B
    Ûö›\Ý7  ã               @   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mZmZ yddlZddlZd	ZW n ek
rÄ   d
ZY nX yddlZd	ZW n ek
rò   edƒZY nX yddl Z d	Z!W n ek
r   d
Z!Y nX yddl"Z"W n ek
rF   dZ"Y nX yddl#Z#W n ek
rn   dZ#Y nX 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 )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)Úcheck_warningsÚrun_unittestÚpatchÚ
change_cwdTFÚzipc             C   s8   t jjrdS y|  t ¡ ¡ W n tk
r2   dS X dS )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   ú2lib/python3.7/distutils/tests/test_archive_util.pyÚcan_fs_encode/   s    r   c               @   s²  e Zd Ze ed¡dGd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ddddddgZdd„ eD ƒZd d!„ Ze ed"ƒoÖed#ƒoÖed$¡d%d&„ ƒZe ed'ƒd(¡d)d*„ ƒZe eoed+¡d,d-„ ƒZe ed.¡d/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Ze ed¡d9d:„ ƒZe ed¡d;d<„ ƒZe e
d=¡d>d?„ ƒZ d@dA„ Z!e edB¡e e"dC¡dDdE„ ƒƒZ#dFS )HÚArchiveUtilTestCasezNeed zlib support to runÚarchivec             C   s,   |   ¡ }|  ||d¡ | j||dd d d S )Nz.tar.gzz.tar)Úcompress)Ú_create_filesÚ_make_tarball)ÚselfÚnameÚtmpdirr   r   r   Útest_make_tarball@   s    z%ArchiveUtilTestCase.test_make_tarballc             C   s   |   ¡ }| j|dddd d S )Nr   z.tar.gzÚgzip)r   )r   r    )r!   r#   r   r   r   Útest_make_tarball_gzipH   s    z*ArchiveUtilTestCase.test_make_tarball_gzipzNeed bz2 support to runc             C   s   |   ¡ }| j|dddd d S )Nr   z.tar.bz2Zbzip2)r   )r   r    )r!   r#   r   r   r   Útest_make_tarball_bzip2M   s    z+ArchiveUtilTestCase.test_make_tarball_bzip2zNeed lzma support to runc             C   s   |   ¡ }| j|dddd d S )Nr   z.tar.xzZxz)r   )r   r    )r!   r#   r   r   r   Útest_make_tarball_xzR   s    z(ArchiveUtilTestCase.test_make_tarball_xzu   Ã¥rchivz'File system cannot handle this filenamec             C   s   |   d¡ dS )zV
        Mirror test_make_tarball, except filename contains latin characters.
        u   Ã¥rchivN)r$   )r!   r   r   r   Útest_make_tarball_latin1W   s    z,ArchiveUtilTestCase.test_make_tarball_latin1u   ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–c             C   s   |   d¡ dS )z{
        Mirror test_make_tarball, except filename contains extended
        characters outside the latin charset.
        u   ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–N)r$   )r!   r   r   r   Útest_make_tarball_extended_   s    z.ArchiveUtilTestCase.test_make_tarball_extendedc          	   K   s’   |   ¡ }t t|ƒd t|ƒd kd¡ tj ||¡}t|ƒ tt|ƒd df|Ž W d Q R X || }|  	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#   Ztarget_nameÚsuffixÚkwargsÚtmpdir2Ú	base_nameÚtarballr   r   r   r    h   s    
 z!ArchiveUtilTestCase._make_tarballc             C   s.   t  |¡}z| ¡ }| ¡  |S | ¡  X d S )N)ÚtarfileÚopenZgetnamesÚsortÚclose)r!   r   ÚtarÚnamesr   r   r   r4   x   s    
zArchiveUtilTestCase._tarinfoz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   r0   ÚmkdirZ
write_file)r!   r#   r,   r   r   r   r   …   s    
z!ArchiveUtilTestCase._create_filesr?   r%   z*Need the tar, gzip and zlib command to runc       	   	   C   s´  |   ¡ }|  ¡ }tj |d¡}t ¡ }t |¡ zt|dƒ W d t |¡ X |d }|  tj 	|¡¡ tj |d¡}ddddg}dd	d
dg}t ¡ }t |¡ zt
|ƒ t
|ƒ W d t |¡ X |  tj 	|¡¡ |  |  |¡| j¡ |  |  |¡| j¡ tj |d¡}t ¡ }t |¡ zt|dd d W d t |¡ X |d }|  tj 	|¡¡ tj |d¡}t ¡ }t |¡ zt|dd dd W d t |¡ X |d }|  tj 	|¡¡ d S )Nr   r,   z.tar.gzzarchive2.tar.gzr?   z-cfzarchive2.tarr%   z-fz-9)r   z.tarT)r   Údry_run)r   r-   r   r   r0   ÚgetcwdÚchdirr   r1   r2   r
   r3   r4   r5   )	r!   r#   r8   r9   Úold_dirr:   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   s  |   ¡ }tj |  ¡ d¡}t ¡ }t |¡ z.tƒ }t 	d¡ t
|ddd W d Q R X W d t |¡ X |d }|  tj |¡¡ |  t|jƒd¡ t |¡ t ¡ }t |¡ z0tƒ  }t 	d¡ t
|dddd	 W d Q R X W d t |¡ X |  tj |¡¡ |  t|jƒd¡ d S )
Nr   Úalwaysr,   r   )r   z.tar.Zr+   T)r   rI   )r   r   r   r0   r-   rJ   rK   r   ÚwarningsÚsimplefilterr   r1   r2   r3   ÚlenÚremoveZassertFalse)r!   r#   r9   rL   Úwr:   r   r   r   Útest_compress_deprecatedÊ   s.    




z,ArchiveUtilTestCase.test_compress_deprecatedz Need zip and zlib support to runc          	   C   s‚   |   ¡ }tj |  ¡ d¡}t|ƒ t|dƒ W d Q R X |d }|  tj |¡¡ t	 
|¡}|  t| ¡ ƒ| j¡ W d Q R X d S )Nr   r,   z.zip)r   r   r   r0   r-   r   r   r1   r2   ÚzipfileÚZipFiler3   ÚsortedÚnamelistÚ_zip_created_files)r!   r#   r9   r:   Ú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 Q R X |d }|  ˆ |dfd	tjifg¡ |  tj |¡¡ t |¡}|  t| ¡ ƒ| j¡ W d Q R X d S )
NÚzlibc                 s*   |  dd ¡tjkr ˆ  | |f¡ ˆ| |ŽS )NÚcompression)ÚgetrU   Ú
ZIP_STOREDÚappend)ÚaÚkw)ÚcalledÚzipfile_classr   r   Úfake_zipfile   s    zCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfilerV   r   r,   z.ziprS   r]   )r   r   rU   rV   r   r   r   r0   r-   r   r   r3   r_   r1   r2   rW   rX   rY   )r!   re   r#   r9   r:   rZ   r   )rc   rd   r   Útest_make_zipfile_no_zlibú   s    
z-ArchiveUtilTestCase.test_make_zipfile_no_zlibc          	   C   s4   |   tdddgƒd¡ |  tddddddgƒ¡ d S )NÚgztarrF   r   ÚbztarÚxztarZztarr?   )r3   r   ZassertIsNone)r!   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   rF   )r-   r   r   r0   ZassertRaisesÚ
ValueErrorr   )r!   r#   r9   r   r   r   Útest_make_archive  s    z%ArchiveUtilTestCase.test_make_archivec             C   sd   t  ¡ }dd„ }|g dftd< z8ytdd|  ¡ d W n   Y nX |  t  ¡ |¡ W d td= X d S )Nc              _   s
   t ƒ ‚d S )N)ÚRuntimeError)Úargsrb   r   r   r   Ú_breaks!  s    z:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breakszxxx filerF   )Úroot_dir)r   rJ   r   r   r-   r3   )r!   Zcurrent_dirro   r   r   r   Útest_make_archive_cwd  s    z)ArchiveUtilTestCase.test_make_archive_cwdc             C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   r?   r,   zarchive.tar)r   r   r   r0   r-   r   r1   r2   r3   Úbasenamer4   r5   )r!   Úbase_dirr9   Úresr   r   r   Útest_make_archive_tar-  s    z)ArchiveUtilTestCase.test_make_archive_tarc             C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rg   r,   zarchive.tar.gz)r   r   r   r0   r-   r   r1   r2   r3   rr   r4   r5   )r!   rs   r9   rt   r   r   r   Útest_make_archive_gztar5  s    z+ArchiveUtilTestCase.test_make_archive_gztarc             C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   rh   r,   zarchive.tar.bz2)r   r   r   r0   r-   r   r1   r2   r3   rr   r4   r5   )r!   rs   r9   rt   r   r   r   Útest_make_archive_bztar>  s    z+ArchiveUtilTestCase.test_make_archive_bztarzNeed xz support to runc             C   sf   |   ¡ }tj |  ¡ d¡}t|d|dƒ}|  tj |¡¡ |  tj 	|¡d¡ |  |  
|¡| j¡ d S )Nr   ri   r,   zarchive.tar.xz)r   r   r   r0   r-   r   r1   r2   r3   rr   r4   r5   )r!   rs   r9   rt   r   r   r   Útest_make_archive_xztarG  s    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Úgroupr?   Z	kjhkjhkjgZoihohoh)ÚUID_GID_SUPPORTÚgrpÚgetgrgidÚpwdÚgetpwuidr   r-   r   r   r0   r   r1   r2   )r!   r{   rz   rs   rp   r9   rt   r   r   r   Útest_make_archive_owner_groupP  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 d t |¡ X |  tj |¡¡ t |¡}z2x,| ¡ D ] }|  |jd¡ |  |jd¡ q”W W d | ¡  X d S )Nr   r   r,   )r   rz   r{   )r   r   r   r0   r-   rJ   rK   r}   r~   r   r€   r   r1   r2   r;   r<   Z
getmembersr3   ZuidÚgidr>   )	r!   r#   r9   rL   r{   rz   Zarchive_namer   Úmemberr   r   r   Útest_tarfile_root_ownerk  s"    

z+ArchiveUtilTestCase.test_tarfile_root_ownerN)r   )$Ú__name__Ú
__module__Ú__qualname__r.   r/   ÚZLIB_SUPPORTr$   r&   Úbz2r'   Úlzmar(   r   r)   r*   r    r4   rY   r5   r   r	   rM   rT   ÚZIP_SUPPORTr[   rf   rj   rl   rq   ru   rv   rw   rx   r   r|   r„   r   r   r   r   r   <   sB   


	
7
 			
r   c               C   s
   t  t¡S )N)r.   Z	makeSuiter   r   r   r   r   Ú
test_suite†  s    rŒ   Ú__main__)+Ú__doc__r.   r   r   r;   Úos.pathr   rO   Z	distutilsr   Zdistutils.archive_utilr   r   r   r   r   Zdistutils.spawnr	   r
   Zdistutils.testsr   Ztest.supportr   r   r   r   r}   r   r|   ÚImportErrorrU   r‹   r\   rˆ   r‰   rŠ   r   ZTempdirManagerZLoggingSilencerZTestCaser   rŒ   r…   r   r   r   r   Ú<module>   sX   



  J
