a
     Rîhg* ã                   @   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ddd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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dFdG„ Z%dHdI„ Z&dJdK„ Z'dLdM„ Z(dNdO„ Z)dPdQ„ Z*dRdS„ Z+dTdU„ Z,dVdW„ Z-dXdY„ Z.dZd[„ Z/d\d]„ Z0d^d_„ Z1d`da„ Z2dbdc„ Z3dS )eÚUrlParseTestCaseNc           	      C   sl  |d u r|}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Úurl2ÚresultÚtZresult2Zresult3© rD   ú:/opt/python-3.9.24/usr/lib/python3.9/test/test_urlparse.pyÚcheckRoundtripsI   sZ    ÿÿ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ÚvrD   rD   rE   Ú
<listcomp>‚   r   z-UrlParseTestCase.test_qsl.<locals>.<listcomp>F)Úparse_qsl_test_casesr+   r,   Ú	parse_qslr.   )r=   ÚorigÚexpectrB   Úexpect_without_blanksrD   rD   rE   Ú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 )NTrG   rI   c                    s&   i | ]}t ˆ | d  ƒr|ˆ | “qS )r   rK   rM   ©rT   rD   rE   Ú
<dictcomp>‹   s   ÿz,UrlParseTestCase.test_qs.<locals>.<dictcomp>F)Úparse_qs_test_casesr+   r,   Úparse_qsr.   )r=   rS   rB   rU   rD   rW   rE   Útest_qs‡   s    
ÿÿzUrlParseTestCase.test_qsc                    sH   g d¢}dd„ ‰ ‡ fdd„|D ƒ}|| D ]\}}}|   |||¡ q*d S )N))úpath/to/file)r   r   r\   r   r   r   )r   r   r\   r   r   )ú/path/to/file©r   r   r]   r   r   r   ©r   r   r]   r   r   )ú//path/to/file)r   r1   ú/to/filer   r   r   )r   r1   ra   r   r   )z////path/to/file)r   r   r`   r   r   r   )r   r   r`   r   r   )zscheme:path/to/file)r/   r   r\   r   r   r   )r/   r   r\   r   r   )úscheme:/path/to/file©r/   r   r]   r   r   r   ©r/   r   r]   r   r   )zscheme://path/to/file)r/   r1   ra   r   r   r   )r/   r1   ra   r   r   )zscheme:////path/to/file)r/   r   r`   r   r   r   )r/   r   r`   r   r   )úfile:///tmp/junk.txt©Úfiler   ú/tmp/junk.txtr   r   r   ©rg   r   rh   r   r   )zfile:////tmp/junk.txt)rg   r   ú//tmp/junk.txtr   r   r   )rg   r   rj   r   r   )zfile://///tmp/junk.txt)rg   r   ú///tmp/junk.txtr   r   r   )rg   r   rk   r   r   )zimap://mail.python.org/mbox1)Úimapúmail.python.orgú/mbox1r   r   r   )rl   rm   rn   r   r   )z1mms://wms.sys.hinet.net/cts/Drama/09006251100.asf)Úmmsúwms.sys.hinet.netú/cts/Drama/09006251100.asfr   r   r   )ro   rp   rq   r   r   )znfs://server/path/to/file.txt)ÚnfsÚserverú/path/to/file.txtr   r   r   )rr   rs   rt   r   r   )z0svn+ssh://svn.zope.org/repos/main/ZConfig/trunk/)úsvn+sshúsvn.zope.orgú/repos/main/ZConfig/trunk/r   r   r   )ru   rv   rw   r   r   )z)git+ssh://git@github.com/user/project.git)úgit+sshúgit@github.comú/user/project.gitr   r   r   )rx   ry   rz   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 ©r{   N©Úencode©rN   ÚxrD   rD   rE   Ú	<genexpr>Ì   r   zDUrlParseTestCase.test_roundtrips.<locals>._encode.<locals>.<genexpr>rJ   c                 s   s   | ]}|  d ¡V  qdS r|   r}   r   rD   rD   rE   r   Í   r   é   ©r~   Útuple©rC   rD   rD   rE   Ú_encodeÊ   s    þz1UrlParseTestCase.test_roundtrips.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rD   rD   r   ©r†   rD   rE   rP   Î   r   z4UrlParseTestCase.test_roundtrips.<locals>.<listcomp>©rF   )r=   Ú	str_casesÚbytes_casesr>   r?   r@   rD   r‡   rE   Útest_roundtrips‘   s
    8z UrlParseTestCase.test_roundtripsc                    sL   g d¢}dd„ ‰ ‡ fdd„|D ƒ}|| D ]\}}}}|   ||||¡ q*d S )N))z///path/to/filer]   r^   r_   )zscheme:///path/to/filerb   rc   rd   )zfile:/tmp/junk.txtre   rf   ri   )zhttp:/tmp/junk.txtzhttp:///tmp/junk.txt)Úhttpr   rh   r   r   r   )rŒ   r   rh   r   r   )zhttps:/tmp/junk.txtzhttps:///tmp/junk.txt)Úhttpsr   rh   r   r   r   )r   r   rh   r   r   c                 S   sD   | d   d¡| d   d¡tdd„ | d D ƒƒtdd„ | d D ƒƒfS )	Nr   r{   rJ   c                 s   s   | ]}|  d ¡V  qdS r|   r}   r   rD   rD   rE   r   ì   r   zRUrlParseTestCase.test_roundtrips_normalization.<locals>._encode.<locals>.<genexpr>r‚   c                 s   s   | ]}|  d ¡V  qdS r|   r}   r   rD   rD   rE   r   í   r   é   rƒ   r…   rD   rD   rE   r†   é   s
    ýz?UrlParseTestCase.test_roundtrips_normalization.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rD   rD   r   r‡   rD   rE   rP   î   r   zBUrlParseTestCase.test_roundtrips_normalization.<locals>.<listcomp>rˆ   )r=   r‰   rŠ   r>   rA   r?   r@   rD   r‡   rE   Útest_roundtrips_normalizationÒ   s
    z.UrlParseTestCase.test_roundtrips_normalizationc                    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   r{   c                 s   s   | ]}|  d ¡V  qdS r|   r}   r   rD   rD   rE   r   	  r   zIUrlParseTestCase.test_http_roundtrips.<locals>._encode.<locals>.<genexpr>rJ   c                 s   s   | ]}|  d ¡V  qdS r|   r}   r   rD   rD   rE   r   
  r   r‚   rƒ   r…   rD   rD   rE   r†     s    þz6UrlParseTestCase.test_http_roundtrips.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rD   rD   r   r‡   rD   rE   rP     r   z9UrlParseTestCase.test_http_roundtrips.<locals>.<listcomp>)rŒ   r   )ó   httpó   httpsrˆ   )r=   r‰   rŠ   Zstr_schemesZbytes_schemesZ	str_testsZbytes_testsZschemesZ
