U
    aÊ¹jq¬  ã                   @  sö   d dl m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Zd dlmZ d dlmZ d dlmZmZmZ d dlmZ d	d
lmZmZ d	dlmZ G dd„ deƒZejdd„ ƒZ G dd„ dƒZ!G dd„ dƒZ"dS )é    )ÚannotationsN)ÚPath)Úmock)Úpath)Úerrors)Úegg_infoÚmanifest_makerÚwrite_entries)ÚDistributioné   )ÚcontextsÚenvironment)ÚDALSc                   @  s   e Zd ZdS )ÚEnvironmentN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/tests/test_egg_info.pyr      s   r   c               	   #  sŒ   t jdd��v‰ tˆ ƒ} t ˆ tj¡ d}t‡ fdd„|D ƒƒ| _t	t
tj| j ¡ ƒƒ t | jd dtd| j ƒii¡ | V  W 5 Q R X d S )	Nzsetuptools-test.)Úprefix)ÚhomeÚlibÚscriptsÚdatazegg-basec                 3  s    | ]}|t j ˆ |¡fV  qd S )N)Úosr   Újoin)Ú.0Údirname©Zenv_dirr   r   Ú	<genexpr>"   s     zenv.<locals>.<genexpr>r   z.pydistutils.cfgzT
                [egg_info]
                egg-base = %(egg-base)s
                )r   Útempdirr   r   ÚchmodÚstatÚS_IRWXUÚdictÚpathsÚlistÚmapÚmkdirÚvaluesr   Úbuildr   )ÚenvÚsubsr   r   r   r+      s"     üÿÿÿr+   c                   @  sD  e Zd ZedƒZdd„ Zedddœdd„ƒZd	d
„ Zedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdœdd„Zdjejd d�Zdjejd d�Zd ZG d!d"„ d"ƒZejd#d$d%d&d'd(d)d*d+d,d-eeed.�d/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zej  d;ed<ƒd=d>œd?fed@ƒd=d>œdfedAƒd=d>œd?fed<ƒdBd=dCœd?fej!edDƒd=d>œd?dEdF�g¡dGdH„ ƒZ"ej  dIedJƒdKdLdMœdNdOgg fedPƒdKdLdMœdNdOgg fedQƒdKdLdMœdNgdOgfedRƒdKdLdMœg dNdOgfedSƒdKdLdMœdOgdNgfedTƒd=dUœdNgdVgfedAƒd=d>œdWgg fedXƒdBd=dCœdWgg fedJƒdYdKdLdZœdNdOgg fej!d[dKd\d]d^dLd_d`daœdNdbdcdddedWgdfgdgdF�ej!edhƒdKdidjœdNgdkgdldF�ej!edmƒdKdUœdNgg dndF�g¡dodp„ ƒZ#ej  dIedqƒdKdLdMœg dNdOgfedrƒdKdLdMœg dNdOgfedsƒdKdtdLduœdNdvdOgg fedwƒdKdtdLduœdNdvdOgg fedxƒdKdtdLduœdNdOgdvgfedsƒd=dyœdvgdNdOgfedzƒd{dKdtdLd|œdNdvdOgg fej!ed}ƒdKdidjœdNgdkgdldF�ej!ed~ƒdKd]d^dœdNdcgddgd€dF�g	¡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’„ Z,d“d”„ Z-d•d–„ Z.d�d˜d™„Z/dšd›„ Z0d—S )žÚTestEggInfozà
        from setuptools import setup

        setup(
            name='foo',
            py_modules=['hello'],
            entry_points={'console_scripts': ['hi = hello.run']},
            zip_safe=False,
        )
        c                 C  s   t  | jtdƒdœ¡ d S )NzO
                def run():
                    print('hello')
                )úsetup.pyzhello.py)r   r*   Úsetup_scriptr   )Úselfr   r   r   Ú_create_project@   s    ÿþzTestEggInfo._create_projectz	list[str]ztuple[int, int])Úpkg_info_linesÚreturnc                 C  s6   | d   d¡d }tt|  d¡d d… ƒ\}}||fS )Nr   ú r   Ú.é   )Úsplitr'   Úint)r2   Úversion_strÚmajorÚminorr   r   r   Ú_extract_mv_versionK   s    zTestEggInfo._extract_mv_versionc           	   	   C  sŽ   t j |jd d¡}tƒ }t|ƒ}| ¡  | |¡ t|ddd��}| 	¡ }W 5 Q R X d|ksbt
