U
    aÊ¹j¸~  ã                	   @   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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 ddlZddl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m Z  ddl!m"Z" ddl#Z#ddl$m%Z% dddgddgidej& 'dd¡gfgdœZ(de( Z)edej& 'dd¡gej& 'dd¡gd�Z*e*j+e*j, Z-ej.dd„ ƒZ/dd„ Z0d d!„ Z1d"d#„ Z2d$d%„ Z3ej4j5e3ƒ d&d'�Z6ej4j7d(d)d'�Z8ej4j7e#j9 :d*¡ d+d'�Z;d,d-„ Z<d.d/„ Z=G d0d1„ d1ƒZ>d2d3„ Z?G d4d5„ d5ƒZ@d6d7„ ZAd8d9„ ZBdS ):zsdist testsé    N©Úcleandoc)ÚPath)Úmock)ÚCommandÚSetuptoolsDeprecationWarning)Úmetadata)Úmanifest_maker)Úsdist)ÚDistribution)Ú	Extension)Úfail_on_asciié   )Ú	Filenames)Ú	run_setupÚ
sdist_testz0.0z*.txtÚdataÚdúe.dat)ÚnameÚversionÚpackagesÚpackage_dataÚ
data_filesz*from setuptools import setup

setup(**%r)
úsdist_test.fzf.cúf.h©r   ÚsourcesÚdependsc               	   c   sD   t jt j } }t ¡ t ¡  t _t _z
d V  W 5 | | t _t _X d S ©N)ÚsysÚstdoutÚstderrÚioÚStringIO)Z
old_stdoutZ
old_stderr© r%   úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/tests/test_sdist.pyÚquiet9   s
    
r'   c                 C   s0   t | tƒs|  tj d¡d¡S |  tjd¡S d S )NÚasciió   /ú/)Ú
isinstanceÚstrÚreplaceÚosÚsepÚencode©Úpathr%   r%   r&   ÚposixD   s    
r3   c                 C   sT   t | tƒrt d| ¡S z$|  d¡} t d| ¡} |  d¡} W n tk
rN   Y nX | S )NZNFDúutf-8)r+   r,   ÚunicodedataÚ	normalizeÚdecoder0   ÚUnicodeErrorr1   r%   r%   r&   Ú	decomposeL   s    

r9   c              
   C   s*   t | dƒ�}| ¡ W  5 Q R £ S Q R X d S )NÚrb)ÚopenÚread)ÚfilenameÚfpr%   r%   r&   Úread_all_bytesX   s    r?   c                  C   sF   z*t jtjd�\} }t | ¡ t |¡ W n tk
