
    wgz                     H   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y)    N)SpecifierSet)	Distribution
EntryPointRequirementVersionConflict
WorkingSetparse_requirementsparse_version	safe_namesafe_versionc                 b    t        j                  |       \  }}t        |d       t        ||      S )z$s -> (s0,s1), (s1,s2), (s2, s3), ...N)	itertoolsteenextzip)iterableabs      g/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/pkg_resources/tests/test_resources.pypairwiser      s)    =="DAqDMq!9    c                   0    e Zd ZdZddZdefdZd Zd Zy)	MetadatazAMock object to return metadata as if from an on-disk distributionreturnNc                 $    t        |      | _        y 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                 J    t        j                  | j                  |            S r   )pkg_resourcesyield_linesr(   r$   s     r   get_metadata_lineszMetadata.get_metadata_lines,   s    (():):4)@AAr   )r   N)	__name__
__module____qualname____doc__r!   boolr&   r(   r,    r   r   r   r       s!    K$%D %#Br   r   c                   z   e Zd Zd Zd Zd Zd Zd Zd ZddZ	d Z
ej                  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                  j9                  ej<                  dd dk(  xr ej<                  j>                  dk7  d      d        Z y)
TestDistroc                 *   t        j                  g d d       }t        |      g k(  sJ |d   g k(  sJ |j                  t	        d             |j                  t	        d             |j                  t	        d             |d   sJ t        |      dgk(  sJ g d}|d   D cg c]  }|j
                   c}|k(  sJ |j                  |d   d          |d   D cg c]  }|j
                   c}d	d
gk(  sJ |j                  t	        d             |d   D cg c]  }|j
                   c}g dk(  sJ t        g       }t	        d      }t	        d      }t        d      \  }|j                  ||      j
                  dk(  sJ |j                  |       |j                  ||      j
                  d	k(  sJ t        g       }|j                  |       |j                  |       t        j                  t              5  |j                  ||       d d d        t        g       }|j                  |       |j                  |       |j                  |       |j                  ||      j
                  d	k(  sJ y c c}w c c}w c c}w # 1 sw Y   xxY w)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.2   r<   r>   zFooPkg-1.9.egg)1.9r<   r>   zFooPkg>=1.3r@   )r*   Environmentlistadddist_from_fnversionremover   r	   