‚d|ksnt
‚d|kszt
‚d	}|  ||¡ d
S )z±
        When the egg_info section is empty or not present, running
        save_version_info should add the settings to the setup.cfg
        in a deterministic order.
        r   ú	setup.cfgÚrúutf-8©Úencodingú
[egg_info]útag_build =útag_date = 0©Z	tag_buildZtag_dateN)r   r   r   r%   r
   r   Úinitialize_optionsÚsave_version_infoÚopenÚreadÚAssertionErrorÚ_validate_content_order©	r0   Ú
tmpdir_cwdr+   Ú	setup_cfgÚdistÚeiÚfÚcontentZexpected_orderr   r   r   Ú+test_egg_info_save_version_info_setup_emptyQ   s    
z7TestEggInfo.test_egg_info_save_version_info_setup_emptyc                 C  s,   d  |¡}tjtjB }t || |¡s(t‚dS )zY
        Assert that the strings in expected appear in content
        in order.
        z.*N)r   ÚreÚ	MULTILINEÚDOTALLÚsearchrJ   )rR   ÚexpectedÚpatternÚflagsr   r   r   rK   k   s    
z#TestEggInfo._validate_content_orderc           	   	   C  s    t j |jd d¡}t |tdƒi¡ tƒ }t|ƒ}| ¡  | 	|¡ t
|ddd��}| ¡ }W 5 Q R X d|kstt‚d|ks€t‚d	|ksŒt‚d
}|  ||¡ dS )z²
        When running save_version_info on an existing setup.cfg
        with the 'default' values present from a previous run,
        the file should remain unchanged.
        r   r=   zU
            [egg_info]
            tag_build =
            tag_date = 0
            r>   r?   r@   rB   rC   rD   rE   N)r   r   r   r%   r*   r   r
   r   rF   rG   rH   rI   rJ   rK   rL   r   r   r   Ú.test_egg_info_save_version_info_setup_defaultsu   s$     ÿÿ	
z:TestEggInfo.test_egg_info_save_version_info_setup_defaultsc                 C  sB   |   ¡  |  ||¡ t d¡}ddddddg}t|ƒ|ks>t‚d S )Núfoo.egg-infoúPKG-INFOúSOURCES.txtzdependency_links.txtúentry_points.txtznot-zip-safeztop_level.txt)r1   Ú_run_egg_info_commandr   ÚlistdirÚsortedrJ   )r0   rM   r+   ÚactualrX   r   r   r   Útest_expected_files_produced˜   s    
úz(TestEggInfo.test_expected_files_producedc           	      C  s„   t ƒ }t|ƒ}tjdtdƒd�}tjdd d�}|�H |�8 dd l}d}tj|jj	|d�� | 
¡  W 5 Q R X W 5 Q R X W 5 Q R X d S )	Nzos.utimeZTEST)Zside_effectz+setuptools.command.egg_info.egg_info.mkpath)Ú
return_valr   z,Cannot update time stamp of directory 'None'©Úmatch)r
   r   r   ÚpatchÚOSErrorÚdistutils.errorsÚpytestÚraisesr   ÚDistutilsFileErrorÚrun)	r0   rM   r+   rO   rP   Zutime_patchZmkpath_patchÚ	distutilsÚmsgr   r   r   Útest_handling_utime_error¨   s     ÿz%TestEggInfo.test_handling_utime_errorc              	   C  sZ   t dƒ}t dƒ}t ||dœ¡ t t¡�}|  ||¡ W 5 Q R X d|jjd ksVt‚d S )Nzp
            [metadata]
            name=foo
            version=0.0.1
            license=file:MIT
            zK
            from setuptools import setup

            setup()
            ©r.   r=   Ú
ValueErrorr   )	r   r   r*   rk   rl   rJ   r`   ÚvalueÚargs)r0   rM   r+   Úsetup_configr/   Úexcr   r   r   Útest_license_is_a_string·   s    ÿ	ÿþz$TestEggInfo.test_license_is_a_stringc                 C  sR   |   ¡  |  ||¡ tj d¡}t d¡ |  ||¡ tj d¡}||ksNt‚dS )z9Ensure timestamps are updated when the command is re-run.r\   gü©ñÒMbP?N)r1   r`   r   r   ÚgetmtimeÚtimeÚsleeprJ   )r0   rM   r+   Ztimestamp_aZtimestamp_br   r   r   Útest_rebuiltØ   s    
zTestEggInfo.test_rebuiltc              	   C  sz   |   ¡  t tdƒddidœ¡ |  ||¡ tj dd¡}tj |d¡}t|dd	��}d
| ¡  	d¡kslt
‚W 5 Q R X d S )Nz:
                recursive-include docs *.rst
            z	usage.rstzRun 'hi')úMANIFEST.inÚdocsr5   r\   r^   r?   r@   zdocs/usage.rstÚ
