a
    åze—B  ã                   @   sL  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 zddlZdZW n ey~   dZY n0 zddlZddlZdZW n ey®   dZY n0 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rHe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u d¡e 
edƒdu 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u d¡e 
edƒdu 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ú#úsetup.py)Úsuperr   ÚsetUpÚosÚgetcwdÚold_pathÚmkdirr   Útmp_dirÚ
write_fileÚSETUP_PYÚchdir©Úself©Ú	__class__© ú0/usr/lib/python3.9/distutils/tests/test_sdist.pyr   9   s    
zSDistTestCase.setUpc                    s   t  | j¡ tt| ƒ ¡  d S ©N)r   r    r   r   r   ÚtearDownr!   r#   r%   r&   r(   G   s    zSDistTestCase.tearDownNc                 C   sJ   |du rddddddœ}t |ƒ}d|_dg|_d|_t|ƒ}d	|_||fS )
zReturns a cmdNZfakez1.0r   )ÚnameÚversionÚurlZauthorZauthor_emailr   r   Tr   )r	   Z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 | ¡  n
| ¡  0 g d¢}|  
t|ƒdd„ |D ƒ¡ d S )Nr   z.svnzok.pyr   ú.hgÚokz.gitz.nfs0001Úzipr   úfake-1.0.zip)Ú úPKG-INFOr   r   ú	somecode/úsomecode/__init__.pyc                 S   s   g | ]}d | ‘qS ©z	fake-1.0/r%   ©Ú.0Úxr%   r%   r&   Ú
<listcomp>…   ó    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   s8    ÿÿÿÿ