best_matchpytestraisesr   )r   adexpecteddistwsfoo12foo14reqs           r   testCollectionzTestDistro.testCollection4   sJ   &&rDFBx2~~(|r!!!
|./0
|89:
|234 (||BxH:%%% +)+H66(BBB 			"X,q/")+H665%.HHH 	|,-.)+H66:OOOO^349:#M2 }}S"%--666
u}}S"%--666 ^
u
u]]?+ 	#MM#r"	# ^
u
u
u}}S"%--666C 7 7 7"	# 	#s   $I:I?J?J		J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 y )Nr8   r;   z	1.3.post12.4win32r=   )project_namekeyrE   
py_versionr6   parsed_versionr
   r   ds     r   checkFooPkgzTestDistro.checkFooPkgg   su    ~~)))uu   yyK'''||u$$$zzW$$$=#9999r   c                    t        ddddd      }| j                  |       t        d      }|j                  t        j                  j
                   dt        j                  j                   k(  sJ |j                  J y )N
/some/pathr8   r=   rS   rT   )rU   rE   rW   r6   .)r   r[   rW   sysversion_infomajorminorr6   rY   s     r   testDistroBasicszTestDistro.testDistroBasicso   s|    !
 	&||#"2"2"8"8!93;K;K;Q;Q:RSSSSzz!!!r   c                 t    t        d      }| j                  |       t        d      }| j                  |       y )Nz FooPkg-1.3.post1-py2.4-win32.eggz%FooPkg-1.3.post1-py2.4-win32.egg-info)rD   r[   rY   s     r   testDistroParsezTestDistro.testDistroParse}   s4    ;<@Ar   c           	      X    t        ddddt        d            }| j                  |       y )Nr]   r8   rS   rT   )zPKG-INFOz%Metadata-Version: 1.0
Version: 1.3-1
)rU   rW   r6   r   )r   r   r[   rY   s     r   testDistroMetadatazTestDistro.testDistroMetadata   s1    !UV
 	r   c                 2    t        dt        d|f            S )Nz/foodepends.txtr#   )r   r   )r   txts     r   distRequireszTestDistro.distRequires   s    FX}c6J-KLLr   c                 f    t        |j                  |            t        t        |            k(  sJ y r   )rB   requiresr	   )r   rL   rj   extrass       r   checkRequireszTestDistro.checkRequires   s)    DMM&)*d3Ec3J.KKKKr   c                 T    dD ]#  }| j                  | j                  |      |       % y )N)Twisted>=1.5zTwisted>=1.5
ZConfig>=2.0)ro   rk   )r   vs     r   testDistroDependsSimplez"TestDistro.testDistroDependsSimple   s,    = 	8At003Q7	8r   __dir__z8object.__dir__ necessary for self.__dir__ implementationreasonc                 B    t        j                         }t        |       y r   )r*   r   dirrY   s     r   test_distribution_dirz TestDistro.test_distribution_dir   s    &&(Ar   c                     t        j                         }|j                         }d|vsJ d |j                  _        |j                         }t        |      t        |      dz   k(  sJ d|v sJ y )N	test_attrr?   )r*   r   rt   	_providerr{   lenr   rZ   beforeafters       r   +test_distribution_dir_includes_provider_dirz6TestDistro.test_distribution_dir_includes_provider_dir   sh    &&(&((( $		5zS[1_,,,e###r   c                     t        j                         }|j                         }d|vsJ d |j                  _        |j                         }t        |      t        |      k(  sJ d|vsJ y )N
_test_attr)r*   r   rt   r|   r   r}   r~   s       r   =test_distribution_dir_ignores_provider_dir_leading_underscorezHTestDistro.test_distribution_dir_ignores_provider_dir_leading_underscore   sd    &&(6)))!%		5zS[(((5(((r   c                 h   t        j                  g       }t        g       }t        |j	                  g |            g k(  sJ t        j                  t         j                        5  |j	                  t        d      |       d d d        t        j                  dt        d            }|j                  |       |j                  t        j                  d             t        d      D ]M  }t        |j	                  t        d      |            }||gk(  sJ t        t        |j                  |             O t        j                  t              5  |j	                  t        d      |       d d d        t        g       }t        j                  t         j                        5  |j	                  t        d      |       d d d        t        j                  d	t        d
            }|j                  |       t        |j	                  t        d      |            ||gk(  sJ t        j                  t              5 }|j	                  t        d      |       d d d        d}j                   j#                         |k(  sJ y # 1 sw Y   xY w# 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   QxY w)NFoo/foo_dir/Foo-1.2.egg)ri   z[bar]
Baz>=2.0r#   zFoo-0.9.egg   zFoo==0.9zFoo[bar]z/foo_dir/Baz-2.1.egg)ri   r   zFoo==1.2
Foo!=1.2z-Foo 0.9 is installed but Foo==1.2 is required)r*   rA   r   rB   resolverH   rI   DistributionNotFoundr	   r   from_filenamer   rC   rangemapr   valuereport)	r   rJ   rM   r   itargetsBazvcmsgs	            r   testResolvezTestDistro.testResolve   s5   &&r*^BJJr2&'2---]]===> 	6JJ)%0"5	6 (("@A
 	s
|))-89 q 	'A2::&8&?DEGse###RVVW%&	' ]]?+ 	;JJ)*5r:	;^ ]]===> 	;JJ)*5r:	;(("X6L-M
 	s BJJ1*=rBCSzQQQ]]?+ 	ErJJ)*>?D	E >xx C'''E	6 	6	; 	;
	; 	;	E 	Es0   $JJ#J<J(JJJ%(J1c                     t        j                  g       }t        g       }|j                  t	        d      |      }t        |      g k(  sJ y)z5Environment markers are evaluated at resolution time.zFoo;python_version<'2'N)r*   rA   r   r   r	   rB   )r   rJ   rM   ress       r   +test_environment_marker_evaluation_negativez6TestDistro.test_environment_marker_evaluation_negative   sB    &&r*^jj+,DErJCyBr   c                     t        j                  g       }t        g       }t        j                  d      }|j                  |       |j                  t        d      |      }t        |      |gk(  sJ y )N/foo_dir/Foo-1.2.dist-infozFoo;python_version>='2')	r*   rA   r   r   r   rC   r   r	   rB   )r   rJ   rM   r   r   s        r   +test_environment_marker_evaluation_positivez6TestDistro.test_environment_marker_evaluation_positive   sb    &&r*^(()EF
