U
    ºÛuiÒ:  ã                   @   s  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	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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 m!Z! dZ"dZ#ej$dddd„ ƒZ%dd„ Z&G dd„ dej'ƒZ(dS )z"Tests for distutils.command.sdist.é    N)ÚARCHIVE_FORMATS)ÚsdistÚshow_formats)ÚDistribution)ÚDistutilsOptionError)ÚFileList)Újoin)Údedent)Úilené   )Úsupport)ÚgrpÚpwdÚrequire_uid_0Úrequire_unix_idzF
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
T)Zautousec              	   c   sN   | j }| ¡ |_tj ddidtdœ|j¡ t |j¡ d V  W 5 Q R X d S )Nz__init__.pyú#Úxxx)ÚsomecodeÚREADMEúsetup.py)ÚinstanceÚmkdtempÚtmp_dirÚjaracoÚpathÚbuildÚSETUP_PYÚPath)ÚrequestZdistutils_managed_tempdirÚself© r    úJ/tmp/pip-unpacked-wheel-9osl9suo/setuptools/_distutils/tests/test_sdist.pyÚproject_dir/   s    
 ÿûø
r"   c              	   c   s:   t  | ¡jdd}td ttj|ƒƒE d H  W 5 Q R X d S )Núutf-8©Úencoding)Úpathlibr   ÚopenÚfilterÚmapÚstrÚstrip)ÚfilepathÚfr    r    r!   Úclean_linesA   s    r.   c                   @   sL  e Zd Zd)dd„Zej d¡dd„ ƒZej d¡ej d¡ej d¡d	d
„ ƒƒƒZ	ej d¡dd„ ƒZ
ed*dd„ƒZej d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej d¡dd„ ƒZej d¡dd „ ƒZej d¡d!d"„ ƒZej d¡d#d$„ ƒZej d¡d%d&„ ƒZej d¡eeej d¡ej d¡d'd(„ ƒƒƒƒƒZdS )+Ú	TestSDistNc                 C   sJ   |dkrddddddœ}t |ƒ}d|_dg|_d|_t|ƒ}d	|_||fS )
zReturns a cmdNzns.fake--pkgz1.0r   )ÚnameÚversionÚurlÚauthorÚauthor_emailr   r   TÚdist)r   Úscript_nameÚpackagesZinclude_package_datar   Údist_dir)r   Úmetadatar5   Úcmdr    r    r!   Úget_cmdG   s    ûzTestSDist.get_cmdZ
needs_zlibc                 C   s2  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ksÚt
‚t t|dƒ¡}z| ¡ }W 5 | ¡  X ddddddg}t|ƒdd„ |D ƒks.t
‚d S )Nr   z.svnzok.pyr   ú.hgÚokz.gitz.nfs0001Úzipr5   úns_fake_pkg-1.0.zipÚ úPKG-INFOr   r   ú	somecode/úsomecode/__init__.pyc                 S   s   g | ]}d | ‘qS ©zns_fake_pkg-1.0/r    ©Ú.0Úxr    r    r!   Ú
<listcomp>ˆ   s     z2TestSDist.test_prune_file_list.<locals>.<listcomp>)ÚosÚmkdirr   r   Ú
write_filer;   ÚformatsÚensure_finalizedÚrunÚlistdirÚAssertionErrorÚzipfileÚZipFileÚcloseÚnamelistÚsorted)r   r5   r:   Údist_folderÚfilesÚzip_fileÚcontentÚexpectedr    r    r!   Útest_prune_file_listY   s4    

úzTestSDist.test_prune_file_listznot shutil.which('tar')znot shutil.which('gzip')c                 C   s´   |   ¡ \}}ddg|_| ¡  | ¡  t| jdƒ}t |¡}| ¡  |ddgksTt	‚t 
t|dƒ¡ t 
t|dƒ¡ ddg|_| ¡  | ¡  t |¡}| ¡  |ddgks°t	‚d S )NÚgztarÚtarr5   zns_fake_pkg-1.0.tarúns_fake_pkg-1.0.tar.gz)r;   rL   rM   rN   r   r   rI   rO   ÚsortrP   Úremove)r   r5   r:   rV   Úresultr    r    r!   Útest_make_distributionŠ   s     



