B
    È S]—B  ã               @   sP  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mZ ddlm	Z	 ddl
mZmZmZ yddlZdZW n ek
r€   dZY nX yddlZddlZdZW n ek
r²   dZY nX ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ dZ%dZ&G dd„ deƒZ'dd„ Z(e)dkrLee(ƒ ƒ dS )z"Tests for distutils.command.sdist.é    N)Újoin)Údedent)Úcaptured_stdoutÚcheck_warningsÚrun_unittestTF)ÚsdistÚshow_formats)ÚDistribution)ÚBasePyPIRCCommandTestCase)ÚDistutilsOptionError)Úfind_executable)ÚWARN)ÚFileList)ÚARCHIVE_FORMATSzF
from distutils.core import setup
import somecode

setup(name='fake')
zõ# file GENERATED by distutils, do NOT edit
README
buildout.cfg
inroot.txt
setup.py
data%(sep)sdata.dt
scripts%(sep)sscript.py
some%(sep)sfile.txt
some%(sep)sother_file.txt
somecode%(sep)s__init__.py
somecode%(sep)sdoc.dat
somecode%(sep)sdoc.txt
c                   sŒ  e Zd Z‡ fdd„Z‡ fdd„Zd1dd„Ze ed¡d	d
„ ƒZ	e ed¡e 
edƒdkd¡e 
edƒdkd¡dd„ ƒƒƒZe ed¡dd„ ƒZe ed¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Ze 
ejd!kd"¡d#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,„ ƒZe ed-¡e ed.¡e 
edƒdkd¡e 
edƒdkd¡d/d0„ ƒƒƒƒZ‡  ZS )2ÚSDistTestCasec                s„   t t| ƒ ¡  t ¡ | _t t| jdƒ¡ t t| jdƒ¡ |  	| jdfd¡ |  	| jddfd¡ |  	| jdft
¡ t | j¡ d S )NÚsomecodeÚdistÚREADMEÚxxxz__init__.pyú#zsetup.py)Úsuperr   ÚsetUpÚosÚgetcwdÚold_pathÚmkdirr   Útmp_dirÚ
write_fileÚSETUP_PYÚchdir)Úself)Ú	__class__© ú+lib/python3.7/distutils/tests/test_sdist.pyr   9   s    
zSDistTestCase.setUpc                s   t  | j¡ tt| ƒ ¡  d S )N)r   r   r   r   r   ÚtearDown)r    )r!   r"   r#   r$   G   s    zSDistTestCase.tearDownNc             C   sJ   |dkrddddddœ}t |ƒ}d|_dg|_d|_t|ƒ}d	|_||fS )
zReturns a cmdNZfakez1.0r   )ÚnameÚversionZurlZauthorZauthor_emailzsetup.pyr   Tr   )r	   Úscript_nameZpackagesZinclude_package_datar   Údist_dir)r    Úmetadatar   Úcmdr"   r"   r#   Úget_cmdL   s    zSDistTestCase.get_cmdzNeed zlib support to runc             C   s0  t  t| jddƒ¡ |  | jdddfd¡ t  t| jddƒ¡ |  | jdddfd¡ t  t| jddƒ¡ |  | jdddfd¡ |  | jddfd¡ |  ¡ \}}d	g|_| ¡  | ¡  t| jd
ƒ}t  	|¡}|  
|dg¡ t t|dƒ¡}z| ¡ }W d | ¡  X ddddddg}|  
t|ƒdd„ |D ƒ¡ d S )Nr   z.svnzok.pyr   z.hgÚokz.gitz.nfs0001Úzipr   zfake-1.0.zipÚ zPKG-INFOr   zsetup.pyz	somecode/zsomecode/__init__.pyc             S   s   g | ]}d | ‘qS )z	fake-1.0/r"   )Ú.0Úxr"   r"   r#   ú
<listcomp>…   s    z6SDistTestCase.test_prune_file_list.<locals>.<listcomp>)r   r   r   r   r   r+   ÚformatsÚensure_finalizedÚrunÚlistdirÚassertEqualÚzipfileÚZipFileÚnamelistÚcloseÚsorted)r    r   r*   Údist_folderÚfilesÚzip_fileÚcontentÚexpectedr"   r"   r#   Útest_prune_file_listZ   s.    



