U
    aÊ¹jz  ã                   @   sê   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Zd dlm	Z	m
Z
mZmZmZmZmZmZmZ dd„ ZG dd„ dejƒZej	jZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdS )é    N)ÚSpecifierSet)	ÚDistributionÚ
EntryPointÚRequirementÚVersionConflictÚ
WorkingSetÚparse_requirementsÚparse_versionÚ	safe_nameÚsafe_versionc                 C   s"   t  | ¡\}}t|dƒ t||ƒS )z$s -> (s0,s1), (s1,s2), (s2, s3), ...N)Ú	itertoolsÚteeÚnextÚzip)ÚiterableÚaÚb© r   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/pkg_resources/tests/test_resources.pyÚpairwise   s    
r   c                   @   s6   e Zd ZdZdd„ Zedœdd„Zdd„ Zd	d
„ ZdS )ÚMetadatazAMock object to return metadata as if from an on-disk distributionc                 G   s   t |ƒ| _d S ©N)ÚdictÚmetadata)ÚselfÚpairsr   r   r   Ú__init__#   s    zMetadata.__init__)Úreturnc                 C   s
   || j kS r   ©r   ©r   Únamer   r   r   Úhas_metadata&   s    zMetadata.has_metadatac                 C   s
   | j | S r   r   r   r   r   r   Úget_metadata)   s    zMetadata.get_metadatac                 C   s   t  |  |¡¡S r   )Úpkg_resourcesÚyield_linesr"   r   r   r   r   Úget_metadata_lines,   s    zMetadata.get_metadata_linesN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úboolr!   r"   r%   r   r   r   r   r       s
   r   c                   @   sø   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zd2dd„Z	dd„ Z
ejjeedƒ dd�Zdd„ Ze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(„ Zd)d*„ Zejjejd+d,… d-koäejjd.kd/d�d0d1„ ƒZ d+S )3Ú
TestDistroc              	   C   sÖ  t jg d d d�}t|ƒg ks t‚|d g ks0t‚| tdƒ¡ | tdƒ¡ | tdƒ¡ |d sft‚t|ƒdgksxt‚ddd	g}d
d„ |d D ƒ|ksœt‚| |d d ¡ dd„ |d D ƒdd	gksÌt‚| tdƒ¡ dd„ |d D ƒddd	gksút‚tg ƒ}tdƒ}tdƒ}tdƒ\}| 	||¡j
dk�s4t‚| |¡ | 	||¡j
dk�sVt‚tg ƒ}| |¡ | |¡ t t¡� | 	||¡ W 5 Q R X tg ƒ}| |¡ | |¡ | |¡ | 	||¡j
dk�sÒt‚d S )N)ÚplatformÚpythonÚFooPkgúFooPkg-1.3_1.eggzFooPkg-1.4-py2.4-win32.eggúFooPkg-1.2-py2.4.eggÚfoopkgz1.4ú1.3-1ú1.2c                 S   s   g | ]
}|j ‘qS r   ©Úversion©Ú.0Údistr   r   r   Ú
<listcomp>D   s     z-TestDistro.testCollection.<locals>.<listcomp>é   c                 S   s   g | ]
}|j ‘qS r   r4   r6   r   r   r   r9   H   s     zFooPkg-1.9.eggc                 S   s   g | ]
}|j ‘qS r   r4   r6   r   r   r   r9   L   s     z1.9zFooPkg>=1.3)r#   ÚEnvironmentÚlistÚAssertionErrorÚaddÚdist_from_fnÚremover   r   Ú
best_matchr5   ÚpytestÚraisesr   )r   ÚadÚexpectedÚwsZfoo12Zfoo14Úreqr   r   r   ÚtestCollection4   s>    
 