©r1   r   r*   r   r`   r   r   rH   rI   r7   rJ   )r0   rM   r+   Úegg_info_dirZsources_txtrQ   r   r   r   Útest_manifest_template_is_readç   s    ÿ ÿú
z*TestEggInfo.test_manifest_template_is_readFc                 C  s4   t dƒ|rdn| }|r|nd}t ||dœ¡ d S )Nzi
            from setuptools import setup

            setup(name='foo', zip_safe=False, %s)
            Ú rr   )r   r   r*   )r0   ÚrequiresÚuse_setup_cfgr/   rv   r   r   r   Ú_setup_script_with_requiresù   s    ÿ
úþz'TestEggInfo._setup_script_with_requireszpython_version<'{this_ver}'r   )Zthis_verzpython_version < "{this_ver}"z<=>++c                   @  s   e Zd Zedd„ ƒZdS )zTestEggInfo.RequiresTestHelperc                    sú   g }g }| D ]Ú}|  ¡  dd¡}| d¡ d¡}t|ƒdkrT|d  ¡ }t |¡}ni }|d  ¡ }	‡ fdd„|D ƒ\}
}}|	|
df|	d	 |d
ffD ]P\}}}| |¡ d}| d¡rÊ|dd … }t	j
j}| t	j|||||d�¡ q”qt	j
jd||d�S )Nz

é   r   r   r   c                   s   g | ]}t |ƒjf ˆ Ž‘qS r   )r   Úformat)r   Úa©Úformat_dictr   r   Ú
<listcomp>  s    z>TestEggInfo.RequiresTestHelper.parametrize.<locals>.<listcomp>FZ_in_setup_cfgTr   z@xfail
é   )Úmarksz;requires,use_setup_cfg,expected_requires,install_cmd_kwargs)Zids)Úlstripr7   ÚpopÚlenÚstripÚastÚliteral_evalÚappendÚ
startswithrk   ÚmarkZxfailÚparamÚparametrize)Z	test_listr‹   ZidlistZ	argvaluesÚtestZtest_paramsZname_kwargsÚvalÚinstall_cmd_kwargsÚnameZsetup_py_requiresZsetup_cfg_requiresÚexpected_requiresZid_r„   Zuse_cfgrŽ   r   rŠ   r   r™     sF    
ÿþ

ûÿ	ýz*TestEggInfo.RequiresTestHelper.parametrizeN)r   r   r   Ústaticmethodr™   r   r   r   r   ÚRequiresTestHelper  s   r    zÞ
        install_requires_deterministic

        install_requires=["wheel>=0.5", "pytest"]

        [options]
        install_requires =
            wheel>=0.5
            pytest

        wheel>=0.5
        pytest
        zÓ
        install_requires_ordered

        install_requires=["pytest>=3.0.2,!=10.9999"]

        [options]
        install_requires =
            pytest>=3.0.2,!=10.9999

        pytest!=10.9999,>=3.0.2
        zý
        install_requires_with_marker

        install_requires=["barbazquux;{mismatch_marker}"],

        [options]
        install_requires =
            barbazquux; {mismatch_marker}

        [:{mismatch_marker_alternate}]
        barbazquux
        zâ
        install_requires_with_extra
        {'cmd': ['egg_info']}

        install_requires=["barbazquux [test]"],

        [options]
        install_requires =
            barbazquux [test]

        barbazquux[test]
        a  
        install_requires_with_extra_and_marker

        install_requires=["barbazquux [test]; {mismatch_marker}"],

        [options]
        install_requires =
            barbazquux [test]; {mismatch_marker}

        [:{mismatch_marker_alternate}]
        barbazquux[test]
        z¾
        setup_requires_with_markers

        setup_requires=["barbazquux;{mismatch_marker}"],

        [options]
        setup_requires =
            barbazquux; {mismatch_marker}

        zó
        extras_require_with_extra
        {'cmd': ['egg_info']}

        extras_require={{"extra": ["barbazquux [test]"]}},

        [options.extras_require]
        extra = barbazquux [test]

        [extra]
        barbazquux[test]
        aF  
        extras_require_with_extra_and_marker_in_req

        extras_require={{"extra": ["barbazquux [test]; {mismatch_marker}"]}},

        [options.extras_require]
        extra =
            barbazquux [test]; {mismatch_marker}

        [extra]

        [extra:{mismatch_marker_alternate}]
        barbazquux[test]
        zø
        extras_require_with_marker

        extras_require={{":{mismatch_marker}": ["barbazquux"]}},

        @xfail
        [options.extras_require]
        :{mismatch_marker} = barbazquux

        [:{mismatch_marker}]
        barbazquux
        a(  
        extras_require_with_marker_in_req

        extras_require={{"extra": ["barbazquux; {mismatch_marker}"]}},

        [options.extras_require]
        extra =
            barbazquux; {mismatch_marker}

        [extra]

        [extra:{mismatch_marker_alternate}]
        barbazquux
        zŸ
        extras_require_with_empty_section

        extras_require={{"empty": []}},

        [options.extras_require]
        empty =

        [empty]
        )Úinvalid_markerÚmismatch_markerÚmismatch_marker_alternatec              	   C  s    |   ||¡ | j||f|Ž tj dd¡}tj |d¡}tj |¡rft|dd��}	|	 ¡ }
W 5 Q R X nd}
|
 ¡ |kszt	‚t
 
tj |jd d¡¡g ksœt	‚d S )	Nr5   r\   zrequires.txtr?   r@   rƒ   r   úbarbazquux*)r†   r`   r   r   r   ÚexistsrH   rI   r�   rJ   Úglobr%   )r0   rM   r+   r„   r…   rž   rœ   r�   Zrequires_txtÚfpZinstall_requiresr   r   r   Útest_requires9  s     zTestEggInfo.test_requiresc              	   C  s4   d}|   |¡ t t¡� |  ||¡ W 5 Q R X dS )z 
        Packages that pass unordered install_requires sequences
        should be rejected as they produce non-deterministic
        builds. See #458.
        z0install_requires={"fake-factory==0.5.2", "pytz"}N)r†   rk   rl   rJ   r`   )r0   rM   r+   Úreqr   r   r   Ú*test_install_requires_unordered_disallowedã  s    
z6TestEggInfo.test_install_requires_unordered_disallowedc              	   C  sd   d}|j | jd�}|  |¡ t t¡� |  ||¡ W 5 Q R X t tj	 
|jd d¡¡g ks`t‚d S )Nz/extras_require={{":{marker}": ["barbazquux"]}},©Úmarkerr   r¤   ©rˆ   r¡   r†   rk   rl   rJ   r`   r¦   r   r   r   r%   ©r0   rM   r+   Útmplr©   r   r   r   Ú'test_extras_require_with_invalid_markerî  s    
z3TestEggInfo.test_extras_require_with_invalid_markerc              	   C  sd   d}|j | jd�}|  |¡ t t¡� |  ||¡ W 5 Q R X t tj	 
|jd d¡¡g ks`t‚d S )Nz5extras_require={{"extra": ["barbazquux; {marker}"]}},r«   r   r¤   r­   r®   r   r   r   Ú.test_extras_require_with_invalid_marker_in_reqö  s    
z:TestEggInfo.test_extras_require_with_invalid_marker_in_reqc           	   	   C  sª   |   d¡ tj ¡ j|jd d�}tjdgtj 	|jd t
|ƒg¡d|d�\}}tj 	dd	¡}ttj 	|d
¡dd��}| ¡  d¡}W 5 Q R X d|ksšt‚d|ks¦t‚d S )Nz*extras_require={"foobar": ["barbazquux"]},r   ©ÚHOMEr   r   r   ©ÚcmdÚpypathÚdata_streamr+   r5   r\   r]   r?   r@   r   zProvides-Extra: foobarúMetadata-Version: 2.1©r†   r   ÚenvironÚcopyÚupdater%   r   Úrun_setup_pyÚpathsepr   Ústrr   rH   rI   r7   rJ   ©	r0   rM   r+   rº   Úcoder   r�   r§   r2   r   r   r   Útest_provides_extraþ  s    