r@   Y dS X d S )N)ÚsuffixT)ÚtempfileÚmkstempr   Úlatin_1r.   ÚcloseÚremoveÚ	Exception)Údescr=   r%   r%   r&   Úlatin1_fail]   s    
rH   z)System does not support latin-1 filenames)Úreasonz%os.environ.get('PYTEST_XDIST_WORKER')zpytest-dev/pytest-xdist#843Ú
setuptoolsz/the test is not supported with stdlib distutilsc                 C   s   t | dƒ ¡  | S )NÚwb)r;   rD   r1   r%   r%   r&   Útouchv   s    rL   c              	   C   s:   zt  | |¡ W n$ ttfk
r4   t d¡ Y d S X |S )Nzsymlink not supported in OS)r.   ÚsymlinkÚOSErrorÚNotImplementedErrorÚpytestÚskip)ÚsrcÚdstr%   r%   r&   Úsymlink_or_skip_test{   s    
rT   c                   @   s~  e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ dd„ dd„ dd„ dœZeej de ¡ ¡dd„ ƒƒZdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zed(d)„ ƒZed*d+„ ƒZed,d-„ ƒZed.d/„ ƒZed0d1„ ƒZ eed2d3„ ƒƒZ!e"d4d5„ ƒZ#eed6d7„ ƒƒZ$d8d9d:d;œZ%ej d<e% ¡ ¡d=d>„ ƒZ&d?d@„ Z'dAdB„ Z(dCdD„ Z)ej *dE¡dFdG„ ƒZ+dHS )IÚTestSdistTestT)Zautousec              	   c   s˜   |d }|  ¡  |d jtdd� |d }|  ¡  |d }|  ¡  dD ]}t|| ƒ qFt|d ƒ tD ]}t|| ƒ qh| ¡ � |V  W 5 Q R X d S )	NZproject_rootúsetup.pyr4   ©Úencodingr   r   )z__init__.pyúa.txtúb.txtúc.rstr   )ÚmkdirÚ
write_textÚSETUP_PYrL   ÚEXTENSION_SOURCESZas_cwd)ÚselfZtmpdirZtest_pkgZdata_folderÚfnamer%   r%   r&   Ú
source_dir…   s    
zTestSdistTest.source_dirc                 C   sd   |j j}tj dd¡|kst‚tj dd¡|ks4t‚tj dd¡|ksJt‚tj dd¡|ks`t‚d S )Nr   rY   rZ   r[   r   r   )ÚfilelistÚfilesr.   r2   ÚjoinÚAssertionError)r`   ÚcmdÚmanifestr%   r%   r&   Úassert_package_data_in_manifestž   s
    z-TestSdistTest.assert_package_data_in_manifestc              	   C   sJ   t dtgi–}t|ƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |S )NÚext_modulesrV   )ÚSETUP_ATTRSÚ	EXTENSIONr   Úscript_namer
   Úensure_finalizedr'   Úrun©r`   Úsetup_attrsÚdistrg   r%   r%   r&   Úsetup_with_extension¥   s    z"TestSdistTest.setup_with_extensionc              	   C   sF   t tƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |  |¡ dS )z²Regression test for pull request #4: ensures that files listed in
        package_data are included in the manifest even if they're not added to
        version control.
        rV   N)r   rk   rm   r
   rn   r'   ro   ri   )r`   rr   rg   r%   r%   r&   Útest_package_data_in_sdist²   s    z(TestSdistTest.test_package_data_in_sdistc              	   C   s^   t ddi–}|d st‚t|ƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |  |¡ dS )zU
        Ensure package_data and include_package_data work
        together.
        Úinclude_package_dataTr   rV   N)	rk   rf   r   rm   r
   rn   r'   ro   ri   rp   r%   r%   r&   Ú3test_package_data_and_include_package_data_in_sdistÂ   s    zATestSdistTest.test_package_data_and_include_package_data_in_sdistc                 C   s4   |   ¡ }|  |¡ |jj}tD ]}||kst‚qdS )z�
        Ensure that the files listed in Extension.sources and Extension.depends
        are automatically included in the manifest.
        N)rs   ri   rc   rd   r_   rf   )r`   rg   rh   r2   r%   r%   r&   Útest_extension_sources_in_sdistÔ   s
    
z-TestSdistTest.test_extension_sources_in_sdistc                 C   sH   t D ]}t |¡ q|  ¡ }|  |¡ |jj}t D ]}||ks2t‚q2dS )z·
        Similar to test_extension_sources_in_sdist but the referenced files don't exist.
        Missing files should not be included in distribution (with no error raised).
        N)r_   r.   rE   rs   ri   rc   rd   rf   )r`   r2   rg   rh   r%   r%   r&   Útest_missing_extension_sourcesß   s    
