o
    5‘ði�¯  ã                   @  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   ú]/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/tests/test_egg_info.pyr      s    r   c               
   #  s¬   � t jdd��E‰ tˆ ƒ} t ˆ tj¡ d}t‡ fdd„|D ƒƒ| _t	t
tj| j ¡ ƒƒ t | jd dtdjd	i | j¤Žƒii¡ | V  W d   ƒ d S 1 sOw   Y  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©Úenv_dirr   r   Ú	<genexpr>"   s   €  zenv.<locals>.<genexpr>r   z.pydistutils.cfgzR
                [egg_info]
                egg-base = {egg-base}
                r   )r   Útempdirr   r   ÚchmodÚstatÚS_IRWXUÚdictÚpathsÚlistÚmapÚmkdirÚvaluesr   Úbuildr   Úformat)ÚenvÚsubsr   r   r   r-      s(   €ýýÿÿÿ
"ðr-   c                   @  sX  e Zd ZedƒZdd„ Ze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ejd › d�Zd 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d0�d1d2„ ƒZd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zej d=ed>ƒd?d@œdAfedBƒd?d@œdfedCƒd?d@œdAfed>ƒdDd?dEœdAfej edFƒd?d@œdAdGdH�g¡dIdJ„ ƒZ!ej dKedLƒdMdNdOœdPdQgg fedRƒdMdNdOœdPdQgg fedSƒdMdNdOœdPgdQgfedTƒdMdNdOœg dPdQgfedUƒdMdNdOœdQgdPgfedVƒd?dWœdPgdXgfedCƒd?d@œdYgg fedZƒdDd?dEœdYgg fedLƒd[dMdNd\œdPdQgg fej d]dMd^d_d`dNdadbdcœg dd¢degdfdH�ej edgƒdMdhdiœdPgdjgdkdH�ej edlƒdMdWœdPgg dmdH�ej ednƒdMdodYdpidqœdYdrgdsgdtdH�g¡dudv„ ƒZ"ej dKedwƒdMdNdOœg dPdQgfedxƒdMdNdOœg dPdQgfedyƒdMdzdNd{œg d|¢g fed}ƒdMdzdNd{œg d|¢g fed~ƒdMdzdNd{œdPdQgdgfedyƒd?d€œdgdPdQgfed�ƒd‚dMdzdNdƒœg d|¢g fej ed„ƒdMdhdiœdPgdjgdkdH�ej ed…ƒdMd_d`d†œdPd‡gdˆgd‰dH�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¤„ Z/d 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_projectÚpkg_info_linesú	list[str]Úreturnútuple[int, int]c                 C  s6   | d   d¡d }tt|  d¡d d… ƒ\}}||fS )Nr   ú r   Ú.é   )Úsplitr(   Úint)r4   Úversion_strÚmajorÚminorr   r   r   Ú_extract_mv_versionJ   s   zTestEggInfo._extract_mv_versionc           	      C  s¢   t j |jd d¡}tƒ }t|ƒ}| ¡  | |¡ t|ddd��}| 	¡ }W d  ƒ n1 s0w   Y  d|v s;J ‚d|v sAJ ‚d	|v sGJ ‚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©ÚencodingNú
[egg_info]útag_build =útag_date = 0©Ú	tag_buildÚtag_date)r   r   r   r&   r
   r   Úinitialize_optionsÚsave_version_infoÚopenÚreadÚ_validate_content_order©	r2   Ú
tmpdir_cwdr-   Ú	setup_cfgÚdistÚeiÚfÚcontentÚexpected_orderr   r   r   Ú+test_egg_info_save_version_info_setup_emptyP   s   

ÿz7TestEggInfo.test_egg_info_save_version_info_setup_emptyc                 C  s,   d  |¡}tjtjB }t || |¡sJ ‚dS )zY
        Assert that the strings in expected appear in content
        in order.
        z.*N)r   ÚreÚ	MULTILINEÚDOTALLÚsearch)rW   ÚexpectedÚpatternÚflagsr   r   r   rP   j   s   
z#TestEggInfo._validate_content_orderc           	      C  s´   t j |jd d¡}t |tdƒi¡ tƒ }t|ƒ}| ¡  | 	|¡ t
|ddd��}| ¡ }W d  ƒ n1 s9w   Y  d|v sDJ ‚d	|v sJJ ‚d
|v sPJ ‚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   rA   zU
            [egg_info]
            tag_build =
            tag_date = 0
            rB   rC   rD   NrF   rG   rH   rI   )r   r   r   r&   r+   r   r
   r   rL   rM   rN   rO   rP   rQ   r   r   r   Ú.test_egg_info_save_version_info_setup_defaultst   s$   ÿÿ	

ÿz:TestEggInfo.test_egg_info_save_version_info_setup_defaultsc                 C  s:   |   ¡  |  ||¡ t d¡}g d¢}t|ƒ|ksJ ‚d S )Núfoo.egg-info)úPKG-INFOúSOURCES.txtzdependency_links.txtúentry_points.txtznot-zip-safeztop_level.txt)r3   Ú_run_egg_info_commandr   ÚlistdirÚsorted)r2   rR   r-   Úactualr^   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�}|�F |�+ dd l}d}tj|jj	|d�� | 
¡  W d   ƒ n1 s;w   Y  W d   ƒ n1 sJw   Y  W d   ƒ d S W d   ƒ d S 1 sbw   Y  d S )	Nzos.utimeÚTEST)Ú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)	r2   rR   r-   rT   rU   Úutime_patchÚmkpath_patchÚ	distutilsÚmsgr   r   r   Útest_handling_utime_error§   s   ÿ
ÿ€Püz%TestEggInfo.test_handling_utime_errorc                 C  sn   t dƒ}t dƒ}t ||dœ¡ t t¡�}|  ||¡ W d   ƒ n1 s&w   Y  d|jjd v s5J ‚d S )Nzp
            [metadata]
            name=foo
            version=0.0.1
            license=file:MIT
            zK
            from setuptools import setup

            setup()
            ©r0   rA   Ú
ValueErrorr   )	r   r   r+   rs   rt   ÚAssertionErrorrf   ÚvalueÚargs)r2   rR   r-   Úsetup_configr1   Ú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s'J ‚dS )z9Ensure timestamps are updated when the command is re-run.rb   gü©ñÒMbP?N)r3   rf   r   r   ÚgetmtimeÚtimeÚsleep)r2   rR   r-   Útimestamp_aÚtimestamp_br   r   r   Útest_rebuilt×   s   
zTestEggInfo.test_rebuiltc                 C  s�   |   ¡  t tdƒddidœ¡ |  ||¡ tj dd¡}tj |d¡}t|dd	��}d
| ¡  	d¡v s6J ‚W d   ƒ d S 1 sAw   Y  d S )Nz:
                recursive-include docs *.rst
            z	usage.rstzRun 'hi')úMANIFEST.inÚdocsr9   rb   rd   rC   rD   zdocs/usage.rstÚ
©
r3   r   r+   r   rf   r   r   rN   rO   r;   )r2   rR   r-   Úegg_info_dirÚsources_txtrV   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)
            Ú r|   )r   r   r+   )r2   ÚrequiresÚuse_setup_cfgr1   r�   r   r   r   Ú_setup_script_with_requiresø   s   ÿ
úþz'TestEggInfo._setup_script_with_requireszpython_version<'r   ú'zpython_version < "ú"z<=>++c                   @  s   e Zd Zedd„ ƒZdS )zTestEggInfo.RequiresTestHelperc                    sú   g }g }| D ]m}|  ¡  dd¡}| d¡ d¡}t|ƒdkr*|d  ¡ }t |¡}ni }|d  ¡ }	‡ fdd„|D ƒ\}
}}|	|
df|	d	 |d
ffD ](\}}}| |¡ d}| d¡re|dd … }t	j
j}| t	j|||||d�¡ qJqt	j
jd||d�S )Nz

é   r   rŒ   r   c                   s    g | ]}t |ƒjd i ˆ ¤Ž‘qS )r   )r   r,   )r   Úa©Úformat_dictr   r   Ú
<listcomp>  s    ÿz>TestEggInfo.RequiresTestHelper.parametrize.<locals>.<listcomp>FÚ_in_setup_cfgTr   z@xfail
é   )Úmarks)r’   r“   Úexpected_requiresÚinstall_cmd_kwargs)Úids)Úlstripr;   ÚpopÚlenÚstripÚastÚliteral_evalÚappendÚ
startswithrs   ÚmarkÚxfailÚparamÚparametrize)Ú	test_listrš   ÚidlistÚ	argvaluesÚtestÚtest_paramsÚname_kwargsÚvalr    ÚnameÚsetup_py_requiresÚsetup_cfg_requiresrŸ   Úid_r’   Úuse_cfgrž   r   r™   r   r­     sH   
ÿþ

ûÿ÷ø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i |¤Ž tj dd¡}tj |d¡}tj |¡r?t|dd��}	|	 ¡ }
W d   ƒ n1 s9w   Y  nd}
|
 ¡ |ksIJ ‚t	 	tj |j
d d¡¡g ksZJ ‚d S )	Nr9   rb   zrequires.txtrC   rD   r‘   r   úbarbazquux*)r”   rf   r   r   r   ÚexistsrN   rO   r¢   Úglobr&   )r2   rR   r-   r’   r“   rŸ   r    rŽ   Úrequires_txtÚfpÚinstall_requiresr   r   r   Útest_requires9  s    
ÿ€&zTestEggInfo.test_requiresc                 C  sJ   d}|   |¡ t t¡� |  ||¡ W d  ƒ dS 1 sw   Y  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”   rs   rt   r~   rf   )r2   rR   r-   Úreqr   r   r   Ú*test_install_requires_unordered_disallowedã  s
   
"ÿz6TestEggInfo.test_install_requires_unordered_disallowedc                 C  óx   d}|j | jd�}|  |¡ t t¡� |  ||¡ W d   ƒ n1 s$w   Y  t tj	 
|jd d¡¡g ks:J ‚d S )Nz/extras_require={{":{marker}": ["barbazquux"]}},©Úmarkerr   r¿   ©r,   r¼   r”   rs   rt   r~   rf   rÁ   r   r   r   r&   ©r2   rR   r-   ÚtmplrÆ   r   r   r   Ú'test_extras_require_with_invalid_markerî  ó   
ÿ&z3TestEggInfo.test_extras_require_with_invalid_markerc                 C  rÈ   )Nz5extras_require={{"extra": ["barbazquux; {marker}"]}},rÉ   r   r¿   rË   rÌ   r   r   r   Ú.test_extras_require_with_invalid_marker_in_reqö  rÏ   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 d   ƒ n1 sJw   Y  d|v sUJ ‚d|v s[J ‚d S )Nz*extras_require={"foobar": ["barbazquux"]},r   ©ÚHOMEr   r   r   ©ÚcmdÚpypathÚdata_streamr-   r9   rb   rc   rC   rD   rŒ   zProvides-Extra: foobarúMetadata-Version: 2.4©r”   r   ÚenvironÚcopyÚupdater&   r   Úrun_setup_pyÚpathsepr   Ústrr   rN   rO   r;   ©r2   rR   r-   rÙ   rŽ   rÃ   r4   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 d   ƒ n1 sGw   Y  d|vsRJ ‚d S )Nz0install_requires=["spam ; python_version<'3.6'"]r   rÑ   r   r   r   rÓ   r9   rb   rc   rC   rD   zProvides-Extra:)r”   r   rÙ   rÚ   rÛ   r&   r   rÜ   rÝ   r   rÞ   r   rN   rO   )r2   rR   r-   rÙ   rŽ   rÃ   Úpkg_info_textr   r   r   Útest_doesnt_provides_extra  s"   ÿ
ÿü
ÿz&TestEggInfo.test_doesnt_provides_extra)ÚfilesÚlicense_in_sourcesz}
                              [metadata]
                              license_file = LICENSE
                              zTest license)rA   ÚLICENSETz…
                              [metadata]
                              license_file = INVALID_LICENSE
                              z
                              zexclude LICENSE)rA   rŠ   rå   z�
                              [metadata]
                              license_file = LICEN[CS]E*
                              Ú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�}|r6d	|v s4J ‚d S d	|vs<J ‚d
|vsBJ ‚d S )Nr   r   ©rÔ   rÕ   r9   rb   rd   rC   rD   rå   ÚINVALID_LICENSE)r3   r   r+   r   rÜ   r   rÝ   r   r&   rÞ   r   Ú	read_text)r2   rR   r-   rã   rä   rŽ   Úsources_textr   r   r   Útest_setup_cfg_license_file!  s   B
þz'TestEggInfo.test_setup_cfg_license_file)rã   Úincl_licensesÚexcl_licenseszÒ
                              [metadata]
                              license_files =
                                  LICENSE-ABC
                                  LICENSE-XYZ
                              úABC licenseúXYZ license)rA   ú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
                              )rA   rñ   ré   rå   z~
                              [metadata]
                              license_files = LICENSE
                              zexclude LICENSE-XYZ)rA   rŠ   rñ   rò   r‘   zABC copyingz
ABC noticezABC authorsÚLicensezInvalid license)rA   rñ   úCOPYING-ABCú
NOTICE-ABCúAUTHORS-ABCúLICENCE-XYZrå   úINVALID-LICENSE)rñ   rô   rõ   rö   r÷   rå   rø   Údefault_glob_patternsz¡
                              [metadata]
                              license_files =
                                  LICENSE*
                              z
XYZ notice)rA   rñ   ú
NOTICE-XYZrú   Úno_default_glob_patternszÏ
                              [metadata]
                              license_files =
                                  LICENSE-ABC
                                  LICENSE*
                              Úfiles_only_added_oncez�
                              [metadata]
                              license_files = **/LICENSE
                              zDon't includeúVendor license)rA   rå   úLICENSE-OTHERÚvendorzvendor/LICENSErþ   Úrecursive_globc           
      C  ó¦   |   ¡  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sBJ ‚q7|D ]}	| |	¡dksPJ ‚qEd S )Nr   r   rè   r9   rb   rd   rC   rD   c                 S  ó   g | ]}|  ¡ ‘qS r   ©r¥   ©r   Úliner   r   r   r›   Q  ó    z<TestEggInfo.test_setup_cfg_license_files.<locals>.<listcomp>r   r   ©r3   r   r+   r   rÜ   r   rÝ   r   r&   rÞ   r   rê   Ú
splitlinesÚcount©
r2   rR   r-   rã   rí   rî   rŽ   rë   Úsources_linesÚlfr   r   r   Útest_setup_cfg_license_filesu  s    S
þÿ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)rA   rñ   úLICENSE-PQRrò   )rñ   r  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  )rA   r  a  
                              [metadata]
                              license_file = LICENSE-ABC
                              license_files =
                                LICENSE-PQR
                                LICENSE-XYZ
                              z'exclude LICENSE-ABC
exclude LICENSE-PQR)rA   rŠ   rñ   r  rò   z~
                              [metadata]
                              license_file = LICENSE*
                              zÔ
                              [metadata]
                              license_file = LICENSE*
                              license_files =
                                NOTICE*
                              )rA   rñ   rõ   rö   rõ   rö   Úcombined_glob_patterrnsc           
      C  r  )Nr   r   rè   r9   rb   rd   rC   rD   c                 S  r  r   r  r  r   r   r   r›   	  r  zITestEggInfo.test_setup_cfg_license_file_license_files.<locals>.<listcomp>r   r   r  r
  r   r   r   Ú)test_setup_cfg_license_file_license_filesY  s    '
þÿz5TestEggInfo.test_setup_cfg_license_file_license_filesc              	   C  s
  |   ¡  t tdƒddddddidœ¡ tjd	gtj |j	d
 t
|ƒg¡d� tj dd¡}ttj |d¡dd��}| ¡  d¡}W d  ƒ n1 sKw   Y  dd„ |D ƒ}t|ƒdks_J ‚d|d ksgJ ‚d|dd… v sqJ ‚d|dd… v s{J ‚d|d v sƒJ ‚dS )zCAll matched license files should have a corresponding License-File.zø
                              [metadata]
                              license_files =
                                  NOTICE*
                                  LICENSE*
                                  **/LICENSE
                              rï   rð   Úincludedznot includerå   rý   )rA   rñ   rò   ÚNOTICEÚIGNORErÿ   r   r   rè   r9   rb   rc   rC   rD   rŒ   Nc                 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   zLicense-File: LICENSE-XYZzLicense-File: vendor/LICENSEr—   )r3   r   r+   r   r   rÜ   r   rÝ   r   r&   rÞ   rN   rO   r;   r¤   )r2   rR   r-   rŽ   rÃ   r4   Úlicense_file_linesr   r   r   Útest_license_file_attr_pkg_info  s6   ÿ	òþÿÿ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 d  ƒ n1 s=w   Y  |  |¡dksKJ ‚dS )z5Make sure latest metadata version is used by default.r‘   r   r   r   ©rÔ   rÕ   rÖ   r9   rb   rc   rC   rD   rŒ   N)r:   r  )r”   r   rÜ   r   rÝ   r   r&   rÞ   r   rN   rO   r;   r@   ©r2   rR   r-   rŽ   rÃ   r4   r   r   r   Útest_metadata_version8  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 d   ƒ n1 sJw   Y  d}||v sWJ ‚d|v s]J ‚d S )Nz.long_description_content_type='text/markdown',r   rÑ   r   r   r   rÓ   r9   rb   rc   rC   rD   rŒ   z'Description-Content-Type: text/markdownr×   rØ   ©r2   rR   r-   rÙ   rŽ   rÃ   r4   Úexpected_liner   r   r   Ú"test_long_description_content_typeF  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 d   ƒ n1 s=w   Y  d|v sHJ ‚d|d ksPJ ‚|| d¡d … }d|v s_J ‚d|v seJ ‚d S )Nzqlong_description='This is a long description\nover multiple lines',long_description_content_type='text/markdown',r   r   r   r  r9   rb   rc   rC   rD   rŒ   r×   r‘   éÿÿÿÿzThis is a long descriptionzover multiple lines)r”   r   rÜ   r   rÝ   r   r&   rÞ   r   rN   rO   r;   Úindex)r2   rR   r-   rŽ   rÃ   r4   Úlong_desc_linesr   r   r   Útest_long_descriptiona  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 d   ƒ n1 sJw   Y  d}||v sWJ ‚d}||v s_J ‚|  |¡dkshJ ‚d S )Nz‘project_urls={
                'Link One': 'https://example.com/one/',
                'Link Two': 'https://example.com/two/',
                },r   rÑ   r   r   r   rÓ   r9   rb   rc   rC   rD   rŒ   z/Project-URL: Link One, https://example.com/one/z/Project-URL: Link Two, https://example.com/two/©r   r:   ©r”   r   rÙ   rÚ   rÛ   r&   r   rÜ   rÝ   r   rÞ   r   rN   rO   r;   r@   r  r   r   r   Útest_project_urlsx  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 d  ƒ n1 s=w   Y  d|v sHJ ‚dS )zTest single line license.zlicense='MIT',r   r   r   r  r9   rb   rc   rC   rD   rŒ   NzLicense: MIT©r”   r   rÜ   r   rÝ   r   r&   rÞ   r   rN   rO   r;   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 d  ƒ n1 s=w   Y  d|v sHJ ‚d|v sNJ ‚dd |¡v sWJ ‚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  r9   rb   rc   rC   rD   rŒ   Nz%License: This is a long license text z        over multiple linesztext 
        over multipler$  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 d   ƒ n1 sJw   Y  d|v sUJ ‚|  |¡dks^J ‚d S )Nzpython_requires='>=2.7.12',r   rÑ   r   r   r   rÓ   r9   rb   rc   rC   rD   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J ‚qd S )Nz:standard file not found: should have one of foo.py, bar.pyz"standard file 'setup.py' not found)r   Ú_should_suppress_warning)r2   Úfixturesrz   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v s"J ‚t|jd dd��}| 	¡  
d	¡}d|v s9J ‚W d   ƒ d S 1 sDw   Y  d S )
NÚfooú0.0.1©rµ   Úversionznon_setup.pyr0   z/SOURCES.txtrC   rD   rŒ   )r3   r
   Úscript_namer   Úfinalize_optionsrv   Úfilelistrã   rN   rO   r;   )r2   rR   rT   Úegg_info_instancerV   Úsourcesr   r   r   Útest_egg_info_includes_setup_pyÑ  s   "þz+TestEggInfo.test_egg_info_includes_setup_pyNc                 C  sv   t j ¡ j|jd d�}|d u rdg}tj|t j |jd t	|ƒg¡d|d�\}}|r/J |ƒ‚|r7||v s9J ‚d S d S )Nr   rÑ   r   r   r   rÓ   )
r   rÙ   rÚ   rÛ   r&   r   rÜ   rÝ   r   rÞ   )r2   rR   r-   rÔ   ÚoutputrÙ   Úcoder   r   r   r   rf   ß  s"   
ÿÿ
üÿz!TestEggInfo._run_egg_info_commandc                 C  sˆ   |   ¡  t dtdƒi¡ |  ||¡ tj dd¡}ttj |d¡dd��}| ¡  	d¡}W d   ƒ n1 s7w   Y  d	|v sBJ ‚d S )
NrA   zÔ
                              [egg_info]
                              tag_build = dev
                              tag_date = 0
                              tag_svn_revision = 0
                              r9   rb   rc   rC   rD   rŒ   zVersion: 0.0.0.dev0r�   r  r   r   r   Útest_egg_info_tag_only_onceò  s   ÿÿ
ÿz'TestEggInfo.test_egg_info_tag_only_once)r4   r5   r6   r7   )F)NN)0r   r   r   r   r1   r3   rº   r@   rY   rP   ra   rj   r{   rƒ   r‰   r�   r”   ÚsysÚversion_infor½   r¾   r¼   r»   r­   rÅ   rÇ   rÎ   rÐ   rà   râ   rs   rª   r¬   rì   r  r  r  r  r  r   r#  r%  r&  r'  r*  r4  rf   r7  r   r   r   r   r/   1   s–   ÿ
	#!
.
 �ì 
ÿù	öÿù	öÿûøÿø
õÿù	õÐþ
Aÿöòÿø
ôÿ÷óÿø
ôÿø
ôÿ÷óÿû÷ÿø
ôÿõðø
ëÿ÷òÿ÷òÿ÷ò �Äþ 
Pÿ÷óÿöñÿ	ôðÿ
óîÿõðÿ	öñÿ	óîÿø
óÿõð �òþ 
$' 	
r/   c                   @  s   e Zd Zdd„ Zdd„ ZdS )ÚTestWriteEntriesc                 C  s’   t dddœƒ}ddi|_| d¡}d}tjtjtf|d��"}t|dd	ƒ d
|j	j
d v s.J ‚dt|j	ƒv s7J ‚W d   ƒ d S 1 sBw   Y  d S )Nr+  r,  r-  zfoo = invalid-identifier:foor   z,(Invalid object reference|Problems to parse)rn   Úentry_pointsre   z#ensure entry-point follows the specr   zinvalid-identifier)r
   r;  Úget_command_objrs   rt   r   ÚOptionErrorr}   r	   r   r€   rÞ   )r2   rR   r-   rT   rÔ   Ú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|v s'J ‚d|v s-J ‚d S )Nr+  r,  r-  zfoo = bar:bazzfaa = bor:boz)ÚabcÚdefr   r;  re   rC   rD   z[abc]
foo = bar:baz
z[def]
faa = bor:boz
)r
   r;  r<  r	   r   rê   )r2   rR   r-   rT   rÔ   rW   r   r   r   Útest_valid_entry_point  s   þ
z'TestWriteEntries.test_valid_entry_pointN)r   r   r   r@  rC  r   r   r   r   r:    s    
r:  )#Ú
__future__r   r¦   rÁ   r   rZ   r#   r8  r…   Úpathlibr   Úunittestr   rs   Újaracor   Ú
setuptoolsr   Úsetuptools.command.egg_infor   r   r	   Úsetuptools.distr
   r‘   r   r   Útextwrapr   rÞ   r   Úfixturer-   r/   r:  r   r   r   r   Ú<module>   s>    
         ]