zTestDistro.testCollectionc                 C   s\   |j dkst‚|jdkst‚|jdks*t‚|jdks8t‚|jdksFt‚|jtdƒksXt‚d S )Nr.   r1   z	1.3.post1ú2.4Úwin32r2   )Úproject_namer=   Úkeyr5   Ú
py_versionr,   Úparsed_versionr	   ©r   Údr   r   r   ÚcheckFooPkgg   s    zTestDistro.checkFooPkgc                 C   sL   t dddddd�}|  |¡ t dƒ}|jdjtjŽ ks:t‚|jd ksHt‚d S )Nú
/some/pathr.   r2   rI   rJ   )rK   r5   rM   r,   z{}.{})r   rQ   rM   ÚformatÚsysÚversion_infor=   r,   rO   r   r   r   ÚtestDistroBasicso   s    û
zTestDistro.testDistroBasicsc                 C   s(   t dƒ}|  |¡ t dƒ}|  |¡ d S )Nz FooPkg-1.3.post1-py2.4-win32.eggz%FooPkg-1.3.post1-py2.4-win32.egg-info)r?   rQ   rO   r   r   r   ÚtestDistroParse}   s    
zTestDistro.testDistroParsec                 C   s$   t ddddtdƒd�}|  |¡ d S )NrR   r.   rI   rJ   )zPKG-INFOz%Metadata-Version: 1.0
Version: 1.3-1
)rK   rM   r,   r   )r   r   rQ   rO   r   r   r   ÚtestDistroMetadataƒ   s    ûzTestDistro.testDistroMetadatac                 C   s   t dtd|fƒd�S )Nz/fooúdepends.txtr   )r   r   )r   Útxtr   r   r   ÚdistRequires�   s    zTestDistro.distRequiresr   c                 C   s"   t | |¡ƒt t|ƒƒkst‚d S r   )r<   Úrequiresr   r=   )r   r8   rZ   Úextrasr   r   r   ÚcheckRequires�   s    zTestDistro.checkRequiresc                 C   s    dD ]}|   |  |¡|¡ qd S )N)úTwisted>=1.5zTwisted>=1.5
ZConfig>=2.0)r^   r[   )r   Úvr   r   r   ÚtestDistroDependsSimple“   s    z"TestDistro.testDistroDependsSimpleÚ__dir__z8object.__dir__ necessary for self.__dir__ implementation©Úreasonc                 C   s   t  ¡ }t|ƒ d S r   )r#   r   ÚdirrO   r   r   r   Útest_distribution_dirœ   s    z TestDistro.test_distribution_dirc                 C   sT   t  ¡ }| ¡ }d|kst‚d |j_| ¡ }t|ƒt|ƒd ksDt‚d|ksPt‚d S )NÚ	test_attrr:   )r#   r   rb   r=   Ú	_providerrg   Úlen©r   rP   ÚbeforeÚafterr   r   r   Ú+test_distribution_dir_includes_provider_dir    s    z6TestDistro.test_distribution_dir_includes_provider_dirc                 C   sP   t  ¡ }| ¡ }d|kst‚d |j_| ¡ }t|ƒt|ƒks@t‚d|ksLt‚d S )NÚ
_test_attr)r#   r   rb   r=   rh   rn   ri   rj   r   r   r   Ú=test_distribution_dir_ignores_provider_dir_leading_underscoreª   s    zHTestDistro.test_distribution_dir_ignores_provider_dir_leading_underscorec           	   	   C   s”  t  g ¡}tg ƒ}t| g |¡ƒg ks*t‚t t j¡� | t	dƒ|¡ W 5 Q R X t
jdtdƒd�}| |¡ | t
 d¡¡ tdƒD ]6}t| t	dƒ|¡ƒ}||gks¬t‚tt|j|ƒƒ q†t t¡� | t	dƒ|¡ W 5 Q R X tg ƒ}t t j¡� | t	dƒ|¡ W 5 Q R X t
jd	td
ƒd�}| |¡ t| t	dƒ|¡ƒ||gk�sRt‚t t¡�}| t	dƒ|¡ W 5 Q R X d}|j ¡ |k�s�t‚d S )NÚFooú/foo_dir/Foo-1.2.egg)rY   z[bar]
Baz>=2.0r   zFoo-0.9.eggé   zFoo==0.9zFoo[bar]z/foo_dir/Baz-2.1.egg)rY   rp   zFoo==1.2
Foo!=1.2z-Foo 0.9 is installed but Foo==1.2 is required)r#   r;   r   r<   Úresolver=   rB   rC   ÚDistributionNotFoundr   r   Úfrom_filenamer   r>   ÚrangeÚmapr   ÚvalueÚreport)	r   rD   rF   rp   ÚiÚtargetsÚBazÚvcÚmsgr   r   r   ÚtestResolve´   s<    
þ
 ÿ