sjj+,EFKCySE!!!r   c                 <   t        d      \  }t        d      \  }t        j                  ||j                  i      }|j	                  |      sJ t        d      \  }t        d      \  }t        j                  ||j                  i      }|j	                  |      sJ y)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*   
_ReqExtrasrn   markers_pass)r   
parent_reqrP   
req_extrass       r   )test_environment_marker_evaluation_calledz4TestDistro.test_environment_marker_evaluation_called   s    
 +51#$=>"--sJ4E4E.FG
&&s+++*73#$=>"--sJ4E4E.FG
&&s+++r   c                    t        j                  g       }t        g       }t        j                  dt        d            }|j                  |       t        |j                  t        d      |            |gk(  sJ t        j                  d      }|j                  |       t        |j                  t        d      |            }|||gk(  sJ y)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*   rA   r   r   r   r   rC   rB   r   r	   r   rJ   rM   r   quuxr   s         r   "test_marker_evaluation_with_extrasz-TestDistro.test_marker_evaluation_with_extras   s    &&r*^(((  
 	sBJJ1%8"=>3%GGG))*GH
t2::0<bABsDk!!!r   c                    t        j                  g       }t        g       }t        j                  dt        d            }|j                  |       t        |j                  t        d      |            |gk(  sJ t        j                  d      }|j                  |       t        |j                  t        d      |            }|||gk(  sJ y)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"=>3%GGG))*GH
t2::01EFKLsDk!!!r   c                    t        j                  g       }t        g       }t        j                  dt        d            }|j                  |       t        j                  d      }|j                  |       t        j                  d      }|j                  |       t        |j                  t        d      |            }t        |      |||gk(  sJ y )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*   rA   r   r   r   r   rC   rB   r   r	   sorted)r   rJ   rM   r   r   fredr   s          r   +test_marker_evaluation_with_multiple_extrasz6TestDistro.test_marker_evaluation_with_multiple_extras!  s    &&r*^(((  	
 	s))*GH
t))*GH
t2::0@"E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 ]  }|j                  |        t        |j                  t        d	      |            }|||||gk(  sJ y )
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   rJ   rM   r   r   cr   rL   r   s	            r   'test_marker_evaluation_with_extras_loopz2TestDistro.test_marker_evaluation_with_extras_loop6  s    &&r*^&&&AB
 &&&AB
 &&&  	
 (()EF1cN 	DFF4L	2::05r:;q!Qn$$$r   N   )r      finalz/https://github.com/python/cpython/issues/103632c                    | j                  d      }| j                  |d       | j                  |dj                         dg       | j                  |dj                         dg       | j                  |dj                         ddg       | j                  |dj                         ddg       t        j                  t
        j                        5  |j                  d	g       d d d        y # 1 sw Y   y xY w)