z"SDistTestCase.test_prune_file_listÚtarzThe tar command is not foundÚ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ÚgztarrN   r   zfake-1.0.tarúfake-1.0.tar.gz)r/   r>   r?   r@   r   r   r   rA   ÚsortrB   Úremove)r"   r   r.   rH   Ú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	g d¢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 |	 ¡  n
|	 ¡  0 g d¢}|  t|
ƒdd„ |D ƒ¡ tt| jdƒƒ}z| ¡ }W | ¡  n
| ¡  0 |  |tdtji ¡ d S ) Nz*.cfgz*.datú*.txt)r4   r   r   údoc.txtr   zdoc.datÚdatazdata.dtZsomer0   zlast-message.txtúbuildout.cfgú
inroot.txtzfile.txtzother_file.txt)údata/data.dtrY   rZ   Znotexistingúsome/file.txtúsome/other_file.txtÚscriptsz	script.pyr2   Tr   r3   )r4   r5   r   rY   zdata/r[   rZ   zscripts/zscripts/script.pyr   zsome/r\   r]   r6   r7   zsomecode/doc.datzsomecode/doc.txtc                 S   s   g | ]}d | ‘qS r8   r%   r9   r%   r%   r&   r<   í   r=   z3SDistTestCase.test_add_defaults.<locals>.<listcomp>ÚMANIFESTÚsep)r/   Úpackage_datar   r   r   r   r   Z
data_filesr^   r>   Zuse_defaultsr?   r@   rA   rB   rC   rD   rE   rF   rG   ÚopenÚreadr_   r`   )r"   r   r.   Zdata_dirZsome_dirZhg_dirZ
script_dirrH   rI   rJ   rK   rL   ÚfÚmanifestr%   r%   r&   Útest_add_defaults¨   sX    ÿ



û



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&   r<      s   
ÿz<SDistTestCase.test_metadata_check_option.<locals>.<listcomp>é   r   c                 S   s   g | ]}|  d ¡r|‘qS rg   rh   rj   r%   r%   r&   r<   
  s   
ÿ)	r/   r?   r@   Úget_logsr   rB   ÚlenZ
clear_logsZmetadata_check)r"   r   r.   Úwarningsr%   r%   r&   Útest_metadata_check_option÷   s    z(SDistTestCase.test_metadata_check_optionc                 C   sZ   |   ¡ \}}tƒ 4}t d¡ | ¡  |  t|jƒd¡ W d   ƒ n1 sL0    Y  d S )NÚalwaysé   )r/   r   ro   ÚsimplefilterZcheck_metadatarB   rn   )r"   r   r.   Úwr%   r%   r&   Útest_check_metadata_deprecated  s
    
z,SDistTestCase.test_check_metadata_deprecatedc                 C   sd   t ƒ }tƒ  W d   ƒ n1 s"0    Y  tt ¡ ƒ}dd„ | ¡  d¡D ƒ}|  t|ƒ|¡ d S )Nc                 S   s   g | ]}|  ¡  d ¡r|‘qS )z
--formats=)Ústripri   ©r:   Úliner%   r%   r&   r<     s   ÿz3SDistTestCase.test_show_formats.<locals>.<listcomp>Ú
)r   r   rn   r   ÚkeysÚgetvalueÚsplitrB   )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 )Nr_   úMANIFEST.inr   rr   r2   Zsupazipa)	r/   Zfinalize_optionsrB   re   Útemplater,   r>   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 )Nr€   rr   )r/   r   r    r   r   r?   r   ÚfilelistZread_templaterm   r   rB   rn   )r"   rK   r   r.   ro   r%   r%   r&   Ú_check_template7  s    
zSDistTestCase._check_templatec                 C   s   |   d¡ d S )Nztaunt knights *©r„   r!   r%   r%   r&   Ú%test_invalid_template_unknown_commandA  s    z3SDistTestCase.test_invalid_template_unknown_commandc                 C   s   |   d¡ d S )NZpruner…   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/r…   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 | ¡  n
| ¡  0 |  t|ƒd	¡ |  | jdd
fd¡ | d¡}d|_| ¡  | ¡  t|jƒ}z$dd„ | 	¡  
d¡D ƒ}W | ¡  n
| ¡  0 |  t|ƒd¡ |  d
|d ¡ d S )Nr   rV   rW   r   rP   c                 S   s    g | ]}|  ¡ d kr|  ¡ ‘qS ©r4   ©rv   rw   r%   r%   r&   r<   \  s   ÿz4SDistTestCase.test_get_file_list.<locals>.<listcomp>ry   é   zdoc2.txtÚbuild_pyFc                 S   s    g | ]}|  ¡ d kr|  ¡ ‘qS rŠ   r‹   rw   r%   r%   r&   r<   o  s   ÿé   éÿÿÿÿ)r/   ra   r   r   r>   r?   r@   rb   re   rc   r|   rF   rB   rn   Zget_command_objZ	finalizedZassertIn)r"   r   r.   rd   re   r   Z	manifest2r%   r%   r&   Útest_get_file_listN  s,    


z SDistTestCase.test_get_file_listc                 C   sj   |   ¡ \}}| ¡  | ¡  t|jƒ}z$dd„ | ¡  d¡D ƒ}W | ¡  n
| ¡  0 |  |d d¡ d S )Nc                 S   s    g | ]}|  ¡ d kr|  ¡ ‘qS rŠ   r‹   rw   r%   r%   r&   r<     s   ÿz6SDistTestCase.test_manifest_marker.<locals>.<listcomp>ry   r   z*# file GENERATED by distutils, do NOT edit)	r/   r?   r@   rb   re   rc   r|   rF   rB   )r"   r   r.   rd   re   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/   r?   r   r   re   r@   rB   rƒ   rI   )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 | ¡  n
| ¡  0 |  |dg¡ t| jddƒ}t 
|¡}zd	d„ |D ƒ}W | ¡  n
| ¡  0 |  t|ƒg d
¢¡ d S )NrP   zREADME.manualz0This project maintains its MANIFEST file itself.c                 S   s    g | ]}|  ¡ d kr|  ¡ ‘qS rŠ   r‹   rw   r%   r%   r&   r<   ¨  s   ÿz6SDistTestCase.test_manual_manifest.<locals>.<listcomp>ry   r   rQ   c                 S   s   g | ]
}|j ‘qS r%   )r)   )r:   Útarinfor%   r%   r&   r<   ²  r=   )zfake-1.0zfake-1.0/PKG-INFOzfake-1.0/README.manual)r/   r>   r?   r   r   re   r@   rB   rƒ   rI   rb   rc   r|   rF   r   ÚtarfilerG   )r"   r   r.   rd   re   Ú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 |¡}z6| ¡ D ] }|  |jd¡ |  |jd¡ qfW | ¡  n
| ¡  0 |   ¡ \}}dg|_| ¡  | 	¡  t
| jddƒ}t |¡}z,| ¡ D ]}|  |jt ¡ ¡ qäW | ¡  n
| ¡  0 d S )NrP   r   r   rQ   )r/   r>   ÚpwdÚgetpwuidÚownerÚgrpÚgetgrgidÚgroupr?   r@   r   r   r•   rb   Z
getmembersrB   ÚuidÚgidrF   r   Úgetuid)r"   r   r.   r–   r—   Ú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_SUPPORTrM   ZskipIfr   rU   rf   rp   ru   r   r‚   r„   r†   r‡   r   r)   r‰   r   r‘   r“   r™   ÚUID_GID_SUPPORTr¤   Ú__classcell__r%   r%   r#   r&   r   7   sT   


,
ÿÿ

N






)







ÿÿr   c                   C   s
   t  t¡S r'   )r¨   Z	makeSuiter   r%   r%   r%   r&   Ú
test_suiteè  s    r¬   Ú__main__)*Ú__doc__r   r•   r¨   ro   rC   Z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   r_   r   r¬   r¥   r%   r%   r%   r&   Ú<module>   sH   

   4