"zTestDistro.testResolvec                 C   s6   t  g ¡}tg ƒ}| tdƒ|¡}t|ƒg ks2t‚dS )z5Environment markers are evaluated at resolution time.zFoo;python_version<'2'N)r#   r;   r   rs   r   r<   r=   )r   rD   rF   Úresr   r   r   Ú+test_environment_marker_evaluation_negativeÞ   s    
z6TestDistro.test_environment_marker_evaluation_negativec                 C   sL   t  g ¡}tg ƒ}t d¡}| |¡ | tdƒ|¡}t|ƒ|gksHt	‚d S )Nú/foo_dir/Foo-1.2.dist-infozFoo;python_version>='2')
r#   r;   r   r   ru   r>   rs   r   r<   r=   )r   rD   rF   rp   r€   r   r   r   Ú+test_environment_marker_evaluation_positiveå   s    


z6TestDistro.test_environment_marker_evaluation_positivec                 C   sh   t dƒ\}t dƒ\}t ||ji¡}| |¡s2t‚t dƒ\}t dƒ\}t ||ji¡}| |¡sdt‚dS )zy
        If one package foo requires bar without any extras,
        markers should pass for bar without extras.
        Úfoozbar;python_version>='2'zfoo[]N)r   r#   Ú
_ReqExtrasr]   Úmarkers_passr=   )r   Z
parent_reqrG   Ú
req_extrasr   r   r   Ú)test_environment_marker_evaluation_calledí   s    



z4TestDistro.test_environment_marker_evaluation_calledc                 C   sˆ   t  g ¡}tg ƒ}tjdtdƒd�}| |¡ t| t	dƒ|¡ƒ|gksLt
‚t d¡}| |¡ t| t	dƒ|¡ƒ}|||gks„t
‚dS )ú8Extras are also evaluated as markers at resolution time.r‚   )ÚMETADATAz5Provides-Extra: baz
Requires-Dist: quux; extra=='baz'r   rp   ú/foo_dir/quux-1.0.dist-infozFoo[baz]N©r#   r;   r   r   ru   r   r>   r<   rs   r   r=   ©r   rD   rF   rp   Úquuxr€   r   r   r   Ú"test_marker_evaluation_with_extrasü   s    
þ


z-TestDistro.test_marker_evaluation_with_extrasc                 C   sˆ   t  g ¡}tg ƒ}tjdtdƒd�}| |¡ t| t	dƒ|¡ƒ|gksLt
‚t d¡}| |¡ t| t	dƒ|¡ƒ}|||gks„t
‚dS )r‰   r‚   )rŠ   zIProvides-Extra: baz-lightyear
Requires-Dist: quux; extra=='baz-lightyear'r   rp   r‹   zFoo[baz-lightyear]NrŒ   r�   r   r   r   Ú,test_marker_evaluation_with_extras_normlized  s    
þ


z7TestDistro.test_marker_evaluation_with_extras_normlizedc                 C   s„   t  g ¡}tg ƒ}tjdtdƒd�}| |¡ t d¡}| |¡ t d¡}| |¡ t| t	dƒ|¡ƒ}t
|ƒ|||gks€t‚d S )Nr‚   )rŠ   zlProvides-Extra: baz
Requires-Dist: quux; extra=='baz'
Provides-Extra: bar
Requires-Dist: fred; extra=='bar'
r   r‹   z/foo_dir/fred-0.1.dist-infozFoo[baz,bar])r#   r;   r   r   ru   r   r>   r<   rs   r   Úsortedr=   )r   rD   rF   rp   rŽ   Zfredr€   r   r   r   Ú+test_marker_evaluation_with_multiple_extras!  s    
þ





z6TestDistro.test_marker_evaluation_with_multiple_extrasc           	      C   sš   t  g ¡}tg ƒ}tjdtdƒd�}tjdtdƒd�}tjdtdƒd�}t d¡}||||fD ]}| |¡ q^t| t	d	ƒ|¡ƒ}|||||gks–t
‚d S )
Nz/foo_dir/a-0.2.dist-info)rŠ   zRequires-Dist: c[a]r   z/foo_dir/b-0.3.dist-info)rŠ   zRequires-Dist: c[b]z/foo_dir/c-1.0.dist-info)rŠ   z]Provides-Extra: a
Requires-Dist: b;extra=='a'
Provides-Extra: b
Requires-Dist: foo;extra=='b'z/foo_dir/foo-0.1.dist-infor   rŒ   )	r   rD   rF   r   r   Úcr„   r8   r€   r   r   r   Ú'test_marker_evaluation_with_extras_loop6  s&    
þþþ