Nz
            Twisted>=1.5
            [docgen]
            ZConfig>=2.0
            docutils>=0.3
            [fastcgi]
            fcgiapp>=0.1rq   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   )rk   ro   splitrH   rI   r*   UnknownExtrarm   rY   s     r   testDistroDependsOptionsz#TestDistro.testDistroDependsOptionsQ  s    
 
 	1n-8>>@8*	
 	19??AI;OBHHJy!	

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

 ]]=556 	 JJw	  	  	 s   C--C6)r2   )!r-   r.   r/   rQ   r[   rc   re   rg   rk   ro   rs   rH   markskipifhasattrobjectneeds_object_dirry   r   r   r   r   r   r   r   r   r   r   xfailr_   r`   releaselevelr   r2   r   r   r4   r4   3   s   17f:"ML8 {{))FI&&I * 
 $ $ ) )((T","$"&0*%6 [[!'TC,<,<,I,IW,T@   	 r   r4   c                       e Zd Zd Zd Zy)TestWorkingSetc                 N   t        g       }t        j                  d      }|j                  |       t	        t        d            }t        j                  t              5 }|j                  |       d d d        d}j                  j                         |k(  sJ y # 1 sw Y   +xY w)Nr   zFoo<1.2z,Foo 1.2 is installed but Foo<1.2 is required)r   r   r   rC   r   r	   rH   rI   r   findr   r   )r   rM   r   rP   r   r   s         r   test_find_conflictingz$TestWorkingSet.test_find_conflictings  s    ^(()?@
s %i01]]?+ 	rGGCL	 =xx C'''		 	s   BB$c                    t        g       }t        d      }t        j                  d|      }|j	                  |       t        d      }t        j                  d|      }|j	                  |       t        j                  d      }|j	                  |       t        j                  d      }|j	                  |       t        j                  t              5 }|j                  t        d             d	d	d	       d
}|t        t        dg            z  }j                  j                         |k(  sJ y	# 1 sw Y   CxY w)z
        A ContextualVersionConflict should be raised when a requirement
        conflicts with a prior requirement for a different package.
        )ri   zBaz==1.0z/foo_dir/Foo-1.0.eggr#   )ri   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   rC   rH   rI   r   r   r	   reprsetr   r   )r   rM   mdr   r   r   r   r   s           r   !test_resolve_conflicts_with_priorz0TestWorkingSet.test_resolve_conflicts_with_prior  s    ^12(()?"M
s12(()?"M
s(()?@
s(()?@
s]]?+ 	9rJJ),78	9 BtCL!!xx C'''	9 	9s   D44D=N)r-   r.   r/   r   r   r2   r   r   r   r   r  s    ((r   r   c            
           e Zd Zd Zd Zd Zd ZdZej                  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y)TestEntryPointsc                     |j                   dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j	                         t
        u sJ d}t        |      |k(  sJ y )Nr   "pkg_resources.tests.test_resources)r   )x<foo = pkg_resources.tests.test_resources:TestEntryPoints [x])r%   module_nameattrsrn   loadr   str)r   epexpects      r   assertfieldszTestEntryPoints.assertfields  sw    ww%~~!EEEExx////yyF"""wwyO+++O2w&   r   c                 N    t        j                  dt        d            | _        y )Nr:   )zrequires.txtz[x]r#   )r   r   r   rL   )r   methods     r   setup_methodzTestEntryPoints.setup_method  s     .."X6M-N
	r   c                 \    t        dddgdg| j                        }| j                  |       y )Nr   r   r   r   )r   rL   r   r   r   s     r   
testBasicszTestEntryPoints.testBasics  s4    0EII
 	"r   c                    d}t        j                  || 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 y )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   parserL   r   r%   r   r   rn   )r   sr   specs       r   	testParsezTestEntryPoints.testParse  s   Ja+"89ww)###~~+++xx2~~yyI%%%45ww("""~~(((xx8###yyB Bd#ww+%%%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        y # 1 sw Y   y xY wr   )rH   rI   
ValueErrorr   r   )r   r   s     r   test_reject_specz TestEntryPoints.test_reject_spec  s1    ]]:& 	*[)	* 	* 	*s	   9Ac                     t         j                  j                         } dj                  di t	               }t        j                  |      }|j                  |k(  sJ y)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  sP    
 %%',%,,8vx8d#ww$r   c                 &   t        |      t        | j                        k(  sJ | j                  j                         D ]  \  }}|j                  |      j                  |j                  k(  sJ |j                  |      j
                  |j
                  k(  sJ t        |j                  |      j                        t        |j                        k(  sJ t        |j                  |      j                        t        |j                        k(  rJ  y r   )	r}   submap_expectitemsgetr%   r   r   r   rn   )r   mrV   r   s       r   checkSubMapzTestEntryPoints.checkSubMap  s    1vT//0000))//1 	BGC55:??bgg---55:))R^^;;;!%%***+vbhh/????!%%*++,ryy0AAAA		Br   feature1
somemodulesomefunctionfeature2zanother.module	SomeClassextra1extra2feature3zthis.module	something)rn   )r   r   r  z
            # define features for blah blah
            feature1 = somemodule:somefunction
            feature2 = another.module:SomeClass [extra1,extra2]
            feature3 = this.module [something]
    c                 v   | j                  t        j                  d| j                               t	        j
                  t              5  t        j                  dd       d d d        t	        j
                  t              5  t        j                  dddg       d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)Nxyzzx azfoo=barr   zfoo=baz)r   r   parse_group
submap_strrH   rI   r   r   s    r   testParseListzTestEntryPoints.testParseList  s    //tGH]]:& 	5""5)4	5]]:& 	@""3I(>?	@ 	@	5 	5	@ 	@s   	B#B/#B,/B8c                 z   t        j                  d| j                  i      }| j                  |d          t	        |j                               dgk(  sJ t        j                  d| j                  z         }| j                  |d          t	        |j                               dgk(  sJ t        j                  t              5  t        j                  ddg       d d d        t        j                  t              5  t        j                  | j                         d d d        y # 1 sw Y   KxY w# 1 sw Y   y xY w)Nr  z[xyz]
z[xyz])	r   	parse_mapr  r   rB   keysrH   rI   r   )r   r   s     r   testParseMapzTestEntryPoints.testParseMap  s      %!9:5"AFFH~%(((  T__!<=5"AFFH~%(((]]:& 	5  '7!34	5]]:& 	2  1	2 	2	5 	5	2 	2s   D%< D1%D.1D:c                     t        dddgdg      }t        j                  t        j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   F)require)r   rH   warnsr*   PkgResourcesDeprecationWarningr   r   s     r   testDeprecationWarningsz'TestEntryPoints.testDeprecationWarnings  sS    7:K9Lse
 \\-FFG 	#GGEG"	# 	# 	#s   AAN)r-   r.   r/   r   r   r   r   reject_specsrH   r   parametrizer   r   r   r   r   r   r  r
  r  r  r2   r   r   r   r     s    !

&, ML[[]L9* :*B J~6FG(;-(H9M
 J{mLMJ@
2#r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)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      k7  sJ |t        d      k7  sJ |t        d      k7  sJ |t        d      k7  sJ y )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-1v'''Aw====K////K////K////K,,,,K,,,,K 6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      k7  sJ y )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  sm    /0/0Rxx2w#b'!!!2w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 y )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,,->?,,->?U#q(((U#1,,,zzA~~q   a!||r   c           
      
   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 y )
NzTwisted[foo,bar]>=1.2zTwisted[bar,FOO]>=1.2)r   bartwistedz>=1.2r   r)  r  zhttps://localhost/twisted.zip)r   r   r   rn   hashr   	frozensetr  s      r   testOptionsAndHashingz&TestRequirements.testOptionsAndHashing0  s   6767Rxx299~^!4444299~^!4444Bx48###Bx4!uen%!
   	  GH
+NK
  	 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 y )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   rZ   s       r   testVersionEqualityz$TestRequirements.testVersionEqualityH  s    |,|,&&!+++!+++!+++!R'''!R'''!R'''!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 y)zQ
        The setuptools project should implement the setuptools package.
        
setuptoolszsetuptools == 0.7zsetuptools == 0.7a1zsetuptools >= 0.7N)r   r   rU   r	  s    r   testSetuptoolsProjectNamez*TestRequirements.testSetuptoolsProjectNameV  s    
   .;;|KKK  !45BBlRRR  !67DDTTT  !45BBlRRRr   N)	r-   r.   r/   r   r!  r'  r-  r/  r2  r2   r   r   r  r    s!    	8
0(	Sr   r  c                   "   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                  j                  d
g d      d        ZdZej                  j                  d
g d e e eej)                                           z         d        Zd Zy)TestParsingc                 6    t        t        d            g k(  sJ y )N )rB   r	   r	  s    r   testEmptyParsezTestParsing.testEmptyParsec  s    &r*+r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(  r(J  y )Nr   z x
 yyzx

)rB   r*   r+   )r   inpouts      r   testYieldingzTestParsing.testYieldingf  sl    H3%LT2JSz"s^c3Z(
 	?HC 11#6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        y # 1 sw Y   y xY w)Na   
                    x
                    [Y]
                    z

                    a
                    [b ]
                    # foo
                    c
                    [ d]
                    [q]
                    v
                    r   Yzr   r   r   rZ   qrr   z[foo)rB   r*   split_sectionsrH   rI   r   )r   samples     r   testSplittingzTestParsing.testSplittingp  s     M0089C5M3*3%L"I3%L>
 
 	
 
 ]]:& 	7--f56	7 	7 	7s   A;;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k7  sJ y )	Nzadns-pythonz
WSGI Utilsz
WSGI-UtilszWSGI  UtilsMoney$$$MakerMoney-Makerpeak.webzpeak-web)r   r	  s    r   testSafeNamezTestParsing.testSafeName  sa    '=888&,666'<777)]:::$
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 y )
Nz1.2-1z	1.2.post1z	1.2 alphaz	1.2.alphaz2.3.4 20050521z2.3.4.20050521rE  rF  rG  )r   r	  s    r   testSafeVersionzTestParsing.testSafeVersion  sc    G$333K(K777,-1AAAAO,===J':555r   c                 t   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        t	        j
                  t              5  t        j                  d       d d d        t	        j
                  t              5  t        j                  d       d d d        t	        j
                  t              5  t        j                  d       d d d        t	        j
                  t              5  t        j                  d	       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   y xY w)
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#)rB   r	   r   r   rH   rI   r   r	  s    r   testSimpleRequirementsz"TestParsing.testSimpleRequirements  so   &'89:)*?
 
 	
 
 &'GHI+,N
 
 	
 
   !12kBR6SSSS]]:& 	'g&	']]:& 	%e$	%]]:& 	(h'	(]]:& 	,l+	,]]:& 	#c"	# 	#	' 	'	% 	%	( 	(	, 	,	# 	#s<   E>:F
1F(F"F.>F
FF"F+.F7c                 l   t        j                  d      t        j                  d      k(  sJ t        j                  d      t        j                  d      k7  sJ t        j                  d      t        j                  d      k7  sJ t        j                  d      t        j                  d      k7  sJ y )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;;L;L!<
 
 	
 
   -
@AB 	B B   -
@AB 	B B   2
IJK 	K Kr   c                     t        d       y )Nzfoo==1.0+org1r	   r	  s    r   test_local_versionzTestParsing.test_local_version  s
    ?+r   c                 0    t        d       t        d       y )Nzfoo>=1.0, <3zfoo >= 1.0, < 3rQ  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.0rX  )z0.4.0-0z0.4-0)0post1z0.0post1)0pre10.0c1)z0.0.0preview10c1)r[  z0-rc1)z1.2a1z1.2.a.1)z1.2.az1.2ac                 6    t        |      t        |      k(  sJ y r   r
   r   rU  rV  s      r   r/  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)rb  r`  )z2.3a1z2.3)2.1-1z2.1-2)rd  ra  )r`  z2.1post4)z2.1a0-20040501r`  )r#  z02.1)z3.2z	3.2.post0)z3.2post1z3.2post2)rW  z4.0)z0.0.4rX  )rY  z0.4post1)z	2.1.0-rc1z2.1.0)z2.1devz2.1a0c                 6    t        |      t        |      k  sJ y r   r^  r_  s      r   testVersionOrderingzTestParsing.testVersionOrdering  s    . U#mE&::::r   c                 Z    t        t        d            t        t        d            k(  sJ y)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	  s    r   testVersionHashablezTestParsing.testVersionHashable  s&    
 M%()T-2F-GGGGr   N)r-   r.   r/   r7  r<  rC  rH  rJ  rM  rO  rR  rT  rH   r   r  r/  torturerB   r   reversedr   rf  rh  r2   r   r   r4  r4  b  s    2?7036#&K,. [[	