z"SDistTestCase.test_prune_file_listÚtarzThe tar command is not foundZgzipzThe gzip command is not foundc             C   s´   |   ¡ \}}ddg|_| ¡  | ¡  t| jdƒ}t |¡}| ¡  |  	|ddg¡ t 
t|dƒ¡ t 
t|dƒ¡ ddg|_| ¡  | ¡  t |¡}| ¡  |  	|ddg¡ d S )NÚgztarrB   r   zfake-1.0.tarzfake-1.0.tar.gz)r+   r2   r3   r4   r   r   r   r5   Úsortr6   Úremove)r    r   r*   r<   Úresultr"   r"   r#   Útest_make_distribution‡   s     



z$SDistTestCase.test_make_distributionc             C   s$  |   ¡ \}}ddgdgdœ|_|  | jddfd¡ |  | jddfd¡ t| jd	ƒ}t |¡ |  |d
fd¡ t| jdƒ}t |¡ t| jdƒ}t |¡ |  |dfd¡ |  | jdfd¡ |  | jdfd¡ |  |dfd¡ |  |dfd¡ d	ddddgfddg|_t| jdƒ}t |¡ |  |dfd¡ tddƒg|_dg|_	d|_
| ¡  | ¡  t| jdƒ}t |¡}|  |dg¡ t t|dƒ¡}	z|	 ¡ }
W d |	 ¡  X dddddddd d!d"d#ddd$d%d&d'g}|  t|
ƒd(d)„ |D ƒ¡ tt| jd*ƒƒ}z| ¡ }W d | ¡  X |  |td+tji ¡ d S ),Nz*.cfgz*.datz*.txt)r.   r   r   zdoc.txtr   zdoc.datÚdatazdata.dtZsomez.hgzlast-message.txtzbuildout.cfgz
inroot.txtzfile.txtzother_file.txtzdata/data.dtZnotexistingzsome/file.txtzsome/other_file.txtÚscriptsz	script.pyr-   Tr   zfake-1.0.zipr.   zPKG-INFOr   zdata/zscripts/zscripts/script.pyzsetup.pyzsome/z	somecode/zsomecode/__init__.pyzsomecode/doc.datzsomecode/doc.txtc             S   s   g | ]}d | ‘qS )z	fake-1.0/r"   )r/   r0   r"   r"   r#   r1   í   s    z3SDistTestCase.test_add_defaults.<locals>.<listcomp>ÚMANIFESTÚsep)r+   Úpackage_datar   r   r   r   r   Z
data_filesrI   r2   Zuse_defaultsr3   r4   r5   r6   r7   r8   r9   r:   r;   ÚopenÚreadrJ   rK   )r    r   r*   Zdata_dirZsome_dirZhg_dirZ
script_dirr<   r=   r>   r?   r@   ÚfÚmanifestr"   r"   r#   Útest_add_defaults¨   sd    






zSDistTestCase.test_add_defaultsc             C   s–   | j i d\}}| ¡  | ¡  dd„ |  t¡D ƒ}|  t|ƒd¡ |  ¡  |   ¡ \}}| ¡  d|_| ¡  dd„ |  t¡D ƒ}|  t|ƒd¡ d S )N)r)   c             S   s   g | ]}|  d ¡r|‘qS )zwarning: check:)Ú
startswith)r/   Úmsgr"   r"   r#   r1      s    z<SDistTestCase.test_metadata_check_option.<locals>.<listcomp>é   r   c             S   s   g | ]}|  d ¡r|‘qS )zwarning: check:)rR   )r/   rS   r"   r"   r#   r1   
  s    )	r+   r3   r4   Úget_logsr   r6   ÚlenZ
clear_logsZmetadata_check)r    r   r*   Úwarningsr"   r"   r#   Útest_metadata_check_option÷   s    z(SDistTestCase.test_metadata_check_optionc          	   C   sF   |   ¡ \}}tƒ *}t d¡ | ¡  |  t|jƒd¡ W d Q R X d S )NÚalwaysé   )r+   r   rW   ÚsimplefilterZcheck_metadatar6   rV   )r    r   r*   Úwr"   r"   r#   Útest_check_metadata_deprecated  s
    