z2TestDistro.test_marker_evaluation_with_extras_loopNé   )rr   é   Úfinalz/https://github.com/python/cpython/issues/103632c              	   C   s’   |   d¡}|  |d¡ |  |d ¡ dg¡ |  |d ¡ dg¡ |  |d ¡ ddg¡ |  |d ¡ ddg¡ t tj¡� | d	g¡ W 5 Q R X d S )
Nz�
            Twisted>=1.5
            [docgen]
            ZConfig>=2.0
            docutils>=0.3
            [fastcgi]
            fcgiapp>=0.1r_   z'Twisted>=1.5 ZConfig>=2.0 docutils>=0.3ZdocgenzTwisted>=1.5 fcgiapp>=0.1Zfastcgiz4Twisted>=1.5 ZConfig>=2.0 docutils>=0.3 fcgiapp>=0.1z4Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3r„   )r[   r^   ÚsplitrB   rC   r#   ÚUnknownExtrar\   rO   r   r   r   ÚtestDistroDependsOptionsQ  s,    ÿ	  ÿýýz#TestDistro.testDistroDependsOptions)r   )!r&   r'   r(   rH   rQ   rV   rW   rX   r[   r^   ra   rB   ÚmarkZskipifÚhasattrÚobjectZneeds_object_dirrf   rm   ro   r   r�   rƒ   rˆ   r�   r�   r’   r”   ÚxfailrT   rU   Úreleaselevelrš   r   r   r   r   r+   3   s<   3


þ
	
	*þr+   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestWorkingSetc              	   C   sb   t g ƒ}t d¡}| |¡ ttdƒƒ}t t¡�}| 	|¡ W 5 Q R X d}|j
 ¡ |ks^t‚d S )Nrq   zFoo<1.2z,Foo 1.2 is installed but Foo<1.2 is required)r   r   ru   r>   r   r   rB   rC   r   Úfindrx   ry   r=   )r   rF   rp   rG   r}   r~   r   r   r   Útest_find_conflictings  s    

z$TestWorkingSet.test_find_conflictingc              	   C   sÀ   t g ƒ}tdƒ}tjd|d�}| |¡ tdƒ}tjd|d�}| |¡ t d¡}| |¡ t d¡}| |¡ t t¡�}| t	dƒ¡ W 5 Q R X d	}|t
td
gƒƒ7 }|j ¡ |ks¼t‚dS )z•
        A ContextualVersionConflict should be raised when a requirement
        conflicts with a prior requirement for a different package.
        )rY   zBaz==1.0z/foo_dir/Foo-1.0.eggr   )rY   zBaz==2.0z/foo_dir/Bar-1.0.eggz/foo_dir/Baz-1.0.eggz/foo_dir/Baz-2.0.eggzFoo
Bar
z1Baz 1.0 is installed but Baz==2.0 is required by ÚBarN)r   r   r   ru   r>   rB   rC   r   rs   r   ÚreprÚsetrx   ry   r=   )r   rF   Úmdrp   r£   r|   r}   r~   r   r   r   Ú!test_resolve_conflicts_with_prior�  s     





z0TestWorkingSet.test_resolve_conflicts_with_priorN)r&   r'   r(   r¢   r§   r   r   r   r   r    r  s   r    c                   @   s¦   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	Zej	 
d
e¡dd„ ƒZdd„ Zdd„ Zeedddgƒedddgddgƒedddgd�d�ZdZdd „ Zd!d"„ Zd#d$„ Zd%S )&ÚTestEntryPointsc                 C   s`   |j dkst‚|jdkst‚|jdks*t‚|jdks8t‚| ¡ tksHt‚d}t|ƒ|ks\t‚d S )Nr„   ú"pkg_resources.tests.test_resources)r¨   )Úxú<foo = pkg_resources.tests.test_resources:TestEntryPoints [x])r    r=   Úmodule_nameÚattrsr]   Úloadr¨   Ústr)r   ÚepÚexpectr   r   r   Úassertfields�  s    zTestEntryPoints.assertfieldsc                 C   s   t jdtdƒd�| _d S )Nr0   )zrequires.txtz[x]r   )r   ru   r   r8   )r   Úmethodr   r   r   Úsetup_method¦  s     ÿzTestEntryPoints.setup_methodc                 C   s$   t dddgdg| jƒ}|  |¡ d S )Nr„   r©   r¨   rª   )r   r8   r²   ©r   r°   r   r   r   Ú
testBasics«  s    ûzTestEntryPoints.testBasicsc                 C   sÀ   d}t  || j¡}|  |¡ t  d¡}|jdks4t‚|jdksBt‚|jdksPt‚|jdks^t‚t  d¡}|jdksvt‚|jd	ks„t‚|jd
ks’t‚|jdks t‚d}t  |¡}|jdks¼t‚d S )Nr«   zbar baz=  spammity[PING]zbar bazZspammityr   )Zpingz fizzly =  wocka:fooZfizzlyZwocka)r„   z0html+mako = mako.ext.pygmentplugin:MakoHtmlLexerz	html+mako)	r   Úparser8   r²   r    r=   r¬   r­   r]   )r   Úsr°   Úspecr   r   r   Ú	testParseµ  s     