ÿü
zTestEggInfo.test_provides_extrac              	   C  s”   |   d¡ tj ¡ j|jd d�}tjdgtj 	|jd t
|ƒg¡d|d� tj 	dd	¡}ttj 	|d
¡dd��}| ¡ }W 5 Q R X d|ks�t‚d S )Nz0install_requires=["spam ; python_version<'3.6'"]r   r²   r   r   r   r´   r5   r\   r]   r?   r@   zProvides-Extra:)r†   r   rº   r»   r¼   r%   r   r½   r¾   r   r¿   r   rH   rI   rJ   )r0   rM   r+   rº   r�   r§   Zpkg_info_textr   r   r   Útest_doesnt_provides_extra  s     ÿ
ÿüz&TestEggInfo.test_doesnt_provides_extrazfiles, license_in_sourcesz}
                              [metadata]
                              license_file = LICENSE
                              zTest license)r=   ÚLICENSETz…
                              [metadata]
                              license_file = INVALID_LICENSE
                              z
                              zexclude LICENSE)r=   r}   rÄ   z�
                              [metadata]
                              license_file = LICEN[CS]E*
                              Zglob_pattern)Úidc                 C  s†   |   ¡  t |¡ tjdgtj |jd t	|ƒg¡d� tj dd¡}t
