o
    ±ó®ge ã                   @   sL  d dl Z d dlZd dlZd dlZdZdZdZdZdg fdg fdg fdd	gfd
dgfddgfddgfddgfdddgfdddgfdg fdg fdg fddgfddgfddgfd dgfd!d"gfd#d$d%gfd&d'd(gfd)d*gfd+d,gfd-d.gfd/d0gfgZ	di fdi fdi fdddgifd
ddgifdddgifdddgifddd1gifdd2gd3gdœfddd4d5gifdi fdi fdi fdddgifdddgifdddgifd ddgifd!dd6gifd#d7gd8gd"œfd&dd9d:gifd)d;d1gifd+dd<gifd-d=d6gifd/dd>gifgZ
G d?d@„ d@ejƒZG dAdB„ dBejƒZG dCdD„ dDejƒZedEkr$e ¡  dS dS )Fé    Nú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©r   Ú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©r   ó   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 cr
   r   r   r   r   r   r   r   r   r    r"   r$   r&   r(   c                   @   st  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[S )\ÚUrlParseTestCasec                 C   s`  t j |¡}|  ||¡ |j|j|j|j|j|j	f}|  ||¡ t j 
|¡}|  ||¡ |  || ¡ ¡ t j | ¡ ¡}|  | ¡ | ¡ ¡ |  ||¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j	|j	¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ t j |¡}|  ||¡ |j|j|j|j|j	f}|  ||¡ t j |¡}|  ||¡ |  || ¡ ¡ t j | ¡ ¡}|  | ¡ | ¡ ¡ |  ||¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j	|j	¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ d S ©N)ÚurllibÚparseÚurlparseÚassertEqualÚschemeÚnetlocÚpathÚparamsÚqueryÚfragmentÚ
urlunparseÚgeturlÚusernameÚpasswordÚhostnameÚportÚurlsplitÚ
urlunsplit)ÚselfÚurlÚparsedÚsplitÚresultÚtZresult2Zresult3© rC   úH/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_urlparse.pyÚcheckRoundtripsI   sV   ÿÿz UrlParseTestCase.checkRoundtripsc                 C   sd   t D ]-\}}tjj|dd}|  ||d| ¡ dd„ |D ƒ}tjj|dd}|  ||d| ¡ qd S )NT©Úkeep_blank_valuesúError parsing %rc                 S   s   g | ]
}t |d  ƒr|‘qS )é   ©Úlen©Ú.0ÚvrC   rC   rD   Ú
<listcomp>€   s    z-UrlParseTestCase.test_qsl.<locals>.<listcomp>F)Úparse_qsl_test_casesr+   r,   Ú	parse_qslr.   )r=   ÚorigÚexpectrA   Úexpect_without_blanksrC   rC   rD   Útest_qsl|   s   ÿûzUrlParseTestCase.test_qslc                    sh   t D ]/\}‰ tjj|dd}|  |ˆ d| ¡ ‡ fdd„ˆ D ƒ}tjj|dd}|  ||d| ¡ qd S )NTrF   rH   c                    s&   i | ]}t ˆ | d  ƒr|ˆ | “qS )r   rJ   rL   ©rS   rC   rD   Ú
<dictcomp>‰   s    ÿz,UrlParseTestCase.test_qs.<locals>.<dictcomp>F)Úparse_qs_test_casesr+   r,   Úparse_qsr.   )r=   rR   rA   rT   rC   rV   rD   Útest_qs…   s   
ÿÿúzUrlParseTestCase.test_qsc                    sH   g d¢}dd„ ‰ ‡ fdd„|D ƒ}|| D ]\}}}|   |||¡ qd S )N))zfile:///tmp/junk.txt)Úfiler   ú/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`   ra   rb   r   r   )znfs://server/path/to/file.txt)ÚnfsÚserverú/path/to/file.txtr   r   r   )rc   rd   re   r   r   )z0svn+ssh://svn.zope.org/repos/main/ZConfig/trunk/)úsvn+sshúsvn.zope.orgú/repos/main/ZConfig/trunk/r   r   r   )rf   rg   rh   r   r   )z)git+ssh://git@github.com/user/project.git)úgit+sshúgit@github.comú/user/project.gitr   r   r   )ri   rj   rk   r   r   c                 S   ó8   | d   d¡tdd„ | d D ƒƒtdd„ | d D ƒƒfS )Nr   Úasciic                 s   ó    | ]}|  d ¡V  qdS ©rm   N©Úencode©rM   ÚxrC   rC   rD   Ú	<genexpr>¬   ó   € zDUrlParseTestCase.test_roundtrips.<locals>._encode.<locals>.<genexpr>rI   c                 s   rn   ro   rp   rr   rC   rC   rD   rt   ­   ru   é   ©rq   Útuple©rB   rC   rC   rD   Ú_encodeª   ó   þz1UrlParseTestCase.test_roundtrips.<locals>._encodec                    ó   g | ]}ˆ |ƒ‘qS rC   rC   rr   ©rz   rC   rD   rO   ®   ó    z4UrlParseTestCase.test_roundtrips.<locals>.<listcomp>©rE   )r=   Ú	str_casesÚbytes_casesr>   r?   r@   rC   r}   rD   Útest_roundtrips   s   ÿz UrlParseTestCase.test_roundtripsc                    s”   g d¢}dd„ ‰ ‡ fdd„|D ƒ}d}d}||f}||f}||fD ]&\}}|D ]}	|D ]\}
}}|	|
 }