z,TestSdistTest.test_missing_extension_sourcesc                 C   sœ   g }t D ]H}tj |¡\}}|d | }t ||¡ ttj |¡|ƒ | |¡ q|  ¡ }|  	|¡ |j
j}t D ]}||kspt‚qp|D ]}||ks†t‚q†dS )zõ
        Similar to test_extension_sources_in_sdist but the referenced files are
        instead symbolic links to project-local files. Referenced file paths
        should be included. Symlink targets themselves should NOT be included.
        z_target.N)r_   r.   r2   ÚsplitextÚrenamerT   ÚbasenameÚappendrs   ri   rc   rd   rf   )r`   Z	symlinkedr2   ÚbaseÚextÚtargetrg   rh   r%   r%   r&   Ú test_symlinked_extension_sourcesí   s    
z.TestSdistTest.test_symlinked_extension_sourcesc                   C   s   t j t j dd¡¡S )Nr   r   )r.   r2   Úabspathre   r%   r%   r%   r&   Ú<lambda>  s    zTestSdistTest.<lambda>c                   C   s   t j dddd¡S )Nr   ú..r   ©r.   r2   re   r%   r%   r%   r&   r‚     s    c                   C   s   t j dd¡S )Nr   zthis_file_does_not_exist.hr„   r%   r%   r%   r&   r‚     s    c                   C   s   t ttj dd¡ƒdƒS )Nrƒ   zoutside_of_project_root.hz	symlink.h)rT   rL   r.   r2   re   r%   r%   r%   r&   r‚     s    þ)zmust be relativezcan't have `..` segmentszdoesn't existzmust be inside the project rootrI   c           	   
      sÒ   | j | ƒ ‰ tdg ˆ gd�}td|gi–}t|ƒ}d|_t|ƒ}| ¡  tƒ �& | t	j
¡� | ¡  W 5 Q R X W 5 Q R X |  |¡ |jj}ˆ |ks˜t‚‡ fdd„|jD ƒ}t|ƒdks¼t‚|\}||ksÎt‚dS )	aÆ  
        Due to backwards compatibility reasons, `Extension.depends` should accept
        invalid/weird paths, but then ignore them when building a sdist.

        This test verifies that the source distribution is still built
        successfully with such paths, but that instead of adding these paths to
        the manifest, we emit an informational message, notifying the user that
        the invalid path won't be automatically included.
        r   r   rj   rV   c                    s0   g | ](\}}}|d kr|t jkrˆ |kr|‘qS )Úroot)ÚloggingÚINFO)Ú.0ÚloggerÚlevelÚmessage©Zinvalid_pathr%   r&   Ú
<listcomp>6  s
   
ûz@TestSdistTest.test_invalid_extension_depends.<locals>.<listcomp>r   N)Ú_INVALID_PATHSr   rk   r   rm   r
   rn   r'   Zat_levelr†   r‡   ro   ri   rc   rd   rf   Zrecord_tuplesÚlen)	r`   rI   ZcaplogÚ	extensionrq   rr   rg   rh   Zexpected_messager%   rŒ   r&   Útest_invalid_extension_depends  s,    ý

þ	z,TestSdistTest.test_invalid_extension_dependsc              
      sÖ   ddl m} t ¡ ‰ G ‡ fdd„d|ƒ}tddi–}|d s@t‚t|ƒ}d|_t|ƒ}| 	¡  d	|i|_
d	|i|j_
|j d	¡|ksˆt‚d
}tƒ �( tjt|d�� | ¡  W 5 Q R X W 5 Q R X ˆ  ¡  |  |¡ dS )zq
        Ensure projects defining custom build_py don't break
        when creating sdists (issue #2849)
        r   )Úbuild_pyc                       s"   e Zd ZdZ‡ ‡fdd„Z‡  ZS )z9TestSdistTest.test_custom_build_py.<locals>.CustomBuildPyzX
            Some projects have custom commands inheriting from `distutils`
            c                    s   ˆƒ  t ƒ  ¡ S r   )ÚsuperÚget_data_files©r`   )Ú	__class__Úusing_custom_command_guardr%   r&   r”   Q  s    zHTestSdistTest.test_custom_build_py.<locals>.CustomBuildPy.get_data_files)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r”   Ú__classcell__r%   ©r—   )r–   r&   ÚCustomBuildPyL  s   rž   ru   Tr   rV   r’   zsetuptools instead of distutils)ÚmatchN)Zdistutils.command.build_pyr’   r   ZMockrk   rf   r   rm   r
   rn   ÚcmdclassÚdistributionÚget_command_classr'   rP   Zwarnsr   ro   Zassert_calledri   )r`   ZOrigBuildPyrž   rq   rr   rg   Úmsgr%   r�   r&   Útest_custom_build_pyC  s"    	
z"TestSdistTest.test_custom_build_pyc              	   C   sP   t tƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |jj}d|ksLt	‚d S ©Núfoo.pyrV   )
r   rk   rm   r
   rn   r'   ro   rc   rd   rf   ©r`   rr   rg   rh   r%   r%   r&   Útest_setup_py_existsi  s    z"TestSdistTest.test_setup_py_existsc              	   C   sf   t tƒ}d|_t|ƒ}| ¡  tj d¡r4t d¡ t	ƒ � | 