zTestEntryPoints.testParse)r„   zx=a:b:czq=x/nazfez=pish:tush-zzx=f[a]>2Úreject_specc              	   C   s$   t  t¡� t |¡ W 5 Q R X d S r   )rB   rC   Ú
ValueErrorr   r·   )r   r»   r   r   r   Útest_reject_specÍ  s    z TestEntryPoints.test_reject_specc                 C   s4   t j ¡ }djf tƒ Ž}t |¡}|j|ks0t‚dS )z<
        Allow any printable character in the name.
        z{name} = module:attrN)	ÚstringÚ	printableÚstriprS   Úlocalsr   r·   r    r=   )r   r    r¹   r°   r   r   r   Útest_printable_nameÒ  s    

z#TestEntryPoints.test_printable_namec                 C   s–   t |ƒt | jƒkst‚| j ¡ D ]p\}}| |¡j|jks>t‚| |¡j|jksTt‚t| |¡jƒt|jƒksrt‚t| |¡j	ƒt|j	ƒks t‚q d S r   )
ri   Úsubmap_expectr=   ÚitemsÚgetr    r¬   r‘   r­   r]   )r   ÚmrL   r°   r   r   r   ÚcheckSubMapÜ  s    zTestEntryPoints.checkSubMapÚfeature1Z
somemoduleZsomefunctionÚfeature2zanother.moduleZ	SomeClassZextra1Zextra2Úfeature3zthis.moduleZ	something)r]   )rÈ   rÉ   rÊ   zÏ
            # define features for blah blah
            feature1 = somemodule:somefunction
            feature2 = another.module:SomeClass [extra1,extra2]
            feature3 = this.module [something]
    c              	   C   s`   |   t d| j¡¡ t t¡� t dd¡ W 5 Q R X t t¡� t dddg¡ W 5 Q R X d S )NÚxyzzx azfoo=barrª   zfoo=baz)rÇ   r   Úparse_groupÚ
submap_strrB   rC   r¼   ©r   r   r   r   ÚtestParseListò  s
    zTestEntryPoints.testParseListc              	   C   s²   t  d| ji¡}|  |d ¡ t| ¡ ƒdgks4t‚t  d| j ¡}|  |d ¡ t| ¡ ƒdgksht‚t t	¡� t  ddg¡ W 5 Q R X t t	¡� t  | j¡ W 5 Q R X d S )NrË   z[xyz]
z[xyz])
r   Ú	parse_maprÍ   rÇ   r<   Úkeysr=   rB   rC   r¼   )r   rÆ   r   r   r   ÚtestParseMapù  s    zTestEntryPoints.testParseMapc              	   C   s:   t dddgdgƒ}t tj¡� |jdd� W 5 Q R X d S )Nr„   r©   r¨   rª   F)Úrequire)r   rB   Úwarnsr#   ÚPkgResourcesDeprecationWarningr®   rµ   r   r   r   ÚtestDeprecationWarnings  s       ÿz'TestEntryPoints.testDeprecationWarningsN)r&   r'   r(   r²   r´   r¶   rº   Zreject_specsrB   r›   Úparametrizer½   rÂ   rÇ   r   r   rÃ   rÍ   rÏ   rÒ   rÖ   r   r   r   r   r¨   œ  s.   	


   ÿûr¨   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestRequirementsc                 C   sŽ   t  d¡}t|ƒdkst‚t|ƒdks*t‚|t dƒks:t‚|t dƒksJt‚|t dƒksZt‚|t dƒksjt‚|t dƒkszt‚|t dƒksŠt‚d S )NúTwisted>=1.2z!Requirement.parse('Twisted>=1.2')ztwisTed>=1.2zTwisted>=2.0z	Zope>=1.2z	Zope>=3.0zTwisted[extras]>=1.2)r   r·   r¯   r=   r¤   )r   Úrr   r   r   r¶     s    
zTestRequirements.testBasicsc                 C   sX   t dƒ}t dƒ}||kst‚t|ƒt|ƒks0t‚t|ƒdks@t‚t dƒt dƒksTt‚d S )NzTwisted==1.2c1,>=1.2zTwisted>=1.2,==1.2c1ZTwistedú'Twisted @ https://localhost/twisted.zip)r   r=   r¯   ©r   Úr1Úr2r   r   r   ÚtestOrdering  s    ÿzTestRequirements.testOrderingc                 C   s†   t dƒ}t d¡}t d¡}t d¡}tdƒ|ks6t‚tdƒ|ksFt‚d|ksRt‚d|ks^t‚||ksjt‚||ksvt‚||ks‚t‚d S )NrÙ   r/   zTwisted-1.1.eggzTwisted-1.2.eggr3   ú1.1)r   r   ru   r	   r=   )r   rÚ   Zfoo_distZtwist11Ztwist12r   r   r   ÚtestBasicContains#  s    


z"TestRequirements.testBasicContainsc                 C   s¶   t  d¡}t  d¡}||ks t‚t|jƒtdƒks6t‚t|jƒtdƒksLt‚t|ƒt|ƒks`t‚t|ƒtdd tdƒtddgƒd fƒksŠt‚tt  d¡ƒtdd	tƒ tƒ d fƒks²t‚d S )
NzTwisted[foo,bar]>=1.2zTwisted[bar,FOO]>=1.2)r„   ÚbarZtwistedz>=1.2r„   râ   rÛ   zhttps://localhost/twisted.zip)r   r·   r=   r¥   r]   Úhashr   Ú	frozensetrÜ   r   r   r   ÚtestOptionsAndHashing0  s0    


