a
    äzeA ã                   @   sH  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rDe ¡  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                   @   s|  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Z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[d\„ Z0d]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   ú(/usr/lib/python3.9/test/test_urlparse.pyÚcheckRoundtripsI   sV    ÿÿz UrlParseTestCase.checkRoundtripsc                 C   sd   t D ]Z\}}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>€   r   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   s8   | d   d¡tdd„ | d D ƒƒtdd„ | d D ƒƒfS )Nr   Úasciic                 s   s   | ]}|  d ¡V  qdS ©rl   N©Úencode©rM   ÚxrC   rC   rD   Ú	<genexpr>¬   r   zDUrlParseTestCase.test_roundtrips.<locals>._encode.<locals>.<genexpr>rI   c                 s   s   | ]}|  d ¡V  qdS rm   rn   rp   rC   rC   rD   rr   ­   r   é   ©ro   Útuple©rB   rC   rC   rD   Ú_encodeª   s    þz1UrlParseTestCase.test_roundtrips.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rC   rC   rp   ©rw   rC   rD   rO   ®   r   z4UrlParseTestCase.test_roundtrips.<locals>.<listcomp>©rE   )r=   Ú	str_casesÚbytes_casesr>   r?   r@   rC   rx   rD   Útest_roundtrips   s
    z UrlParseTestCase.test_roundtripsc                    s”   g d¢}dd„ ‰ ‡ fdd„|D ƒ}d}d}||f}||f}||fD ]L\}}|D ]>}	|D ]4\}
}}|	|
 }
|	f| }|	f| }|   |
||¡ qVqNqBd 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   s8   | d   d¡tdd„ | d D ƒƒtdd„ | d D ƒƒfS )Nr   rl   c                 s   s   | ]}|  d ¡V  qdS rm   rn   rp   rC   rC   rD   rr   É   r   zIUrlParseTestCase.test_http_roundtrips.<locals>._encode.<locals>.<genexpr>rI   c                 s   s   | ]}|  d ¡V  qdS rm   rn   rp   rC   rC   rD   rr   Ê   r   rs   rt   rv   rC   rC   rD   rw   Ç   s    þz6UrlParseTestCase.test_http_roundtrips.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rC   rC   rp   rx   rC   rD   rO   Ë   r   z9UrlParseTestCase.test_http_roundtrips.<locals>.<listcomp>)ÚhttpÚhttps)ó   httpó   httpsry   )r=   rz   r{   Zstr_schemesZbytes_schemesZ	str_testsZbytes_testsZschemesZ
test_casesr/   r>   r?   r@   rC   rx   rD   Útest_http_roundtrips²   s    

z%UrlParseTestCase.test_http_roundtripsc           	      C   sR   |||f}|   tj ||¡|¡ dd„ |D ƒ }\}}}|   tj ||¡|¡ d S )Nc                 S   s   g | ]}|  d ¡‘qS ©rl   rn   rp   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   s   g | ]}|  d ¡‘qS r‰   rn   rp   rC   rC   rD   rO   á   r   z7UrlParseTestCase.test_unparse_parse.<locals>.<listcomp>)r.   r+   r,   r<   r;   r5   r-   )r=   rz   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|¡ qxd 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   rl   rI   rs   rn   rv   rC   rC   rD   rw   Ù  s    z.UrlParseTestCase.test_RFC2732.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rC   rC   rp   rx   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   s   g | ]}|  d ¡‘qS r‰   rn   rp   rC   rC   rD   rO   æ  r   )r+   r,   r-   r.   r9   r:   ÚassertRaisesÚ
ValueError)r=   rz   r{   r>   r9   r:   Z	urlparsedZinvalid_urlrC   rx   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 ]R\}}}tj |¡}|  | ¡ |¡ |  |||f¡ |  |j|¡ |  |j|¡ qFd 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   s   | ]}|  d ¡V  qdS rm   rn   rp   rC   rC   rD   rr   ø  r   zCUrlParseTestCase.test_urldefrag.<locals>._encode.<locals>.<genexpr>)Útyperv   rC   rC   rD   rw   ÷  s    z0UrlParseTestCase.test_urldefrag.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rC   rC   rp   rx   rC   rD   rO   ù  r   z3UrlParseTestCase.test_urldefrag.<locals>.<listcomp>)	rÆ   rÔ   r+   r,   Ú	urldefragr.   r6   r>   r4   )r=   rz   r{   r>   Údefragrë   rA   rC   rx   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   ƒ n1 s0    Y  d S )#NzHTTP://WWW.PYTHON.ORG/doc/#fragr„   zWWW.PYTHON.ORGú/doc/r   rë   r}   é   ú7http://User:Pass@www.python.org:080/doc/?query=yes#fragúUser:Pass@www.python.org:080ú	query=yesÚUserÚ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.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)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 ]4}t jj||d}|  |jd¡ |  | ¡ d¡ qLd 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
tprs   ©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   sV  t t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¡¡ d}tj | d¡| ¡}|  |jd¡ |  |jd¡ |  |j	d¡ |  |j
d¡ |  |jd¡ |  | ¡ |¡ tj d¡}|  tj |¡d¡ d}| d¡d | d¡ }tdƒD ]4}tjj||d}|  |jd¡ |  | ¡ d¡ qd S ) Nr   é!   rö   úutf-8r„   r÷   rô   rø   rë   rù   rú   r}   rû   r†   r   rý   r  rþ   r  r  rÿ   z)https://www.python.org:88/doc/?query=    r…   zwww.python.org:88z
query=    éX   zwww.pypi.org z//www.python.org/rs   r  zhttps://www.python.org/)Úbytesr  Údecoder+   r,   r;   r.   r/   r0   r1   r3   r4   r7   r8   r9   r:   r6   ro   r<   )r=   ZnoiseZbase_urlr>   r   Zquery_spaces_urlr/   r	  rC   rC   rD   Útest_urlsplit_strip_urlŒ  sT    z(UrlParseTestCase.test_urlsplit_strip_urlc                 C   sÐ   dD ]Æ}t jjt jjfD ]°}dD ]¦}| j|||d‚ d| }d| d }|rb| d¡}| d¡}||ƒ}|  |j|¡ |  t	¡ |j
 W d  ƒ n1 sž0    Y  W d  ƒ q 1 s¼0    Y  q qqdS )	z Check handling of invalid ports.)FT)rÛ   z1.5z-1Z0x10)r  r,   r:   zwww.example.net:zhttp://r€   rl   N)r+   r,   r;   r-   ÚsubTestro   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_anyscheme0  s0    ÿÿÿÿÿÿÿÿzUrlParseTestCase.test_anyschemec              	   C   sî   t jjt jjfD ]Ø}| 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 sÞ0    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_schemeE  s    