¡  W 5 Q R X |jj}d|ksbt‚d S r¥   )r   rk   rm   r
   rn   r.   r2   ÚexistsrE   r'   ro   rc   rd   rf   r§   r%   r%   r&   Útest_setup_py_missingu  s    
z#TestSdistTest.test_setup_py_missingc              	   C   st   t dddd��}| d¡ W 5 Q R X ttƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |j	j
}d|kspt‚d S )NúMANIFEST.inÚwr4   rW   zexclude setup.pyr¦   rV   )r;   Úwriter   rk   rm   r
   rn   r'   ro   rc   rd   rf   )r`   Zmanifest_filerr   rg   rh   r%   r%   r&   Útest_setup_py_excludedƒ  s    z$TestSdistTest.test_setup_py_excludedc              	   C   s–   t |d ƒ t |d ƒ ttƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X tdd„ |j	j
ƒ}d|ksrt|ƒ‚d|ks‚t|ƒ‚d|ks’t|ƒ‚dS )	z–
        Make sure default files (README.*, etc.) are added in a case-sensitive
        way to avoid problems with packages built on Windows.
        z
readme.rstz	SETUP.cfgzsetup.PYc                 S   s   |   ¡ S r   )Úlower)Úxr%   r%   r&   r‚   ©  ó    z>TestSdistTest.test_defaults_case_sensitivity.<locals>.<lambda>rV   z	setup.cfgN)rL   r   rk   rm   r
   rn   r'   ro   Úmaprc   rd   rf   ©r`   rb   rr   rg   rh   r%   r%   r&   Útest_defaults_case_sensitivity’  s    z,TestSdistTest.test_defaults_case_sensitivityc           	      C   sä   ddddddddœ}ddddœ}||–  ¡ D ]2\}}t||ƒjjddd� t||ƒj|dd� q,|  ¡ }|  |¡ d	d
„ |jjD ƒ}|D ](}t	j
 |¡sœt‚||ksˆt||fƒ‚qˆ|D ](}t	j
 |¡sÊt‚||ks¶t||fƒ‚q¶d S )NzJglobal-include LICEN[CS]E* COPYING* NOTICE* AUTHORS*
global-include *.txt
Ú )r«   zBtest/.venv/lib/python3.9/site-packages/bar-2.dist-info/AUTHORS.rstzDsrc/.nox/py/lib/python3.12/site-packages/bar-2.dist-info/COPYING.txtzEdoc/.tox/default/lib/python3.11/site-packages/foo-4.dist-info/LICENSEz.venv-requirements.txtz.tox-coveragerc.txtz.noxy/coveragerc.txt)zA.tox/release/lib/python3.11/site-packages/foo-4.dist-info/LICENSEz@.nox/py/lib/python3.12/site-packages/bar-2.dist-info/COPYING.txtz=.venv/lib/python3.9/site-packages/bar-2.dist-info/AUTHORS.rstT)ÚparentsÚexist_okr4   rW   c                 S   s   h | ]}|  tjd ¡’qS )r*   )r-   r.   r/   )rˆ   Úfr%   r%   r&   Ú	<setcomp>Î  s     zDTestSdistTest.test_exclude_dev_only_cache_folders.<locals>.<setcomp>)Úitemsr   Úparentr\   r]   rs   ri   rc   rd   r.   r2   r©   rf   )	r`   rb   ZincludedÚexcludedÚfileÚcontentrg   rh   r2   r%   r%   r&   Ú#test_exclude_dev_only_cache_folders®  s0    òû
z1TestSdistTest.test_exclude_dev_only_cache_foldersc              	   C   sœ   t tƒ}d|_t|ƒ}tj dd¡|_t d¡ tj dd¡}t	|ƒ t
ƒ �" | ¡  |j |¡ | ¡  W 5 Q R X t|jƒ}| d¡}t|ƒ|ks˜t‚d S )NrV   úsdist_test.egg-infoúSOURCES.txtr   u   smÃ¶rbrÃ¶d.pyúUTF-8)r   rk   rm   r	   r.   r2   re   rh   r\   rL   r'   ro   rc   r|   Úwrite_manifestr?   r7   r3   rf   )r`   rr   Úmmr=   ÚcontentsZ
u_contentsr%   r%   r&   Ú+test_manifest_is_written_with_utf8_encodingÖ  s    