ûÿûþz&TestRequirements.testOptionsAndHashingc                 C   sŽ   t  d¡}t  d¡}tj}|dƒ|ks*t‚|dƒ|ks:t‚|dƒ|ksJt‚|dƒ|ksZt‚|dƒ|ksjt‚|dƒ|kszt‚|dƒ|ksŠt‚d S )Nz
foo==0.3a2z
foo!=0.3a4zfoo-0.3a4.eggzfoo-0.3a1.eggzfoo-0.3a2.eggzfoo-0.3a3.eggzfoo-0.3a5.egg)r   r·   r   ru   r=   )r   rÝ   rÞ   rP   r   r   r   ÚtestVersionEqualityH  s    

z$TestRequirements.testVersionEqualityc                 C   sT   t  d¡jdkst‚t  d¡jdks(t‚t  d¡jdks<t‚t  d¡jdksPt‚dS )zQ
        The setuptools project should implement the setuptools package.
        Ú
setuptoolszsetuptools == 0.7zsetuptools == 0.7a1zsetuptools >= 0.7N)r   r·   rK   r=   rÎ   r   r   r   ÚtestSetuptoolsProjectNameV  s    z*TestRequirements.testSetuptoolsProjectNameN)	r&   r'   r(   r¶   rß   rá   rå   ræ   rè   r   r   r   r   rØ     s   
rØ   c                   @   sÜ   e Z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ej ddgddddddddddg
¡dd „ ƒZd!Zej ddgd"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1geeee ¡ ƒƒƒ ¡d2d3„ ƒZd4d5„ Zd6S )7ÚTestParsingc                 C   s   t tdƒƒg kst‚d S )NÚ )r<   r   r=   rÎ   r   r   r   ÚtestEmptyParsec  s    zTestParsing.testEmptyParsec                 C   sV   g g fddgfg gg fdddgfddgddgffD ]\}}t t |¡ƒ|ks2t‚q2d S )Nrª   z x
 yÚyzx

)r<   r#   r$   r=   )r   ZinpÚoutr   r   r   ÚtestYieldingf  s    
ûzTestParsing.testYieldingc              	   C   sj   d}t t |¡ƒd dgfdddgfddgfdg fd	d
gfgksBt‚t t¡� t t d¡ƒ W 5 Q R X d S )Na   
                    x
                    [Y]
                    z

                    a
                    [b ]
                    # foo
                    c
                    [ d]
                    [q]
                    v
                    rª   ÚYÚzr   r   r“   rP   Úqr`   z[foo)r<   r#   Úsplit_sectionsr=   rB   rC   r¼   )r   Úsampler   r   r   ÚtestSplittingp  s    
û
zTestParsing.testSplittingc                 C   sT   t dƒdkst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t dƒdksPt‚d S )	Nzadns-pythonz
WSGI Utilsz
WSGI-UtilszWSGI  UtilsúMoney$$$MakerúMoney-Makerúpeak.webzpeak-web)r
   r=   rÎ   r   r   r   ÚtestSafeNameˆ  s
    zTestParsing.testSafeNamec                 C   sT   t dƒdkst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t d	ƒd	ksPt‚d S )
Nz1.2-1z	1.2.post1z	1.2 alphaz	1.2.alphaz2.3.4 20050521z2.3.4.20050521rõ   rö   r÷   )r   r=   rÎ   r   r   r   ÚtestSafeVersion�  s
    zTestParsing.testSafeVersionc              	   C   sî   t tdƒƒtdƒgkst‚t tdƒƒtdƒgks4t‚t d¡tdƒksJt‚t t¡� t d¡ W 5 Q R X t t¡� t d¡ W 5 Q R X t t¡� t d¡ W 5 Q R X t t¡� t d¡ W 5 Q R X t t¡� t d	¡ W 5 Q R X d S )
NzTwis-Ted>=1.2-1zTwisted >=1.2, \ # more
<2.0zTwisted>=1.2,<2.0zFooBar==1.99a3z>=2.3zx\zx==2 qz	X==1
Y==2ú#)r<   r   r   r=   r·   rB   rC   r¼   rÎ   r   r   r   ÚtestSimpleRequirements–  s"    
ÿ

ÿ
z"TestParsing.testSimpleRequirementsc                 C   sd   t  d¡t  d¡kst‚t  d¡t  d¡ks0t‚t  d¡t  d¡ksHt‚t  d¡t  d¡ks`t‚d S )Nzfoobar;os_name=='a'zname==1.1;python_version=='2.7'zname==1.1;python_version=='3.6'zname==1.0;python_version=='2.7'zname==1.2;python_version=='2.7'z$name[foo]==1.0;python_version=='3.6'z(name[foo,bar]==1.0;python_version=='3.6')r   r·   r=   rÎ   r   r   r   Útest_requirements_with_markers©  s$    ÿ
ÿþÿþÿþz*TestParsing.test_requirements_with_markersc                 C   s   t dƒ\}d S )Nzfoo==1.0+org1©r   ©r   rG   r   r   r   Útest_local_version·  s    zTestParsing.test_local_versionc                 C   s   t dƒ\}t dƒ\}d S )Nzfoo>=1.0, <3zfoo >= 1.0, < 3rý   rþ   r   r   r   Ú%test_spaces_between_multiple_versionsº  s    
z1TestParsing.test_spaces_between_multiple_versionsÚlowerÚupper)z1.2-rc1z1.2rc1)ú0.4ú0.4.0)z0.4.0.0r  )z0.4.0-0z0.4-0)Ú0post1z0.0post1)Z0pre1ú0.0c1)z0.0.0preview1Z0c1)r  z0-rc1)z1.2a1z1.2.a.1)z1.2.az1.2ac                 C   s   t |ƒt |ƒkst‚d S r   ©r	   r=   ©r   r  r  r   r   r   ræ   ¾  s    zTestParsing.testVersionEqualityzœ
        0.80.1-3 0.80.1-2 0.80.1-1 0.79.9999+0.80.0pre4-1
        0.79.9999+0.80.0pre2-3 0.79.9999+0.80.0pre2-2
        0.77.2-1 0.77.1-1 0.77.0-1
        )ú2.1ú2.1.1)Ú2a1Z2b0)r  r	  )z2.3a1z2.3)ú2.1-1z2.1-2)r  r
  )r	  z2.1post4)z2.1a0-20040501r	  )rà   z02.1)z3.2z	3.2.post0)z3.2post1z3.2post2)r  z4.0)z0.0.4r  )r  z0.4post1)z	2.1.0-rc1z2.1.0)z2.1devz2.1a0c                 C   s   t |ƒt |ƒk st‚d S r   r  r  r   r   r   ÚtestVersionOrderingÖ  s    zTestParsing.testVersionOrderingc                 C   s    t tdƒƒt tdƒƒkst‚dS )z„
        Ensure that our versions stay hashable even though we've subclassed
        them and added some shim code to them.
        z1.0N)rã   r	   r=   rÎ   r   r   r   ÚtestVersionHashableï  s    zTestParsing.testVersionHashableN)r&   r'   r(   rë   rî   rô   rø   rù   rû   rü   rÿ   r   rB   r›   r×   ræ   Ztorturer<   r   Úreversedr˜   r  r  r   r   r   r   ré   b  sb   