z,SDistTestCase.test_check_metadata_deprecatedc          	   C   sP   t ƒ }tƒ  W d Q R X tt ¡ ƒ}dd„ | ¡  d¡D ƒ}|  t|ƒ|¡ d S )Nc             S   s   g | ]}|  ¡  d ¡r|‘qS )z
--formats=)ÚstriprR   )r/   Úliner"   r"   r#   r1     s    z3SDistTestCase.test_show_formats.<locals>.<listcomp>Ú
)r   r   rV   r   ÚkeysÚgetvalueÚsplitr6   )r    ÚstdoutZnum_formatsÚoutputr"   r"   r#   Útest_show_formats  s
    zSDistTestCase.test_show_formatsc             C   sz   |   ¡ \}}| ¡  |  |jd¡ |  |jd¡ |  |jd¡ d|_|  t|j¡ dg|_| ¡  d|_|  t|j¡ d S )NrJ   zMANIFEST.inr   rZ   r-   Zsupazipa)	r+   Zfinalize_optionsr6   rP   Útemplater(   r2   ZassertRaisesr   )r    r   r*   r"   r"   r#   Útest_finalize_options   s    z#SDistTestCase.test_finalize_optionsc             C   sZ   |   ¡ \}}t | j¡ |  d|¡ | ¡  tƒ |_| ¡  |  	t
¡}|  t|ƒd¡ d S )NzMANIFEST.inrZ   )r+   r   r   r   r   r3   r   ÚfilelistZread_templaterU   r   r6   rV   )r    r?   r   r*   rW   r"   r"   r#   Ú_check_template7  s    
zSDistTestCase._check_templatec             C   s   |   d¡ d S )Nztaunt knights *)rj   )r    r"   r"   r#   Ú%test_invalid_template_unknown_commandA  s    z3SDistTestCase.test_invalid_template_unknown_commandc             C   s   |   d¡ d S )NZprune)rj   )r    r"   r"   r#   Ú%test_invalid_template_wrong_argumentsD  s    z3SDistTestCase.test_invalid_template_wrong_argumentsÚntztest relevant for Windows onlyc             C   s   |   d¡ d S )Nzinclude examples/)rj   )r    r"   r"   r#   Ú test_invalid_template_wrong_pathH  s    z.SDistTestCase.test_invalid_template_wrong_pathc             C   s  |   ¡ \}}ddgi|_|  | jddfd¡ dg|_| ¡  | ¡  t|jƒ}zdd„ | 	¡  
d¡D ƒ}W d | ¡  X |  t|ƒd	¡ |  | jdd
fd¡ | d¡}d|_| ¡  | ¡  t|jƒ}zdd„ | 	¡  
d¡D ƒ}W d | ¡  X |  t|ƒd¡ |  d
|d ¡ d S )Nr   z*.txtzdoc.txtr   rC   c             S   s    g | ]}|  ¡ d kr|  ¡ ‘qS )r.   )r^   )r/   r_   r"   r"   r#   r1   \  s    z4SDistTestCase.test_get_file_list.<locals>.<listcomp>r`   é   zdoc2.txtÚbuild_pyFc             S   s    g | ]}|  ¡ d kr|  ¡ ‘qS )r.   )r^   )r/   r_   r"   r"   r#   r1   o  s    é   éÿÿÿÿ)r+   rL   r   r   r2   r3   r4   rM   rP   rN   rc   r:   r6   rV   Zget_command_objZ	finalizedZassertIn)r    r   r*   rO   rP   rp   Z	manifest2r"   r"   r#   Útest_get_file_listN  s,    




z SDistTestCase.test_get_file_listc             C   sb   |   ¡ \}}| ¡  | ¡  t|jƒ}zdd„ | ¡  d¡D ƒ}W d | ¡  X |  |d d¡ d S )Nc             S   s    g | ]}|  ¡ d kr|  ¡ ‘qS )r.   )r^   )r/   r_   r"   r"   r#   r1     s    z6SDistTestCase.test_manifest_marker.<locals>.<listcomp>r`   r   z*# file GENERATED by distutils, do NOT edit)	r+   r3   r4   rM   rP   rN   rc   r:   r6   )r    r   r*   rO   rP   r"   r"   r#   Útest_manifest_markerx  s    


