
    ϶vgz                     V   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 Z G d dej                  Zej	        j        Z G d d          Z G d	 d
          Z G d d          Z G d d          Z G d d          Z G d d          ZdS )    N)SpecifierSet)	Distribution
EntryPointRequirementVersionConflict
WorkingSetparse_requirementsparse_version	safe_namesafe_versionc                 p    t          j        |           \  }}t          |d           t          ||          S )z$s -> (s0,s1), (s1,s2), (s2, s3), ...N)	itertoolsteenextzip)iterableabs      _/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/pkg_resources/tests/test_resources.pypairwiser      s0    =""DAqDMMMq!99    c                   2    e Zd ZdZddZdefdZd Zd ZdS )	MetadatazAMock object to return metadata as if from an on-disk distributionreturnNc                 .    t          |          | _        d S N)dictmetadata)selfpairss     r   __init__zMetadata.__init__#   s    Ur   c                     || j         v S r   r   r   names     r   has_metadatazMetadata.has_metadata&   s    t}$$r   c                     | j         |         S r   r#   r$   s     r   get_metadatazMetadata.get_metadata)   s    }T""r   c                 P    t          j        |                     |                    S r   )pkg_resourcesyield_linesr(   r$   s     r   get_metadata_lineszMetadata.get_metadata_lines,   s!    ():):4)@)@AAAr   )r   N)	__name__
__module____qualname____doc__r!   boolr&   r(   r,    r   r   r   r       sl        KK$ $ $ $%D % % % %# # #B B B B Br   r   c                   |   e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
ej                             eed
           d          Zd Zed             Zed             Zd Zd Zd Zd Zd Zd Zd Zd Zej                            ej        dd         dk    oej        j        dk    d          d             Z dS )
TestDistroc                    t          j        g d d           }t          |          g k    sJ |d         g k    sJ |                    t	          d                     |                    t	          d                     |                    t	          d                     |d         sJ t          |          dgk    sJ g d}d |d         D             |k    sJ |                    |d         d	                    d
 |d         D             ddgk    sJ |                    t	          d                     d |d         D             g dk    sJ t          g           }t	          d          }t	          d          }t          d          \  }|                    ||          j	        dk    sJ |                    |           |                    ||          j	        dk    sJ t          g           }|                    |           |                    |           t          j        t                    5  |                    ||           d d d            n# 1 swxY w Y   t          g           }|                    |           |                    |           |                    |           |                    ||          j	        dk    sJ d S )N)platformpythonFooPkgFooPkg-1.3_1.eggzFooPkg-1.4-py2.4-win32.eggFooPkg-1.2-py2.4.eggfoopkg)1.41.3-11.2c                     g | ]	}|j         