<<G [[	
$ x12
3%	4,;-,;Hr   r4  c                       e Zd ZdZej
                  d        Z ej
                  d      d        Zej                  j                   e
j                         dk(  d      Zed	        Zed
        Zy)TestNamespacesz8__import__('pkg_resources').declare_namespace(__name__)
c              #   (  K   t        t        d      st        |       yt        |      dz   }t        j                  t        |      |       	  t	        |      |       t        j
                  |       y# t        j
                  |       w xY w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   rn  typeunlink)r   tmpdir	link_names      r   symlinked_tmpdirzTestNamespaces.symlinked_tmpdir  sm      r9%f+K)+	


3v;	*	!$v,y))IIi BIIi s   ABA8 "B8BBT)autousec              #   L  K   t         j                  j                         }t        j                  dd }|j                  d      }t        j                  j                  t        |             	 d |t         _        |t        _        y# |t         _        |t        _        w xY w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copyr_   pathmkdirappendr   )r   rr  saved_ns_pkgssaved_sys_path	site_pkgss        r   patched_pathzTestNamespaces.patched_path  st      &99>>@!LL-	I'	&0=M-%CH 1>M-%CHs   A+B$.B	 2B$	B!!B$Windowsz#591ru   c                 ,   |j                         }|}t        j                  j                  t	        |dz               |dz  |dz  f}|D ]\  }|dz  }|dz  }|j                          |dz  j                  | j                  d       |dz  j                  | j                  d       ^ t        j                  t        d	      5  d
dl}ddd       dt        j                  v sJ t        j                  t        d	      5  d
dl}ddd       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 y# 1 sw Y   xY w# 1 sw Y   xY w)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-pkgs2rw  pkg1pkg2__init__.pyutf-8encodingpkg_resources.declare_namespacematchr   Nz	pkg1.pkg2)realpathr_   rz  r|  r   
ensure_dir
write_textns_strrH   r  DeprecationWarningr  r*   rx  	pkg1.pkg2r  __path__)	r   rt  real_tmpdirrr  	site_dirssiter  r  rK   s	            r   test_two_levels_deepz#TestNamespaces.test_two_levels_deep  s    '//1!F\123[(&<*??	 	MD&=D&=DOOM!--dkkG-LM!--dkkG-L	M \\,4UV 		:::::\\,4UV 		 m?????008[MIII k)F2V;<l*V3f<=
 yy!!X---	 		 	s   E> F
