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mZ ddlZddl	Z	ddl
mZ ddlmZ eejjdd�ZG d	d
„ d
ƒZG dd„ dƒZdd„ Zdd„ ZdS )z$Test .dist-info style distributions.é    N)Úpartial)Úunpack_archiveé   )ÚDALSúutf-8©Úencodingc                   @   sd   e Zd ZedƒZedd„ ƒZejdd„ ƒZ	dd„ Z
dd	„ Zd
d„ Zdd„ Zej dd¡dd„ ƒZdS )ÚTestDistInfoz›
        Metadata-Version: 1.2
        Requires-Dist: splort (==4)
        Provides-Extra: baz
        Requires-Dist: quux (>=1.1); extra == 'baz'
        c                 K   s"   dd„ |  ¡ D ƒ}| jd |¡ S )Nc                 s   s    | ]\}}d j f tƒ ŽV  qdS )z{key}: {value}
N)ÚformatÚlocals)Ú.0ÚkeyÚvalue© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/tests/test_dist_info.pyÚ	<genexpr>    s     z.TestDistInfo.build_metadata.<locals>.<genexpr>Ú )ÚitemsÚmetadata_baseÚjoin)ÚclsÚkwargsÚlinesr   r   r   Úbuild_metadata   s    zTestDistInfo.build_metadatac                 C   sv   d}|| }|  ¡  |d }| jdd�}|j|dd� d}|| }|  ¡  |d }| jdd	d
�}|j|dd� t|ƒS )Nz%VersionedDistribution-2.718.dist-infoÚMETADATAÚVersionedDistribution)ÚNamer   r   z!UnversionedDistribution.dist-infoÚUnversionedDistributionú0.3)r   ÚVersion)Úmkdirr   Ú
write_textÚstr)ÚselfZtmpdirZdist_info_nameÚ	versionedÚfilenameÚcontentÚunversionedr   r   r   Úmetadata#   s$    ÿþzTestDistInfo.metadatac                 C   s\   t dd„ t |¡D ƒƒ}t|ƒdks,t|ƒ‚|d }|d }|jdksJt‚|jdksXt‚d S )Nc                 s   s   | ]}|j |fV  qd S ©N)Úproject_name)r   Údr   r   r   r   ;   s    z-TestDistInfo.test_distinfo.<locals>.<genexpr>é   r   r   z2.718r   )ÚdictÚpkg_resourcesÚfind_distributionsÚlenÚAssertionErrorÚversion)r#   r(   Údistsr'   r$   r   r   r   Útest_distinfo:   s    ÿzTestDistInfo.test_distinfoc                 C   sv   d}t ttjj|ƒƒ}t |¡D ]P}| ¡ |d d… ks<t‚|jdd�|d tj d¡gks`t‚|jdgks t‚q d S )N)z	splort==4z	quux>=1.1r   )Úbaz)Úextrasr   zquux>=1.1;extra=="baz"r5   )	ÚlistÚmapr.   ÚRequirementÚparser/   Úrequiresr1   r6   )r#   r(   Úspecsr;   r+   r   r   r   Útest_conditional_dependenciesG   s    

þ
z*TestDistInfo.test_conditional_dependenciesc                 C   sh   d}|d j |dd� t dtjtjB ¡}td|dd�}|jsBt‚| |j	¡sRt‚t
| d	¡ƒrdt‚d
S )zA
        Supplying an invalid version crashes dist_info.
        z@[metadata]
name=proj
version=42
[egg_info]
tag_build=invalid!!!
ú	setup.cfgr   r   zinvalid versionÚ	dist_infoF)ÚcwdÚcheckú*.dist-infoN)r!   ÚreÚcompileÚMÚIÚrun_command_innerÚ
returncoder1   ÚsearchÚstdoutr7   Úglob)r#   Útmp_pathÚconfigÚmsgÚprocr   r   r   Útest_invalid_versionS   s    
z!TestDistInfo.test_invalid_versionc                 C   s†   d}|d j |dd� ttdd|d�ƒ t| d¡ƒ}|j d	¡sFt‚t 	|¡ ttdd
d|d�ƒ t| d¡ƒ}|j d¡s‚t‚d S )Nz
        [metadata]
        name=proj
        version=42
        [egg_info]
        tag_date=1
        tag_build=.post
        r>   r   r   r?   z	--no-date©r@   rB   zproj-42z--tag-buildz.azproj-42a)