S r2   version.0dists     r   
<listcomp>z-TestDistro.testCollection.<locals>.<listcomp>D       666666r      c                     g | ]	}|j         
S r2   r@   rB   s     r   rE   z-TestDistro.testCollection.<locals>.<listcomp>H   rF   r   r<   r>   zFooPkg-1.9.eggc                     g | ]	}|j         
S r2   r@   rB   s     r   rE   z-TestDistro.testCollection.<locals>.<listcomp>L   rF   r   )1.9r<   r>   zFooPkg>=1.3rJ   )r*   Environmentlistadddist_from_fnremover   r	   
best_matchrA   pytestraisesr   )r   adexpectedwsfoo12foo14reqs          r   testCollectionzTestDistro.testCollection4   s   &rDFFFBxx2~~~~(|r!!!!
|.//000
|899:::
|233444 (|BxxH:%%%% +**66H666(BBBB 			"X,q/"""66H6665%.HHHH 	|,--...66H666:O:O:OOOOO^^3449::#M22 }}S"%%-6666
u}}S"%%-6666 ^^
u
u]?++ 	# 	#MM#r"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ^^
u
u
u}}S"%%-666666s   ;II"%I"c                     |j         dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        t          d          k    sJ d S )Nr8   r;   z	1.3.post12.4win32r=   )project_namekeyrA   
py_versionr6   parsed_versionr
   r   ds     r   checkFooPkgzTestDistro.checkFooPkgg   s    ~))))u    yK''''|u$$$$zW$$$$=#9#9999999r   c                     t          ddddd          }|                     |           t          d          }|j        t          j        j         dt          j        j         k    sJ |j        J d S )N
/some/pathr8   r=   r[   r\   )r]   rA   r_   r6   .)r   rc   r_   sysversion_infomajorminorr6   ra   s     r   testDistroBasicszTestDistro.testDistroBasicso   s    !
 
 
 	&&|#"2"8SS3;K;QSSSSSSz!!!!!r   c                     t          d          }|                     |           t          d          }|                     |           d S )Nz FooPkg-1.3.post1-py2.4-win32.eggz%FooPkg-1.3.post1-py2.4-win32.egg-info)rN   rc   ra   s     r   testDistroParsezTestDistro.testDistroParse}   sL    ;<<@AAr   c           	      r    t          ddddt          d                    }|                     |           d S )Nre   r8   r[   r\   )zPKG-INFOz%Metadata-Version: 1.0
Version: 1.3-1
)r]   r_   r6   r   )r   r   rc   ra   s     r   testDistroMetadatazTestDistro.testDistroMetadata   sJ    !UVV
 
 
 	r   c                 B    t          dt          d|f                    S )Nz/foodepends.txtr#   )r   r   )r   txts     r   distRequireszTestDistro.distRequires   s"    FX}c6J-K-KLLLLr   r2   c                     t          |                    |                    t          t          |                    k    sJ d S r   )rL   requiresr	   )r   rD   rr   extrass       r   checkRequireszTestDistro.checkRequires   s>    DMM&))**d3Ec3J3J.K.KKKKKKKr   c                 b    dD ]+}|                      |                     |          |           ,d S )N)Twisted>=1.5zTwisted>=1.5
ZConfig>=2.0)rw   rs   )r   vs     r   testDistroDependsSimplez"TestDistro.testDistroDependsSimple   sB    = 	8 	8At0033Q7777	8 	8r   __dir__z8object.__dir__ necessary for self.__dir__ implementationreasonc                 J    t          j                    }t          |           d S r   )r*   r   dirra   s     r   test_distribution_dirz TestDistro.test_distribution_dir   s    &((Ar   c                     t          j                    }|                                }d|vsJ d |j        _        |                                }t          |          t          |          dz   k    sJ d|v sJ d S )N	test_attrrG   )r*   r   r|   	_providerr   lenr   rb   beforeafters       r   +test_distribution_dir_includes_provider_dirz6TestDistro.test_distribution_dir_includes_provider_dir   s}    &((&(((( $		5zzS[[1_,,,,e######r   c                     t          j                    }|                                }d|vsJ d |j        _        |                                }t          |          t          |          k    sJ d|vsJ d S )N
_test_attr)r*   r   r|   r   r   r   r   s       r   =test_distribution_dir_ignores_provider_dir_leading_underscorezHTestDistro.test_distribution_dir_ignores_provider_dir_leading_underscore   sy    &((6))))!%		5zzS[[((((5((((((r   c                 *   t          j        g           }t          g           }t          |                    g |                    g k    sJ t          j        t           j                  5  |                    t          d          |           d d d            n# 1 swxY w Y   t          j
        dt          d                    }|                    |           |                    t          j
        d                     t          d          D ]]}t          |                    t          d          |                    }||gk    sJ t          t          |j        |                     ^t          j        t                    5  |                    t          d          |           d d d            n# 1 swxY w Y   t          g           }t          j        t           j                  5  |                    t          d          |           d d d            n# 1 swxY w Y   t          j
        d	t          d
                    }|                    |           t          |                    t          d          |                    ||gk    sJ t          j        t                    5 }|                    t          d          |           d d d            n# 1 swxY w Y   d}|j                                        |k    sJ d S )NFoo/foo_dir/Foo-1.2.egg)rq   z[bar]
Baz>=2.0r#   zFoo-0.9.egg   zFoo==0.9zFoo[bar]z/foo_dir/Baz-2.1.egg)rq   r   zFoo==1.2
Foo!=1.2z-Foo 0.9 is installed but Foo==1.2 is required)r*   rK   r   rL   resolverQ   rR   DistributionNotFoundr	   r   from_filenamer   rM   rangemapr   valuereport)	r   rS   rU   r   itargetsBazvcmsgs	            r   testResolvezTestDistro.testResolve   s   &r**^^BJJr2&&''2----]==>> 	6 	6JJ)%00"555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ("@AA
 
 
 	s
|)-88999 q 	' 	'A2::&8&?&?DDEEGse####RVW%%&&&&]?++ 	; 	;JJ)*55r:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;^^ ]==>> 	; 	;JJ)*55r:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;("X6L-M-M
 
 
 	s BJJ1*==rBBCCSzQQQQ]?++ 	ErJJ)*>??DDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E >x  C''''''sH   +$BB"B$F;;F?F?3$H##H'*H'7$K''K+.K+c                     t          j        g           }t          g           }|                    t	          d          |          }t          |          g k    sJ dS )z5Environment markers are evaluated at resolution time.zFoo;python_version<'2'N)r*   rK   r   r   r	   rL   )r   rS   rU   ress       r   +test_environment_marker_evaluation_negativez6TestDistro.test_environment_marker_evaluation_negative   sQ    &r**^^jj+,DEErJJCyyBr   c                    t          j        g           }t          g           }t          j        d          }|                    |           |                    t          d          |          }t          |          |gk    sJ d S )N/foo_dir/Foo-1.2.dist-infozFoo;python_version>='2')	r*   rK   r   r   r   rM   r   r	   rL   )r   rS   rU   r   r   s        r   +test_environment_marker_evaluation_positivez6TestDistro.test_environment_marker_evaluation_positive   sy    &r**^^()EFF
sjj+,EFFKKCyySE!!!!!!r   c                 V   t          d          \  }t          d          \  }t          j        ||j        i          }|                    |          sJ t          d          \  }t          d          \  }t          j        ||j        i          }|                    |          sJ 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*   
_ReqExtrasrv   markers_pass)r   
parent_reqrX   
req_extrass       r   )test_environment_marker_evaluation_calledz4TestDistro.test_environment_marker_evaluation_called   s    
 +511#$=>>"-sJ4E.FGG
&&s+++++*733#$=>>"-sJ4E.FGG
&&s+++++++r   c                    t          j        g           }t          g           }t          j        dt          d                    }|                    |           t          |                    t          d          |                    |gk    sJ t          j        d          }|                    |           t          |                    t          d          |                    }|||gk    sJ dS )8Extras are also evaluated as markers at resolution time.r   )METADATAz5Provides-Extra: baz
Requires-Dist: quux; extra=='baz'r#   r   /foo_dir/quux-1.0.dist-infozFoo[baz]N
r*   rK   r   r   r   r   rM   rL   r   r	   r   rS   rU   r   quuxr   s         r   "test_marker_evaluation_with_extrasz-TestDistro.test_marker_evaluation_with_extras   s    &r**^^((   
 
 
 	sBJJ1%88"==>>3%GGGG)*GHH
t2::0<<bAABBsDk!!!!!!r   c                    t          j        g           }t          g           }t          j        dt          d                    }|                    |           t          |                    t          d          |                    |gk    sJ t          j        d          }|                    |           t          |                    t          d          |                    }|||gk    sJ dS )r   r   )r   zIProvides-Extra: baz-lightyear
Requires-Dist: quux; extra=='baz-lightyear'r#   r   r   zFoo[baz-lightyear]Nr   r   s         r   ,test_marker_evaluation_with_extras_normlizedz7TestDistro.test_marker_evaluation_with_extras_normlized  s    &r**^^((   
 
 
 	sBJJ1%88"==>>3%GGGG)*GHH
t2::01EFFKKLLsDk!!!!!!r   c                    t          j        g           }t          g           }t          j        dt          d                    }|                    |           t          j        d          }|                    |           t          j        d          }|                    |           t          |                    t          d          |                    }t          |          |||gk    sJ 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*   rK   r   r   r   r   rM   rL   r   r	   sorted)r   rS   rU   r   r   fredr   s          r   +test_marker_evaluation_with_multiple_extrasz6TestDistro.test_marker_evaluation_with_multiple_extras!  s    &r**^^((   	
 	
 	
 	s)*GHH
t)*GHH
t2::0@@"EEFFc{{tT3///////r   c                    t          j        g           }t          g           }t          j        dt          d                    }t          j        dt          d                    }t          j        dt          d                    }t          j        d          }||||fD ]}|                    |           t          |                    t          d	          |                    }|||||gk    sJ 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   rS   rU   r   r   cr   rD   r   s	            r   'test_marker_evaluation_with_extras_loopz2TestDistro.test_marker_evaluation_with_extras_loop6  s   &r**^^&&ABB
 
 
 &&ABB
 
 
 &&   	
 	
 	
 ()EFF1cN 	 	DFF4LLLL2::055r::;;q!Qn$$$$$$r   N   )r      finalz/https://github.com/python/cpython/issues/103632c                 J   |                      d          }|                     |d           |                     |d                                dg           |                     |d                                dg           |                     |d                                ddg           |                     |d                                ddg           t          j        t
          j                  5  |                    d	g           d d d            d S # 1 swxY w Y   d S )
Nz
            Twisted>=1.5
            [docgen]
            ZConfig>=2.0
            docutils>=0.3
            [fastcgi]
            fcgiapp>=0.1ry   z'Twisted>=1.5 ZConfig>=2.0 docutils>=0.3docgenzTwisted>=1.5 fcgiapp>=0.1fastcgiz4Twisted>=1.5 ZConfig>=2.0 docutils>=0.3 fcgiapp>=0.1z4Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3r   )rs   rw   splitrQ   rR   r*   UnknownExtraru   ra   s     r   testDistroDependsOptionsz#TestDistro.testDistroDependsOptionsQ  s   
 
 
 	1n---8>>@@8*	
 	
 	
 	19??AAI;OOOBHHJJy!	
 	
 	

 	BHHJJ!	
 	
 	

 ]=566 	  	 JJw	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   4DDD)r2   )!r-   r.   r/   rY   rc   rk   rm   ro   rs   rw   r{   rQ   markskipifhasattrobjectneeds_object_dirr   r   r   r   r   r   r   r   r   r   r   xfailrg   rh   releaselevelr   r2   r   r   r4   r4   3   s       17 17 17f: : :" " "    M M ML L L L8 8 8 {))GFI&&&I *  
   $ $ $ ) ) )(( (( ((T  " " ", , ," " "$" " "&0 0 0*% % %6 [!'TC,<,IW,T@      	      r   r4   c                       e Zd Zd Zd ZdS )TestWorkingSetc                 |   t          g           }t          j        d          }|                    |           t	          t          d                    }t          j        t                    5 }|	                    |           d d d            n# 1 swxY w Y   d}|j
                                        |k    sJ d S )Nr   zFoo<1.2z,Foo 1.2 is installed but Foo<1.2 is required)r   r   r   rM   r   r	   rQ   rR   r   findr   r   )r   rU   r   rX   r   r   s         r   test_find_conflictingz$TestWorkingSet.test_find_conflictings  s    ^^()?@@
s %i0011]?++ 	rGGCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =x  C''''''s   .BBBc                    t          g           }t          d          }t          j        d|          }|                    |           t          d          }t          j        d|          }|                    |           t          j        d          }|                    |           t          j        d          }|                    |           t          j        t                    5 }|                    t          d                     d	d	d	           n# 1 swxY w Y   d
}|t          t          dg                    z  }|j                                        |k    sJ d	S )z
        A ContextualVersionConflict should be raised when a requirement
        conflicts with a prior requirement for a different package.
        )rq   zBaz==1.0z/foo_dir/Foo-1.0.eggr#   )rq   zBaz==2.0z/foo_dir/Bar-1.0.eggz/foo_dir/Baz-1.0.eggz/foo_dir/Baz-2.0.eggzFoo
Bar
Nz1Baz 1.0 is installed but Baz==2.0 is required by Bar)r   r   r   r   rM   rQ   rR   r   r   r	   reprsetr   r   )r   rU   mdr   r   r   r   r   s           r   !test_resolve_conflicts_with_priorz0TestWorkingSet.test_resolve_conflicts_with_prior  sw    ^^122()?"MMM
s122()?"MMM
s()?@@
s()?@@
s]?++ 	9rJJ),77888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 BtCLL!!!x  C''''''s   /#DD"%D"N)r-   r.   r/   r   r   r2   r   r   r   r   r  s2        ( ( (( ( ( ( (r   r   c            
           e Zd Zd Zd Zd Zd ZdZej	        
                    de          d             Zd Zd	 Z e ed
ddg           edddgddg           edddg                    ZdZd Zd Zd ZdS )TestEntryPointsc                     |j         dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |                                t
          u sJ d}t          |          |k    sJ d S )Nr   "pkg_resources.tests.test_resources)r   )x<foo = pkg_resources.tests.test_resources:TestEntryPoints [x])r%   module_nameattrsrv   loadr   str)r   epexpects      r   assertfieldszTestEntryPoints.assertfields  s    w%~!EEEEEx/////yF""""wwyyO++++O2ww&      r   c                 V    t          j        dt          d                    | _        d S )Nr:   )zrequires.txtz[x]r#   )r   r   r   rD   )r   methods     r   setup_methodzTestEntryPoints.setup_method  s-     ."X6M-N-N
 
 
			r   c                 d    t          dddgdg| j                  }|                     |           d S )Nr   r   r   r   )r   rD   r   r   r   s     r   
testBasicszTestEntryPoints.testBasics  sC    0EI
 
 	"r   c                    d}t          j        || j                  }|                     |           t          j        d          }|j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ t          j        d          }|j        dk    sJ |j        d	k    sJ |j        d
k    sJ |j        dk    sJ d}t          j        |          }|j        dk    sJ d S )Nr   zbar baz=  spammity[PING]zbar bazspammityr2   )pingz fizzly =  wocka:foofizzlywocka)r   z0html+mako = mako.ext.pygmentplugin:MakoHtmlLexerz	html+mako)r   parserD   r   r%   r   r   rv   )r   sr   specs       r   	testParsezTestEntryPoints.testParse  s   Ja++"899w)####~++++x2~~~~yI%%%%455w(""""~((((x8####yB Bd##w+%%%%%%r   )r   zx=a:b:czq=x/nazfez=pish:tush-zzx=f[a]>2reject_specc                     t          j        t                    5  t          j        |           d d d            d S # 1 swxY w Y   d S r   )rQ   rR   
ValueErrorr   r   )r   r   s     r   test_reject_specz TestEntryPoints.test_reject_spec  s    ]:&& 	* 	*[)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   <A A c                     t           j                                        } dj        di t	                      }t          j        |          }|j        |k    sJ dS )z<
        Allow any printable character in the name.
        z{name} = module:attrNr2   )string	printablestripformatlocalsr   r   r%   )r   r%   r   r   s       r   test_printable_namez#TestEntryPoints.test_printable_name  sX    
 %%'',%,88vxx88d##w$r   c                 "   t          |          t          | j                  k    sJ | j                                        D ]\  }}|                    |          j        |j        k    sJ |                    |          j        |j        k    sJ t          |                    |          j                  t          |j                  k    sJ t          |                    |          j                  t          |j                  k    sJ d S r   )	r   submap_expectitemsgetr%   r   r   r   rv   )r   mr^   r   s       r   checkSubMapzTestEntryPoints.checkSubMap  s    1vvT/000000)//11 	B 	BGC55::?bg----55::)R^;;;;!%%***++vbh/?/?????!%%**+,,ry0A0AAAAAA		B 	Br   feature1
somemodulesomefunctionfeature2zanother.module	SomeClassextra1extra2feature3zthis.module	something)rv   )r  r  r  z
            # define features for blah blah
            feature1 = somemodule:somefunction
            feature2 = another.module:SomeClass [extra1,extra2]
            feature3 = this.module [something]
    c                 ~   |                      t          j        d| j                             t	          j        t                    5  t          j        dd           d d d            n# 1 swxY w Y   t	          j        t                    5  t          j        dddg           d d d            d S # 1 swxY w Y   d S )Nxyzzx azfoo=barr   zfoo=baz)r  r   parse_group
submap_strrQ   rR   r   r   s    r   testParseListzTestEntryPoints.testParseList  s=   /tGGHHH]:&& 	5 	5"5)444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5]:&& 	@ 	@"3I(>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s$   A))A-0A-B22B69B6c                    t          j        d| j        i          }|                     |d                    t	          |                                          dgk    sJ t          j        d| j        z             }|                     |d                    t	          |                                          dgk    sJ t          j        t                    5  t          j        ddg           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        | j                   d d d            d S # 1 swxY w Y   d S )Nr  z[xyz]
z[xyz])	r   	parse_mapr  r  rL   keysrQ   rR   r   )r   r  s     r   testParseMapzTestEntryPoints.testParseMap  s    %!9::5"""AFFHH~~%(((( T_!<==5"""AFFHH~~%((((]:&& 	5 	5 '7!3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5]:&& 	2 	2 111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s$   C::C>C>EE	E	c                     t          dddgdg          }t          j        t          j                  5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   F)require)r   rQ   warnsr*   PkgResourcesDeprecationWarningr   r   s     r   testDeprecationWarningsz'TestEntryPoints.testDeprecationWarnings  s    7:K9Lse
 
 \-FGG 	# 	#GGEG"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   AAAN)r-   r.   r/   r   r   r   r   reject_specsrQ   r   parametrizer   r   r  r   r   r   r  r  r  r  r2   r   r   r   r     s@       ! ! !
 
 

  & & &, ML[]L99* * :9*  B B B DJ~6FGG(;-(H9M
 
 J{mLLL  MJ@ @ @
2 
2 
2# # # # #r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestRequirementsc                 ~   t          j        d          }t          |          dk    sJ t          |          dk    sJ |t          d          k    sJ |t          d          k    sJ |t          d          k    sJ |t          d          k    sJ |t          d          k    sJ |t          d          k    sJ 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   rs     r   r   zTestRequirements.testBasics  s    n--1vv''''Aww=====K//////K//////K//////K,,,,,,K,,,,,,K 677777777r   c                    t          d          }t          d          }||k    sJ t          |          t          |          k    sJ t          |          dk    sJ t          d          t          d          k    sJ d S )NzTwisted==1.2c1,>=1.2zTwisted>=1.2,==1.2c1Twisted'Twisted @ https://localhost/twisted.zip)r   r   r   r1r2s      r   testOrderingzTestRequirements.testOrdering  s    /00/00Rxxxx2ww#b''!!!!2ww000009%%5*
 *
 
 
 
 
 
 