|	f| }|	f| }|   |
||¡ q+q'q!d S )N))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                 S   rl   )Nr   rm   c                 s   rn   ro   rp   rr   rC   rC   rD   rt   É   ru   zIUrlParseTestCase.test_http_roundtrips.<locals>._encode.<locals>.<genexpr>rI   c                 s   rn   ro   rp   rr   rC   rC   rD   rt   Ê   ru   rv   rw   ry   rC   rC   rD   rz   Ç   r{   z6UrlParseTestCase.test_http_roundtrips.<locals>._encodec                    r|   rC   rC   rr   r}   rC   rD   rO   Ë   r~   z9UrlParseTestCase.test_http_roundtrips.<locals>.<listcomp>)ÚhttpÚhttps)ó   httpó   httpsr   )r=   r€   r   Zstr_schemesZbytes_schemesZ	str_testsZbytes_testsZschemesZ
test_casesr/   r>   r?   r@   rC   r}   rD   Útest_http_roundtrips²   s"   

üÿÿz%UrlParseTestCase.test_http_roundtripsc           	      C   sR   |||f}|   tj ||¡|¡ dd„ |D ƒ }\}}}|   tj ||¡|¡ d S )Nc                 S   ó   g | ]}|  d ¡‘qS ©rm   rp   rr   rC   rC   rD   rO   Û   s    
ÿz.UrlParseTestCase.checkJoin.<locals>.<listcomp>)r.   r+   r,   Úurljoin)	r=   ÚbaseZrelurlÚexpectedZstr_componentsZbytes_componentsZbasebZrelurlbZ	expectedbrC   rC   rD   Ú	checkJoinØ   s   
ÿzUrlParseTestCase.checkJoinc                 C   s`   g d¢}dd„ |D ƒ}|| D ]}|   tj tj |¡¡|¡ |   tj tj |¡¡|¡ qd S )N)ÚPythonz./Pythonúx-newscheme://foo.com/stuffzx://yzx:/yzx:/r†   c                 S   r   r   rp   rr   rC   rC   rD   rO   á   ó    z7UrlParseTestCase.test_unparse_parse.<locals>.<listcomp>)r.   r+   r,   r<   r;   r5   r-   )r=   r€   r   ÚurC   rC   rD   Útest_unparse_parseß   s   þz#UrlParseTestCase.test_unparse_parsec                 C   s¶  |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   td	d
¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   td d¡ |   td!d"¡ |   td#d$¡ |   td%d$¡ |   td&d¡ |   td'd(¡ |   td)d*¡ |   td+d,¡ |   td-d.¡ |   td/d0¡ |   td1d"¡ |   td2d¡ |   td3d4¡ |   td5d6¡ d S )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©r=   rC   rC   rD   Útest_RFC1808æ   s>   zUrlParseTestCase.test_RFC1808c                 C   s   |   tj d¡d¡ d S )Nzmailto:1337@example.org)Úmailtor   z1337@example.orgr   r   r   ©r.   r+   r,   r-   rÏ   rC   rC   rD   Útest_RFC2368  s   ÿzUrlParseTestCase.test_RFC2368c                 C   sî  |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   td	d
¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd ¡ |   td!d ¡ |   td"d¡ |   td#t¡ |   td$d%¡ |   td&d'¡ |   td(d)¡ |   td*d+¡ |   td,d¡ |   td-d¡ |   td.d/¡ |   td0d1¡ |   td2d3¡ |   td4d5¡ |   td6d7¡ |   td8d9¡ |   td:d;¡ |   td<d=¡ d S )>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Ï   rC   rC   rD   Útest_RFC2396  sF   zUrlParseTestCase.test_RFC2396c                 C   sˆ  |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   td	d
¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   td d!¡ |   td"d!¡ |   td#d$¡ |   td%d&¡ |   td'd&¡ |   td(d¡ |   td)d¡ |   td)d¡ |   td*d¡ |   td+d¡ |   td,d¡ |   td-d.¡ |   td/d0¡ |   td1d2¡ |   td3d4¡ |   td5d$¡ |   td6d
¡ |   td7d8¡ |   td9d:¡ |   td;d<¡ |   td=d>¡ |   td?d@¡ |   tdAdB¡ |   tdCdD¡ |   tdEdF¡ |   tdGd¡ |   dHdd¡ d S )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Ï   rC   rC   rD   Útest_RFC3986H  s\   zUrlParseTestCase.test_RFC3986c                 C   sX  |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd	¡ |   td
d¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   tdd¡ |   td d	¡ |   td!d"¡ |   td#d$¡ |   tdd¡ |   tdd¡ |   td%d¡ |   td&d¡ |   td'd¡ |   d(dd(¡ |   d)dd¡ |   d)d*d*¡ |   d+d,d-¡ |   d.d,d/¡ |   d0dd1¡ |   d2dd3¡ |   td4 d5td6 ¡ |   d7d8d9¡ |   d:d8d;¡ |   d7d<d=¡ |   d:d<d=¡ |   d7d>d?¡ |   dd8d=¡ |   d@dAdA¡ d S )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/dir1Z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Ï   rC   rC   rD   Útest_urljoins  sT   zUrlParseTestCase.test_urljoinsc                    s”   g d¢}dd„ ‰ ‡ fdd„|D ƒ}|| D ]\}}}t j |¡}|  |j|jf||f¡ qg d¢}dd„ |D ƒ}|| D ]}|  tt jj|¡ q<d S )N))z http://Test.python.org:5432/foo/útest.python.orgé8  )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                 S   s"   | d   d¡| d   d¡| d fS )Nr   rm   rI   rv   rp   ry   rC   rC   rD   rz   Ù  s   "z.UrlParseTestCase.test_RFC2732.<locals>._encodec                    r|   rC   rC   rr   r}   rC   rD   rO   Û  r~   z1UrlParseTestCase.test_RFC2732.<locals>.<listcomp>)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                 S   r   r   rp   rr   rC   rC   rD   rO   æ  r—   )r+   r,   r-   r.   r9   r:   ÚassertRaisesÚ
ValueError)r=   r€   r   r>   r9   r:   Z	urlparsedZinvalid_urlrC   r}   rD   Útest_RFC2732¸  s    ÿzUrlParseTestCase.test_RFC2732c                    sž   ddddddddt d	d
ftd	dfg
}dd„ ‰ ‡ fdd„|D ƒ}|| D ])\}}}tj |¡}|  | ¡ |¡ |  |||f¡ |  |j|¡ |  |j|¡ q#d S )N)zhttp://python.org#fragúhttp://python.orgÚfrag)rò   rò   r   )zhttp://python.org/#fragúhttp://python.org/ró   )rô   rô   r   )zhttp://python.org/?q#fragúhttp://python.org/?qró   )rõ   rõ   r   )zhttp://python.org/p#fragzhttp://python.org/pró   )úhttp://python.org/p?qrö   r   r   r‰   r   c                 S   s   t | ƒdd„ | D ƒƒS )Nc                 s   rn   ro   rp   rr   rC   rC   rD   rt   ø  ru   zCUrlParseTestCase.test_urldefrag.<locals>._encode.<locals>.<genexpr>)Útypery   rC   rC   rD   rz   ÷  s   z0UrlParseTestCase.test_urldefrag.<locals>._encodec                    r|   rC   rC   rr   r}   rC   rD   rO   ù  r~   z3UrlParseTestCase.test_urldefrag.<locals>.<listcomp>)	rÎ   rÜ   r+   r,   Ú	urldefragr.   r6   r>   r4   )r=   r€   r   r>   Údefragró   rA   rC   r}   rD   Útest_urldefragê  s(   öûzUrlParseTestCase.test_urldefragc                 C   sT   t j d¡}|  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd¡ d S )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)r+   r,   r;   r.   r9   r0   )r=   r‡   rC   rC   rD   Útest_urlsplit_scoped_IPv6  s   z*UrlParseTestCase.test_urlsplit_scoped_IPv6c                 C   s  d}t j |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d ¡ |  |j
d ¡ |  |jd¡ |  |jd ¡ |  | ¡ dd … |dd … ¡ d	}t j |¡}|  |jd¡ |  |jd
¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  | ¡ |¡ d}t j |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  | ¡ |¡ d}t j |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d ¡ |  |j
d ¡ |  |jd¡ |  |jd ¡ |  | ¡ dd … |dd … ¡ d}t j |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  | ¡ |¡ d}t j |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d ¡ |  |j
d¡ |  |jd¡ |  |jd¡ |  | ¡ |¡ d!}t j |¡}|  td"¡ |j W d   ƒ d S 1 sw   Y  d S )#NzHTTP://WWW.PYTHON.ORG/doc/#fragrŠ   zWWW.PYTHON.ORGz/doc/r   ró   rƒ   é   z7http://User:Pass@www.python.org:080/doc/?query=yes#fragúUser:Pass@www.python.org:080z	query=yesZUserZPasséP   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/#fragrŒ   s   WWW.PYTHON.ORGs   /doc/r   s   fragó   www.python.orgs7   http://User:Pass@www.python.org:080/doc/?query=yes#frags   User:Pass@www.python.org:080s	   query=yess   Users   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)r+   r,   r;   r.   r/   r0   r1   r3   r4   r7   r8   r9   r:   r6   ÚassertRaisesRegexrð   )r=   r>   r‡   rC   rC   rD   Útest_urlsplit_attributes
  sš     $ÿz)UrlParseTestCase.test_urlsplit_attributesc                 C   s„  d}t j |¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d ¡ |  |j
d ¡ |  |jd¡ |  |jd ¡ |  | ¡ d¡ d}t j |¡}|  |jd	¡ |  |jd
¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |j	d ¡ |  |j
d ¡ |  |jd
¡ |  |jd ¡ |  | ¡ d¡ d}d}tdƒD ]}t jj||d}|  |jd¡ |  | ¡ d¡ q¦d S )NzQhttp	://www.python
.org	/java
script:	alert('msg
')/?query
=	something#frag
mentrŠ   rƒ   z/javascript:alert('msg')/zquery=somethingr4   zGhttp://www.python.org/javascript:alert('msg')/?query=something#fragmentsQ   http	://www.python
.org	/java
script:	alert('msg
')/?query
=	something#frag
mentrŒ   r   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
tprv   ©r/   )r+   r,   r;   r.   r/   r0   r1   r3   r4   r7   r8   r9   r:   r6   Úrange)r=   r>   r‡   r/   Ú_rC   rC   rD   Ú!test_urlsplit_remove_unsafe_bytesg  s>   ýz2UrlParseTestCase.test_urlsplit_remove_unsafe_bytesc                 C   sÌ   dD ]a}t jjt jjfD ]V}dD ]Q}| j|||d? d| }d| }|r/| d¡}| d¡}||ƒ}|  |j|¡ |  t	¡ |j
 W d  ƒ n1 sMw   Y  W d  ƒ q1 s\w   Y  qqqdS )z Check handling of invalid ports.)FT)rã   z1.5z-1Z0x10)Úbytesr,   r:   zwww.example.net:zhttp://rm   N)r+   r,   r;   r-   ÚsubTestrq   r.   r0   rï   rð   r:   )r=   r  r,   r:   r0   r>   r‡   rC   rC   rD   Útest_attributes_bad_portŒ  s&   

ÿ€øÿÿÿz)UrlParseTestCase.test_attributes_bad_portc                 C   s”  d}t j |¡}|  |jd¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  | 	¡ |¡ t j 
|¡}|  |jd¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  | 	¡ |¡ d}t j |¡}|  |jd¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  | 	¡ |¡ t j 
|¡}|  |jd¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  | 	¡ |¡ d S )Nz0sip:alice@atlanta.com;maddr=239.255.255.1;ttl=15r   s0   sip:alice@atlanta.com;maddr=239.255.255.1;ttl=15r   )r+   r,   r;   r.   r0   r7   r8   r9   r:   r6   r-   )r=   Zurir‡   rC   rC   rD   Útest_attributes_without_netlocœ  s<   z/UrlParseTestCase.test_attributes_without_netlocc                 C   s,   |   tj d¡d¡ |   tj d¡d¡ d S )Nz http://example.com?blahblah=/foo)rŠ   zexample.comr   r   zblahblah=/foor   s    http://example.com?blahblah=/foo)rŒ   s   example.comr   r   s   blahblah=/foor   rÒ   rÏ   rC   rC   rD   Útest_noslashÅ  s   ÿÿzUrlParseTestCase.test_noslashc                 C   s|   |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d	¡d
¡ |   tj d¡d¡ d S )Nr1   )r   r   r1   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©rŒ   r  r   r   r   r   rÒ   rÏ   rC   rC   rD   Útest_withoutschemeÌ  s$   ÿÿÿÿÿÿz#UrlParseTestCase.test_withoutschemec                 C   sô   |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d	¡d
¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ d S )Nzhttp:80)rŠ   r   Ú80r   r   r   zhttps:80)r‹   r   r  r   r   r   zpath:80)r1   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)rŒ   r   ó   80r   r   r   s   https:80)r   r   r  r   r   r   s   path:80)r  r   r  r   r   r   s   http:)rŒ   r   r   r   r   r   s   https:)r   r   r   r   r   r   r  r  rÒ   rÏ   rC   rC   rD   Útest_portseparatorß  s    ÿÿz#UrlParseTestCase.test_portseparatorc                 C   s   |   ttjjd¡ d S )Nrã   )rï   Ú	TypeErrorr+   r,   Ú	urlencoderÏ   rC   rC   rD   Útest_usingsysñ  s   zUrlParseTestCase.test_usingsysc                 C   s¤   |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d	¡d
¡ |   tj d¡d¡ |   tj d¡d¡ |   tj d¡d¡ d S )Nzs3://foo.com/stuff)Z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   r3   r4   z!x-newscheme://foo.com/stuff?query)r  r  r  r   r3   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   ó   queryr  s!   x-newscheme://foo.com/stuff?query)r   r  r  r   r!  r   rÒ   rÏ   rC   rC   rD   Útest_anyschemeõ  s0   ÿÿÿÿÿÿÿÿzUrlParseTestCase.test_anyschemec              	   C   sî   t jjt jjfD ]l}| j|d\ |ddƒ}|  |jd¡ |ddƒ}|  |jd¡ |  |ddƒjd¡ |  |ddd	jd¡ |  |d
dd	jd¡ |  |dƒjd¡ |  |d
ƒjd¡ |  |d
dƒjd¡ W d   ƒ q1 sow   Y  qd S )N)Úfunctionzhttp://example.net/ÚftprŠ   s   http://example.net/s   ftprŒ   r1   r  r  r   r   )r+   r,   r-   r;   r	  r.   r/   )r=   ÚfuncrA   rC   rC   rD   Útest_default_scheme
  s   

öÿz$UrlParseTestCase.test_default_schemec              
   C   s  d}|D ]„\}}}t jjt jjfD ]v}|dkr|t jju rd}| j||dY ||dd}|  |jd¡ |  t||ƒ 	d| ¡¡ |  ||ddƒjd¡ ||d	d}|  |j|¡ |  
t||ƒ 	|¡¡ |  ||dd	ƒj|¡ |  ||ƒj|¡ W d   ƒ q1 s‚w   Y  qqd S )
N)
)z
http:#fragr1   ró   )z//example.net#fragr1   ró   )zindex.html#fragr1   ró   )z	;a=b#fragr2   ró   )z	?a=b#fragr3   ró   )z#fragr1   ró   )z	abc#@fragr1   ú@frag)z//abc#@fragr1   r'  )z//abc:80#@fragr1   r'  )z//abc#@frag:80r1   z@frag:80r2   r1   )r>   r#  F)Úallow_fragmentsr   ú#T)r+   r,   r-   r;   r	  r.   r4   Z
assertTrueÚgetattrÚendswithZassertFalse)r=   Ztestsr>   ÚattrZexpected_fragr%  rA   rC   rC   rD   Útest_parse_fragments  s0   ÿÿÿóýÿz%UrlParseTestCase.test_parse_fragmentsc                 C   sD  |   td¡ tj dd¡ W d   ƒ n1 sw   Y  |   td¡ tj dd¡ W d   ƒ n1 s5w   Y  |   td¡ tj dd¡ W d   ƒ n1 sRw   Y  |   td¡ tj dd¡ W d   ƒ n1 sow   Y  |   td¡ tj d¡ W d   ƒ n1 s‹w   Y  |   td¡ tj d¡ W d   ƒ n1 s§w   Y  |   td¡ tj d¡ W d   ƒ n1 sÃw   Y  |   td¡ tj d	¡ W d   ƒ n1 sßw   Y  |   td¡ tj d
d¡ W d   ƒ n1 süw   Y  |   td¡ tj dd
¡ W d   ƒ d S 1 sw   Y  d S )NzCannot mix strrƒ   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ò   s   http://python.org)	r  r  r+   r,   r-   r;   r5   r<   r‘   rÏ   rC   rC   rD   Útest_mixed_types_rejected:  s<   ÿÿÿÿÿÿÿÿÿ$ÿz*UrlParseTestCase.test_mixed_types_rejectedc           
      C   s:  t |jƒ}|j}|  |j|¡ d| }d| }||Ž }||Ž }d}d}	|  ||¡ |  | ¡ |¡ |  | ¡ |¡ |  | |¡|¡ |  | |¡|¡ |  | ||	¡|¡ |  | ||	¡|¡ |  ||¡ |  | ¡ |¡ |  | ¡ |¡ |  | |¡|¡ |  | |¡|¡ |  | ||	¡|¡ |  | ||	¡|¡ d S )N)r   )r   rm   Ústrict)rK   Ú_fieldsÚ_encoded_counterpartZassertIsÚ_decoded_counterpartr.   Údecoderq   )
r=   Zstr_typeZnum_argsZ
bytes_typeZstr_argsZ
bytes_argsZ
str_resultZbytes_resultÚencodingÚerrorsrC   rC   rD   Ú_check_result_typeR  s.   
z#UrlParseTestCase._check_result_typec                 C   s.   t jjt jjt jjg}|D ]}|  |¡ qd S r*   )r+   r,   ÚDefragResultÚSplitResultÚParseResultr6  )r=   Zresult_typesZresult_typerC   rC   rD   Útest_result_pairsk  s   ýÿz"UrlParseTestCase.test_result_pairsc                 C   s°   t jjddd}|  |ddgi¡ t jjddd}|  |ddgi¡ t jjddd}|  |dd	gi¡ t jjd
dd}|  |ddgi¡ t jjd
ddd}|  |ddgi¡ d S )Nõ	   key=Å%E9úlatin-1©r4  Úkeyõ   ÅÃ©õ   key=Å%C3%A9úutf-8rm   õ   Åï¿½ï¿½õ
   key=Å%E9-õ   Åï¿½-Úignore©r4  r5  õ   Å-)r+   r,   rY   r.   ©r=   rA   rC   rC   rD   Útest_parse_qs_encodingu  s   
ÿz'UrlParseTestCase.test_parse_qs_encodingc                 C   sœ   t jjddd}|  |dg¡ t jjddd}|  |dg¡ t jjddd}|  |dg¡ t jjd	dd}|  |d
g¡ t jjd	ddd}|  |dg¡ d S )Nr;  r<  r=  )r>  r?  r@  rA  rm   )r>  rB  rC  )r>  rD  rE  rF  )r>  rG  )r+   r,   rQ   r.   rH  rC   rC   rD   Útest_parse_qsl_encoding‚  s   
ÿz(UrlParseTestCase.test_parse_qsl_encodingc                 C   sf   |   t¡ tjjd dgd ¡dd W d   ƒ n1 sw   Y  tjjd dgd ¡dd d S )Nr   za=aé   é
   )Úmax_num_fields)rï   rð   r+   r,   rY   ÚjoinrÏ   rC   rC   rD   Útest_parse_qsl_max_num_fields  s   ÿ z.UrlParseTestCase.test_parse_qsl_max_num_fieldsc                 C   sü   di fdi fdddgifddgdgd	œfd
dddgifdi fdi fdddgifddgdgdœfddddgifg
}|D ]A\}}|   d|›d|›¡* tjj|dd}|  ||d| ¡ tjj|dd}|  ||d| ¡ W d   ƒ q:1 svw   Y  q:d S )Nú;ú;;r!   r   r
   r#   r   r   r	   úa=1;a=2r   r   ó   ;ó   ;;r%   r   r   r'   r   r   r   ó   a=1;a=2r   r    ú
Original: ú, Expected: ©Ú	separatorrH   )r	  r+   r,   rY   r.   )r=   Zparse_qs_semicolon_casesrR   rS   rA   Úresult_bytesrC   rC   rD   Útest_parse_qs_separator”  s&   öüÿz(UrlParseTestCase.test_parse_qs_separatorc                 C   sà   dg fdg fddgfdddgfdd	d
gfdg fdg fddgfdddgfdddgfg
}|D ]A\}}|   d|›d|›¡* tjj|dd}|  ||d| ¡ tjj|dd}|  ||d| ¡ W d   ƒ q,1 shw   Y  q,d S )NrP  rQ  r!   r	   r#   r   r   rR  r   r   rS  rT  r%   r   r'   r   r   rU  r   r   rV  rW  rX  rH   )r	  r+   r,   rQ   r.   )r=   Zparse_qsl_semicolon_casesrR   rS   rA   rZ  rC   rC   rD   Útest_parse_qsl_separator©  s&   



öüÿz)UrlParseTestCase.test_parse_qsl_separatorc                 C   sJ   t j ddgddœd¡}G dd„ dƒ}t j d|ƒ id¡}|  |d	¡ d S )
NrI   rv   )é   rü   é   r	   Tc                   @   s   e Zd Zdd„ ZdS )z:UrlParseTestCase.test_urlencode_sequences.<locals>.Trivialc                 S   s   dS )NZtrivialrC   rÏ   rC   rC   rD   Ú__str__Æ  s   zBUrlParseTestCase.test_urlencode_sequences.<locals>.Trivial.__str__N)Ú__name__Ú
__module__Ú__qualname__r_  rC   rC   rC   rD   ÚTrivialÅ  s    rc  r   z	a=trivial)r+   r,   r  r.   )r=   rA   rc  rC   rC   rD   Útest_urlencode_sequences¾  s   z)UrlParseTestCase.test_urlencode_sequencesc                 C   sj   t j ddi¡}|  |d¡ t jjddit jjd}|  |d¡ t jjddidt jjd}|  |d	¡ d S )
Nr   z
some valueza=some+valuezsome value/another)Ú	quote_viaza=some%20value%2Fanotherr†   )Úsafere  za=some%20value/another)r+   r,   r  r.   ÚquoterH  rC   rC   rD   Útest_urlencode_quote_viaÌ  s   ÿÿz)UrlParseTestCase.test_urlencode_quote_viac                 C   sF   |   ttjjd¡ tj d¡}|  |d¡ tj d¡}|  |d¡ d S )Nrã   s   archaeological arcanazarchaeological%20arcanar   r   )rï   r  r+   r,   Úquote_from_bytesr.   rH  rC   rC   rD   Útest_quote_from_bytesÖ  s
   z&UrlParseTestCase.test_quote_from_bytesc                 C   s4   t j d¡}|  |d¡ t j d¡}|  |d¡ d S )Nz	abc%20defs   abc defr   r   )r+   r,   Úunquote_to_bytesr.   rH  rC   rC   rD   Útest_unquote_to_bytesÝ  s   z&UrlParseTestCase.test_unquote_to_bytesc                 C   s0   | j ttjjddd | j ttjjddd d S )Ns   foorA  r=  r/  )r5  )rï   r  r+   r,   rg  rÏ   rC   rC   rD   Útest_quote_errorsã  s   ÿz"UrlParseTestCase.test_quote_errorsc                 C   s¤   t j d¡}|  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd¡ d S )Nztel:+31-641044153Útelz+31-641044153ztel:+31641044153z+31641044153)r+   r,   r;   r.   r/   r1   r-   )r=   Úp1Úp2rC   rC   rD   Útest_issue14072è  s   z UrlParseTestCase.test_issue14072c                 C   s†   d}t j d¡}|  t|¡ |j W d   ƒ n1 sw   Y  t j d¡}|  t|¡ |j W d   ƒ d S 1 s<w   Y  d S )Nz3Port could not be cast to integer value as 'oracle'z%http://Server=sde; Service=sde:oracle)r+   r,   r-   r  rð   r:   r;   )r=   Úmessagero  rp  rC   rC   rD   Ú!test_port_casting_failure_message÷  s   ÿ"ÿz2UrlParseTestCase.test_port_casting_failure_messagec                 C   sÜ   t j d¡}|  |jd¡ |  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd	¡ |  |jd
¡ t j d¡}|  |jd¡ |  |jd¡ |  |jd¡ d S )Nz"tel:123-4;phone-context=+1-650-516rn  z123-4zphone-context=+1-650-516ztel:+1-201-555-0123z+1-201-555-0123r   z"tel:7042;phone-context=example.comZ7042zphone-context=example.comz%tel:863-1234;phone-context=+1-914-555z863-1234zphone-context=+1-914-555)r+   r,   r-   r.   r/   r1   r2   )r=   ro  rC   rC   rD   Útest_telurl_params  s    z#UrlParseTestCase.test_telurl_paramsc                 C   s$   t j t jj¡}|  dt|ƒ¡ d S )NÚQuoter)r+   r,   ru  Ú_ALWAYS_SAFEÚassertInÚrepr)r=   ÚquoterrC   rC   rD   Útest_Quoter_repr  s   z!UrlParseTestCase.test_Quoter_reprc                 C   sj   g }h d£}t tjƒD ]}| d¡s||v rqttj|ƒ}t|dd ƒdkr*| |¡ q|  tjj|¡ d S )N>   Úclear_cacheÚ
ResultBaseÚ
splitnportÚ
splitvalueÚ	splituserru  Úto_bytesÚ	splithostÚ	splitattrÚsplitpasswdÚunwrapÚsplittagÚ
splitqueryÚ	splitportÚ	splittyper  ra  zurllib.parse)Údirr+   r,   Ú
startswithr*  ÚappendZassertCountEqualÚ__all__)r=   r“   ZundocumentedÚnameÚobjectrC   rC   rD   Útest_all  s   
€zUrlParseTestCase.test_allc                    s0  d‰dd„ ˆD ƒ‰ ‡ ‡fdd„t ttdtjƒƒD ƒ}|  d|¡ |  d|¡ tj d	¡ |  	t
¡ tj d
¡ W d   ƒ n1 sBw   Y  dD ]L}dD ]G}|D ]B}d || |¡¡}| j|d t|ƒ¡d# |  	t
¡ tj |¡ W d   ƒ n1 sw   Y  W d   ƒ qQ1 sŽw   Y  qQqMqId S )Nz/:#?@c                 S   s   h | ]	}d   t|ƒ¡’qS )ú{:04X})ÚformatÚord©rM   ÚcrC   rC   rD   Ú	<setcomp>/  s    z?UrlParseTestCase.test_urlsplit_normalization.<locals>.<setcomp>c                    s.   g | ]}ˆ t t |¡ ¡ ƒ@ r|ˆvr|‘qS rC   )ÚsetÚunicodedataÚdecompositionr@   r“  ©Z	hex_charsZillegal_charsrC   rD   rO   0  s    þýÿz@UrlParseTestCase.test_urlsplit_normalization.<locals>.<listcomp>é€   u   â„€u   ï¼ƒu   http://ãƒ•ã‚š:80u   http://ãƒ•ã‚šï¸“80)rŠ   r‹   r$  )znetloc{}false.netloczn{}user@netlocz{}://{}/pathr  )r>   Úchar)ÚmapÚchrr  ÚsysÚ
maxunicoderw  r+   r,   r;   rï   rð   r‘  r	  r’  )r=   Zdenorm_charsr/   r0   r”  r>   rC   r™  rD   Útest_urlsplit_normalization*  s0   ÿÿÿ€ÿþÿÿz,UrlParseTestCase.test_urlsplit_normalizationN)0r`  ra  rb  rE   rU   rZ   r‚   rŽ   r”   r™   rÐ   rÓ   rÝ   rá   rå   rñ   rú   rû   r  r  r
  r  r  r  r  r  r"  r&  r-  r.  r6  r:  rI  rJ  rO  r[  r\  rd  rh  rj  rl  rm  rq  rs  rt  rz  r  r   rC   rC   rC   rD   r)   G   s\    3	