r!   ÚprintÚrun_commandÚnextrK   ÚnameÚ
startswithr1   ÚshutilÚrmtree)r#   rL   rM   r?   r   r   r   Útest_tag_arguments_   s    
zTestDistInfo.test_tag_argumentsÚkeep_egg_info)FTc                 C   sô   d}|d j |dd� |d }| ¡  |r0dgng }tdd|f|žd	|iŽ tt| d
¡ƒƒdksft‚tt| d
¡ƒƒdks€t‚t|ƒ}tt| d¡ƒƒ|ks¢t‚tt| d¡ƒƒdks¼t‚tt| d¡ƒƒdksÖt‚tt| d¡ƒƒdksðt‚d S )Nz [metadata]
name=proj
version=42
r>   r   r   Z__outz--keep-egg-infor?   z--output-dirr@   rB   r   r   z
*.egg-infoz	*.__bkp__)r!   r    rS   r0   r7   rK   r1   Úint)r#   rL   rZ   rM   ÚoutÚoptsZexpected_egg_infor   r   r   Útest_output_dirs   s    zTestDistInfo.test_output_dirN)Ú__name__Ú
__module__Ú__qualname__r   r   Úclassmethodr   ÚpytestZfixturer(   r4   r=   rP   rY   ÚmarkÚparametrizer^   r   r   r   r   r	      s   ÿ	

r	   c                   @   sd   e Zd ZdZedƒZddddddd	d
gZej 	dd 
¡ ¡ej 	ddg¡ej 	de¡dd„ ƒƒƒZdS )ÚTestWheelCompatibilityz‡Make sure the .dist-info directory produced with the ``dist_info`` command
    is the same as the one produced by ``bdist_wheel``.
    ae  
    [metadata]
    name = {name}
    version = {version}

    [options]
    install_requires =
        foo>=12; sys_platform != "linux"

    [options.extras_require]
    test = pytest

    [options.entry_points]
    console_scripts =
        executable-name = my_package.module:function
    discover =
        myproj = my_package.other_module:function
    )r   r   )ú.postz[egg_info]
tag_build = post
)rg   z[egg_info]
tag_build = .post
)rg   z)[egg_info]
tag_build = post
tag_date = 1
)ú.devz[egg_info]
tag_build = .dev
)rh   z)[egg_info]
tag_build = .dev
tag_date = 1
)Za1z[egg_info]
tag_build = .a1
)z+localz[egg_info]
tag_build = +local
rU   zmy-proj my_proj my.proj My.Projr2   z0.42.13zsuffix, cfgc                 C   sì   | j j||d�| }dD ]&}||  ¡  || d j|dd� qtd|d d� t| d	¡ƒ}t||d
 ƒ t| d¡ƒ}	td|d d� t| d¡ƒ}
|
j|	jks¨t	‚|
j 
d|› |› �¡sÂt	‚dD ] }t|
| ƒt|	| ƒksÆt	‚qÆd S )N)rU   r2   )Ú	dir_wheelÚdir_distr>   r   r   Úbdist_wheelri   rQ   zdir_wheel/dist/*.whlÚunpackzunpack/*.dist-infor?   rj   zdir_dist/*.dist-infozmy_proj-)r   zentry_points.txt)ÚSETUPCFGr
   r    r!   rS   rT   rK   r   rU   r1   rV   Úread)r#   rU   r2   rL   ÚsuffixÚcfgrM   ÚiÚwheelZwheel_dist_infor?   Úfiler   r   r   Ú&test_dist_info_is_the_same_as_in_wheelª   s    z=TestWheelCompatibility.test_dist_info_is_the_same_as_in_wheelN)r_   r`   ra   Ú__doc__r   rm   ZEGG_INFO_OPTSrc   rd   re   Úsplitrt   r   r   r   r   rf   „   s"   ÿ÷rf   c                  O   s<   t jt jddddœ|–}tjddftt| ƒ•} t j| f|ŽS )NTr   )ÚstderrrJ   Útextr   rA   z-cz __import__('setuptools').setup())Ú
subprocessÚSTDOUTÚPIPEÚsysÚ
executabler8   r"   Úrun)Úcmdr   r]   r   r   r   rG   Ä   s    ûúrG   c                  O   s   t | |ŽjS r)   )rG   rJ   )Úargsr   r   r   r   rS   Ñ   s    rS   )ru   ÚpathlibrC   rW   ry   r|   Ú	functoolsr   rc   r.   Zsetuptools.archive_utilr   Útextwrapr   ÚPathÚ	read_textrn   r	   rf   rG   rS   r   r   r   r   Ú<module>   s   p@