z$UrlParseTestCase.test_default_schemec              
   C   s  d}|D ]
\}}}t jjt jjfD ]î}|dkr@|t jju r@d}| j||d² ||dd}|  |jd¡ |  t||ƒ 	d| ¡¡ |  ||ddƒjd¡ ||d	d}|  |j|¡ |  
t||ƒ 	|¡¡ |  ||dd	ƒj|¡ |  ||ƒj|¡ W d   ƒ q$1 s0    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_fragmentsT  s*    ÿÿÿz%UrlParseTestCase.test_parse_fragmentsc                 C   sL  |   td¡ tj dd¡ W d   ƒ n1 s00    Y  |   td¡ tj dd¡ W d   ƒ n1 sj0    Y  |   td¡ tj dd¡ W d   ƒ n1 s¤0    Y  |   td¡ tj dd¡ W d   ƒ n1 sÞ0    Y  |   td¡ tj d¡ W d   ƒ n1 s0    Y  |   td¡ tj d¡ W d   ƒ n1 sR0    Y  |   td¡ tj d¡ W d   ƒ n1 sŒ0    Y  |   td¡ tj d	¡ W d   ƒ n1 sÆ0    Y  |   td¡ tj d
d¡ W d   ƒ n1 s0    Y  |   td¡ tj dd
¡ W d   ƒ n1 s>0    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_rejectedu  s(    ,,,,,,,,.z*UrlParseTestCase.test_mixed_types_rejectedc           
      C   s:  t |jƒ}|j}|  |j|¡ d| }d| }||Ž }||Ž }d}d}	|  ||¡ |  | ¡ |¡ |  | ¡ |¡ |  | |¡|¡ |  | |¡|¡ |  | ||	¡|¡ |  | ||	¡|¡ |  ||¡ |  | ¡ |¡ |  | ¡ |¡ |  | |¡|¡ |  | |¡|¡ |  | ||	¡|¡ |  | ||	¡|¡ d S )N)r   )r   rl   Ústrict)rK   Ú_fieldsÚ_encoded_counterpartZassertIsÚ_decoded_counterpartr.   r  ro   )