z TestSDist.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ks|t‚t t|dƒ¡}	z|	 ¡ }
W 5 |	 ¡  X dddddddd d!d"d#ddd$d%d&d'g}t|
ƒd(d)„ |D ƒksæt‚t | jd*¡jd+d,}|td-tji kst‚d S ).Nz*.cfgz*.datú*.txt)r@   r   r   údoc.txtr   zdoc.datÚdatazdata.dtZsomer<   z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>   Tr5   r?   r@   rA   r   zdata/zscripts/zscripts/script.pyr   zsome/rB   rC   zsomecode/doc.datzsomecode/doc.txtc                 S   s   g | ]}d | ‘qS rD   r    rE   r    r    r!   rH   ø   s     z/TestSDist.test_add_defaults.<locals>.<listcomp>ÚMANIFESTr#   r$   Úsep)r;   Úpackage_datarK   r   r   rI   rJ   Ú
data_filesrf   rL   Zuse_defaultsrM   rN   rO   rP   rQ   rR   rS   rT   rU   r&   r   Ú	read_textrg   rh   )r   r5   r:   Údata_dirZsome_dirZhg_dirZ
script_dirrV   rW   rX   rY   rZ   Úmanifestr    r    r!   Útest_add_defaults©   sp    


ý


ïzTestSDist.test_add_defaultsú	warning: c                    s   ‡ fdd„| D ƒS )Nc                    s   g | ]}|  ˆ ¡r|‘qS r    )Ú
startswith)rF   Úmsg©Úprefixr    r!   rH      s     
 z&TestSDist.warnings.<locals>.<listcomp>r    )Úmessagesrs   r    rr   r!   Úwarningsþ   s    zTestSDist.warningsc                 C   s‚   | j i d\}}| ¡  | ¡  t|  |jd¡ƒdks:t‚| ¡  |   ¡ \}}| ¡  d|_| ¡  t|  |jd¡ƒdks~t‚d S )N)r9   zwarning: check: r   r   )	r;   rM   rN   Úlenru   rt   rP   ÚclearZmetadata_check)r   Úcaplogr5   r:   r    r    r!   Útest_metadata_check_option  s    z$TestSDist.test_metadata_check_optionc                 C   s@   t ƒ  tt ¡ ƒ}dd„ | ¡ j d¡D ƒ}t|ƒ|ks<t‚d S )Nc                 S   s   g | ]}|  ¡  d ¡r|‘qS )z
--formats=)r+   rp   )rF   Úliner    r    r!   rH     s   þz/TestSDist.test_show_formats.<locals>.<listcomp>Ú
)r   rv   r   ÚkeysZ
readouterrÚoutÚsplitrP   )r   ZcapsysZnum_formatsÚoutputr    r    r!   Útest_show_formats  s    þzTestSDist.test_show_formatsc              	   C   sš   |   ¡ \}}| ¡  |jdks"t‚|jdks0t‚|jdks>t‚d|_t t	¡ | ¡  W 5 Q R X dg|_| ¡  d|_t t	¡ | ¡  W 5 Q R X d S )Nrg   úMANIFEST.inr5   r   r>   Zsupazipa)
r;   Úfinalize_optionsrm   rP   Útemplater8   rL   ÚpytestZraisesr   ©r   r5   r:   r    r    r!   Útest_finalize_options!  s    zTestSDist.test_finalize_optionsc                 C   sX   |   ¡ \}}t | j¡ |  d|¡ | ¡  tƒ |_| ¡  t	|  
|j¡ƒdksTt‚d S )Nr   r   )r;   rI   Úchdirr   rK   rM   r   ÚfilelistZread_templaterv   ru   rt   rP   )r   rY   rx   r5   r:   r    r    r!   Ú_check_template:  s    zTestSDist._check_templatec                 C   s   |   d|¡ d S )Nztaunt knights *©r‰   ©r   rx   r    r    r!   Ú%test_invalid_template_unknown_commandC  s    z/TestSDist.test_invalid_template_unknown_commandc                 C   s   |   d|¡ d S )NZprunerŠ   r‹   r    r    r!   Ú%test_invalid_template_wrong_argumentsF  s    z/TestSDist.test_invalid_template_wrong_argumentszplatform.system() != 'Windows'c                 C   s   |   d|¡ d S )Nzinclude examples/rŠ   r‹   r    r    r!   Ú test_invalid_template_wrong_pathJ  s    z*TestSDist.test_invalid_template_wrong_pathc                 C   sÀ   |   ¡ \}}ddgi|_|  | jddfd¡ dg|_| ¡  | ¡  tt|j	ƒƒdksZt
‚|  | jddfd¡ | d¡}d	|_| ¡  | ¡  tt|j	ƒƒ}t|ƒd
ks¬t
‚d|d ks¼t
‚d S )Nr   rc   rd   r   r\   é   zdoc2.txtÚbuild_pyFé   éÿÿÿÿ)r;   ri   rK   r   rL   rM   rN   r
   r.   rm   rP   Úget_command_objÚ	finalizedÚlistrv   )r   r5   r:   r   Z	manifest2r    r    r!   Útest_get_file_listP  s    