r   c                 $   t          d          }t          j        d          }t          j        d          }t          j        d          }t          d          |v sJ t          d          |vsJ d|v sJ d|vsJ ||vsJ ||vsJ ||v sJ d S )Nr!  r9   zTwisted-1.1.eggzTwisted-1.2.eggr>   1.1)r   r   r   r
   )r   r"  foo_disttwist11twist12s        r   testBasicContainsz"TestRequirements.testBasicContains#  s    ''-.@AA,->??,->??U##q((((U##1,,,,zzzzA~~~~q    a!||||||r   c           
      n   t          j        d          }t          j        d          }||k    sJ t          |j                  t          d          k    sJ t          |j                  t          d          k    sJ t	          |          t	          |          k    sJ t	          |          t	          dd t          d          t          ddg          d f          k    sJ t	          t          j        d                    t	          dd	t                      t                      d f          k    sJ d S )
NzTwisted[foo,bar]>=1.2zTwisted[bar,FOO]>=1.2)r   bartwistedz>=1.2r   r1  r%  zhttps://localhost/twisted.zip)r   r   r   rv   hashr   	frozensetr&  s      r   testOptionsAndHashingz&TestRequirements.testOptionsAndHashing0  sF   677677Rxxxx29~~^!4!4444429~~^!4!44444Bxx488####Bxx4!!uen%%!
       GHH
 