test_casesr/   r>   r?   r@   rD   r‡   rE   Ú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 ©r{   r}   r   rD   rD   rE   rP     s   z.UrlParseTestCase.checkJoin.<locals>.<listcomp>)r.   r+   r,   Úurljoin)	r=   ÚbaseZrelurlÚexpectedZstr_componentsZbytes_componentsZbasebZrelurlbZ	expectedbrD   rD   rE   Ú	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š   r}   r   rD   rD   rE   rP   !  r   z7UrlParseTestCase.test_unparse_parse.<locals>.<listcomp>)r.   r+   r,   r<   r;   r5   r-   )r=   r‰   rŠ   ÚurD   rD   rE   Ú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=   rD   rD   rE   Ú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Ø   rD   rD   rE   Útest_RFC2368V  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Ø   rD   rD   rE   Ú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Ø   rD   rD   rE   Útest_RFC3986ˆ  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Ø   rD   rD   rE   Ú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   r{   rJ   r‚   r}   r…   rD   rD   rE   r†     s    z.UrlParseTestCase.test_RFC2732.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rD   rD   r   r‡   rD   rE   rP     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š   r}   r   rD   rD   rE   rP   &  r   )r+   r,   r-   r.   r9   r:   ÚassertRaisesÚ
ValueError)r=   r‰   rŠ   r>   r9   r:   Z	urlparsedZinvalid_urlrD   r‡   rE   Ú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 r|   r}   r   rD   rD   rE   r   8  r   zCUrlParseTestCase.test_urldefrag.<locals>._encode.<locals>.<genexpr>)Útyper…   rD   rD   rE   r†   7  s    z0UrlParseTestCase.test_urldefrag.<locals>._encodec                    s   g | ]}ˆ |ƒ‘qS rD   rD   r   r‡   rD   rE   rP   9  r   z3UrlParseTestCase.test_urldefrag.<locals>.<listcomp>)	r×   rå   r+   r,   Ú	urldefragr.   r6   r>   r4   )r=   r‰   rŠ   r>   Údefragrü   rB   rD   r‡   rE   Ú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”   rD   rD   rE   Útest_urlsplit_scoped_IPv6A  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”   rD   rD   rE   Útest_urlsplit_attributesJ  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
tpr‚   ©r/   )r+   r,   r;   r.   r/   r0   r1   r3   r4   r7   r8   r9   r:   r6   Úrange)r=   r>   r”   r/   Ú_rD   rD   rE   Ú!test_urlsplit_remove_unsafe_bytes§  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/r‚   r  zhttps://www.python.org/)Úbytesr  Údecoder+   r,   r;   r.   r/   r0   r1   r3   r4   r7   r8   r9   r:   r6   r~   r<   )r=   ZnoiseZbase_urlr>   r”   Zquery_spaces_urlr/   r  rD   rD   rE   Ú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“   r{   N)r+   r,   r;   r-   ÚsubTestr~   r.   r0   rø   rù   r:   )r=   r  r,   r:   r0   r>   r”   rD   rD   rE   Ú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”   rD   rD   rE   Ú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Ø   rD   rD   rE   Ú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Ø   rD   rD   rE   Útest_withoutschemeG  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Ø   rD   rD   rE   Útest_portseparatorZ  s     ÿÿz#UrlParseTestCase.test_portseparatorc                 C   s   |   ttjjd¡ d S )Nrì   )rø   Ú	TypeErrorr+   r,   Ú	urlencoderØ   rD   rD   rE   Útest_usingsysl  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-newschemer4  r5  r   r   r   z*x-newscheme://foo.com/stuff?query#fragment)r6  r4  r5  r   r3   r4   z!x-newscheme://foo.com/stuff?query)r6  r4  r5  r   r3   r   s   s3://foo.com/stuff)s   s3ó   foo.comó   /stuffr   r   r   s   x-newscheme://foo.com/stuff)ó   x-newschemer7  r8  r   r   r   s*   x-newscheme://foo.com/stuff?query#fragment)r9  r7  r8  r   ó   queryr  s!   x-newscheme://foo.com/stuff?query)r9  r7  r8  r   r:  r   rÛ   rØ   rD   rD   rE   Útest_anyschemep  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=   ÚfuncrB   rD   rD   rE   Ú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>  rB   rD   rD   rE   Ú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  r1  r+   r,   r-   r;   r5   r<   r›   rØ   rD   rD   rE   Ú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   r{   Ústrict)rL   Ú_fieldsÚ_encoded_counterpartÚassertIsÚ_decoded_counterpartr.   r   r~   )
r=   Zstr_typeZnum_argsZ
bytes_typeZstr_argsZ
bytes_argsZ
str_resultZbytes_resultÚencodingÚerrorsrD   rD   rE   Ú_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ÚParseResultrO  )r=   Zresult_typesZresult_typerD   rD   rE   Ú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©rM  Úkeyõ   ÅÃ©õ   key=Å%C3%A9r  r{   õ   Åï¿½ï¿½õ
   key=Å%E9-õ   Åï¿½-Úignore©rM  rN  õ   Å-)r+   r,   rZ   r.   ©r=   rB   rD   rD   rE   Ú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 )NrT  rU  rV  )rW  rX  rY  r  r{   )rW  rZ  r[  )rW  r\  r]  r^  )rW  r_  )r+   r,   rR   r.   r`  rD   rD   rE   Ú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,   rZ   ÚjoinrØ   rD   rD   rE   Ú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: ©Ú	separatorrI   )r"  r+   r,   rZ   r.   )r=   Zparse_qs_semicolon_casesrS   rT   rB   Úresult_bytesrD   rD   rE   Ú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  rI   )r"  r+   r,   rR   r.   )r=   Zparse_qsl_semicolon_casesrS   rT   rB   rr  rD   rD   rE   Ú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 )
NrJ   r‚   )rŽ   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trivialrD   rØ   rD   rD   rE   Ú__str__A  s    zBUrlParseTestCase.test_urlencode_sequences.<locals>.Trivial.__str__N)Ú__name__Ú
__module__Ú__qualname__rv  rD   rD   rD   rE   ÚTrivial@  s   rz  r   z	a=trivial)r+   r,   r2  r.   )r=   rB   rz  rD   rD   rE   Útest_urlencode_sequences9  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,   r2  r.   Úquoter`  rD   rD   rE   Útest_urlencode_quote_viaG  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ø   r1  r+   r,   Úquote_from_bytesr.   r`  rD   rD   rE   Útest_quote_from_bytesQ  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`  rD   rD   rE   Útest_unquote_to_bytesX  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  rV  rH  )rN  )rø   r1  r+   r,   r~  rØ   rD   rD   rE   Ú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Úp2rD   rD   rE   Útest_issue14072c  s    z UrlParseTestCase.test_issue14072c                 C   s
  |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd	¡ |   ttjjd
¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd¡ |   ttjjd ¡ |   ttjjd!¡ |   ttjjd"¡ |   ttjjd#¡ |   ttjjd$¡ |   ttjjd%¡ |   ttjjd&¡ |   ttjjd'¡ |   ttjjd(¡ |   ttjjd)¡ |   ttjjd*¡ |   ttjjd+¡ d S ),Nz&Scheme://user@[192.0.2.146]/Path?Queryz-Scheme://user@[important.com:8000]/Path?Queryz#Scheme://user@[v123r.IP]/Path?Queryz Scheme://user@[v12ae]/Path?QueryzScheme://user@[v.IP]/Path?Queryz Scheme://user@[v123.]/Path?QueryzScheme://user@[v]/Path?Queryz5Scheme://user@[0439:23af::2309::fae7:1234]/Path?QueryzJScheme://user@[0439:23af:2309::fae7:1234:2342:438e:192.0.2.146]/Path?QueryzScheme://user@]v6a.ip[/Pathzscheme://prefix.[v6a.ip]zscheme://[v6a.ip].suffixzscheme://prefix.[v6a.ip]/zscheme://[v6a.ip].suffix/zscheme://prefix.[v6a.ip]?zscheme://[v6a.ip].suffix?zscheme://prefix.[::1]zscheme://[::1].suffixzscheme://prefix.[::1]/zscheme://[::1].suffix/zscheme://prefix.[::1]?zscheme://[::1].suffix?zscheme://prefix.[::1]:azscheme://[::1].suffix:azscheme://prefix.[::1]:a1zscheme://[::1].suffix:a1zscheme://prefix.[::1]:1azscheme://[::1].suffix:1azscheme://prefix.[::1]:zscheme://[::1].suffix:/zscheme://prefix.[::1]:?zscheme://user@prefix.[v6a.ip]zscheme://user@[v6a.ip].suffixzscheme://[v6a.ipzscheme://v6a.ip]zscheme://]v6a.ip[zscheme://]v6a.ipzscheme://v6a.ip[zscheme://prefix.[v6a.ipzscheme://v6a.ip].suffixzscheme://prefix]v6a.ip[suffixzscheme://prefix]v6a.ipzscheme://v6a.ip[suffix)rø   rù   r+   r,   r;   rØ   rD   rD   rE   Útest_invalid_bracketed_hostsr  sV    z-UrlParseTestCase.test_invalid_bracketed_hostsc                 C   sÂ   t j d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ t j d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd ¡ t j d¡}|  |jd	¡ |  |jd¡ |  |jd¡ d S )
Nz&scheme://user@[v6a.ip]:1234/path?queryzv6a.ipÚuserú/pathiÒ  z4scheme://user@[0439:23af:2309::fae7%test]/path?queryz0439:23af:2309::fae7%testzEscheme://user@[0439:23af:2309::fae7:1234:192.0.2.146%test]/path?queryz*0439:23af:2309::fae7:1234:192.0.2.146%test)	r+   r,   r;   r.   r9   r7   r1   r:   rK  )r=   r†  r‡  Zp3rD   rD   rE   Útest_splitting_bracketed_hostsŸ  s    z/UrlParseTestCase.test_splitting_bracketed_hostsc                 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=   Úmessager†  r‡  rD   rD   rE   Ú!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-516r…  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=   r†  rD   rD   rE   Ú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=   ÚquoterrD   rD   rE   Ú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>   Úto_bytesÚ	splituserÚ
splitqueryÚsplitpasswdÚsplittagÚ
ResultBaseÚ	splittypeÚ	splithostr  Ú
splitvalueÚclear_cacheÚ	splitportÚunwrapÚ
splitnportÚ	splitattrr  rx  zurllib.parse)Údirr+   r,   Ú
startswithrC  ÚappendZassertCountEqualÚ__all__)r=   r   ZundocumentedÚnameÚobjectrD   rD   rE   Ú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©rN   ÚcrD   rD   rE   Ú	<setcomp>ç  r   z?UrlParseTestCase.test_urlsplit_normalization.<locals>.<setcomp>c                    s.   g | ]&}ˆ t t |¡ ¡ ƒ@ r|ˆvr|‘qS rD   )ÚsetÚunicodedataÚdecompositionr@   r®  ©Z	hex_charsZillegal_charsrD   rE   rP   è  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>   rD   r´  rE   Útest_urlsplit_normalizationâ  s"    ÿ*z,UrlParseTestCase.test_urlsplit_normalization)N)4rw  rx  ry  rF   rV   r[   r‹   r   r™   rž   r¢   rÙ   rÜ   ræ   rê   rî   rú   r  r  r  r  r!  r#  r$  r%  r-  r0  r3  r;  r?  rF  rG  rO  rS  ra  rb  rg  rs  rt  r{  r  r  rƒ  r„  rˆ  r‰  rŒ  rŽ  r  r•  rª  r»  rD   rD   rD   rE   r)   G   sb   
5	
A &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œ  rD   rD   rE   Ú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  rD   rD   rE   Ú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—  rD   rD   rE   Ú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)rŠ  Ú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™  rD   rD   rE   Útest_splitpasswd5  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   rD   rD   rE   Útest_splitportG  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¢  rD   rD   rE   Útest_splitnportR  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˜  rD   rD   rE   Ú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š  rD   rD   rE   Útest_splittagj  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=value2r‹  zattr1=value1zattr2=value2z/path;r   z;attr1=value1;attr2=value2)r+   r,   Ú
_splitattrr.   )r=   r£  rD   rD   rE   Útest_splitattrv  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ž  rD   rD   rE   Ú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`  rD   rD   rE   Ú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>   rD   rD   rE   Útest_unwrap  s    zUtility_Tests.test_unwrapN)rw  rx  ry  Ú__doc__rÀ  rÇ  rË  rÎ  r×  rÛ  rà  rå  rç  rë  rî  rð  rD   rD   rD   rE   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=   ÚcmrD   rD   rE   Ú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÷  rD   rD   rE   Ú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÷  rD   rD   rE   Ú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÷  rD   rD   rE   Ú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,   r   r.   rõ  rö  r÷  rD   rD   rE   Ú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÷  rD   rD   rE   Ú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÷  rD   rD   rE   Ú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,   rš  r.   rõ  rö  r÷  rD   rD   rE   Ú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,   r£  r.   rõ  rö  r÷  rD   rD   rE   Ú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÷  rD   rD   rE   Ú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,   r–  r.   rõ  rö  r÷  rD   rD   rE   Útest_to_bytes_deprecationÞ  s
    *ÿz)DeprecationTest.test_to_bytes_deprecationN)rw  rx  ry  rù  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  rD   rD   rD   rE   rò  –  s   rò  Ú__main__)r¹  r²  ZunittestÚurllib.parser+   r×   rå   ré   rí   rQ   rY   ZTestCaser)   r¼  rò  rw  ÚmainrD   rD   rD   rE   Ú<module>   s   



èè         A O