|dƒjdd�}|rjd	|ks‚t‚nd	|ksvt‚d
|ks‚t‚d S )Nr   r   ©rµ   r¶   r5   r\   r^   r?   r@   rÄ   ÚINVALID_LICENSE)r1   r   r*   r   r½   r   r¾   r   r%   r¿   r   Ú	read_textrJ   )r0   rM   r+   ÚfilesZlicense_in_sourcesr�   Úsources_textr   r   r   Útest_setup_cfg_license_file!  s    B
þz'TestEggInfo.test_setup_cfg_license_filez#files, incl_licenses, excl_licenseszÒ
                              [metadata]
                              license_files =
                                  LICENSE-ABC
                                  LICENSE-XYZ
                              úABC licenseúXYZ license)r=   úLICENSE-ABCúLICENSE-XYZrÎ   rÏ   z�
                              [metadata]
                              license_files = LICENSE-ABC, LICENSE-XYZ
                              z¤
                              [metadata]
                              license_files =
                                  LICENSE-ABC
                              zv
                              [metadata]
                              license_files =
                              z‚
                              [metadata]
                              license_files = LICENSE-XYZ
                              zÖ
                              [metadata]
                              license_files =
                                  LICENSE-ABC
                                  INVALID_LICENSE
                              )r=   rÎ   rÇ   rÄ   z~
                              [metadata]
                              license_files = LICENSE
                              zexclude LICENSE-XYZ)r=   r}   rÎ   rÏ   rƒ   zABC copyingz
ABC noticezABC authorsÚLicensezInvalid license)r=   rÎ   úCOPYING-ABCú
NOTICE-ABCúAUTHORS-ABCúLICENCE-XYZrÄ   úINVALID-LICENSErÑ   rÒ   rÓ   rÔ   rÕ   Zdefault_glob_patternsz¡
                              [metadata]
                              license_files =
                                  LICENSE*
                              z
XYZ notice)r=   rÎ   ú
NOTICE-XYZrÖ   Zno_default_glob_patternszÏ
                              [metadata]
                              license_files =
                                  LICENSE-ABC
                                  LICENSE*
                              Zfiles_only_added_oncec           
      C  s¦   |   ¡  t |¡ tjdgtj |jd t	|ƒg¡d� tj dd¡}t
|dƒjdd�}d	d
„ | ¡ D ƒ}|D ]}	| |	¡dksnt‚qn|D ]}	| |	¡dksŠt‚qŠd S )Nr   r   rÆ   r5   r\   r^   r?   r@   c                 S  s   g | ]}|  ¡ ‘qS r   ©r’   ©r   Úliner   r   r   rŒ   A  s     z<TestEggInfo.test_setup_cfg_license_files.<locals>.<listcomp>r   r   ©r1   r   r*   r   r½   r   r¾   r   r%   r¿   r   rÈ   Ú
splitlinesÚcountrJ   ©
r0   rM   r+   rÉ   Zincl_licensesZexcl_licensesr�   rÊ   Zsources_linesÚlfr   r   r   Útest_setup_cfg_license_filesu  s     C
þz(TestEggInfo.test_setup_cfg_license_filesz£
                              [metadata]
                              license_file =
                              license_files =
                              zÑ
                              [metadata]
                              license_file =
                                  LICENSE-ABC
                                  LICENSE-XYZ
                              a  
                              [metadata]
                              license_file = LICENSE-ABC
                              license_files =
                                  LICENSE-XYZ
                                  LICENSE-PQR
                              zPQR license)r=   rÎ   úLICENSE-PQRrÏ   rà   a9  
                              [metadata]
                              license_file = LICENSE-ABC
                              license_files =
                                  LICENSE-ABC
                                  LICENSE-XYZ
                                  LICENSE-PQR
                              zÝ
                              [metadata]
                              license_file = LICENSE-ABC
                              license_files =
                                  LICENSE-XYZ
                              )r=   rà   a  
                              [metadata]
                              license_file = LICENSE-ABC
                              license_files =
                                LICENSE-PQR
                                LICENSE-XYZ
                              z'exclude LICENSE-ABC