+NNKK
       r   c                 @   t          j        d          }t          j        d          }t          j        } |d          |vsJ  |d          |vsJ  |d          |vsJ  |d          |v sJ  |d          |v sJ  |d          |v sJ  |d          |v sJ 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   r   )r   r'  r(  rb   s       r   testVersionEqualityz$TestRequirements.testVersionEqualityH  s    |,,|,,&q!!++++q!!++++q!!++++q!!R''''q!!R''''q!!R''''q!!R''''''r   c                     t          j        d          j        dk    sJ t          j        d          j        dk    sJ t          j        d          j        dk    sJ t          j        d          j        dk    sJ dS )zQ
        The setuptools project should implement the setuptools package.
        
setuptoolszsetuptools == 0.7zsetuptools == 0.7a1zsetuptools >= 0.7N)r   r   r]   r  s    r   testSetuptoolsProjectNamez*TestRequirements.testSetuptoolsProjectNameV  s    
  ..;|KKKK !455BlRRRR !677DTTTT !455BlRRRRRRr   N)	r-   r.   r/   r   r)  r/  r5  r7  r:  r2   r   r   r  r    ss        	8 	8 	8
 
 
    0( ( (	S 	S 	S 	S 	Sr   r  c                   F   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                            d
g d          d             ZdZej                            d
g d e e ee                                                              z             d             Zd ZdS )TestParsingc                 J    t          t          d                    g k    sJ d S )N )rL   r	   r  s    r   testEmptyParsezTestParsing.testEmptyParsec  s*    &r**++r111111r   c                     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          j        |                    |k    sJ -d S )Nr   z x
 yyzx

)rL   r*   r+   )r   inpouts      r   testYieldingzTestParsing.testYieldingf  s    H3%LT2JSz"s^c3Z(
 	? 	?HC 1#66773>>>>>	? 	?r   c                 &   d}t          t          j        |                    d dgfdddgfddgfdg fd	d
gfgk    sJ t          j        t
                    5  t          t          j        d                     d d d            d S # 1 swxY w Y   d S )Na   
                    x
                    [Y]
                    z

                    a
                    [b ]
                    # foo
                    c
                    [ d]
                    [q]
                    v
                    r   Yzr   r   r   rb   qrz   z[foo)rL   r*   split_sectionsrQ   rR   r   )r   samples     r   testSplittingzTestParsing.testSplittingp  s     M08899C5M3*3%L"I3%L>
 
 
 
 
 ]:&& 	7 	7-f55666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   "BB
B
c                     t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ d S )	Nzadns-pythonz
WSGI Utilsz
WSGI-UtilszWSGI  UtilsMoney$$$MakerMoney-Makerpeak.webzpeak-web)r   r  s    r   testSafeNamezTestParsing.testSafeName  s    ''=8888&&,6666''<7777))]::::$$
222222r   c                     t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d	          d	k    sJ d S )
Nz1.2-1z	1.2.post1z	1.2 alphaz	1.2.alphaz2.3.4 20050521z2.3.4.20050521rM  rN  rO  )r   r  s    r   testSafeVersionzTestParsing.testSafeVersion  s    G$$3333K((K7777,--1AAAAAO,,====J'':555555r   c                    t          t          d                    t          d          gk    sJ t          t          d                    t          d          gk    sJ t          j        d          t          d          k    sJ t	          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t	          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t	          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t	          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t	          j        t                    5  t          j        d	           d d d            d S # 1 swxY w Y   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#)rL   r	   r   r   rQ   rR   r   r  s    r   testSimpleRequirementsz"TestParsing.testSimpleRequirements  s   &'899::)**?
 
 
 
 
 &'GHHII+,,N
 
 
 
 
  !122kBR6S6SSSSS]:&& 	' 	'g&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']:&& 	% 	%e$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]:&& 	( 	(h'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]:&& 	, 	,l+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]:&& 	# 	#c"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#sZ   !CC	C&DDD+EEE0FFF5GGGc                 f   t          j        d          t          j        d          k    sJ t          j        d          t          j        d          k    sJ t          j        d          t          j        d          k    sJ t          j        d          t          j        d          k    sJ 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  s    r   test_requirements_with_markersz*TestParsing.test_requirements_with_markers  s     !677;;L!<
 <
 
 
 
 
  -
 
@AAB B B B  -
 
@AAB B B B  2
 
IJJK K K K K Kr   c                 $    t          d           d S )Nzfoo==1.0+org1r	   r  s    r   test_local_versionzTestParsing.test_local_version  s    ?+++++r   c                 B    t          d           t          d           d S )Nzfoo>=1.0, <3zfoo >= 1.0, < 3rY  r  s    r   %test_spaces_between_multiple_versionsz1TestParsing.test_spaces_between_multiple_versions  s%    >***,-----r   )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)0pre10.0c1)z0.0.0preview10c1)rc  z0-rc1)z1.2a1z1.2.a.1)z1.2.az1.2ac                 J    t          |          t          |          k    sJ d S r   r
   r   r]  r^  s      r   r7  zTestParsing.testVersionEquality  s+      U##}U';';;;;;;;r   z
        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)2a12b0)rj  rh  )z2.3a1z2.3)2.1-1z2.1-2)rl  ri  )rh  z2.1post4)z2.1a0-20040501rh  )r+  z02.1)z3.2z	3.2.post0)z3.2post1z3.2post2)r_  z4.0)z0.0.4r`  )ra  z0.4post1)z	2.1.0-rc1z2.1.0)z2.1devz2.1a0c                 J    t          |          t          |          k     sJ d S r   rf  rg  s      r   testVersionOrderingzTestParsing.testVersionOrdering  s+    . U##mE&:&:::::::r   c                 ~    t          t          d                    t          t          d                    k    sJ 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)r3  r
   r  s    r   testVersionHashablezTestParsing.testVersionHashable  s;    
 M%(())T-2F2F-G-GGGGGGGr   N)r-   r.   r/   r?  rD  rK  rP  rR  rU  rW  rZ  r\  rQ   r   r  r7  torturerL   r   reversedr   rn  rp  r2   r   r   r<  r<  b  sm       2 2 2? ? ?7 7 703 3 36 6 6# # #&K K K, , ,. . . [	
 	
 	
 < < <G [	
 	
 	
$ $xx1122
3
3%	4 ,; ;- ,;H H H H Hr   r<  c                       e Zd ZdZej        d             Z ej        d          d             Zej        	                     e
j                    dk    d          Zed	             Zed
             ZdS )TestNamespacesz8__import__('pkg_resources').declare_namespace(__name__)
c              #   R  K   t          t          d          st          |          V  dS t          |          dz   }t          j        t          |          |           	  t	          |          |          V  t          j        |           dS # t          j        |           w xY w)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   rv  typeunlink)r   tmpdir	link_names      r   symlinked_tmpdirzTestNamespaces.symlinked_tmpdir  s       r9%% 	f++FKK)+	

3v;;	***	!$v,,y)))))Ii     BIi    s    B B&T)autousec              #   d  K   t           j                                        }t          j        dd         }|                    d          }t          j                            t          |                     	 dV  |t           _        |t          _        dS # |t           _        |t          _        w xY w)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copyrg   pathmkdirappendr   )r   rz  saved_ns_pkgssaved_sys_path	site_pkgss        r   patched_pathzTestNamespaces.patched_path  s       &9>>@@!!!LL--	I'''	&EEE0=M-%CHHH 1>M-%CH%%%%s   7B B/Windowsz#591r}   c                 8   |                                 }|}t          j                            t	          |dz                       |dz  |dz  f}|D ]^}|dz  }|dz  }|                                 |dz                      | j        d           |dz                      | j        d           _t          j	        t          d	          5  d
dl}ddd           n# 1 swxY w Y   dt          j        v sJ t          j	        t          d	          5  d
dl}ddd           n# 1 swxY w Y   dt          j        v sJ t          j        d         dgk    sJ t	          |dz  dz  dz            t	          |dz  dz  dz            g}|j        j        |k    sJ 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)realpathrg   r  r  r   
ensure_dir
write_textns_strrQ   r  DeprecationWarningr  r*   r  	pkg1.pkg2r  __path__)	r   r|  real_tmpdirrz  	site_dirssiter  r  rT   s	            r   test_two_levels_deepz#TestNamespaces.test_two_levels_deep  sR    '//11!F\122333[(&<*??	 	M 	MD&=D&=DOOM!--dkG-LLLM!--dkG-LLLL\,4UVVV 	 	KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:::::\,4UVVV 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 m?????08[MIIII k)F2V;<<l*V3f<==
 y!X------s$   CC!$C!D$$D(+D(c                 :   |}|dz  |dz  |dz  f}d}t          |d          D ]\  }}|dk    r,t          j                            t	          |                     |dz  }|dz  }|                                 |dz                      | j        d	
           |dz                      ||z  d	
           t          j	        t          d          5  ddl}ddl}ddd           n# 1 swxY w Y   d |D             }	|j        |	k    sJ |j        j        dk    sJ 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__ = %rrG   nspkgsubpkgr  r  r  r  r  r   Nc                 V    g | ]&}t          |                                d z            'S )r  )r   r  )rC   r  s     r   rE   z2TestNamespaces.test_path_order.<locals>.<listcomp>c  s-    IIItC'122IIIr   )	enumeraterg   r  r  r   r  r  r  rQ   r  r  r  nspkg.subpkgr  r  __version__)
r   r|  rz  r  vers_strnumberr  r  r  rT   s
             r   test_path_orderzTestNamespaces.test_path_orderC  s    "[ \!\!
	 &%i33 	U 	ULFDzzD		***7NEX%F]"..t{W.MMMm#//60AG/TTTT\,4UVVV 	  	 LLL	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  JIyIII~))))|'1,,,,,,s   	C%%C),C)N)r-   r.   r/   r  rQ   fixturer|  r  r   r   r6   systemissue591r  r  r2   r   r   rt  rt    s        HF^! ! ^!" V^D!!!& & "!&  {  !2!2i!? OOH!. !. X!.F !- !- X!- !- !-r   rt  )r   rw  r6   r   rg   rQ   packaging.specifiersr   r*   r   r   r   r   r   r	   r
   r   r   r   EmptyProviderr   r   rN   r4   r   r   r  r<  rt  r2   r   r   <module>r     sT       				   



  - - - - - -    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  B B B B B}* B B B  )7|  |  |  |  |  |  |  | ~	'( '( '( '( '( '( '( '(Tn# n# n# n# n# n# n# n#bRS RS RS RS RS RS RS RSjRH RH RH RH RH RH RH RHjn- n- n- n- n- n- n- n- n- n-r   