z9TestSdistTest.test_manifest_is_written_with_utf8_encodingc              	   C   sº   t tƒ}d|_t|ƒ}tj dd¡|_t d¡ tj dt	j
¡}t|ƒ tƒ �. | ¡  | d¡}|jj |¡ | ¡  W 5 Q R X t|jƒ}| d¡ t|ƒ|ks¦t‚||jjks¶t‚d S )NrV   rÀ   rÁ   ó
   sdist_testr4   rÂ   )r   rk   rm   r	   r.   r2   re   rh   r\   r   Úutf_8rL   r'   ro   r7   rc   rd   r|   rÃ   r?   r3   rf   ©r`   rr   rÄ   r=   Z
u_filenamerÅ   r%   r%   r&   Ú)test_write_manifest_allows_utf8_filenamesó  s     



z7TestSdistTest.test_write_manifest_allows_utf8_filenamesc              	   C   s²   t tƒ}d|_t|ƒ}tj dd¡|_t d¡ tj dt	j
¡}tƒ �. | ¡  | dd¡}|j |¡ | ¡  W 5 Q R X t|jƒ}| d¡ t|ƒ|ksžt‚||jjks®t‚dS )	a  
        Files that cannot be encoded to UTF-8 (specifically, those that
        weren't originally successfully decoded and have surrogate
        escapes) should be omitted from the manifest.
        See https://bitbucket.org/tarek/distribute/issue/303 for history.
        rV   rÀ   rÁ   rÇ   r4   ÚsurrogateescaperÂ   N)r   rk   rm   r	   r.   r2   re   rh   r\   r   rC   r'   ro   r7   rc   r|   rÃ   r?   r3   rf   rd   rÉ   r%   r%   r&   Ú,test_write_manifest_skips_non_utf8_filenames  s    


z:TestSdistTest.test_write_manifest_skips_non_utf8_filenamesc              	   C   sÂ   t tƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X tj 	dt
j¡}tj 	dd¡|_t|jdƒ}| d| ¡ | ¡  t|ƒ g |j_tƒ � | ¡  W 5 Q R X | d¡}||jjks¾t‚d S )NrV   rÇ   rÀ   rÁ   Úabó   
r4   )r   rk   rm   r
   rn   r'   ro   r.   r2   re   r   rÈ   rh   r;   r­   rD   rL   rc   rd   Úread_manifestr7   rf   ©r`   rr   rg   r=   rh   r%   r%   r&   Ú(test_manifest_is_read_with_utf8_encoding8  s"    
z6TestSdistTest.test_manifest_is_read_with_utf8_encodingc              	   C   sÂ   t tƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X tj 	dt
j¡}tj 	dd¡|_t|jdƒ}| d| ¡ | ¡  t|ƒ g |j_tƒ � | ¡  W 5 Q R X | d¡}||jjks¾t‚d S )NrV   rÇ   rÀ   rÁ   rÍ   rÎ   úlatin-1)r   rk   rm   r
   rn   r'   ro   r.   r2   re   r   rC   rh   r;   r­   rD   rL   rc   rd   rÏ   r7   rf   rÐ   r%   r%   r&   Ú+test_read_manifest_skips_non_utf8_filenamesW  s"    
z9TestSdistTest.test_read_manifest_skips_non_utf8_filenamesc              	   C   sØ   t |  t¡ƒ}d|_t|ƒ}| ¡  tj dt	j
¡}t|ƒ tƒ � | ¡  W 5 Q R X tjdkrht|ƒ}t ¡ }tjdkrº|dkrž| d¡}||jjks¸t‚qÔ| d¡}||jjksÔt‚n| d¡}||jjksÔt‚d S )NrV   rÇ   ÚdarwinÚwin32Úcp1252Úmbcsr4   )r   Úmake_stringsrk   rm   r
   rn   r.   r2   re   r   rÈ   rL   r'   ro   r    Úplatformr9   Úgetfilesystemencodingr7   rc   rd   rf   ©r`   rr   rg   r=   Zfs_encr%   r%   r&   Ú%test_sdist_with_utf8_encoded_filenamev  s&    