#&0-972	]%)!


r)   c                   @   sp   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚUtility_Testsz=Testcase to test the various utility functions in the urllib.c                 C   ó\   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ d S )Nztype:opaquestring)r÷   Úopaquestringr£  )Nr£  ú:opaquestring)Nr¤  ztype:)r÷   r   ztype:opaque:string)r÷   zopaque:string)r+   r,   Ú
_splittyper.   )r=   rˆ  rC   rC   rD   Útest_splittypeK  s   zUtility_Tests.test_splittypec                 C   s¬   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ d S )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#)r+   r,   Ú
_splithostr.   )r=   r  rC   rC   rD   Útest_splithostS  s>   
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzUtility_Tests.test_splithostc                 C   r¢  )Nrý   )ú	User:Passúwww.python.org:080z@www.python.org:080)r   r¯  r¯  )Nr¯  z
User:Pass@)r®  r   rÿ   )zUser@example.com:Passr¯  )r+   r,   Ú
_splituserr.   )r=   r  rC   rC   rD   Útest_splituserp  s    
ÿ
ÿ
ÿ
ÿ
ÿzUtility_Tests.test_splituserc                 C   sÜ   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ d S )Nzuser:ab)ÚuserÚabzuser:a
b)r²  za
bzuser:a	b)r²  za	bzuser:ab)r²  zabzuser:ab)r²  zabzuser:ab)r²  zabzuser:a:b)r²  za:bzuser:a b)r²  r   z	user 2:ab)zuser 2r³  z
user+1:a+b)zuser+1za+bzuser:)r²  r   r²  )r²  Nz:ab)r   r³  )r+   r,   Ú_splitpasswdr.   )r=   rƒ  rC   rC   rD   Útest_splitpasswd}  s   zUtility_Tests.test_splitpasswdc                 C   sŒ   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd	¡ |  |d
ƒd¡ |  |dƒd¡ |  |dƒd¡ d S )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¸  )r+   r,   Ú
_splitportr.   )r=   r‡  rC   rC   rD   Útest_splitport  s   zUtility_Tests.test_splitportc                 C   s¤   t jj}|  |dƒd¡ |  |dƒd¡ |  |ddƒd¡ |  |dƒd¡ |  |ddƒd¡ |  |dƒd	¡ |  |ddƒd
¡ |  |dƒd¡ |  |ddƒd¡ d S )Nr¶  )r·  éX   r·  )r·  éÿÿÿÿé7   )r·  rÁ  rº  r©  )r©  rÀ  )r©  rÁ  r»  r¹  )r+   r,   Ú_splitnportr.   )r=   r}  rC   rC   rD   Útest_splitnportš  s   zUtility_Tests.test_splitnportc                 C   sL   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ d S )	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Æ  )r+   r,   Ú_splitqueryr.   )r=   r†  rC   rC   rD   Útest_splitquery¦  s   
ÿ
ÿ
ÿzUtility_Tests.test_splitqueryc                 C   r¢  )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É  Zboo)r+   r,   Ú	_splittagr.   )r=   r…  rC   rC   rD   Útest_splittag²  s   
ÿ
ÿ
ÿ
ÿzUtility_Tests.test_splittagc                 C   sf   t jj}|  |dƒdddgf¡ |  |dƒddgf¡ |  |dƒdddgf¡ |  |dƒdg f¡ d S )Nz/path;attr1=value1;attr2=value2z/pathzattr1=value1zattr2=value2z/path;r   z;attr1=value1;attr2=value2)r+   r,   Ú
_splitattrr.   )r=   r‚  rC   rC   rD   Útest_splitattr¾  s   