exclude LICENSE-PQR)r=   r}   rÎ   rà   rÏ   z~
                              [metadata]
                              license_file = LICENSE*
                              zÔ
                              [metadata]
                              license_file = LICENSE*
                              license_files =
                                NOTICE*
                              )r=   rÎ   rÒ   rÓ   Zcombined_glob_patterrnsc           
      C  s¦   |   ¡  t |¡ tjdgtj |jd t	|ƒg¡d� tj dd¡}t
|dƒjdd�}d	d
„ | ¡ D ƒ}|D ]}	| |	¡dksnt‚qn|D ]}	| |	¡dksŠt‚qŠd S )Nr   r   rÆ   r5   r\   r^   r?   r@   c                 S  s   g | ]}|  ¡ ‘qS r   r×   rØ   r   r   r   rŒ   ù  s     zITestEggInfo.test_setup_cfg_license_file_license_files.<locals>.<listcomp>r   r   rÚ   rÝ   r   r   r   Ú)test_setup_cfg_license_file_license_filesI  s     '
þz5TestEggInfo.test_setup_cfg_license_file_license_filesc              	   C  sÐ   |   ¡  t tdƒdddddœ¡ tjdgtj |j	d t
|ƒg¡d	� tj d
d¡}ttj |d¡dd��}| ¡  d¡}W 5 Q R X dd„ |D ƒ}d|d ks¤t‚d|dd… ks¸t‚d|dd… ksÌt‚dS )zCAll matched license files should have a corresponding License-File.zË
                              [metadata]
                              license_files =
                                  NOTICE*
                                  LICENSE*
                              rÌ   rÍ   Zincludedznot include)r=   rÎ   rÏ   ZNOTICEZIGNOREr   r   rÆ   r5   r\   r]   r?   r@   r   c                 S  s   g | ]}|  d ¡r|‘qS )zLicense-File:)r–   rØ   r   r   r   rŒ     s    
 z?TestEggInfo.test_license_file_attr_pkg_info.<locals>.<listcomp>zLicense-File: NOTICEr   zLicense-File: LICENSE-ABCr   NzLicense-File: LICENSE-XYZ)r1   r   r*   r   r   r½   r   r¾   r   r%   r¿   rH   rI   r7   rJ   )r0   rM   r+   r�   r§   r2   Zlicense_file_linesr   r   r   Útest_license_file_attr_pkg_info  s.    ÿôþÿz+TestEggInfo.test_license_file_attr_pkg_infoc              	   C  sŠ   |   d¡ tjdgtj |jd t|ƒg¡dd�\}}tj dd¡}t	tj |d¡d	d
��}| 
¡  d¡}W 5 Q R X |  |¡dks†t‚dS )z5Make sure latest metadata version is used by default.rƒ   r   r   r   ©rµ   r¶   r·   r5   r\   r]   r?   r@   r   )r6   r   N)r†   r   r½   r   r¾   r   r%   r¿   r   rH   rI   r7   r<   rJ   ©r0   rM   r+   rÁ   r   r�   r§   r2   r   r   r   Útest_metadata_version$  s    
ý
z!TestEggInfo.test_metadata_versionc           
   	   C  s®   |   d¡ tj ¡ j|jd d�}tjdgtj 	|jd t