z"SDistTestCase.test_manifest_markerc             C   s„   t dƒ}|  ¡ \}}| ¡  |  | j|jf|¡ |  | jdfd¡ |  | jdfd¡ |  | jdfd¡ | ¡  |  |jj	dg¡ d S )NzI            # bad.py
            #bad.py
            good.py
            zgood.pyz
# pick me!zbad.pyz# don't pick me!z#bad.py)
r   r+   r3   r   r   rP   r4   r6   ri   r=   )r    Úcontentsr   r*   r"   r"   r#   Útest_manifest_comments‰  s    z$SDistTestCase.test_manifest_commentsc             C   sì   |   ¡ \}}dg|_| ¡  |  | j|jfd¡ |  | jdfd¡ | ¡  |  |jj	dg¡ t
|jƒ}zdd„ | ¡  d¡D ƒ}W d | ¡  X |  |dg¡ t| jddƒ}t 
|¡}zd	d„ |D ƒ}W d | ¡  X |  t|ƒd
ddg¡ d S )NrC   zREADME.manualz0This project maintains its MANIFEST file itself.c             S   s    g | ]}|  ¡ d kr|  ¡ ‘qS )r.   )r^   )r/   r_   r"   r"   r#   r1   ¨  s    z6SDistTestCase.test_manual_manifest.<locals>.<listcomp>r`   r   zfake-1.0.tar.gzc             S   s   g | ]
}|j ‘qS r"   )r%   )r/   Ztarinfor"   r"   r#   r1   ²  s    zfake-1.0zfake-1.0/PKG-INFOzfake-1.0/README.manual)r+   r2   r3   r   r   rP   r4   r6   ri   r=   rM   rN   rc   r:   r   Útarfiler;   )r    r   r*   rO   rP   Úarchive_nameÚarchiveÚ	filenamesr"   r"   r#   Útest_manual_manifestš  s(    



z"SDistTestCase.test_manual_manifestzrequires zlibzRequires grp and pwd supportc             C   s  |   ¡ \}}dg|_t d¡d |_t d¡d |_| ¡  | 	¡  t
| jddƒ}t |¡}z2x,| ¡ D ] }|  |jd¡ |  |jd¡ qhW W d | ¡  X |   ¡ \}}dg|_| ¡  | 	¡  t
| jddƒ}t |¡}z(x"| ¡ D ]}|  |jt ¡ ¡ qâW W d | ¡  X d S )NrC   r   r   zfake-1.0.tar.gz)r+   r2   ÚpwdÚgetpwuidÚownerÚgrpZgetgrgidÚgroupr3   r4   r   r   rw   rM   Z
getmembersr6   ZuidÚgidr:   r   Úgetuid)r    r   r*   rx   ry   Úmemberr"   r"   r#   Ú"test_make_distribution_owner_group¸  s.    


z0SDistTestCase.test_make_distribution_owner_group)N)Ú__name__Ú
__module__Ú__qualname__r   r$   r+   ÚunittestZ
skipUnlessÚZLIB_SUPPORTrA   ZskipIfr   rG   rQ   rX   r]   rf   rh   rj   rk   rl   r   r%   rn   rs   rt   rv   r{   ÚUID_GID_SUPPORTr„   Ú__classcell__r"   r"   )r!   r#   r   7   s8   
-
O

*

r   c               C   s
   t  t¡S )N)rˆ   Z	makeSuiter   r"   r"   r"   r#   Ú
test_suiteè  s    rŒ   Ú__main__)*Ú__doc__r   rw   rˆ   rW   r7   Úos.pathr   Útextwrapr   Ztest.supportr   r   r   Úzlibr‰   ÚImportErrorr   r|   rŠ   Zdistutils.command.sdistr   r   Zdistutils.corer	   Zdistutils.tests.test_configr
   Zdistutils.errorsr   Zdistutils.spawnr   Zdistutils.logr   Zdistutils.filelistr   Zdistutils.archive_utilr   r   rJ   r   rŒ   r…   r"   r"   r"   r#   Ú<module>   sH   

   4