öþ
ðîþ
ré   c                   @   sb   e Zd ZdZejdd„ ƒZejdd�dd„ ƒZejj	e
 ¡ dkd	d
�Zedd„ ƒZedd„ ƒZdS )ÚTestNamespacesz8__import__('pkg_resources').declare_namespace(__name__)
c              	   c   sX   t tdƒst|ƒV  dS t|ƒd }t t|ƒ|¡ zt|ƒ|ƒV  W 5 t |¡ X dS )z•
        Where available, return the tempdir as a symlink,
        which as revealed in #231 is more fragile than
        a natural tempdir.
        ÚsymlinkNz-linked)rœ   Úosr¯   r  ÚunlinkÚtype)r   ÚtmpdirZ	link_namer   r   r   Úsymlinked_tmpdirú  s    

zTestNamespaces.symlinked_tmpdirT)Zautousec                 c   sP   t j ¡ }tjdd… }| d¡}tj t|ƒ¡ z
dV  W 5 |t _|t_X dS )z”
        Patch sys.path to include the 'site-pkgs' dir. Also
        restore pkg_resources._namespace_packages to its
        former state.
        Nú	site-pkgs)r#   Ú_namespace_packagesÚcopyrT   ÚpathÚmkdirÚappendr¯   )r   r  Zsaved_ns_pkgsZsaved_sys_pathZ	site_pkgsr   r   r   Úpatched_path  s    


