B
    18™\Ý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   úe/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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.bz2Ú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.xzÚ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   r6   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.   Úfile1ÚxxxÚfile2ÚsubZfile3Zsub2)r/   r   r   r2   ÚmkdirÚ
write_file)r!   r#   r.   r   r   r   r   …   s    
z!ArchiveUtilTestCase._create_filesrA   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.gzrA   z-cfzarchive2.tarr%   z-fz-9)r   z.tarT)r   Údry_run)r   r/   r   r   r2   ÚgetcwdÚchdirr   r3   r4   r
   r5   r6   r7   )	r!   r#   r:   r;   Ú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   rN   )r   r   r   r2   r/   rO   rP   r   ÚwarningsÚsimplefilterr   r3   r4   r5   ÚlenÚremoveÚassertFalse)r!   r#   r;   rQ   Ú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   r2   r/   r   r   r3   r4   ÚzipfileÚZipFiler5   ÚsortedÚnamelistÚ_zip_created_files)r!   r#   r;   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)Úgetr[   Ú
ZIP_STOREDÚappend)ÚaÚkw)ÚcalledÚzipfile_classr   r   Úfake_zipfile   s    zCArchiveUtilTestCase.test_make_zipfile_no_zlib.<locals>.fake_zipfiler\   r   r.   z.ziprY   rc   )r   r   r[   r\   r   r   r   r2   r/   r   r   r5   re   r3   r4   r]   r^   r_   )r!   rk   r#   r;   r<   r`   r   )ri   rj   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ÚgztarrI   r   ÚbztarÚxztarÚztarrA   )r5   r   Ú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   rI   )r/   r   r   r2   ÚassertRaisesÚ
ValueErrorr   )r!   r#   r;   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)Úargsrh   r   r   r   Ú_breaks!  s    z:ArchiveUtilTestCase.test_make_archive_cwd.<locals>._breakszxxx filerI   )Úroot_dir)r   rO   r   r   r/   r5   )r!   Zcurrent_dirrx   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   rA   r.   zarchive.tar)r   r   r   r2   r/   r   r3   r4   r5   Úbasenamer6   r7   )r!   Úbase_dirr;   Ú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   rm   r.   zarchive.tar.gz)r   r   r   r2   r/   r   r3   r4   r5   r{   r6   r7   )r!   r|   r;   r}   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   rn   r.   zarchive.tar.bz2)r   r   r   r2   r/   r   r3   r4   r5   r{   r6   r7   )r!   r|   r;   r}   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   ro   r.   zarchive.tar.xz)r   r   r   r2   r/   r   r3   r4   r5   r{   r6   r7   )r!   r|   r;   r}   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ÚgrouprA   Z	kjhkjhkjgZoihohoh)ÚUID_GID_SUPPORTÚgrpÚgetgrgidÚpwdÚgetpwuidr   r/   r   r   r2   r   r3   r4   )r!   r„   rƒ   r|   ry   r;   r}   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   rƒ   r„   )r   r   r   r2   r/   rO   rP   r†   r‡   rˆ   r‰   r   r3   r4   r=   r>   Ú
getmembersr5   ÚuidÚgidr@   )	r!   r#   r;   rQ   r„   rƒ   Úarchive_namer   Úmemberr   r   r   Útest_tarfile_root_ownerk  s"    

z+ArchiveUtilTestCase.test_tarfile_root_ownerN)r   )$Ú__name__Ú
__module__Ú__qualname__r0   r1   ÚZLIB_SUPPORTr$   r&   Úbz2r(   Úlzmar*   r   r+   r,   r    r6   r_   r7   r   r	   rR   rZ   ÚZIP_SUPPORTra   rl   rr   ru   rz   r~   r   r€   r   rŠ   r…   r   r   r   r   r   r   <   sB   


	
7
 			
r   c               C   s
   t  t¡S )N)r0   Ú	makeSuiter   r   r   r   r   Ú
test_suite†  s    r™   Ú__main__)+Ú__doc__r0   r   r   r=   Úos.pathr   rT   Ú	distutilsr   Zdistutils.archive_utilr   r   r   r   r   Údistutils.spawnr	   r
   Údistutils.testsr   Ztest.supportr   r   r   r   r†   rˆ   r…   ÚImportErrorr[   r—   rb   r”   r•   r–   r   ÚTempdirManagerÚLoggingSilencerÚTestCaser   r™   r‘   r   r   r   r   Ú<module>   sX   



  J