z3TestSdistTest.test_sdist_with_utf8_encoded_filenamec                    sB   t |tƒr ‡ fdd„| ¡ D ƒS t |tƒr:ttˆ j|ƒƒS t|ƒS )Nc                    s   i | ]\}}|ˆ   |¡“qS r%   )rØ   )rˆ   ÚkeyÚvalue©Úclsr%   r&   Ú
<dictcomp>™  s      z.TestSdistTest.make_strings.<locals>.<dictcomp>)r+   Údictrº   Úlistr²   rØ   r,   )rà   Úitemr%   rß   r&   rØ   –  s
    

zTestSdistTest.make_stringsc              	   C   s¾   t |  t¡ƒ}d|_t|ƒ}| ¡  tj dt	j
¡}t|ƒ tj |¡sLt‚tƒ � | ¡  W 5 Q R X tjdkr t ¡ }|dkr„d}| |¡}||jjksºt‚n| d¡}||jjksºt‚d S )NrV   rÇ   rÕ   r×   rÒ   )r   rØ   rk   rm   r
   rn   r.   r2   re   r   rC   rL   Úisfilerf   r'   ro   r    rÙ   rÚ   r7   rc   rd   rÛ   r%   r%   r&   Ú'test_sdist_with_latin1_encoded_filenamež  s"    


z5TestSdistTest.test_sdist_with_latin1_encoded_filenamezÐ
            [metadata]
            name = testing
            version = file: src/VERSION.txt
            license_files = DOWHATYOUWANT
            long_description = file: README.rst, USAGE.rst
            a  
            [project]
            name = "testing"
            readme = "USAGE.rst"
            license = {file = "DOWHATYOUWANT"}
            dynamic = ["version"]
            [tool.setuptools.dynamic]
            version = {file = ["src/VERSION.txt"]}
            a	  
            [project]
            name = "testing"
            readme = "USAGE.rst"
            license = {file = "DOWHATYOUWANT"}
            dynamic = ["version"]
            [tool.setuptools.dynamic]
            version = {file = "src/VERSION.txt"}
            )z(setup.cfg - long_description and versionz@pyproject.toml - static readme/license files and dynamic versionz3pyproject.toml - directive with str instead of listÚconfigc              	   C   s*  |  d¡\}}}| j| }|d  ¡  |d jddd� |d jddd� |d	 jddd� |d
 jddd� || j|dd� tdg iƒ}d|_| ¡  t|ƒ}| ¡  t	ƒ � | 
¡  W 5 Q R X d|jjksàd|jjksàt‚d	|jjksðt‚d
|jjk�st‚d|jjk�st‚d|jjk�s&t‚d S )Nz - rR   zsrc/VERSION.txtz0.42r4   rW   z
README.rstzhello world!z	USAGE.rstZDOWHATYOUWANTr   rV   zsrc\VERSION.txtr*   ú\)Ú	partitionÚ_EXAMPLE_DIRECTIVESr\   r]   r   rm   Úparse_config_filesr
   rn   r'   ro   rc   rd   rf   )r`   rb   rç   Úconfig_fileÚ_Zconfig_textrr   rg   r%   r%   r&   Ú.test_add_files_referenced_by_config_directivesÚ  s.    

ÿ
þz<TestSdistTest.test_add_files_referenced_by_config_directivesc              	   C   s\   t |d ƒ ttƒ}d|_t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |jj	}d|ksXt
‚dS )zW
        Check if pyproject.toml is included in source distribution if present
        úpyproject.tomlrV   N)rL   r   rk   rm   r
   rn   r'   ro   rc   rd   rf   r³   r%   r%   r&   Útest_pyproject_toml_in_sdist÷  s    z*TestSdistTest.test_pyproject_toml_in_sdistc              	   C   s‚   t |d ƒ tdddd��}td|d� W 5 Q R X ttƒ}d|_t|ƒ}| ¡  tƒ � | 	¡  W 5 Q R X |j
j}d|ks~t‚d	S )
zH
        Check that pyproject.toml can excluded even if present
        rï   r«   r¬   r4   rW   zexclude pyproject.toml)r½   rV   N)rL   r;   Úprintr   rk   rm   r
   rn   r'   ro   rc   rd   rf   )r`   rb   Zmtsrr   rg   rh   r%   r%   r&   Útest_pyproject_toml_excluded  s    z*TestSdistTest.test_pyproject_toml_excludedc              	   C   sæ   t |d ƒ ttddi–ƒ}t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X |jj}d|ksZt	‚ttddi–ƒ}| 