zTestNamespaces.patched_pathÚWindowsz#591rc   c           	   	   C   s,  |  ¡ }|}tj t|d ƒ¡ |d |d f}|D ]D}|d }|d }| ¡  |d j| jdd� |d j| jdd� q4tj	t
dd	�� d
dl}W 5 Q R X dtjksªt‚tj	t
dd	�� d
dl}W 5 Q R X dtjksÚt‚tjd dgksît‚t|d d d ƒt|d d d ƒg}|jj|k�s(t‚dS )a  
        Test nested namespace packages
        Create namespace packages in the following tree :
            site-packages-1/pkg1/pkg2
            site-packages-2/pkg1/pkg2
        Check both are in the _namespace_packages dict and that their __path__
        is correct
        ú
site-pkgs2r  Úpkg1Úpkg2ú__init__.pyúutf-8©Úencodingúpkg_resources.declare_namespace©Úmatchr   Nz	pkg1.pkg2)ÚrealpathrT   r  r  r¯   Ú
ensure_dirÚ
write_textÚns_strrB   rÔ   ÚDeprecationWarningr   r#   r  r=   Z	pkg1.pkg2r!  Ú__path__)	r   r  Zreal_tmpdirr  Ú	site_dirsÚsiter   r!  rE   r   r   r   Útest_two_levels_deep  s*    
þz#TestNamespaces.test_two_levels_deepc           
   	   C   sæ   |}|d |d |d f}d}t |dƒD ]b\}}|dkrHtj t|ƒ¡ |d }|d }| ¡  |d j| jd	d
� |d j|| d	d
� q(tj	t
dd�� ddl}ddl}W 5 Q R X dd„ |D ƒ}	|j|	ksÒt‚|jjdksât‚dS )aV  
        Test that if multiple versions of the same namespace package subpackage
        are on different sys.path entries, that only the one earliest on
        sys.path is imported, and that the namespace package's __path__ is in
        the correct order.

        Regression test for https://github.com/pypa/setuptools/issues/207
        r  r  z
site-pkgs3z__version__ = %rr:   ÚnspkgÚsubpkgr"  r#  r$  r&  r'  r   Nc                 S   s   g | ]}t | ¡ d  ƒ‘qS )r2  )r¯   r)  )r7   r0  r   r   r   r9   c  s     z2TestNamespaces.test_path_order.<locals>.<listcomp>)Ú	enumeraterT   r  r  r¯   r*  r+  r,  rB   rÔ   r-  r2  Znspkg.subpkgr.  r=   r3  Ú__version__)
r   r  r  r/  Zvers_strÚnumberr0  r2  r3  rE   r   r   r   Útest_path_orderC  s(    ýzTestNamespaces.test_path_orderN)r&   r'   r(   r,  rB   Zfixturer  r  r›   rž   r,   ÚsystemZissue591r1  r7  r   r   r   r   r  ÷  s   



#r  )r   r  r,   r¾   rT   rB   Zpackaging.specifiersr   r#   r   r   r   r   r   r   r	   r
   r   r   ÚEmptyProviderr   ru   r?   r+   r    r¨   rØ   ré   r  r   r   r   r   Ú<module>   s(   ,  A*qU 