>F
Fc                 t   |}|dz  |dz  |dz  f}d}t        |d      D ]  \  }}|dkD  r(t        j                  j                  t	        |             |dz  }|dz  }|j                          |dz  j                  | j                  d	
       |dz  j                  ||z  d	
        t        j                  t        d      5  ddl}ddl}ddd       |D cg c]  }t	        |j                         dz          }	}j                  |	k(  sJ |j                  j                   dk(  sJ y# 1 sw Y   _xY wc c}w )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
        rw  r  z
site-pkgs3z__version__ = %rr?   nspkgsubpkgr  r  r  r  r  r   N)	enumerater_   rz  r|  r   r  r  r  rH   r  r  r  nspkg.subpkgr  r  r  __version__)
r   rt  rr  r  vers_strnumberr  r  r  rK   s
             r   test_path_orderzTestNamespaces.test_path_orderC  sA    "[ \!\!
	 &%i3 	ULFDzD	*7NEX%F]"..t{{W.Mm#//60AG/T	U \\,4UV 	 	  @IItC'12II~~)))||''1,,,	  	  Js   	D)#D5)D2N)r-   r.   r/   r  rH   fixturert  r  r   r   r6   systemissue591r  r  r2   r   r   rl  rl    s    HF^^! !" V^^D!& "&  {{  !2i!? OH!. !.F !- !-r   rl  )r   ro  r6   r   r_   rH   packaging.specifiersr   r*   r   r   r   r   r   r	   r
   r   r   r   EmptyProviderr   r   rD   r4   r   r   r  r4  rl  r2   r   r   <module>r     s     	   
  - 
 
 
B}** B  ))77|  | ~	'( '(Tn# n#bRS RSjRH RHjn- n-r   