|ƒg¡d|d�\}}tj 	dd	¡}ttj 	|d
¡dd��}| ¡  d¡}W 5 Q R X d}	|	|ksžt‚d|ksªt‚d S )Nz.long_description_content_type='text/markdown',r   r²   r   r   r   r´   r5   r\   r]   r?   r@   r   z'Description-Content-Type: text/markdownr¸   r¹   ©
r0   rM   r+   rº   rÁ   r   r�   r§   r2   Zexpected_liner   r   r   Ú"test_long_description_content_type2  s$    ÿ
ÿü
z.TestEggInfo.test_long_description_content_typec           	   	   C  s¾   |   d¡ tjdgtj |jd t|ƒg¡dd�\}}tj dd¡}t	tj |d¡d	d
��}| 
¡  d¡}W 5 Q R X d|ks€t‚d|d ks�t‚|| d¡d … }d|ks®t‚d|ksºt‚d S )Nzqlong_description='This is a long description\nover multiple lines',long_description_content_type='text/markdown',r   r   r   rã   r5   r\   r]   r?   r@   r   r¸   rƒ   éÿÿÿÿzThis is a long descriptionzover multiple lines)r†   r   r½   r   r¾   r   r%   r¿   r   rH   rI   r7   rJ   Úindex)	r0   rM   r+   rÁ   r   r�   r§   r2   Zlong_desc_linesr   r   r   Útest_long_descriptionM  s     ÿý
z!TestEggInfo.test_long_descriptionc           
   	   C  sÄ   |   d¡ tj ¡ j|jd d�}tjdgtj 	|jd t
|ƒg¡d|d�\}}tj 	dd	¡}ttj 	|d
¡dd��}| ¡  d¡}W 5 Q R X d}	|	|ksžt‚d}	|	|ks®t‚|  |¡dksÀt‚d S )Nz‘project_urls={
                'Link One': 'https://example.com/one/',
                'Link Two': 'https://example.com/two/',
                },r   r²   r   r   r   r´   r5   r\   r]   r?   r@   r   z/Project-URL: Link One, https://example.com/one/z/Project-URL: Link Two, https://example.com/two/©r   r6   ©r†   r   rº   r»   r¼   r%   r   r½   r¾   r   r¿   r   rH   rI   r7   rJ   r<   ræ   r   r   r   Útest_project_urlsd  s(    ÿ
ÿü
zTestEggInfo.test_project_urlsc              	   C  s„   |   d¡ tjdgtj |jd t|ƒg¡dd�\}}tj dd¡}t	tj |d¡d	d
��}| 
¡  d¡}W 5 Q R X d|ks€t‚dS )zTest single line license.zlicense='MIT',r   r   r   rã   r5   r\   r]   r?   r@   r   zLicense: MITN©r†   r   r½   r   r¾   r   r%   r¿   r   rH   rI   r7   rJ   rä   r   r   r   Útest_license„  s    
ý
zTestEggInfo.test_licensec              	   C  s¢   |   d¡ tjdgtj |jd t|ƒg¡dd�\}}tj dd¡}t	tj |d¡d	d
��}| 
¡  d¡}W 5 Q R X d|ks€t‚d|ksŒt‚dd |¡ksžt‚dS )z:Test license is escaped correctly if longer than one line.z<license='This is a long license text \nover multiple lines',r   r   r   rã   r5   r\   r]   r?   r@   r   z%License: This is a long license text z        over multiple linesztext 
        over multipleNrî   rä   r   r   r   Útest_license_escape‘  s    ÿý
zTestEggInfo.test_license_escapec           	   	   C  s°   |   d¡ tj ¡ j|jd d�}tjdgtj 	|jd t
|ƒg¡d|d�\}}tj 	dd	¡}ttj 	|d
¡dd��}| ¡  d¡}W 5 Q R X d|ksšt‚|  |¡dks¬t‚d S )Nzpython_requires='>=2.7.12',r   r²   r   r   r   r´   r5   r\   r]   r?   r@   r   zRequires-Python: >=2.7.12rë   rì   rÀ   r   r   r   Útest_python_requires_egg_info£  s    

ÿü
z)TestEggInfo.test_python_requires_egg_infoc                 C  s$   ddg}|D ]}t  |¡st‚qd S )Nz:standard file not found: should have one of foo.py, bar.pyz"standard file 'setup.py' not found)r   Z_should_suppress_warningrJ   )r0   Zfixturesrp   r   r   r   Ú'test_manifest_maker_warning_suppression´  s
    þz3TestEggInfo.test_manifest_maker_warning_suppressionc              	   C  s€   |   ¡  tdddœƒ}d|_t|ƒ}| ¡  | ¡  d|jjksDt‚t	|jd dd�� }| 
