
    0hh?                       S SK r S SKrS SKrS SKrS SKJr  S SKJr  Sr	Sr
SrSr/ S/ 4PS/ 4PS	/ 4PS
S/4PSS/4PSS/4PSS/4PSS/4PSS/4PSSS/4PSS/4PSS/4PSSS/4PSSS /4PS!/ 4PS"/ 4PS#/ 4PS$S%/4PS&S'/4PS(S)/4PS*S)/4PS+S,/4PS-S./4PS/S0S1/4PS2S3/4PS4S0/4PS5S6S7/4PS8S9S:/4PS;S</4PS=S>/4PS?S@/4PSASB/4PSCSD/4PSESD/4PSFSG/4PSHSI/4PSJSI/4PSKSL/4PSMSL/4Pr/ S0 4PS0 4PS	0 4PS
SS/04PSSS/04PSSS/04PSSS/04PSSSN/04PSSOSP/04PSSQ/SR/SS.4PSSST/04PSSSQ/04PSSU/SV/S.4PSSSWSX/04PS!0 4PS"0 4PS#0 4PS$S!S!/04PS&S!S(/04PS(S(S!/04PS*S(S!/04PS+S(SY/04PS-SZS[/04PS/S\/S]/S^.4PS2S(S_/04PS4S(S\/04PS5S`/Sa/S0.4PS8S(SbSc/04PS;SdSQ/04PS=SSe/04PS?SfS\/04PSAS(Sg/04PShS(Si/04PSCSjSk/04PSESjSk/04PSFSlSl/04PSHSmSn/04PSJSmSn/04PSKSoSp/04PSMSoSp/04Pr " Sq Sr\R                  \5      r " Ss St\R                  5      r " Su Sv\R                  5      rSw rSx r\Sy:X  a  \R,                  " 5         gg)z    N)support)ExtraAssertionshttp://a/b/c/d;p?q#fhttp://a/b/c/d;p?qhttp://a/b/c/d &z&&=)r   r   z=a)r   ar   )r   r   za=za=b=c)r   b=cza%3Db=c)a=bcza=b&c=dr   b)r   dz	a=b%26c=d)r   b&c=dz&a=bza=a+b&b=b+cr   a br   b cza=1&a=2r   1r   2       &s   &&   =)r   r   s   =a)r      ar   )r   r   s   a=s   a=b=c)r      b=cs   a%3Db=c)   a=b   cs   a=b&c=dr      b)r!      ds	   a=b%26c=d)r      b&c=ds   &a=bs   a=a+b&b=b+cr      a br#      b cs   a=1&a=2r      1r      2;a=b);ar   a=a+b;b=b+c)r   	a b;b=b c   ;a=b)   ;ar#      a=a+b;b=b+c)r   	   a b;b=b cu   Ł=é)   Ł   éz%C5%81=%C3%A9z%81=%A9)   �r8   s   Ł=é)   Ł   és   %C5%81=%C3%A9s   =)      s   %81=%A9r   r   r   r   r   )r   r   r   r   r   r   r   r   r    r!   r#   r$   )r   r!   r%   r'   r)   r+   r-   r/   r1   r3   r5   s   a=a%E2%80%99bs   a’br6   r7   r8   r9   r:   r;   r<   c                    	   \ rS rSrSS jr\R                  " S\5      S 5       r\R                  " S\	5      S 5       r
\R                  " SS5      \R                  " S	/ S
Q5      S 5       5       r\R                  " SS5      \R                  " S/ SQ5      S 5       5       r\R                  " SS5      \R                  " SS5      \R                  " S	/ SQ5      S 5       5       5       rS r\R                  " SS5      \R                  " S/ SQ5      S 5       5       rS rS rS rS rS r\R                  " SS5      \R                  " S/ SQ5      S 5       5       r\R                  " SS5      \R                  " S/ S Q5      S! 5       5       r\R                  " SS5      \R                  " S"S#S$S%S&S'S(S)S*\S+S,4\S+S-4/
5      S. 5       5       rS/ rS0 rS1 rS2 r\R                  " SS5      \R                  " S3\R>                  R@                  \R>                  RB                  45      \R                  " S4S55      S6 5       5       5       r"\R                  " SS5      \R                  " S3\R>                  R@                  \R>                  RB                  45      \R                  " SS75      S8 5       5       5       r#S9 r$S: r%S; r&S< r'S= r(S> r)\R                  " S?\R>                  RB                  \R>                  R@                  45      S@ 5       r*\R                  " SASB5      \R                  " S?\R>                  RB                  \R>                  R@                  45      SC 5       5       r+SD r,\R                  " SE\R>                  RZ                  \R>                  R\                  \R>                  R^                  /5      SF 5       r0SG r1SH r2SI r3\R                  " SSJ0 4SK0 4SLSMSN/04SOSP/SQ/SR.4SSSMSTSU/04SV0 4SW0 4SXSYSZ/04S[S\/S]/S^.4S_SYS`Sa/04/
5      Sb 5       r4\R                  " SSJ/ 4SK/ 4SLSR/4SOScSd/4SSSeSf/4SV/ 4SW/ 4SXS^/4S[SgSh/4S_SiSj/4/
5      Sk 5       r5Sl r6Sm r7Sn r8So r9Sp r:Sq r;Sr r<Ss r=St r>Su r?Sv r@Sw rASx rBSy rCSz rDS{ rES| rFS} rGS~rHg)UrlParseTestCasej   Nc                 
   Uc  Un[         R                  R                  U5      nU R                  XR5        UR                  UR
                  UR                  UR                  UR                  UR                  4nU R                  Xb5        [         R                  R                  U5      nU R                  Xt5        U R                  XuR                  5       5        [         R                  R                  UR                  5       5      nU R                  UR                  5       UR                  5       5        U R                  X5        U R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                   UR                   5        [         R                  R#                  U5      nU R                  XS5        UR                  UR
                  UR                  UR                  UR                  4nU R                  Xc5        [         R                  R%                  U5      nU R                  Xt5        U R                  XuR                  5       5        [         R                  R#                  UR                  5       5      nU R                  UR                  5       UR                  5       5        U R                  X5        U R                  UR                  UR                  5        U R                  UR
                  UR
                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR                   UR                   5        g N)urllibparseurlparseassertSequenceEqualschemenetlocpathparamsqueryfragment
urlunparsegeturlassertEqualusernamepasswordhostnameporturlsplit
urlunsplit)	selfurlparsedspliturl2resulttresult2result3s	            ;/opt/python-3.13.8/usr/lib/python3.13/test/test_urlparse.pycheckRoundtrips UrlParseTestCase.checkRoundtripsl   s   <D&&s+  0]]FMM6;;]]FLL&//;  +,,))&1  /  --/: ,,''8)6==?;  16==96==96;;76==96<<8))6??;))6??;))6??;))6??;6;;7 &&s+  /]]FMM6;;\\6??,  *,,))&1  /  --/: ,,''8)6==?;  16==96==96;;76<<8))6??;))6??;))6??;))6??;6;;7r   zorig,expectc                    [         R                  R                  USS9nU R                  X25        U Vs/ s H  n[	        US   5      (       d  M  UPM     nn[         R                  R                  USS9nU R                  X55        g s  snf )NTkeep_blank_values   F)rB   rC   	parse_qslrN   lenrU   origexpectrZ   vexpect_without_blankss         r^   test_qslUrlParseTestCase.test_qsl   su    '''E(,2 @Fqc!A$iF @'''F7 !As   BBc                 "   [         R                  R                  USS9nU R                  X25        U Vs0 s H  n[	        X$   S   5      (       d  M  XBU   _M!     nn[         R                  R                  USS9nU R                  X55        g s  snf )NTrb   r   F)rB   rC   parse_qsrN   rf   rg   s         r^   test_qsUrlParseTestCase.test_qs   s    &&tt&D(*0!G*0QC	!4E ".1I*0 	 !G&&tu&E7!Gs   B	Bbytes)FTzurl,parsed,split))path/to/file)r   r   rs   r   r   r   )r   r   rs   r   r   )/path/to/filer   r   rt   r   r   r   r   r   rt   r   r   )//path/to/file)r   rH   /to/filer   r   r   )r   rH   rx   r   r   )z////path/to/file)r   r   rw   r   r   r   )r   r   rw   r   r   )z/////path/to/file)r   r   ///path/to/filer   r   r   )r   r   ry   r   r   )zscheme:path/to/file)rF   r   rs   r   r   r   )rF   r   rs   r   r   )scheme:/path/to/filerF   r   rt   r   r   r   rF   r   rt   r   r   )zscheme://path/to/file)rF   rH   rx   r   r   r   )rF   rH   rx   r   r   )zscheme:////path/to/file)rF   r   rw   r   r   r   )rF   r   rw   r   r   )zscheme://///path/to/file)rF   r   ry   r   r   r   )rF   r   ry   r   r   )zfile:tmp/junk.txt)filer   tmp/junk.txtr   r   r   )r}   r   r~   r   r   )file:///tmp/junk.txtr}   r   /tmp/junk.txtr   r   r   r}   r   r   r   r   )zfile:////tmp/junk.txt)r}   r   //tmp/junk.txtr   r   r   )r}   r   r   r   r   )zfile://///tmp/junk.txt)r}   r   ///tmp/junk.txtr   r   r   )r}   r   r   r   r   )zhttp:tmp/junk.txt)httpr   r~   r   r   r   )r   r   r~   r   r   )zhttp://example.com/tmp/junk.txt)r   example.comr   r   r   r   )r   r   r   r   r   )z http:///example.com/tmp/junk.txt)r   r   /example.com/tmp/junk.txtr   r   r   )r   r   r   r   r   )z!http:////example.com/tmp/junk.txt)r   r   //example.com/tmp/junk.txtr   r   r   )r   r   r   r   r   )zimap://mail.python.org/mbox1)imapmail.python.org/mbox1r   r   r   )r   r   r   r   r   )z1mms://wms.sys.hinet.net/cts/Drama/09006251100.asf)mmswms.sys.hinet.net/cts/Drama/09006251100.asfr   r   r   )r   r   r   r   r   )znfs://server/path/to/file.txt)nfsserver/path/to/file.txtr   r   r   )r   r   r   r   r   )z0svn+ssh://svn.zope.org/repos/main/ZConfig/trunk/)svn+sshsvn.zope.org/repos/main/ZConfig/trunk/r   r   r   )r   r   r   r   r   )z)git+ssh://git@github.com/user/project.git)git+sshgit@github.com/user/project.gitr   r   r   )r   r   r   r   r   )zEitms-services://?action=download-manifest&url=https://example.com/app)itms-servicesr   r   r   4action=download-manifest&url=https://example.com/appr   )r   r   r   r   r   )+scheme:path/to/file)r   r   r   r   r   r   )r   r   r   r   r   )sch_me:path/to/file)r   r   r   r   r   r   )r   r   r   r   r   )   schème:path/to/file)r   r   r   r   r   r   )r   r   r   r   r   c                     U(       aG  UR                  5       (       d  U R                  S5        [        U5      n[        U5      n[        U5      nU R	                  X#U5        g )Nnon-ASCII bytes)isasciiskipTest
str_encodetuple_encoder_   )rU   rr   rV   rW   rX   s        r^   test_roundtrips UrlParseTestCase.test_roundtrips   sM    z ;;==/0S/C!&)F 'ES%0r   zurl,url2,parsed,split))ry   rt   ru   rv   )zscheme:///path/to/filerz   r{   r|   )zfile:/tmp/junk.txtr   r   r   )zhttp:/tmp/junk.txtzhttp:///tmp/junk.txt)r   r   r   r   r   r   )r   r   r   r   r   )zhttps:/tmp/junk.txtzhttps:///tmp/junk.txt)httpsr   r   r   r   r   )r   r   r   r   r   c                     U(       a,  [        U5      n[        U5      n[        U5      n[        U5      nU R                  X$XS5        g rA   r   r   r_   )rU   rr   rV   rY   rW   rX   s         r^   test_roundtrips_normalization.UrlParseTestCase.test_roundtrips_normalization  s>    0 S/Cd#D!&)F 'ES%6r   rF   )r   r   ))z://www.python.org)www.python.orgr   r   r   r   )r   r   r   r   )z://www.python.org#abc)r   r   r   r   abc)r   r   r   r   )z://www.python.org?q=abc)r   r   r   q=abcr   )r   r   r   r   )z://www.python.org/#abc)r   /r   r   r   )r   r   r   r   )z://a/b/c/d;p?q#f)r   z/b/c/dpqf)r   z/b/c/d;pr   r   c                     U(       a,  [        U5      n[        U5      n[        U5      n[        U5      nX#-   nU4U-   nU4U-   nU R                  X4U5        g rA   r   )rU   rr   rF   rV   rW   rX   s         r^   test_http_roundtrips%UrlParseTestCase.test_http_roundtrips6  s]    . 'FS/C!&)F 'ElV#	E!S%0r   c                 $   U R                  XS9   U R                  [        R                  R	                  X5      U5        UR                  S5      nUR                  S5      nUR                  S5      nU R                  [        R                  R	                  XE5      U5        [        R                  R                  [        R                  R                  U5      5      nU R                  [        R                  R	                  X5      U5        [        R                  R                  [        R                  R                  U5      5      nU R                  [        R                  R	                  XE5      U5        S S S 5        g ! , (       d  f       g = f)N)baserelurlascii)subTestrN   rB   rC   urljoinencoderT   rS   )rU   r   r   expectedbasebrelurlb	expectedbs          r^   	checkJoinUrlParseTestCase.checkJoinW  s   \\t\3V\\11$?JKK(EmmG,G 0IV\\11%A9M\\,,V\\-B-B6-JKFV\\11$?Jll--fll.C.CG.LMGV\\11%A9M 433s   E(F
Fu)Pythonz./Pythonx-newscheme://foo.com/stuffzx://yzx:/yzx:/r   c                 X   U(       a  [        U5      nU R                  [        R                  R	                  [        R                  R                  U5      5      U5        U R                  [        R                  R                  [        R                  R                  U5      5      U5        g rA   )r   rN   rB   rC   rT   rS   rL   rD   )rU   rr   r   s      r^   test_unparse_parse#UrlParseTestCase.test_unparse_parsed  sl     1A001F1Fq1IJAN001F1Fq1IJANr   c                    U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        S	S
5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        S S5        U R                  [        S!S"5        U R                  [        S#S$5        U R                  [        S%S$5        U R                  [        S&S5        U R                  [        S'S(5        U R                  [        S)S*5        U R                  [        S+S,5        U R                  [        S-S.5        U R                  [        S/S05        U R                  [        S1S"5        U R                  [        S2S5        U R                  [        S3S45        U R                  [        S5S65        g )7Ng:hghttp://a/b/c/g./gg/http://a/b/c/g//g
http://a/g//ghttp://gg?yhttp://a/b/c/g?yg?y/./xhttp://a/b/c/g?y/./x#shttp://a/b/c/d;p?q#sg#shttp://a/b/c/g#sg#s/./xhttp://a/b/c/g#s/./xg?y#shttp://a/b/c/g?y#sg;xhttp://a/b/c/g;xg;x?y#shttp://a/b/c/g;x?y#s.http://a/b/c/./..http://a/b/../../ghttp://a/b/g../..	http://a/../../../../gr   r   g.http://a/b/c/g..ghttp://a/b/c/.gg..http://a/b/c/g....ghttp://a/b/c/..g./../g./g/.g/./hhttp://a/b/c/g/hg/../hhttp://a/b/c/h)r   RFC1808_BASErU   s    r^   test_RFC1808UrlParseTestCase.test_RFC1808l  s   |UE2|S*:;|U,<=|T+<=|T<8|UJ7|U,>?|Y0FG|T+AB|U,>?|Y0FG|W.BC|U,>?|Y0FG|S/:|T?;|T=9|UM:|V^<|Wk:|X{;|Y= 	|R)?@|T+<=|T+<=|U,>?|U,>?|X~>|W.?@|W.@A|X/?@r   c                 b    U R                  [        R                  R                  S5      S5        g )Nzmailto:1337@example.org)mailtor   z1337@example.orgr   r   r   rN   rB   rC   rD   r   s    r^   test_RFC2368UrlParseTestCase.test_RFC2368  s&    ../HI>	@r   c                 V   U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        S	S
5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS 5        U R                  [        S!S 5        U R                  [        S"S5        U R                  [        S#[        5        U R                  [        S$S%5        U R                  [        S&S'5        U R                  [        S(S)5        U R                  [        S*S+5        U R                  [        S,S5        U R                  [        S-S5        U R                  [        S.S/5        U R                  [        S0S15        U R                  [        S2S35        U R                  [        S4S55        U R                  [        S6S75        U R                  [        S8S95        U R                  [        S:S;5        U R                  [        S<S=5        g )>Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	g;x=1/./yhttp://a/b/c/g;x=1/y
g;x=1/../yhttp://a/b/c/yr   r   g?y/../xhttp://a/b/c/g?y/../xr   r   g#s/../xhttp://a/b/c/g#s/../x)r   RFC2396_BASEr   s    r^   test_RFC2396UrlParseTestCase.test_RFC2396  sJ    	|UE2|S*:;|U,<=|T+<=|T<8|UJ7|U,>?|T+AB|U,>?|W.BC|U,>?|Y0FG|S/:|T?;|T=9|UM:|V^<|Wk:|X{;|Y=|R6|T+<=|T+<=|U,>?|U,>?|X~>|W.?@|W.@A|X/?@|[2HI|\3CD|Y0FG|Z1HI|Y0FG|Z1HIr   c                 @   U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        S	S
5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        S S!5        U R                  [        S"S!5        U R                  [        S#S$5        U R                  [        S%S&5        U R                  [        S'S&5        U R                  [        S(S5        U R                  [        S)S5        U R                  [        S)S5        U R                  [        S*S5        U R                  [        S+S5        U R                  [        S,S5        U R                  [        S-S.5        U R                  [        S/S05        U R                  [        S1S25        U R                  [        S3S45        U R                  [        S5S$5        U R                  [        S6S
5        U R                  [        S7S85        U R                  [        S9S:5        U R                  [        S;S<5        U R                  [        S=S>5        U R                  [        S?S@5        U R                  [        SASB5        U R                  [        SCSD5        U R                  [        SESF5        U R                  [        SGS5        U R                  SHSS5        g )IN?yzhttp://a/b/c/d;p?yz;xzhttp://a/b/c/;xr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z
../../../gz../../../../gz/./gz/../gr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r   r   r
  r  r   r   r  r  http:gzhttp://a/b/c/de)r   RFC3986_BASEr   s    r^   test_RFC3986UrlParseTestCase.test_RFC3986  s   |T*>?|T+<=|U51|S)9:|U+;<|T*;<|T,7|U:6|T*>?|U+=>|T*@A|U+=>|W-AB|T*;<|U+=>|Y/EF|R(<=|S9|T/:|T-8|U=9|VN;|W[9|Xk:|Y|<|\<@ 	|\,?|_\B|VL9|W\:|T*;<|T*;<|U+=>|U+=>|Xn=|W->?|W-?@|X.>?|[1GH|\2BC|Y/EF|Z0GH|Y/EF|Z0GH|X.>? 	($/@Ar   c                 4   U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS	5        U R                  [        S
S5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        U R                  [        S S	5        U R                  [        S!S"5        U R                  [        S#S$5        U R                  [        SS5        U R                  [        SS5        U R                  [        S%S5        U R                  [        S&S5        U R                  [        S'S5        U R                  S(SS(5        U R                  S)SS5        U R                  S)S*S*5        U R                  S+S,S-5        U R                  S.S,S/5        U R                  S0SS15        U R                  S2SS35        U R                  [        S4-   S5[        S6-   5        U R                  S7S8S95        U R                  S:S8S;5        U R                  S7S<S=5        U R                  S:S<S=5        U R                  S7S>S?5        U R                  SS8S=5        U R                  S@SASA5        g )BNr   r  r   http:r   r   r   r   r   r   r   r   r   r  zhttp://a/b/c/d?yr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   zhttp:?yzhttp:g?yzhttp:g?y/./xzhttp:///r   zhttp://a/./gzsvn://pathtorepo/dir1dir2zsvn://pathtorepo/dir2zsvn+ssh://pathtorepo/dir1zsvn+ssh://pathtorepo/dir2zws://a/bzws://a/gz	wss://a/bz	wss://a/gr   fooz/foozhttp://a/b/c/d/e/z
../../f/g/zhttp://a/b/c/f/g/zhttp://a/b/c/d/ezhttp://a/b/f/g/z/../../f/g/zhttp://a/f/g/z	../../f/gzhttp://a/b/c/f/gr   r   )r   SIMPLE_BASEr   s    r^   test_urljoinsUrlParseTestCase.test_urljoins  s   {E%0{H-=>{G,<={C(89{E*:;{D):;{D6{E*5{D);<{E*<={I.DE{C8{D9{D7{E-8{F>:{GK8{Il;{H^<{G,=>{G,>?{H-=>{H-=>{G,<={I.@A{J/AB{N3IJz4
3r12HIr>>:.8OP2F<WXz#j1{3{3 	{S(%v1EF 	*L:MN)<9JK*M?K)=/J*K9KL}lOD 	sC%r   zurl,hostname,port))z http://Test.python.org:5432/foo/test.python.org8  )zhttp://12.34.56.78:5432/foo/12.34.56.78r  )zhttp://[::1]:5432/foo/::1r  )zhttp://[dead:beef::1]:5432/foo/dead:beef::1r  )zhttp://[dead:beef::]:5432/foo/dead:beef::r  )z:http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:5432/foo/'dead:beef:cafe:5417:affe:8fa3:deaf:feedr  )z http://[::12.34.56.78]:5432/foo/::12.34.56.78r  )z%http://[::ffff:12.34.56.78]:5432/foo/::ffff:12.34.56.78r  )zhttp://Test.python.org/foo/r  N)zhttp://12.34.56.78/foo/r   N)zhttp://[::1]/foo/r!  N)zhttp://[dead:beef::1]/foo/r"  N)zhttp://[dead:beef::]/foo/r#  N)z5http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/r$  N)zhttp://[::12.34.56.78]/foo/r%  N)z http://[::ffff:12.34.56.78]/foo/r&  N)zhttp://Test.python.org:/foo/r  N)zhttp://12.34.56.78:/foo/r   N)zhttp://[::1]:/foo/r!  N)zhttp://[dead:beef::1]:/foo/r"  N)zhttp://[dead:beef::]:/foo/r#  N)z6http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:/foo/r$  N)zhttp://[::12.34.56.78]:/foo/r%  N)z!http://[::ffff:12.34.56.78]:/foo/r&  Nc                     U(       a  [        U5      n[        U5      n[        R                  R                  U5      nU R	                  UR
                  UR                  4X445        g rA   )r   rB   rC   rD   rN   rQ   rR   )rU   rr   rV   rQ   rR   	urlparseds         r^   test_RFC2732UrlParseTestCase.test_RFC2732>  sQ    D S/C!(+HLL))#.	),,inn=?OPr   invalid_url)zhttp://::12.34.56.78]/zhttp://[::1/foo/zftp://[::1/foo/bad]/badzhttp://[::1/foo/bad]/badzhttp://[::ffff:12.34.56.78c                     U(       a  [        U5      nU R                  [        [        R                  R
                  U5        g rA   )r   assertRaises
ValueErrorrB   rC   rD   )rU   rr   r+  s      r^   test_RFC2732_invalid%UrlParseTestCase.test_RFC2732_invalidf  s-     $[1K*fll&;&;[Ir   zurl,defrag,frag)zhttp://python.org#fraghttp://python.orgfrag)r1  r1  r   )zhttp://python.org/#fraghttp://python.org/r2  )r3  r3  r   )zhttp://python.org/?q#fraghttp://python.org/?qr2  )r4  r4  r   )zhttp://python.org/p#fragzhttp://python.org/pr2  )http://python.org/p?qr5  r   r   r   r   c                    U(       a!  [        U5      n[        U5      n[        U5      n[        R                  R                  U5      n[	        U[
        5      (       a  SOSnU R                  UR                  5       UR                  U5      5        U R                  XSU45        U R                  UR                  U5        U R                  UR                  U5        g )N#   #)r   rB   rC   	urldefrag
isinstancestrrN   rM   rstriprV   rK   )rU   rr   rV   defragr2  rZ   hashs          r^   test_urldefragUrlParseTestCase.test_urldefragr  s     S/C'Fd#D'', c**s#**T*:;$0V,$/r   c                 `   [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        g )Nz,http://[FE80::822a:a8ff:fe49:470c%tESt]:1234zfe80::822a:a8ff:fe49:470c%tEStz%[FE80::822a:a8ff:fe49:470c%tESt]:1234s,   http://[FE80::822a:a8ff:fe49:470c%tESt]:1234s   fe80::822a:a8ff:fe49:470c%tESts%   [FE80::822a:a8ff:fe49:470c%tESt]:1234)rB   rC   rS   rN   rQ   rG   )rU   r   s     r^   test_urlsplit_scoped_IPv6*UrlParseTestCase.test_urlsplit_scoped_IPv6  s    LL!!"PQ%EF#JKLL!!"QR%FG#KLr   c                    Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  5       SS  USS  5        S	n[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S
5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5       U5        Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5       U5        Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  5       SS  USS  5        Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5       U5        Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5       U5        S!n[         R                  R                  U5      nU R                  [        S"5         UR                    S S S 5        g ! , (       d  f       g = f)#NzHTTP://WWW.PYTHON.ORG/doc/#fragr   zWWW.PYTHON.ORG/doc/r   r2  r      7http://User:Pass@www.python.org:080/doc/?query=yes#fragUser:Pass@www.python.org:080	query=yesUserPassP   zChttp://User@example.com:Pass@www.python.org:080/doc/?query=yes#frag(User@example.com:Pass@www.python.org:080zUser@example.coms   HTTP://WWW.PYTHON.ORG/doc/#frag   https   WWW.PYTHON.ORG   /doc/r      frag   www.python.orgs7   http://User:Pass@www.python.org:080/doc/?query=yes#frag   User:Pass@www.python.org:080	   query=yes   User   PasssC   http://User@example.com:Pass@www.python.org:080/doc/?query=yes#frags(   User@example.com:Pass@www.python.org:080s   User@example.coms%   HTTP://WWW.PYTHON.ORG:65536/doc/#fragzout of range)rB   rC   rS   rN   rF   rG   rH   rJ   rK   rO   rP   rQ   rR   rM   assertRaisesRegexr.  )rU   rV   r   s      r^   test_urlsplit_attributes)UrlParseTestCase.test_urlsplit_attributes  s   /LL!!#&6*#34)"%V,T*T*%56& 	ABQR1GLL!!#&6*#AB)+.V,V,V,%56$S) TLL!!#&6*#MN)+.V,%78V,%56$S) 1LL!!#&7+#45*#&W-T*T*%67&ABQR1HLL!!#&7+#BC*,/W-W-W-%67$S)TLL!!#&7+#NO*,/W-%89W-%67$S) 7LL!!#&##J?FF @??s   2_
_c                    Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  5       S5        Sn[         R                  R                  U5      nU R                  UR                  S	5        U R                  UR
                  S
5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S
5        U R                  UR                  S 5        U R                  UR                  5       S5        SnSn[        S5       H\  n[         R                  R                  XS9nU R                  UR                  S5        U R                  UR                  5       S5        M^     g )NzQhttp	://www.python
.org	/java
script:	alert('msg
')/?query
=	something#frag
mentr   r   z/javascript:alert('msg')/zquery=somethingrK   zGhttp://www.python.org/javascript:alert('msg')/?query=something#fragmentsQ   http	://www.python
.org	/java
script:	alert('msg
')/?query
=	something#frag
mentrN  rQ  s   /javascript:alert('msg')/s   query=something   fragmentsG   http://www.python.org/javascript:alert('msg')/?query=something#fragmentzNhttp://www.python.org/java
script:	alert('msg
')/?query
=	something#frag
mentzht
tp   rF   )rB   rC   rS   rN   rF   rG   rH   rJ   rK   rO   rP   rQ   rR   rM   range)rU   rV   r   rF   _s        r^   !test_urlsplit_remove_unsafe_bytes2UrlParseTestCase.test_urlsplit_remove_unsafe_bytes  s2   kLL!!#&6*#34!<="34Z0T*T*%56&%no mLL!!#&7+#45!=>"45[1T*T*%67&%op fqA%%c%9AQXXv.QXXZ)rs r   c                 
	   [        [        SS5      5      nSnUR                  S5      U-   n[        R                  R                  U5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S	5        U R                  UR                  S
5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR!                  5       U5        XR#                  S5      -   n[        R                  R                  U5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR!                  5       UR#                  S5      5        Sn[        R                  R                  UR                  S5      U-   5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR!                  5       U5        [        R                  R                  S5      nU R                  [        R                  R%                  U5      S5        SnUR                  S5      S-   UR                  S5      -   n[        S5       H\  n[        R                  R                  X6S9nU R                  UR                  S5        U R                  UR!                  5       S5        M^     g ) Nr   !   rG  utf-8r   rH  rE  rI  r2  rJ  rK  r   rL  rN  rR  rO  rS  rP  rT  rU  rQ  z)https://www.python.org:88/doc/?query=    r   zwww.python.org:88z
query=    X   zwww.pypi.org z//www.python.org/r[  r\  zhttps://www.python.org/)rr   r]  decoderB   rC   rS   rN   rF   rG   rH   rJ   rK   rO   rP   rQ   rR   rM   r   rT   )rU   noisebase_urlrV   r   query_spaces_urlrF   r^  s           r^   test_urlsplit_strip_url(UrlParseTestCase.test_urlsplit_strip_url  sZ   eAx()Lll7#h.LL!!#&6*#AB)+.V,V,V,%56$X.oog..LL!!#&7+#BC*,/W-W-W-%67$X__W%=> GLL!!%,,w"7:J"JK7+#67),/$%56LL!!/2 	003_E "g&05<<3HHqA%%c%9AQXXw/QXXZ)BC r   rC   rR   )	r  z1.5z-10x10z-01_1z 1z1 u   ६c                    SU-   nSU-   S-   nU(       aQ  UR                  5       (       a  UR                  5       (       d  U R                  S5        [        U5      n[        U5      nU" U5      nU R                  UR                  U5        U R                  [        5         UR                    SSS5        g! , (       d  f       g= f)z Check handling of invalid ports.zwww.example.net:zhttp://r   r   N)r   r   r   rN   rG   r-  r.  rR   )rU   rr   rC   rR   rG   rV   r   s          r^   test_attributes_bad_port)UrlParseTestCase.test_attributes_bad_portQ  s    
 $d*& 3&NN$$/0'FS/C#J6*z*FF +**s   B55
C)r   +-0zhttp&u   ६httpc                     US-   nU(       a7  UR                  5       (       d  U R                  S5        UR                  S5      nU" U5      nU R                  UR                  U(       a  S5        gS5        g)z"Check handling of invalid schemes.z://www.example.netr   r   r   r   N)r   r   r   rN   rF   )rU   rr   rC   rF   rV   r   s         r^   test_attributes_bad_scheme+UrlParseTestCase.test_attributes_bad_schemeb  s\    
 ++;;==/0**W%C#J%38R8r   c                 d   Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  5       U5        [         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  5       U5        Sn[         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  5       U5        [         R                  R                  U5      nU R                  UR                  S5        U R                  UR
                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  S 5        U R                  UR                  5       U5        g )Nz0sip:alice@atlanta.com;maddr=239.255.255.1;ttl=15r   s0   sip:alice@atlanta.com;maddr=239.255.255.1;ttl=15r   )rB   rC   rS   rN   rG   rO   rP   rQ   rR   rM   rD   )rU   urir   s      r^   test_attributes_without_netloc/UrlParseTestCase.test_attributes_without_netloco  sJ    ALL!!#&2&T*T*T*&S)LL!!#&2&T*T*T*&S) BLL!!#&3'T*T*T*&S)LL!!#&3'T*T*T*&S)r   c                     U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        g )Nz http://example.com?blahblah=/foo)r   r   r   r   zblahblah=/foor   s    http://example.com?blahblah=/foo)rN  s   example.comr   r   s   blahblah=/foor   r  r   s    r^   test_noslashUrlParseTestCase.test_noslash  sJ    ../QRM	O../RSS	Ur   c                 8   U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S	5      S
5        U R                  [        R                  R                  S5      S5        g )NrH   )r   r   rH   r   r   r   z//www.python.org:80)r   www.python.org:80r   r   r   r   http://www.python.org:80r   r~  r   r   r   r      path)r   r   r  r   r   r   s   //www.python.org:80)r      www.python.org:80r   r   r   r      http://www.python.org:80rN  r  r   r   r   r   r  r   s    r^   test_withoutscheme#UrlParseTestCase.test_withoutscheme  s    
 	..v6'	)../DE4	6../IJ8	: 	..w7-	/../EF:	<../JK>	@r   c                 l   U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S	5      S
5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        g )Nzhttp:80)r   r   80r   r   r   zhttps:80)r   r   r  r   r   r   zpath:80)rH   r   r  r   r   r   r  )r   r   r   r   r   r   zhttps:)r   r   r   r   r   r   r  r  s   http:80)rN  r      80r   r   r   s   https:80)   httpsr   r  r   r   r   s   path:80)r  r   r  r   r   r   s   http:)rN  r   r   r   r   r   s   https:)r  r   r   r   r   r   r  r  r  r   s    r^   test_portseparator#UrlParseTestCase.test_portseparator  s   ..y9;TU..z:<VW..y9;TU..w78OP..x89QR../IJ8	: 	..z:<[\..{;=]^..z:<[\..x89VW..y9:XY../JK>	@r   c                 b    U R                  [        [        R                  R                  S5        g )Nr  )r-  	TypeErrorrB   rC   	urlencoder   s    r^   test_usingsysUrlParseTestCase.test_usingsys  s    )V\\%;%;UCr   c                    U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S	5      S
5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        U R                  [        R                  R                  S5      S5        g )Nzs3://foo.com/stuff)s3foo.com/stuffr   r   r   r   )x-newschemer  r  r   r   r   z*x-newscheme://foo.com/stuff?query#fragment)r  r  r  r   rJ   rK   z!x-newscheme://foo.com/stuff?query)r  r  r  r   rJ   r   s   s3://foo.com/stuff)s   s3   foo.com   /stuffr   r   r   s   x-newscheme://foo.com/stuff)   x-newschemer  r  r   r   r   s*   x-newscheme://foo.com/stuff?query#fragment)r  r  r  r      queryrZ  s!   x-newscheme://foo.com/stuff?query)r  r  r  r   r  r   r  r   s    r^   test_anyschemeUrlParseTestCase.test_anyscheme  s$   ../CD@	B../LMI	K../[\V	X../RSN	P 	../DEF	H../MNO	Q../\]\	^../STT	Vr   funcc                 0   U" SS5      nU R                  UR                  S5        U" SS5      nU R                  UR                  S5        U R                  U" SS5      R                  S5        U R                  U" SSS9R                  S5        U R                  U" S	SS9R                  S5        U R                  U" S5      R                  S
5        U R                  U" S	5      R                  S5        U R                  U" S	S
5      R                  S5        g )Nzhttp://example.net/ftpr   s   http://example.net/s   ftprN  rH   r\  r  r   r   )rN   rF   )rU   r  rZ   s      r^   test_default_scheme$UrlParseTestCase.test_default_scheme  s     +U3/,f50fe,33U;fU3::EBgf5<<fEf,,b1g--s3gr*1137r   zurl,attr,expected_frag)
)z
http:#fragrH   r2  )z//example.net#fragrH   r2  )zindex.html#fragrH   r2  )z	;a=b#fragrI   r2  )z	?a=b#fragrJ   r2  )z#fragrH   r2  )z	abc#@fragrH   @frag)z//abc#@fragrH   r  )z//abc:80#@fragrH   r  )z//abc#@frag:80rH   z@frag:80c                     US:X  a  U[         R                  R                  L a  SnU" USS9nU R                  UR                  S5        U R                  [        XR5      SU-   5        U R                  U" USS5      R                  S5        U" USS9nU R                  UR                  U5        U R                  [        XR5      U5        U R                  U" USS5      R                  U5        U R                  U" U5      R                  U5        g )NrI   rH   F)allow_fragmentsr   r7  T)rB   rC   rS   rN   rK   assertEndsWithgetattrassertNotEndsWith)rU   rV   attrexpected_fragr  rZ   s         r^   test_parse_fragments%UrlParseTestCase.test_parse_fragments  s     8(=(= =Dc51"-GF1-/	1c2u-66;c40-8wv4mDc2t,55)	+c++];r   c                 L   U R                  [        S5         [        R                  R	                  SS5        S S S 5        U R                  [        S5         [        R                  R	                  SS5        S S S 5        U R                  [        S5         [        R                  R                  SS5        S S S 5        U R                  [        S5         [        R                  R                  SS5        S S S 5        U R                  [        S5         [        R                  R                  S5        S S S 5        U R                  [        S5         [        R                  R                  S5        S S S 5        U R                  [        S5         [        R                  R                  S5        S S S 5        U R                  [        S5         [        R                  R                  S	5        S S S 5        U R                  [        S5         [        R                  R                  S
S5        S S S 5        U R                  [        S5         [        R                  R                  SS
5        S S S 5        g ! , (       d  f       GNC= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNd= f! , (       d  f       GN8= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)NzCannot mix strr   rN  rQ  r   )rN  r   r   r   r   r   )r   rQ  r   r   r   r   )rN  r   r   r   r   )r   rQ  r   r   r   r1  s   http://python.org)	rV  r  rB   rC   rD   rS   rL   rT   r   r   s    r^   test_mixed_types_rejected*UrlParseTestCase.test_mixed_types_rejected	  s    ##I/?@LL!!"2G< A##I/?@LL!!"3V< A##I/?@LL!!"2G< A##I/?@LL!!"3V< A##I/?@LL##$LM A##I/?@LL##$KL A##I/?@LL##$HI A##I/?@LL##$HI A##I/?@LL  !46JK A##I/?@LL  !57JK A@% A@@@@@@@@@@@@@@@@@@@sw   !I4!J!J!J* J< K K  K2!L
!L4
J
J
J'*
J9<
K
K 
K/2
L
L
L#result_typec                    Un[        UR                  5      nUR                  nU R                  UR                  U5        SU-  nSU-  nU" U6 nU" U6 nSn	Sn
U R                  Xu5        U R                  UR                  5       U5        U R                  UR                  5       U5        U R                  UR                  U	5      U5        U R                  UR                  U	5      U5        U R                  UR                  X5      U5        U R                  UR                  X5      U5        U R                  X5        U R                  UR                  5       U5        U R                  UR                  5       U5        U R                  UR                  U	5      U5        U R                  UR                  U	5      U5        U R                  UR                  X5      U5        U R                  UR                  X5      U5        g )N)r   )r   r   strict)rf   _fields_encoded_counterpartassertIs_decoded_counterpartrN   re  r   )rU   r  str_typenum_args
bytes_typestr_args
bytes_args
str_resultbytes_resultencodingerrorss              r^   test_result_pairs"UrlParseTestCase.test_result_pairs!  s    x''(22
j55x@8#h&
x(
!:..,,.9,,.
;,,X6A,,X6
C,,X>I,,X>
K2**,j9**,l;**84jA**84lC**8<jI**8<lKr   c                    [         R                  R                  SSS9nU R                  USS/05        [         R                  R                  SSS9nU R                  USS/05        [         R                  R                  SSS9nU R                  USS	/05        [         R                  R                  S
SS9nU R                  USS/05        [         R                  R                  S
SSS9nU R                  USS/05        g )N	   key=Ł%E9latin-1r  key   Łé   key=Ł%C3%A9rc  r      Ł��
   key=Ł%E9-   Ł�-ignorer  r     Ł-rB   rC   ro   rN   rU   rZ   s     r^   test_parse_qs_encoding'UrlParseTestCase.test_parse_qs_encodingA  s   &&&K%,!89&&'9G&L%,!89&&'9G&L%*>)?!@A&&'7'&J%/):!;<&&'7'AI ' K%)!56r   c                    [         R                  R                  SSS9nU R                  US/5        [         R                  R                  SSS9nU R                  US/5        [         R                  R                  SSS9nU R                  US/5        [         R                  R                  S	SS9nU R                  US
/5        [         R                  R                  S	SSS9nU R                  US/5        g )Nr  r  r  )r  r  r  rc  r   )r  r  r  )r  r  r  r  )r  r  rB   rC   re   rN   r  s     r^   test_parse_qsl_encoding(UrlParseTestCase.test_parse_qsl_encodingN  s    '')'L"7!89''(:W'M"7!89''(:W'M"?!@A''(87'K":!;<''(87AI ( K"4!56r   c                 &   U R                  [        5         [        R                  R	                  SR                  S/S-  5      SS9  S S S 5        [        R                  R	                  SR                  S/S-  5      SS9  g ! , (       d  f       N@= f)Nr	   za=a   
   )max_num_fields)r-  r.  rB   rC   re   joinr   s    r^   test_parse_qsl_max_num_fields.UrlParseTestCase.test_parse_qsl_max_num_fields[  sj    z*LL""388UGBJ#7"K +sxx
3BG +*s   2B
B;z;;r.   r   r   r0   r   r   r   za=1;a=2r   r      ;s   ;;r2   r   r#   r4   r'   r)   r"   s   a=1;a=2r+   r-   c                     [         R                  R                  USS9nU R                  X25        [         R                  R                  USS9nU R                  XB5        g Nr  	separatorr  r  rU   rh   ri   rZ   result_bytess        r^   test_parse_qs_separator(UrlParseTestCase.test_parse_qs_separator`  sR     &&ts&;(||,,TT,B.r   r   r   r   r   r&   r(   r*   r,   c                     [         R                  R                  USS9nU R                  X25        [         R                  R                  USS9nU R                  XB5        g r  r  r  s        r^   test_parse_qsl_separator)UrlParseTestCase.test_parse_qsl_separatorr  sR     '''<(||--dd-C.r   c                 H   U R                  [        R                  R                  S5      S/5        U R                  [        R                  R                  [	        S5      5      S/5        U R                  [        R                  R                  [        S5      5      S/5        g )Nr    r"   )rN   rB   rC   re   	bytearray
memoryviewr   s    r^   test_parse_qsl_bytes%UrlParseTestCase.test_parse_qsl_bytes  so    //7,H//	&0AB\NS//
60BCl^Tr   c           
      
   [        SSS9nSSS SS/ 0 [        S5      4 Hb  nU R                  [        R                  R
                  " U40 UD6/ 5        U R                  [        [        R                  R
                  USS9  Md     g )	NT)rc   strict_parsingr   r   r           rd   r  )dictr  rN   rB   rC   re   r-  r.  )rU   kwargsxs      r^   test_parse_qsl_false_value+UrlParseTestCase.test_parse_qsl_false_value  ss    TBS$3B
3?AV\\33A@@"Ej&,,*@*@!qQ @r   c                    U R                  [        [        R                  R                  [        S5      5        U R                  [        [        R                  R                  [        S5      5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  [        5       5        S H?  nU R                  [        5         [        R                  R	                  SUS9  S S S 5        MA     U R                  [        5         [        R                  R	                  SSS9  S S S 5        U R                  [        5         [        R                  R	                  SSS9  S S S 5        g ! , (       d  f       M  = f! , (       d  f       N]= f! , (       d  f       g = f)Nr    rd   )r   r   Nr   rd   r  g      ?r   r     ¦   )r-  r  rB   rC   re   listiterobjectr.  UnicodeEncodeErrorUnicodeDecodeError)rU   r  s     r^   test_parse_qsl_errors&UrlParseTestCase.test_parse_qsl_errors  s%   )V\\%;%;T&\J)V\\%;%;T&\J)V\\%;%;Q?)V\\%;%;VXF6I"":.&&u	&B /. 7 12LL""6V"< 312LL""5G"< 32	 /.2222s$   1F1F'-F8
F$	'
F58
Gc                     [         R                  R                  SS/SS.S5      n " S S5      n[         R                  R                  SU" 5       0S5      nU R                  US	5        g )
Nrd   r[  )   rF     r   Tc                       \ rS rSrS rSrg):UrlParseTestCase.test_urlencode_sequences.<locals>.Triviali  c                     g)Ntrivial r   s    r^   __str__BUrlParseTestCase.test_urlencode_sequences.<locals>.Trivial.__str__  s     r   r  N)__name__
__module____qualname____firstlineno__r	  __static_attributes__r  r   r^   Trivialr    s    !r   r  r   z	a=trivial)rB   rC   r  rN   )rU   rZ   r  s      r^   test_urlencode_sequences)UrlParseTestCase.test_urlencode_sequences  s\     ''q!f9(EtL	! 	! ''gi(8$?-r   c                    [         R                  R                  SS05      nU R                  US5        [         R                  R                  SS0[         R                  R                  S9nU R                  US5        [         R                  R                  SS0S[         R                  R                  S9nU R                  US	5        g )
Nr   z
some valueza=some+valuezsome value/another)	quote_viaza=some%20value%2Fanotherr   )safer  za=some%20value/another)rB   rC   r  rN   quoter  s     r^   test_urlencode_quote_via)UrlParseTestCase.test_urlencode_quote_via  s    ''l(;<0''.B(C28,,2D2D ( F!;<''.B(C-0FLL<N<N ( P!9:r   c                    U R                  [        [        R                  R                  S5        [        R                  R	                  S5      nU R                  US5        [        R                  R	                  S5      nU R                  US5        [        R                  R	                  SS-  5      nU R                  USS-  5        [        R                  R	                  S	S
-  5      nU R                  USS
-  5        g )Nr  s   archaeological arcanazarchaeological%20arcanar   r      Ai'  As   z/ i zz%01/%20)r-  r  rB   rC   quote_from_bytesrN   r  s     r^   test_quote_from_bytes&UrlParseTestCase.test_quote_from_bytes  s    )V\\%B%BEJ../GH!:;..s3$..tF{;V,..z'/ABG!34r   c                     [         R                  R                  S5      nU R                  US5        [         R                  R                  S5      nU R                  US5        g )Nz	abc%20defs   abc defr   r   )rB   rC   unquote_to_bytesrN   r  s     r^   test_unquote_to_bytes&UrlParseTestCase.test_unquote_to_bytes  sJ    ..{;,..r2%r   c                     U R                  [        [        R                  R                  SSS9  U R                  [        [        R                  R                  SSS9  g )Ns   foorc  r  r  )r  )r-  r  rB   rC   r  r   s    r^   test_quote_errors"UrlParseTestCase.test_quote_errors  sI    )V\\%7%7#* 	 	,)V\\%7%7Qr   c                    [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        g )Nztel:+31-641044153telz+31-641044153ztel:+31641044153z+31641044153)rB   rC   rS   rN   rF   rH   rD   )rU   p1p2s      r^   test_issue14072 UrlParseTestCase.test_issue14072  s    \\""#67E*/2\\""#56E*.1\\""#67E*/2\\""#56E*.1r   c                    U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S	5        U R                  [        [        R                  R                  S
5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S 5        U R                  [        [        R                  R                  S!5        U R                  [        [        R                  R                  S"5        U R                  [        [        R                  R                  S#5        U R                  [        [        R                  R                  S$5        U R                  [        [        R                  R                  S%5        U R                  [        [        R                  R                  S&5        U R                  [        [        R                  R                  S'5        U R                  [        [        R                  R                  S(5        U R                  [        [        R                  R                  S)5        U R                  [        [        R                  R                  S*5        U R                  [        [        R                  R                  S+5        g ),Nz&Scheme://user@[192.0.2.146]/Path?Queryz-Scheme://user@[important.com:8000]/Path?Queryz#Scheme://user@[v123r.IP]/Path?Queryz Scheme://user@[v12ae]/Path?QueryzScheme://user@[v.IP]/Path?Queryz Scheme://user@[v123.]/Path?QueryzScheme://user@[v]/Path?Queryz5Scheme://user@[0439:23af::2309::fae7:1234]/Path?QueryzJScheme://user@[0439:23af:2309::fae7:1234:2342:438e:192.0.2.146]/Path?QueryzScheme://user@]v6a.ip[/Pathzscheme://prefix.[v6a.ip]zscheme://[v6a.ip].suffixzscheme://prefix.[v6a.ip]/zscheme://[v6a.ip].suffix/zscheme://prefix.[v6a.ip]?zscheme://[v6a.ip].suffix?zscheme://prefix.[::1]zscheme://[::1].suffixzscheme://prefix.[::1]/zscheme://[::1].suffix/zscheme://prefix.[::1]?zscheme://[::1].suffix?zscheme://prefix.[::1]:azscheme://[::1].suffix:azscheme://prefix.[::1]:a1zscheme://[::1].suffix:a1zscheme://prefix.[::1]:1azscheme://[::1].suffix:1azscheme://prefix.[::1]:zscheme://[::1].suffix:/zscheme://prefix.[::1]:?zscheme://user@prefix.[v6a.ip]zscheme://user@[v6a.ip].suffixzscheme://[v6a.ipzscheme://v6a.ip]zscheme://]v6a.ip[zscheme://]v6a.ipzscheme://v6a.ip[zscheme://prefix.[v6a.ipzscheme://v6a.ip].suffixzscheme://prefix]v6a.ip[suffixzscheme://prefix]v6a.ipzscheme://v6a.ip[suffix)r-  r.  rB   rC   rS   r   s    r^   test_invalid_bracketed_hosts-UrlParseTestCase.test_invalid_bracketed_hosts  s   *fll&;&;=ef*fll&;&;=lm*fll&;&;=bc*fll&;&;=_`*fll&;&;=^_*fll&;&;=_`*fll&;&;=[\*fll&;&;=tu*fll&;&;  >J  	K*fll&;&;=Z[*fll&;&;=WX*fll&;&;=WX*fll&;&;=XY*fll&;&;=XY*fll&;&;=XY*fll&;&;=XY*fll&;&;=TU*fll&;&;=TU*fll&;&;=UV*fll&;&;=UV*fll&;&;=UV*fll&;&;=UV*fll&;&;=VW*fll&;&;=VW*fll&;&;=WX*fll&;&;=WX*fll&;&;=WX*fll&;&;=WX*fll&;&;=UV*fll&;&;=VW*fll&;&;=VW*fll&;&;=\]*fll&;&;=\]*fll&;&;=OP*fll&;&;=OP*fll&;&;=PQ*fll&;&;=OP*fll&;&;=OP*fll&;&;=VW*fll&;&;=VW*fll&;&;=\]*fll&;&;=UV*fll&;&;=UVr   c                 &   [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S 5        [         R                  R                  S5      nU R                  UR                  S	5        U R                  UR
                  S5        U R                  UR                  S5        g )
Nz&scheme://user@[v6a.ip]:1234/path?queryzv6a.ipuser/pathi  z4scheme://user@[0439:23af:2309::fae7%test]/path?queryz0439:23af:2309::fae7%testzEscheme://user@[0439:23af:2309::fae7:1234:192.0.2.146%test]/path?queryz*0439:23af:2309::fae7:1234:192.0.2.146%test)	rB   rC   rS   rN   rQ   rO   rH   rR   r  )rU   r(  r)  p3s       r^   test_splitting_bracketed_hosts/UrlParseTestCase.test_splitting_bracketed_hosts  s   \\""#KLh/f-'*$'\\""#YZ&ABf-'*bggt$\\""#jk&RSf-'*r   c                 t   Sn[         R                  R                  S5      nU R                  [        U5         UR
                    S S S 5        [         R                  R                  S5      nU R                  [        U5         UR
                    S S S 5        g ! , (       d  f       NY= f! , (       d  f       g = f)Nz3Port could not be cast to integer value as 'oracle'z%http://Server=sde; Service=sde:oracle)rB   rC   rD   rV  r.  rR   rS   )rU   messager(  r)  s       r^   !test_port_casting_failure_message2UrlParseTestCase.test_port_casting_failure_message  s    G\\""#JK##J8GG 9 \\""#JK##J8GG 98	 98 98s   BB)
B&)
B7c                    [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S	5        U R                  UR                  S
5        [         R                  R                  S5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        g )Nz"tel:123-4;phone-context=+1-650-516r'  z123-4zphone-context=+1-650-516ztel:+1-201-555-0123z+1-201-555-0123r   z"tel:7042;phone-context=example.com7042zphone-context=example.comz%tel:863-1234;phone-context=+1-914-555z863-1234zphone-context=+1-914-555)rB   rC   rD   rN   rF   rH   rI   )rU   r(  s     r^   test_telurl_params#UrlParseTestCase.test_telurl_params!  sJ   \\""#GHE*'*$>?\\""#89E*"34B'\\""#GHE*&)$?@\\""#JKE**-$>?r   c                     [         R                  R                  [         R                  R                  5      nU R	                  S[        U5      5        g )NQuoter)rB   rC   _Quoter_ALWAYS_SAFEassertInrepr)rU   quoters     r^   test_Quoter_repr!UrlParseTestCase.test_Quoter_repr6  s2    %%fll&?&?@hV-r   c                 @    [         R                  R                  5         g rA   )rB   rC   clear_cacher   s    r^   "test_clear_cache_for_code_coverage3UrlParseTestCase.test_clear_cache_for_code_coverage:  s      "r   c                     U R                  [        5         [        R                  R                  nSSS5        g! , (       d  f       g= f)z5Test that urllib.parse.__getattr__() fails correctly.N)r-  AttributeErrorrB   rC   this_does_not_exist)rU   unuseds     r^   !test_urllib_parse_getattr_failure2UrlParseTestCase.test_urllib_parse_getattr_failure=  s+    ~.\\55F /..s	   :
Ac                 Z   / n1 Skn[        [        R                  5       H^  nUR                  S5      (       d  X2;   a  M   [	        [        R                  U5      n[	        USS 5      S:X  d  MM  UR                  U5        M`     U R                  [        R                  R                  U5        g )N>   unwrapsplittagto_bytes	splitattr	splithost	splitport	splittype	splituser
ResultBase
splitnport
splitquery
splitvaluerG  splitpasswdr^  r  zurllib.parse)dirrB   rC   
startswithr  appendassertCountEqual__all__)rU   r   undocumentednamer  s        r^   test_allUrlParseTestCase.test_allB  s    
 %Ds##t';V\\40Fv|T2nD% & 	fll22H=r   c                 P   SnU Vs1 s H  nSR                  [        U5      5      iM     nn[        [        [	        S[
        R                  5      5       Vs/ s H`  n[        R                  " U5      (       d  M   U[        [        R                  " U5      R                  5       5      -  (       d  MW  X!;  d  M^  UPMb     nnU R                  SU5        U R                  SU5        [        R                  R                  S5        U R                  [         5         [        R                  R                  S5        S S S 5        S H  nS	 H  nU H  nS
R                  XVR                  U5      5      nU R#                  USR                  [        U5      5      S9   U R                  [         5         [        R                  R                  U5        S S S 5        S S S 5        M     M     M     g s  snf s  snf ! , (       d  f       N= f! , (       d  f       N>= f! , (       d  f       M  = f)Nz/:#?@z{:04X}   u   ℀u   ＃u   http://プ:80u   http://プ︓80)r   r   r  )znetloc{}false.netloczn{}user@netlocz{}://{}/path)rV   char)formatordmapchrr]  sys
maxunicodeunicodedatadecompositionsetrX   rA  rB   rC   rS   r-  r.  r   )rU   illegal_charsr   	hex_charsdenorm_charsrF   rG   rV   s           r^   test_urlsplit_normalization,UrlParseTestCase.test_urlsplit_normalizationR  s     6CDmX__SV,m	D3c3>> :;
;!((+ S!:!:1!=!C!C!EFF  & ; 	 
 	h-h- 	67z*LL!!"?@ + /FD%A(//a8HIC#HOOCF4KL!..z:"LL11#6 ; ML & E /# E
 +* ;: MLsM   $G*G/:3G/1G/8G/ G4H	- HH	4
H
HH	
H%r  rA   )Ir  r  r  r  r_   r   subTestsparse_qsl_test_casesrl   parse_qs_test_casesrp   r   r   r   r   r   r   r  r  r  r  r)  r/  r   r  r?  rB  rW  r_  ri  rB   rC   rS   rD   rn  rt  rx  r{  r  r  r  r  r  r  r  DefragResultSplitResultParseResultr  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r*  r-  r3  r7  r;  rD  rH  rN  re  rv  r  r  r   r^   r>   r>   j   s   38j m%9:8 ;8 m%898 :8 g}-( Z+ Zv1wZ .x1 g}-- 0
 ,7- ..7 g}-h 12( + "1# 3 .&1N g}-cijO k .O"A`@
%JZ7Br5&n g}-) , @QA .BQ g}-m &. /J/ .J
 g}-'C:E<I@GB/5/4*
 
0 .
0M[z#tJ9Dv g}-g 5 5v||7L7LMNfZ[ \ O . g}-g 5 5v||7L7LMNh HI9 J O .9'*RU@&@$DV* fv||44fll6K6KLM8 N8 . 1
  fv||44fll6K6KLM< N<"L0 m
,,
#
#
,,
"
"
,,
"
"&
 
L
L677H
 m"I2JcC5\"5'89sCj)*2JBKtdVn%VHVH=>$t-.&
 // m"I2Jj\"\<89Z012JBK|n%nn=>,56&
 //U
R=.;	5&R
2+WZ+ @*.#6
> 7r   r>   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  " SS5      S 5       rSrg)Utility_Testsip  z=Testcase to test the various utility functions in the urllib.c                 (   [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S
5        g )Nztype:opaquestring)typeopaquestringr  )Nr  :opaquestring)Nr  ztype:)r  r   ztype:opaque:string)r  zopaque:string)rB   rC   
_splittyperN   )rU   rW  s     r^   test_splittypeUtility_Tests.test_splittypet  s    LL++	#679QR>24JK?35LM7+\:#78:STr   c                    [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S
5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )Nz%//www.example.org:80/foo/bar/baz.html)www.example.org:80/foo/bar/baz.htmlz//www.example.org:80)r  r   r  )Nr  z//127.0.0.1#@host.com)	127.0.0.1/#@host.comz//127.0.0.1#@host.com:80)r  z/#@host.com:80z//127.0.0.1:80#@host.com)z127.0.0.1:80r  z///file)r   z/filez//example.net/file;)example.netz/file;z//example.net/file?)r  z/file?z//example.net/file#)r  z/file#)rB   rC   
_splithostrN   )rU   rU  s     r^   test_splithostUtility_Tests.test_splithost|  s   LL++	#JKD	F#9:3	5#674	6 	#:;5	7#=>8	:#=>8	: 	9-&	( 	#892	4#892	4#892	4r   c                 (   [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S
5        g )NrH  )	User:Passwww.python.org:080z@www.python.org:080)r   r  r  )Nr  z
User:Pass@)r  r   rM  )zUser@example.com:Passr  )rB   rC   
_splituserrN   )rU   rX  s     r^   test_splituserUtility_Tests.test_splituser  s    LL++	#AB<	>#893	5#785	7<0*	,#MNH	Jr   c                    [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S
5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )Nzuser:ab)r0  abzuser:a
b)r0  za
bzuser:a	b)r0  za	bzuser:ab)r0  zabzuser:ab)r0  zabzuser:ab)r0  zabzuser:a:b)r0  za:bzuser:a b)r0  r   z	user 2:ab)zuser 2r  z
user+1:a+b)zuser+1za+bzuser:)r0  r   r0  )r0  Nz:ab)r   r  )rB   rC   _splitpasswdrN   )rU   r]  s     r^   test_splitpasswdUtility_Tests.test_splitpasswd  s+    ll//Y/@[13CD[13CD[13CD[13CD[13CDZ0/BZ0/B[13CD\24EFW-|<V,n=U+Z8r   c                    [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S	5        U R                  U" S
5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )N	parrot:88)parrot88r  r  Nparrot:r  )r  Nparrot:cheese)r  Nz[::1]:88)[::1]r  r  )r  Nz:88)r   r  )rB   rC   
_splitportrN   )rU   rV  s     r^   test_splitportUtility_Tests.test_splitport  s    LL++	;/1AB8,.>?9-/?@;/1DE?35LM:.@7+_=5):6r   c                     [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" SS5      S5        U R                  U" S5      S5        U R                  U" SS5      S5        U R                  U" S5      S	5        U R                  U" SS5      S
5        U R                  U" S5      S5        U R                  U" SS5      S5        U R                  U" S5      S5        g )Nr  )r  rd  r  )r  7   )r  r  r  r  )r  r  )r  r  r  r  zparrot: +1_0 )rB   rC   _splitnportrN   )rU   rZ  s     r^   test_splitnportUtility_Tests.test_splitnport  s    \\--
K0.AH-~>Hb1>BI.?Ir2NCK02CDK46GHO46FGOR8:JKO46FGr   c                     [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )	Nhttp://python.org/fake?foo=bar)http://python.org/fakefoo=barzhttp://python.org/fake?foo=bar?)r  r   r  )r  Nz?foo=bar)r   r  )rB   rC   _splitqueryrN   )rU   r[  s     r^   test_splitqueryUtility_Tests.test_splitquery  su     \\--
$DE>	@$EF?	A$<=9	;J/Ar   c                 (   [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S
5        g )Nhttp://example.com?foo=bar#baz)http://example.com?foo=barbazzhttp://example.com?foo=bar#)r  r   z#baz)r   r  r  )r  Nz"http://example.com?foo=bar#baz#boo)r  boo)rB   rC   	_splittagrN   )rU   rR  s     r^   test_splittagUtility_Tests.test_splittag  s    <<))"BC>	@"?@;	=&);7">?=	?"FGB	Dr   c                    [         R                  R                  nU R                  U" S5      SSS/45        U R                  U" S5      SS/45        U R                  U" S5      SSS/45        U R                  U" S5      S/ 45        g )Nz/path;attr1=value1;attr2=value2r1  zattr1=value1zattr2=value2z/path;r   z;attr1=value1;attr2=value2)rB   rC   
_splitattrrN   )rU   rT  s     r^   test_splitattrUtility_Tests.test_splitattr  s    LL++	#DE!NN#CD	F8,wo>#?@~~>?	A7+gr];r   c                 (   [         R                  R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S
5        g )Nr  )r  barzfoo=)r  r   z=bar)r   r  foobar)r  Nzfoo=bar=baz)r  zbar=baz)rB   rC   _splitvaluerN   )rU   r\  s     r^   test_splitvalueUtility_Tests.test_splitvalue  s~     \\--
I.?F+[9F+[9H-/?@M24FGr   c                     [         R                  R                  S5      nU R                  US5        U R	                  [
        [         R                  R                  S5        g )Nzhttp://www.python.orgu   http://www.python.org/mediæval)rB   rC   	_to_bytesrN   r-  UnicodeErrorr  s     r^   test_to_bytesUtility_Tests.test_to_bytes  sH    ''(?@!89,(>(>?	Ar   wrapped_url)z<URL:scheme://host/path>z<scheme://host/path>zURL:scheme://host/pathscheme://host/pathc                 f    [         R                  R                  U5      nU R                  US5        g )Nr  )rB   rC   rQ  rN   )rU   r  rV   s      r^   test_unwrapUtility_Tests.test_unwrap  s)     ll!!+.23r   r  N)r  r  r  r  __doc__r  r  r  r  r  r  r  r  r  r  r  r   rx  r  r  r  r   r^   r  r  p  sl    GU4:J9$	7H
B
D<HA mKL4L4r   r  c                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)DeprecationTesti	  c                 4   U R                  [        5       n[        R                  R                  nU R                  U[        R                  R                  5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NzQuoter will be removed)
assertWarnsDeprecationWarningrB   rC   r>  r  r?  rA  r;  warning)rU   cm	old_classs      r^   test_Quoter_deprecation'DeprecationTest.test_Quoter_deprecation  sa    01R++IMM)V\\%9%9: 2 	.BJJ@ 21s   AB		
Bc                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zUurllib.parse.splittype() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rW  rN   r;  r  rU   r  s     r^   test_splittype_deprecation*DeprecationTest.test_splittype_deprecation  Q    01RLL""2& 2RZZ?	@ 21    A$$
A2c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zUurllib.parse.splithost() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rU  rN   r;  r  r  s     r^   test_splithost_deprecation*DeprecationTest.test_splithost_deprecation  r  r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zUurllib.parse.splituser() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rX  rN   r;  r  r  s     r^   test_splituser_deprecation*DeprecationTest.test_splituser_deprecation  r  r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zWurllib.parse.splitpasswd() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   r]  rN   r;  r  r  s     r^   test_splitpasswd_deprecation,DeprecationTest.test_splitpasswd_deprecation&  sQ    01RLL$$R( 2RZZ?	@ 21r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zUurllib.parse.splitport() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rV  rN   r;  r  r  s     r^   test_splitport_deprecation*DeprecationTest.test_splitport_deprecation-  r  r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zVurllib.parse.splitnport() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rZ  rN   r;  r  r  s     r^   test_splitnport_deprecation+DeprecationTest.test_splitnport_deprecation4  Q    01RLL##B' 2RZZ?	@ 21r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zVurllib.parse.splitquery() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   r[  rN   r;  r  r  s     r^   test_splitquery_deprecation+DeprecationTest.test_splitquery_deprecation;  r  r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zTurllib.parse.splittag() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rR  rN   r;  r  r  s     r^   test_splittag_deprecation)DeprecationTest.test_splittag_deprecationB  sQ    01RLL!!"% 2RZZ?	@ 21r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zUurllib.parse.splitattr() is deprecated as of 3.8, use urllib.parse.urlparse() instead)r  r  rB   rC   rT  rN   r;  r  r  s     r^   test_splitattr_deprecation*DeprecationTest.test_splitattr_deprecationI  r  r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   zWurllib.parse.splitvalue() is deprecated as of 3.8, use urllib.parse.parse_qsl() instead)r  r  rB   rC   r\  rN   r;  r  r  s     r^   test_splitvalue_deprecation+DeprecationTest.test_splitvalue_deprecationP  sR    01RLL##B' 2RZZ@	A 21r  c                     U R                  [        5       n[        R                  R	                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   z/urllib.parse.to_bytes() is deprecated as of 3.8)r  r  rB   rC   rS  rN   r;  r  r  s     r^   test_to_bytes_deprecation)DeprecationTest.test_to_bytes_deprecationW  sO    01RLL!!"% 2RZZJ	L 21r  r  N)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r^   r  r  	  sJ    A@@@@@@@@@ALr   r  c                 $    U R                  S5      $ )Nr   )r   )ss    r^   r   r   ^  s    88Gr   c                 &    [        S U  5       5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7frA   )r   ).0r  s     r^   	<genexpr>tuple_encode.<locals>.<genexpr>b  s     *1As   )tuple)r[   s    r^   r   r   a  s    ****r   __main__)rn  rp  unittesturllib.parserB   testr   test.support.testcaser   r   r  r  r  ry  rz  TestCaser>   r  r  r   r   r  mainr  r   r^   <module>r     s   
     1%##
)H)"I) 
2J) 	8*	)
 
I;) 	9+) 
I;) |n) ) Z()) >"#) j\) \<01) Z()) 	"I)  
2J!)" BK#)$ 
J<%)& [M')( 
K=))* [M+),  -). .!"/)0 ,-.1)2 $%&3)4 |n5)6 nn567)8 ,-.9): k];)< '()=)> }o?)@ *+,A)D '()E)F )*+G)H %&'I)J 678K)L 234M)N &'(O)P $%&Q) \*H*"I* 
2J* 	2t*	*
 
B;* 	3+* 
C";* sUGn* * se3%()* 3	"#* cC5\* 5'01* sCj!"* 	"I*  
2J!*" BK#*$ 
C#<%*& S4&M'*( 
D3%=)** TC5M+*, vh -*. &4&!"/*0 tf-.1*2 D8*%&3*4 tdVn5*6 VHVH567*8 $t%&9*: dSE];*< S;-()=*> utfo?*@ d\?+,A*B 0123C*F Xx()G*H x&*+I*J H:&'K*L K+78M*N k]34O*P GgY'(Q*R 'G9%&S* XD7x((/ D7L(V4H%% V4rRLh'' RLj+ zMMO r   