a
    ¼3je ã                   @   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                   @   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   úN/www/server/python_manager/versions/3.9.10/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.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 ]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   sÌ   dD ]Â}t jjt jjfD ]¬}dD ]¢}| j|||d~ d| }d| }|r^| d¡}| d¡}||ƒ}|  |j|¡ |  t	¡ |j
 W d   ƒ n1 sš0    Y  W d   ƒ q 1 s¸0    Y  q qqd S )N)FT)rÛ   z1.5z-1Z0x10)Úbytesr,   r:   zwww.example.net:zhttp://rl   )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_anyschemeõ  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_scheme
  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_fragments  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_rejected:  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.   Údecodero   )
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ÚParseResultr.  )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©r,  Úkeyõ   ÅÃ©õ   key=Å%C3%A9úutf-8rl   õ   Åï¿½ï¿½õ
   key=Å%E9-õ   Åï¿½-Úignore©r,  r-  õ   Å-)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 )Nr3  r4  r5  )r6  r7  r8  r9  rl   )r6  r:  r;  )r6  r<  r=  r>  )r6  r?  )r+   r,   rQ   r.   r@  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 )NrH  rI  r!   r	   r#   r   r   rJ  r   r   rK  rL  r%   r   r'   r   r   rM  r   r   rN  rO  rP  rH   )r  r+   r,   rQ   r.   )r=   Zparse_qsl_semicolon_casesrR   rS   rA   rR  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__rW  rC   rC   rC   rD   ÚTrivialÅ  s   r[  r   z	a=trivial)r+   r,   r  r.   )r=   rA   r[  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€   )Úsafer]  za=some%20value/another)r+   r,   r  r.   Úquoter@  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.   r@  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.   r@  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   foor9  r5  r'  )r-  )rç   r  r+   r,   r_  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=   Úmessagerg  rh  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-516rf  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=   rg  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,   rm  Ú_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>   rm  Ú	splithostÚto_bytesÚ	splittypeÚsplitpasswdÚ
splitqueryÚ	splitportÚsplittagÚ	splitattrÚ	splituserÚ
ResultBaseÚ
splitnportÚ
splitvalueÚclear_cacheÚunwraprþ   rY  zurllib.parse)Údirr+   r,   Ú
startswithr"  ÚappendZassertCountEqualÚ__all__)r=   rŒ   ZundocumentedÚnameÚobjectrC   rC   rD   Útest_all  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>/  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   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Ú
maxunicodero  r+   r,   r;   rç   rè   r‰  r  rŠ  )r=   Zdenorm_charsr/   r0   rŒ  r>   rC   r‘  rD   Útest_urlsplit_normalization*  s"    ÿ*z,UrlParseTestCase.test_urlsplit_normalizationN)0rX  rY  rZ  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&  r.  r2  rA  rB  rG  rS  rT  r\  r`  rb  rd  re  ri  rk  rl  rr  r‡  r˜  rC   rC   rC   rD   r)   G   sZ   3	
#&0-972	]%)!


r)   c                   @   sl   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S )ÚUtility_Testsc                 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=   ru  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=   rs  rC   rC   rD   Útest_splithostS  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_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=   rv  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=   rx  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=   rw  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=   ry  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=   rz  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ç   ÚUnicodeErrorr@  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)rX  rY  rZ  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   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,   ru  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,   rs  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,   rv  r.   rÓ  rÔ  rÕ  rC   rC   rD   Útest_splitpasswd_deprecationõ  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,   rx  r.   rÓ  rÔ  rÕ  rC   rC   rD   Útest_splitport_deprecationü  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,   rw  r.   rÓ  rÔ  rÕ  rC   rC   rD   Útest_splitquery_deprecation
  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,   ry  r.   rÓ  rÔ  rÕ  rC   rC   rD   Útest_splittag_deprecation  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,   rz  r.   rÓ  rÔ  rÕ  rC   rC   rD   Útest_splitattr_deprecation  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_deprecation  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,   rt  r.   rÓ  rÔ  rÕ  rC   rC   rD   Útest_to_bytes_deprecation&  s
    *ÿz)DeprecationTest.test_to_bytes_deprecationN)rX  rY  rZ  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Ð  rX  ÚmainrC   rC   rC   rD   Ú<module>   sŽ   



èè         O