ÿ

ÿzUtility_Tests.test_splitattrc                 C   r¢  )NrÆ  )rã   Úbarzfoo=)rã   r   z=bar)r   rÐ  Úfoobar)rÑ  Nzfoo=bar=baz)rã   zbar=baz)r+   r,   Ú_splitvaluer.   )r=   r~  rC   rC   rD   Útest_splitvalueÇ  s   zUtility_Tests.test_splitvaluec                 C   s.   t j d¡}|  |d¡ |  tt jjd¡ d S )Nzhttp://www.python.orgu   http://www.python.org/mediÃ¦val)r+   r,   Ú	_to_bytesr.   rï   ÚUnicodeErrorrH  rC   rC   rD   Útest_to_bytesÑ  s
   ÿzUtility_Tests.test_to_bytesc                 C   s&   dD ]}t j |¡}|  |d¡ qd S )N)z<URL:scheme://host/path>z<scheme://host/path>zURL:scheme://host/pathúscheme://host/pathr×  )r+   r,   r„  r.   )r=   Zwrapped_urlr>   rC   rC   rD   Útest_unwrap×  s   ýzUtility_Tests.test_unwrapN)r`  ra  rb  Ú__doc__r¦  r­  r±  rµ  r¾  rÃ  rÈ  rÍ  rÏ  rÓ  rÖ  rØ  rC   rC   rC   rD   r¡  G  s    	