d¡}|jd
•|_G dd„ dtƒ}|jj|d� t|ƒ}d	|_| ¡  tƒ � | ¡  W 5 Q R X |jj}d|ksât	‚d S )Nú.myfile~rm   rV   Úbuild©Úbuild_customNc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zFTestSdistTest.test_build_subcommand_source_files.<locals>.build_customc                 S   s   d S r   r%   r•   r%   r%   r&   Úinitialize_options'  r±   zYTestSdistTest.test_build_subcommand_source_files.<locals>.build_custom.initialize_optionsc                 S   s   d S r   r%   r•   r%   r%   r&   Úfinalize_options)  r±   zWTestSdistTest.test_build_subcommand_source_files.<locals>.build_custom.finalize_optionsc                 S   s   d S r   r%   r•   r%   r%   r&   ro   +  r±   zJTestSdistTest.test_build_subcommand_source_files.<locals>.build_custom.runc                 S   s   dgS )Nró   r%   r•   r%   r%   r&   Úget_source_files-  s    zWTestSdistTest.test_build_subcommand_source_files.<locals>.build_custom.get_source_filesN)r˜   r™   rš   r÷   rø   ro   rù   r%   r%   r%   r&   rö   &  s   rö   )rö   T)rõ   )rL   r   rk   r
   rn   r'   ro   rc   rd   rf   Úget_command_objÚsub_commandsr   r    ÚupdateZuse_defaults)r`   rb   rr   rg   rh   rô   rö   r%   r%   r&   Ú"test_build_subcommand_source_files  s(    

z0TestSdistTest.test_build_subcommand_source_filesz6os.environ.get('SETUPTOOLS_USE_DISTUTILS') == 'stdlib'c              	   C   sN   t tdddt d¡iidœ–ƒ}t|ƒ}| ¡  tƒ � | ¡  W 5 Q R X dS )zS
        Ensure if build_base is a pathlib.Path, the build still succeeds.
        rV   rô   Ú
build_base)rm   ÚoptionsN)r   rk   Úpathlibr   r
   rn   r'   ro   )r`   rb   rr   rg   r%   r%   r&   Útest_build_base_pathlib:  s    ý
z%TestSdistTest.test_build_base_pathlibN),r˜   r™   rš   rP   Zfixturerb   ri   rs   rt   rv   rw   rx   r€   rŽ   Úskip_under_stdlib_distutilsÚmarkÚparametrizeÚkeysr‘   r¤   r¨   rª   r®   r´   r¿   r   rÆ   rÊ   Úskip_under_xdistrÌ   rÑ   Ú fail_on_latin1_encoded_filenamesrÓ   rÜ   ÚclassmethodrØ   ræ   rê   rî   rð   rò   rý   Úskipifr  r%   r%   r%   r&   rU   „   sh   

ö+&(

 
#


	ï
%
rU   c                  C   s(   t j d¡\} |  ¡ }t|dƒs$t‚dS )aÎ  
    When _default_revctrl was removed from the `setuptools.command.sdist`
    module in 10.0, it broke some systems which keep an old install of
    setuptools (Distribute) around. Those old versions require that the
    setuptools package continue to implement that interface, so this
    function provides that interface, stubbed. See #320 for details.

    This interface must be maintained until Ubuntu 12.04 is no longer
    supported (by Setuptools).
    zg
        [setuptools.file_finders]
        svn_cvs = setuptools.command.sdist:_default_revctrl
        Ú__iter__N)r   ZEntryPointsÚ
_from_textÚloadÚhasattrrf   )ÚepÚresr%   r%   r&   Útest_default_revctrlJ  s
    ÿr  c                   @   sT   e Zd ZdZedd„ ƒZej dd¡dd„ ƒZ	edd	„ ƒZ