¡  d	¡}d|ksrt‚W 5 Q R X d S )
NÚfooú0.0.1©r�   Úversionznon_setup.pyr.   z/SOURCES.txtr?   r@   r   )r1   r
   Úscript_namer   Úfinalize_optionsrn   ÚfilelistrÉ   rJ   rH   rI   r7   )r0   rM   rO   Zegg_info_instancerQ   Úsourcesr   r   r   Útest_egg_info_includes_setup_py½  s    z+TestEggInfo.test_egg_info_includes_setup_pyNc                 C  sr   t j ¡ j|jd d�}|d kr&dg}tj|t j |jd t	|ƒg¡d|d�\}}|r^t
|ƒ‚|rn||ksnt
‚d S )Nr   r²   r   r   r   r´   )r   rº   r»   r¼   r%   r   r½   r¾   r   r¿   rJ   )r0   rM   r+   rµ   Úoutputrº   rÁ   r   r   r   r   r`   Ë  s    
ÿÿü
z!TestEggInfo._run_egg_info_commandc              	   C  st   |   ¡  t dtdƒi¡ |  ||¡ tj dd¡}ttj |d¡dd��}| ¡  	d¡}W 5 Q R X d	|kspt
‚d S )
Nr=   zÔ
                              [egg_info]
                              tag_build = dev
                              tag_date = 0
                              tag_svn_revision = 0
                              r5   r\   r]   r?   r@   r   zVersion: 0.0.0.dev0r€   )r0   rM   r+   r�   r§   r2   r   r   r   Útest_egg_info_tag_only_onceÞ  s     ÿÿ
z'TestEggInfo.test_egg_info_tag_only_once)F)NN)1r   r   r   r   r/   r1   rŸ   r<   rS   rK   r[   rd   rq   rx   r|   r‚   r†   rˆ   ÚsysÚversion_infor¢   r£   r¡   r    r™   r¨   rª   r°   r±   rÂ   rÃ   rk   r—   r˜   rË   rß   rá   râ   rå   rç   rê   rí   rï   rð   rñ   rò   rû   r`   rý   r   r   r   r   r-   2   s�  ÿ
	#!
ÿÿ)
€ í 
ÿù	öÿù	öÿûøÿø
õÿù	õÐþA
ÿöòÿø
ôÿ÷óÿø
ôÿø
ôÿ÷óÿû÷ÿø
ôÿõðøúëÿ÷òÿ÷ò€ Õþ @
ÿ÷óÿöñÿ	ôðÿ
óîÿõðÿ	öñÿ	óîÿø
óÿõð€ óþ $
# 	
r-   c                   @  s   e Zd Zdd„ Zdd„ ZdS )ÚTestWriteEntriesc              	   C  sf   t dddœƒ}ddi|_| d¡}d}tjtj|d��&}t|dd	ƒ d
|jj	d ksXt
‚W 5 Q R X d S )Nró   rô   rõ   zfoo = invalid-identifier:foor   z(Problems to parse .*invalid-identifier.*rf   Úentry_pointsr_   z#ensure entry-point follows the specr   )r
   r  Úget_command_objrk   rl   r   ÚOptionErrorr	   rt   ru   rJ   )r0   rM   r+   rO   rµ   Zexpected_msgÚexr   r   r   Útest_invalid_entry_pointò  s    

z)TestWriteEntries.test_invalid_entry_pointc                 C  s^   t dddœƒ}ddgdœ|_| d¡}t|dd	ƒ td	ƒjd
d�}d|ksNt‚d|ksZt‚d S )Nró   rô   rõ   zfoo = bar:bazzfaa = bor:boz)ÚabcÚdefr   r  r_   r?   r@   z[abc]
foo = bar:baz
z[def]
faa = bor:boz
)r
   r  r  r	   r   rÈ   rJ   )r0   rM   r+   rO   rµ   rR   r   r   r   Útest_valid_entry_pointû  s    þ
z'TestWriteEntries.test_valid_entry_pointN)r   r   r   r  r  r   r   r   r   r   ñ  s   	r   )#Ú
__future__r   r“   r¦   r   rT   r"   rþ   rz   Úpathlibr   Zunittestr   rk   Zjaracor   Ú
setuptoolsr   Zsetuptools.command.egg_infor   r   r	   Zsetuptools.distr
   rƒ   r   r   Útextwrapr   r¿   r   Zfixturer+   r-   r   r   r   r   r   Ú<module>   s<   
         H