r¡  c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚDeprecationTestc                 C   óL   |   t¡}tj d¡ W d   ƒ n1 sw   Y  |  t|jƒd¡ d S )Nr   zUurllib.parse.splittype() is deprecated as of 3.8, use urllib.parse.urlparse() instead)ÚassertWarnsÚDeprecationWarningr+   r,   rˆ  r.   ÚstrÚwarning©r=   ÚcmrC   rC   rD   Útest_splittype_deprecationà  ó   ÿÿz*DeprecationTest.test_splittype_deprecationc                 C   rÛ  )Nr   zUurllib.parse.splithost() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r  r.   rÞ  rß  rà  rC   rC   rD   Útest_splithost_deprecationç  rã  z*DeprecationTest.test_splithost_deprecationc                 C   rÛ  )Nr   zUurllib.parse.splituser() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r  r.   rÞ  rß  rà  rC   rC   rD   Útest_splituser_deprecationî  rã  z*DeprecationTest.test_splituser_deprecationc                 C   rÛ  )Nr   zWurllib.parse.splitpasswd() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   rƒ  r.   rÞ  rß  rà  rC   rC   rD   Útest_splitpasswd_deprecationõ  rã  z,DeprecationTest.test_splitpasswd_deprecationc                 C   rÛ  )Nr   zUurllib.parse.splitport() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r‡  r.   rÞ  rß  rà  rC   rC   rD   Útest_splitport_deprecationü  rã  z*DeprecationTest.test_splitport_deprecationc                 C   rÛ  )Nr   zVurllib.parse.splitnport() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r}  r.   rÞ  rß  rà  rC   rC   rD   Útest_splitnport_deprecation  rã  z+DeprecationTest.test_splitnport_deprecationc                 C   rÛ  )Nr   zVurllib.parse.splitquery() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r†  r.   rÞ  rß  rà  rC   rC   rD   Útest_splitquery_deprecation
  rã  z+DeprecationTest.test_splitquery_deprecationc                 C   rÛ  )Nr   zTurllib.parse.splittag() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r…  r.   rÞ  rß  rà  rC   rC   rD   Útest_splittag_deprecation  rã  z)DeprecationTest.test_splittag_deprecationc                 C   rÛ  )Nr   zUurllib.parse.splitattr() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rÜ  rÝ  r+   r,   r‚  r.   rÞ  rß  rà  rC   rC   rD   Útest_splitattr_deprecation  rã  z*DeprecationTest.test_splitattr_deprecationc                 C   rÛ  )Nr   zWurllib.parse.splitvalue() is deprecated as of 3.8, use urllib.parse.parse_qsl() instead)rÜ  rÝ  r+   r,   r~  r.   rÞ  rß  rà  rC   rC   rD   Útest_splitvalue_deprecation  rã  z+DeprecationTest.test_splitvalue_deprecationc                 C   rÛ  )Nr   z/urllib.parse.to_bytes() is deprecated as of 3.8)rÜ  rÝ  r+   r,   r€  r.   rÞ  rß  rà  rC   rC   rD   Útest_to_bytes_deprecation&  rã  z)DeprecationTest.test_to_bytes_deprecationN)r`  ra  rb  râ  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rC   rC   rC   rD   rÚ  Þ  s    rÚ  Ú__main__)rž  r—  ZunittestÚurllib.parser+   rÎ   rÜ   rà   rä   rP   rX   ZTestCaser)   r¡  rÚ  r`  ÚmainrC   rC   rC   rD   Ú<module>   s’    



èè         
Oÿ