r=   Zstr_typeZnum_argsZ
bytes_typeZstr_argsZ
bytes_argsZ
str_resultZbytes_resultÚencodingÚerrorsrC   rC   rD   Ú_check_result_type  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ÚParseResultr=  )r=   Zresult_typesZresult_typerC   rC   rD   Útest_result_pairs¦  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©r;  Úkeyõ   ÅÃ©õ   key=Å%C3%A9r  rl   õ   Åï¿½ï¿½õ
   key=Å%E9-õ   Åï¿½-Úignore©r;  r<  õ   Å-)r+   r,   rY   r.   ©r=   rA   rC   rC   rD   Útest_parse_qs_encoding°  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 )NrB  rC  rD  )rE  rF  rG  r  rl   )rE  rH  rI  )rE  rJ  rK  rL  )rE  rM  )r+   r,   rQ   r.   rN  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<0    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 ]‚\}}|   d|›d|›¡T tjj|dd}|  ||d| ¡ tjj|dd}|  ||d| ¡ W d   ƒ qt1 sì0    Y  qtd 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 ]‚\}}|   d|›d|›¡T tjj|dd}|  ||d| ¡ tjj|dd}|  ||d| ¡ W d   ƒ qX1 sÐ0    Y  qXd S )NrV  rW  r!   r	   r#   r   r   rX  r   r   rY  rZ  r%   r   r'   r   r   r[  r   r   r\  r]  r^  rH   )r  r+   r,   rQ   r.   )r=   Zparse_qsl_semicolon_casesrR   rS   rA   r`  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   rs   )é   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__re  rC   rC   rC   rD   ÚTrivial   s   ri  r   z	a=trivial)r+   r,   r!  r.   )r=   rA   ri  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€   )Úsaferk  za=some%20value/another)r+   r,   r!  r.   ÚquoterN  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.   rN  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.   rN  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   foor  rD  r7  )r<  )rç   r   r+   r,   rm  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 s80    Y  t j d¡}|  t|¡ |j W d   ƒ n1 sv0    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=   Úmessageru  rv  rC   rC   rD   Ú!test_port_casting_failure_message2  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-516rt  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=   ru  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,   r{  Ú_ALWAYS_SAFEÚassertInÚrepr)r=   ÚquoterrC   rC   rD   Útest_Quoter_reprQ  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>   Ú	splituserÚ
splitqueryÚ	splitattrÚ	splitportÚ	splittypeÚ
splitvalueÚ
ResultBaseÚsplitpasswdÚ	splithostÚclear_cacheÚto_bytesÚsplittagÚunwrapr{  Ú
splitnportr	  rg  zurllib.parse)Údirr+   r,   Ú
startswithr2  ÚappendZassertCountEqualÚ__all__)r=   rŒ   ZundocumentedÚnameÚobjectrC   rC   rD   Útest_allU  s    zUrlParseTestCase.test_allc                    s2  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 s„0    Y  dD ]š}dD ]}|D ]†}d || |¡¡}| j|d t|ƒ¡dF |  	t
¡ tj |¡ W d   ƒ n1 sþ0    Y  W d   ƒ q¢1 s0    Y  q¢qšq’d S )Nz/:#?@c                 S   s   h | ]}d   t|ƒ¡’qS )ú{:04X})ÚformatÚord©rM   ÚcrC   rC   rD   Ú	<setcomp>j  r   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   k  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Ú
maxunicoder}  r+   r,   r;   rç   rè   r—  r  r˜  )r=   Zdenorm_charsr/   r0   rš  r>   rC   rŸ  rD   Útest_urlsplit_normalizatione  s"    ÿ*z,UrlParseTestCase.test_urlsplit_normalizationN)1rf  rg  rh  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.  r5  r6  r=  rA  rO  rP  rU  ra  rb  rj  rn  rp  rr  rs  rw  ry  rz  r€  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   s\   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_splittype†  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_splithostŽ  s>    
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzUtility_Tests.test_splithostc                 C   s\   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ d S )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_splituser«  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¼  r  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   s\   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ d S )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   s\   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ d S )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ç   ÚUnicodeErrorrN  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)rf  rg  rh  Ú__doc__r«  r²  r¶  rº  rÃ  rÇ  rÌ  rÑ  rÓ  r×  rÚ  rÜ  rC   rC   rC   rD   r§  ‚  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   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    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  s
    *ÿz*DeprecationTest.test_splittype_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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"  s
    *ÿz*DeprecationTest.test_splithost_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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)  s
    *ÿz*DeprecationTest.test_splituser_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecation0  s
    *ÿz,DeprecationTest.test_splitpasswd_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecation7  s
    *ÿz*DeprecationTest.test_splitport_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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>  s
    *ÿz+DeprecationTest.test_splitnport_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecationE  s
    *ÿz+DeprecationTest.test_splitquery_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecationL  s
    *ÿz)DeprecationTest.test_splittag_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecationS  s
    *ÿz*DeprecationTest.test_splitattr_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecationZ  s
    *ÿz+DeprecationTest.test_splitvalue_deprecationc                 C   sL   |   t¡}tj d¡ W d   ƒ n1 s,0    Y  |  t|jƒd¡ d S )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_deprecationa  s
    *ÿz)DeprecationTest.test_to_bytes_deprecationN)rf  rg  rh  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Þ  rf  ÚmainrC   rC   rC   rD   Ú<module>   sŽ   



èè        C O