zTestSDist.test_get_file_listc                 C   s6   |   ¡ \}}| ¡  | ¡  tt|jƒƒdks2t‚d S )Nz*# file GENERATED by distutils, do NOT edit)r;   rM   rN   Únextr.   rm   rP   r…   r    r    r!   Útest_manifest_markern  s    ÿÿzTestSDist.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ks€t	‚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;   rM   rK   r   rm   rN   rˆ   rW   rP   )r   Úcontentsr5   r:   r    r    r!   Útest_manifest_commentsz  s    ÿz TestSDist.test_manifest_commentsc                 C   sÄ   |   ¡ \}}dg|_| ¡  |  | j|jfd¡ |  | jdfd¡ | ¡  |jjdgks\t	‚t
t|jƒƒdgkstt	‚t| jddƒ}t |¡}zdd„ |D ƒ}W 5 | ¡  X t|ƒdd	d
gksÀt	‚d S )Nr\   zREADME.manualz0This project maintains its MANIFEST file itself.r5   r^   c                 S   s   g | ]
}|j ‘qS r    )r0   )rF   Útarinfor    r    r!   rH      s     z2TestSDist.test_manual_manifest.<locals>.<listcomp>zns_fake_pkg-1.0zns_fake_pkg-1.0/PKG-INFOzns_fake_pkg-1.0/README.manual)r;   rL   rM   rK   r   rm   rN   rˆ   rW   rP   r•   r.   r   Útarfiler'   rS   rU   )r   r5   r:   Úarchive_nameÚarchiveÚ	filenamesr    r    r!   Útest_manual_manifest  s*    þ

ýzTestSDist.test_manual_manifestc                 C   s  |   ¡ \}}dg|_t d¡d |_t d¡d |_| ¡  | 	¡  t
| jddƒ}t |¡}z.| ¡ D ] }|jdksxt‚|jdksft‚qfW 5 | ¡  X |   ¡ \}}dg|_| ¡  | 	¡  t
| jddƒ}t |¡}z$| ¡ D ]}|jt ¡ ksÜt‚qÜW 5 | ¡  X d S )Nr\   r   r5   r^   )r;   rL   r   ÚgetpwuidÚownerr   ÚgetgrgidÚgrouprM   rN   r   r   rœ   r'   rS   Ú
getmembersÚuidrP   ÚgidrI   Úgetuid)r   r5   r:   r   rž   Úmemberr    r    r!   Ú"test_make_distribution_owner_group©  s.    


z,TestSDist.test_make_distribution_owner_group)N)ro   )Ú__name__Ú
__module__Ú__qualname__r;   r„   ÚmarkZusefixturesr[   Zskipifrb   rn   Ústaticmethodru   ry   r€   r†   r‰   rŒ   r   rŽ   r–   r˜   rš   r    r   r   rª   r    r    r    r!   r/   F   sD   


0




T

	












r/   ))Ú__doc__rI   r&   Úshutilrœ   rQ   Zdistutils.archive_utilr   Zdistutils.command.sdistr   r   Údistutils.corer   Údistutils.errorsr   Údistutils.filelistr   Úos.pathr   Útextwrapr	   Zjaraco.pathr   r   r„   Zmore_itertoolsr
   r@   r   Zunix_compatr   r   r   r   r   rg   Zfixturer"   r.   ZTempdirManagerr/   r    r    r    r!   Ú<module>   s0   