ej dd
¡dd„ ƒZdS )ÚTestRegressionszp
    Can be removed/changed if the project decides to change how it handles symlinks
    or external files.
    c                 C   s&   dddiit d|›d�ƒdddœdœS )	NÚdirúfile.hrµ   á[  
                    from setuptools import Extension, setup
                    setup(
                        name="myproj",
                        version="42",
                        ext_modules=[
                            Extension(
                                "hello", sources=["hello.pyx"],
                                depends=[úe]
                            )
                        ],
                    )
                    úglobal-include *.h©rV   z	hello.pyxr«   ©ÚexternalÚprojectr   )Útmp_pathÚdep_pathr%   r%   r&   Ú&files_for_symlink_in_extension_dependse  s     ÿ
ÿïüz6TestRegressions.files_for_symlink_in_extension_dependsr  )zmyheaders/dir/file.hzmyheaders/dir/../dir/file.hc                 C   sZ   |   ||¡}tjj|t|ƒd� t|d |d ƒ t||d ƒ}dD ]}||ksDt‚qDd S )N©Úprefixr  zproject/myheadersr  )zmyproj-42/hello.pyxzmyproj-42/myheaders/dir/file.h)r  Újaracor2   rô   r,   rT   Ú	run_sdistrf   )r`   Úmonkeypatchr  r  rd   ÚmembersÚexpectedr%   r%   r&   Ú!test_symlink_in_extension_depends€  s    z1TestRegressions.test_symlink_in_extension_dependsc                 C   sJ   |  d¡\}}}|r| | n|}dddiitdt|ƒ›d�ƒdddœd	œS )
Nz$tmp_path$/r  r  rµ   r  r  r  r  r  )ré   r   r,   )r  r  Úheadrí   Útailr%   r%   r&   Ú,files_for_external_path_in_extension_depends’  s     ÿÿïüz<TestRegressions.files_for_external_path_in_extension_depends)z$tmp_path$/external/dir/file.hz../external/dir/file.hc                 C   sH   |   ||¡}tjj|t|ƒd� t||d ƒ}|D ]}d|ks2t‚q2d S )Nr  r  r  )r(  r   r2   rô   r,   r!  rf   )r`   r"  r  r  rd   r#  r   r%   r%   r&   Ú'test_external_path_in_extension_depends°  s
    z7TestRegressions.test_external_path_in_extension_dependsN)r˜   r™   rš   r›   Ústaticmethodr  rP   r  r  r%  r(  r)  r%   r%   r%   r&   r  _  s   
 ÿ

 ÿr  c              
   C   sl   |   |¡ tƒ � tddgƒ W 5 Q R X t|d  d¡ƒ}t t|ƒ¡�}t| 	¡ ƒW  5 Q R £ S Q R X dS )z@Given a project directory, run the sdist and return its contentsrV   r
   rr   z*.tar.gzN)
Úchdirr'   r   ÚnextÚglobÚtarfiler;   r,   ÚsetÚgetnames)r"  r  ÚarchiveÚtarr%   r%   r&   r!  ¾  s    
r!  c              	   C   sJ   t  | ¡�}| ¡ }W 5 Q R X dd„ |D ƒ}t|ƒdksFtd|› �ƒ‚d S )Nc                 S   s   g | ]}d |kr|‘qS )z.toxr%   )rˆ   r   r%   r%   r&   r�   Î  s      z:test_sanity_check_setuptools_own_sdist.<locals>.<listcomp>r   z
not empty )r.  r;   r0  r�   rf   )Zsetuptools_sdistr2  rd   Z	tox_filesr%   r%   r&   Ú&test_sanity_check_setuptools_own_sdistÉ  s    r3  )Cr›   Ú
contextlibr#   r†   r.   r   r    r.  rA   r5   Úinspectr   r   Zunittestr   Zjaraco.pathr   rP   rJ   r   r   Zsetuptools._importlibr   Zsetuptools.command.egg_infor	   Zsetuptools.command.sdistr
   Zsetuptools.distr   Zsetuptools.extensionr   Zsetuptools.testsr   Útextr   Ú	distutilsÚdistutils.corer   r2   re   rk   r^   rl   r   r   r_   Úcontextmanagerr'   r3   r9   r?   rH   r  Zxfailr  r	  r  Ú__package__Ú
startswithr  rL   rT   rU   r  r  r!  r3  r%   r%   r%   r&   Ú<module>   sŒ   û	ûÿ	ý

	þþþ	     K_