o
    IXîhf+ ã                   @   sL  d dl Z d dlZd dlZd dlZdZdZdZdZdg fdg fdg fdd	gfd
dgfddgfddgfddgfdddgfdddgfdg fdg fdg fddgfddgfddgfd dgfd!d"gfd#d$d%gfd&d'd(gfd)d*gfd+d,gfd-d.gfd/d0gfgZ	di fdi fdi fdddgifd
ddgifdddgifdddgifddd1gifdd2gd3gdœfddd4d5gifdi fdi fdi fdddgifdddgifdddgifd ddgifd!dd6gifd#d7gd8gd"œfd&dd9d:gifd)d;d1gifd+dd<gifd-d=d6gifd/dd>gifgZ
G d?d@„ d@ejƒZG dAdB„ dBejƒZG dCdD„ dDejƒZedEkr$e ¡  dS dS )Fé    Núhttp://a/b/c/d;p?q#fúhttp://a/b/c/d;p?qúhttp://a/b/c/dÚ ú&z&&ú=)r   r   z=a)r   Úar   )r   r   za=z&a=b©r   Úbza=a+b&b=b+c©r   úa b©r
   úb cza=1&a=2©r   Ú1©r   Ú2ó    ó   &s   &&ó   =)r   r   s   =a)r   ó   ar   )r   r   s   a=s   &a=b©r   ó   bs   a=a+b&b=b+c©r   ó   a b©r   ó   b cs   a=1&a=2©r   ó   1©r   ó   2ú;a=b)ú;ar
   úa=a+b;b=b+c)r   ú	a b;b=b có   ;a=b)ó   ;ar   ó   a=a+b;b=b+c)r   ó	   a b;b=b cr
   r   r   r   r   r   r   r   r   r    r"   r$   r&   r(   c                   @   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.10.19/usr/lib/python3.10/test/test_urlparse.pyÚcheckRoundtripsI   sZ   ÿÿz UrlParseTestCase.checkRoundtripsc                 C   sd   t D ]-\}}tjj|dd}|  ||d| ¡ dd„ |D ƒ}tjj|dd}|  ||d| ¡ qd S )NT©Úkeep_blank_valuesúError parsing %rc                 S   s   g | ]
}t |d  ƒr|‘qS )é   ©Úlen©Ú.0ÚvrD   rD   rE   Ú
<listcomp>‚   s    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   ó8   | d   d¡tdd„ | d D ƒƒtdd„ | d D ƒƒfS )Nr   Úasciic                 s   ó    | ]}|  d ¡V  qdS ©r|   N©Úencode©rN   ÚxrD   rD   rE   Ú	<genexpr>Ì   ó   € zDUrlParseTestCase.test_roundtrips.<locals>._encode.<locals>.<genexpr>rJ   c                 s   r}   r~   r   r   rD   rD   rE   rƒ   Í   r„   é   ©r€   Útuple©rC   rD   rD   rE   Ú_encodeÊ   ó   þz1UrlParseTestCase.test_roundtrips.<locals>._encodec                    ó   g | ]}ˆ |ƒ‘qS rD   rD   r   ©r‰   rD   rE   rP   Î   ó    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   r}   r~   r   r   rD   rD   rE   rƒ   ì   r„   zRUrlParseTestCase.test_roundtrips_normalization.<locals>._encode.<locals>.<genexpr>r…   c                 s   r}   r~   r   r   rD   rD   rE   rƒ   í   r„   é   r†   rˆ   rD   rD   rE   r‰   é   s
   ýz?UrlParseTestCase.test_roundtrips_normalization.<locals>._encodec                    r‹   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 ]&\}}|D ]}	|D ]\}
}}|	|
 }
|	f| }|	f| }|   |
||¡ q+q'q!d S )N))z://www.python.org)úwww.python.orgr   r   r   r   )r–   r   r   r   )z://www.python.org#abc)r–   r   r   r   Úabc)r–   r   r   r—   )z://www.python.org?q=abc)r–   r   r   úq=abcr   )r–   r   r˜   r   )z://www.python.org/#abc)r–   ú/r   r   r—   )r–   r™   r   r—   )z://a/b/c/d;p?q#f)r   z/b/c/dÚpÚqÚf)r   z/b/c/d;pr›   rœ   c                 S   r{   )Nr   r|   c                 s   r}   r~   r   r   rD   rD   rE   rƒ   	  r„   zIUrlParseTestCase.test_http_roundtrips.<locals>._encode.<locals>.<genexpr>rJ   c                 s   r}   r~   r   r   rD   rD   rE   rƒ   
  r„   r…   r†   rˆ   rD   rD   rE   r‰     rŠ   z6UrlParseTestCase.test_http_roundtrips.<locals>._encodec                    r‹   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   ó   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   r    r¡   r   r   rD   rD   rE   rP   !  ó    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|¡ q<d S )N))z http://Test.python.org:5432/foo/útest.python.orgé8  )zhttp://12.34.56.78:5432/foo/ú12.34.56.78rø   )zhttp://[::1]:5432/foo/ú::1rø   )zhttp://[dead:beef::1]:5432/foo/údead:beef::1rø   )zhttp://[dead:beef::]:5432/foo/údead:beef::rø   )z:http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:5432/foo/ú'dead:beef:cafe:5417:affe:8fa3:deaf:feedrø   )z http://[::12.34.56.78]:5432/foo/ú::12.34.56.78rø   )z%http://[::ffff:12.34.56.78]:5432/foo/ú::ffff:12.34.56.78rø   )zhttp://Test.python.org/foo/r÷   N)zhttp://12.34.56.78/foo/rù   N)zhttp://[::1]/foo/rú   N)zhttp://[dead:beef::1]/foo/rû   N)zhttp://[dead:beef::]/foo/rü   N)z5http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/rý   N)zhttp://[::12.34.56.78]/foo/rþ   N)z http://[::ffff:12.34.56.78]/foo/rÿ   N)zhttp://Test.python.org:/foo/r÷   N)zhttp://12.34.56.78:/foo/rù   N)zhttp://[::1]:/foo/rú   N)zhttp://[dead:beef::1]:/foo/rû   N)zhttp://[dead:beef::]:/foo/rü   N)z6http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:/foo/rý   N)zhttp://[::12.34.56.78]:/foo/rþ   N)z!http://[::ffff:12.34.56.78]:/foo/rÿ   Nc                 S   s"   | d   d¡| d   d¡| d fS )Nr   r|   rJ   r…   r   rˆ   rD   rD   rE   r‰     s   "z.UrlParseTestCase.test_RFC2732.<locals>._encodec                    r‹   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   r    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 ])\}}}tj |¡}|  | ¡ |¡ |  |||f¡ |  |j|¡ |  |j|¡ q#d S )N)zhttp://python.org#fragúhttp://python.orgÚfrag)r  r  r   )zhttp://python.org/#fragúhttp://python.org/r  )r  r  r   )zhttp://python.org/?q#fragúhttp://python.org/?qr  )r  r  r   )zhttp://python.org/p#fragzhttp://python.org/pr  )úhttp://python.org/p?qr  r   r   rœ   r   c                 S   s   t | ƒdd„ | D ƒƒS )Nc                 s   r}   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                    r‹   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   ƒ d S 1 sw   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 ]}t jj||d}|  |jd¡ |  | ¡ d¡ q¦d S )NzQhttp	://www.python
.org	/java
script:	alert('msg
')/?query
=	something#frag
mentr’   r–   z/javascript:alert('msg')/zquery=somethingr4   zGhttp://www.python.org/javascript:alert('msg')/?query=something#fragmentsQ   http	://www.python
.org	/java
script:	alert('msg
')/?query
=	something#frag
mentr   r  s   /javascript:alert('msg')/s   query=somethingó   fragmentsG   http://www.python.org/javascript:alert('msg')/?query=something#fragmentzNhttp://www.python.org/java
script:	alert('msg
')/?query
=	something#frag
mentzht
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 ]}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Ì  sV   ýz(UrlParseTestCase.test_urlsplit_strip_urlc                 C   sò   dD ]t}t jjt jjfD ]i}dD ]d}| j|||dR d| }d| d }|rB| ¡ r:| ¡ r:| d¡}| d¡}n	 W d  ƒ q||ƒ}|  |j|¡ |  	t
¡ |j W d  ƒ n1 s`w   Y  W d  ƒ n1 sow   Y  qqqdS )	z Check handling of invalid ports.)FT)	rô   z1.5z-1Z0x10z-0Z1_1z 1z1 u   à¥¬)r'  r,   r:   zwww.example.net:zhttp://r™   r|   N)r+   r,   r;   r-   ÚsubTestÚisasciir€   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_noslashC  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   r2  r   r   r   s   //www.python.org:80)r   ó   www.python.org:80r   r   r   r   ó   http://www.python.org:80©r   r3  r   r   r   r   rã   rà   rD   rD   rE   Útest_withoutschemeJ  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   r7  r   r   r   zpath:80)r1   r   r7  r   r   r   ró   )r’   r   r   r   r   r   zhttps:)r“   r   r   r   r   r   r0  r1  s   http:80)r   r   ó   80r   r   r   s   https:80)rž   r   r8  r   r   r   s   path:80)r2  r   r8  r   r   r   s   http:)r   r   r   r   r   r   s   https:)rž   r   r   r   r   r   r4  r5  rã   rà   rD   rD   rE   Útest_portseparator]  s    ÿÿz#UrlParseTestCase.test_portseparatorc                 C   s   |   ttjjd¡ d S )Nrô   )r   Ú	TypeErrorr+   r,   Ú	urlencoderà   rD   rD   rE   Útest_usingsyso  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@  rA  r   r   r   s*   x-newscheme://foo.com/stuff?query#fragment)rB  r@  rA  r   ó   queryr  s!   x-newscheme://foo.com/stuff?query)rB  r@  rA  r   rC  r   rã   rà   rD   rD   rE   Útest_anyschemes  s0   ÿÿÿÿÿÿÿÿzUrlParseTestCase.test_anyschemec              	   C   sî   t jjt jjfD ]l}| j|d\ |ddƒ}|  |jd¡ |ddƒ}|  |jd¡ |  |ddƒjd¡ |  |ddd	jd¡ |  |d
dd	jd¡ |  |dƒjd¡ |  |d
ƒjd¡ |  |d
dƒjd¡ W d   ƒ n1 sow   Y  qd S )N)Úfunctionzhttp://example.net/Úftpr’   s   http://example.net/s   ftpr   r1   r   r2  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 ]v}|dkr|t jju rd}| j||dY ||dd}|  |jd¡ |  t||ƒ 	d| ¡¡ |  ||ddƒjd¡ ||d	d}|  |j|¡ |  
t||ƒ 	|¡¡ |  ||dd	ƒj|¡ |  ||ƒj|¡ W d   ƒ n1 s‚w   Y  qqd S )
N)
)z
http:#fragr1   r  )z//example.net#fragr1   r  )zindex.html#fragr1   r  )z	;a=b#fragr2   r  )z	?a=b#fragr3   r  )z#fragr1   r  )z	abc#@fragr1   ú@frag)z//abc#@fragr1   rI  )z//abc:80#@fragr1   rI  )z//abc#@frag:80r1   z@frag:80r2   r1   )r>   rE  F)Úallow_fragmentsr   ú#T)r+   r,   r-   r;   r*  r.   r4   Z
assertTrueÚgetattrÚendswithZassertFalse)r=   Ztestsr>   ÚattrZexpected_fragrG  rB   rD   rD   rE   Útest_parse_fragments—  s2   ÿÿÿó€ýÿz%UrlParseTestCase.test_parse_fragmentsc                 C   sD  |   td¡ tj dd¡ W d   ƒ n1 sw   Y  |   td¡ tj dd¡ W d   ƒ n1 s5w   Y  |   td¡ tj dd¡ W d   ƒ n1 sRw   Y  |   td¡ tj dd¡ W d   ƒ n1 sow   Y  |   td¡ tj d¡ W d   ƒ n1 s‹w   Y  |   td¡ tj d¡ W d   ƒ n1 s§w   Y  |   td¡ tj d¡ W d   ƒ n1 sÃw   Y  |   td¡ tj d	¡ W d   ƒ n1 sßw   Y  |   td¡ tj d
d¡ W d   ƒ n1 süw   Y  |   td¡ tj dd
¡ W d   ƒ d S 1 sw   Y  d S )NzCannot mix strr–   r   r  r’   )r   r–   r   r   r   r   )r’   r  r   r   r   r   )r   r–   r   r   r   )r’   r  r   r   r   r  s   http://python.org)	r  r:  r+   r,   r-   r;   r5   r<   r¢   rà   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ÚParseResultrX  )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©rV  Úkeyõ   ÅÃ©õ   key=Å%C3%A9r%  r|   õ   Åï¿½ï¿½õ
   key=Å%E9-õ   Åï¿½-Úignore©rV  rW  õ   Å-)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 )Nr]  r^  r_  )r`  ra  rb  r%  r|   )r`  rc  rd  )r`  re  rf  rg  )r`  rh  )r+   r,   rR   r.   ri  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w   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 ]A\}}|   d|›d|›¡* tjj|dd}|  ||d| ¡ tjj|dd}|  ||d| ¡ W d   ƒ n1 svw   Y  q:d S )Nú;ú;;r!   r   r
   r#   r   r   r	   úa=1;a=2r   r   ó   ;ó   ;;r%   r   r   r'   r   r   r   ó   a=1;a=2r   r    ú
Original: ú, Expected: ©Ú	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 ]A\}}|   d|›d|›¡* tjj|dd}|  ||d| ¡ tjj|dd}|  ||d| ¡ W d   ƒ n1 shw   Y  q,d S )Nrq  rr  r!   r	   r#   r   r   rs  r   r   rt  ru  r%   r   r'   r   r   rv  r   r   rw  rx  ry  rI   )r*  r+   r,   rR   r.   )r=   Zparse_qsl_semicolon_casesrS   rT   rB   r{  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__D  s   zBUrlParseTestCase.test_urlencode_sequences.<locals>.Trivial.__str__N)Ú__name__Ú
__module__Ú__qualname__r  rD   rD   rD   rE   ÚTrivialC  s    rƒ  r   z	a=trivial)r+   r,   r;  r.   )r=   rB   rƒ  rD   rD   rE   Ú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.   Úquoteri  rD   rD   rE   Útest_urlencode_quote_viaJ  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.   ri  rD   rD   rE   Útest_quote_from_bytesT  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.   ri  rD   rD   rE   Útest_unquote_to_bytes[  s   z&UrlParseTestCase.test_unquote_to_bytesc                 C   s0   | j ttjjddd | j ttjjddd d S )Ns   foor%  r_  rQ  )rW  )r   r:  r+   r,   r‡  rà   rD   rD   rE   Útest_quote_errorsa  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_issue14072f  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_hostsu  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:   rT  )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 sw   Y  t j d¡}|  t|¡ |j W d   ƒ d S 1 s<w   Y  d S )Nz3Port could not be cast to integer value as 'oracle'z%http://Server=sde; Service=sde:oracle)r+   r,   r-   r  r  r:   r;   )r=   Ú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>   Ú
splitvalueÚ
splitqueryÚ	splitportÚsplitpasswdÚ	splitattrr™  Ú
ResultBaseÚ	splituserÚ	splithostÚclear_cacheÚto_bytesÚunwrapÚsplittagÚ
splitnportÚ	splittyper"  r  zurllib.parse)Údirr+   r,   Ú
startswithrL  ÚappendZassertCountEqualÚ__all__)r=   r¤   ZundocumentedÚnameÚobjectrD   rD   rE   Útest_allÕ  s   
€zUrlParseTestCase.test_allc                    s0  d‰dd„ ˆD ƒ‰ ‡ ‡fdd„t ttdtjƒƒD ƒ}|  d|¡ |  d|¡ tj d	¡ |  	t
¡ tj d
¡ W d   ƒ n1 sBw   Y  dD ]L}dD ]G}|D ]B}d || |¡¡}| j|d t|ƒ¡d# |  	t
¡ tj |¡ W d   ƒ n1 sw   Y  W d   ƒ n1 sŽw   Y  qQqMqId S )Nz/:#?@c                 S   s   h | ]	}d   t|ƒ¡’qS )ú{:04X})ÚformatÚord©rN   ÚcrD   rD   rE   Ú	<setcomp>ê  s    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“   rF  )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å  s2   ÿÿÿ€ÿ€þÿÿz,UrlParseTestCase.test_urlsplit_normalizationr*   )4r€  r  r‚  rF   rV   r[   r‘   r•   rŸ   r¥   rª   rá   rä   rî   rò   rö   r  r  r  r  r#  r)  r,  r-  r.  r6  r9  r<  rD  rH  rO  rP  rX  r\  rj  rk  rp  r|  r}  r„  rˆ  rŠ  rŒ  r  r‘  r’  r•  r—  r˜  rž  r³  rÄ  rD   rD   rD   rE   r)   G   sd    
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   ó\   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   rÆ  )Nr  )ú	User:Passúwww.python.org:080z@www.python.org:080)r   rÓ  rÓ  )NrÓ  z
User:Pass@)rÒ  r   r  )zUser@example.com:PassrÓ  )r+   r,   Ú
_splituserr.   )r=   r¥  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_splitpasswd8  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_splitportJ  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ƒd¡ d S )NrÙ  )rÚ  r&  rÚ  )rÚ  éÿÿÿÿé7   )rÚ  rã  rÝ  rÍ  )rÍ  râ  )rÍ  rã  rÞ  rÜ  zparrot: +1_0 )r+   r,   Ú_splitnportr.   )r=   r«  rD   rD   rE   Útest_splitnportU  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_splitqueryb  s   
ÿ
ÿ
ÿzUtility_Tests.test_splitqueryc                 C   rÆ  )Núhttp://example.com?foo=bar#baz)úhttp://example.com?foo=barÚbazzhttp://example.com?foo=bar#)rì  r   z#baz)r   rí  rì  )rì  Nz"http://example.com?foo=bar#baz#boo)rë  Zboo)r+   r,   Ú	_splittagr.   )r=   rª  rD   rD   rE   Útest_splittagn  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_splitattrz  s   

ÿ

ÿzUtility_Tests.test_splitattrc                 C   rÆ  )Nrè  )rô   Úbarzfoo=)rô   r   z=bar)r   rò  Úfoobar)ró  Nzfoo=bar=baz)rô   zbar=baz)r+   r,   Ú_splitvaluer.   )r=   rŸ  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   ÚUnicodeErrorri  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)r€  r  r‚  Ú__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   óL   |   t¡}tj d¡ W d   ƒ n1 sw   Y  |  t|jƒd¡ d S )Nr   zUurllib.parse.splittype() is deprecated as of 3.8, use urllib.parse.urlparse() instead)ÚassertWarnsÚDeprecationWarningr+   r,   r¬  r.   ÚstrÚwarning©r=   ÚcmrD   rD   rE   Útest_splittype_deprecationœ  ó   ÿÿz*DeprecationTest.test_splittype_deprecationc                 C   rý  )Nr   zUurllib.parse.splithost() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r¦  r.   r   r  r  rD   rD   rE   Útest_splithost_deprecation£  r  z*DeprecationTest.test_splithost_deprecationc                 C   rý  )Nr   zUurllib.parse.splituser() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r¥  r.   r   r  r  rD   rD   rE   Útest_splituser_deprecationª  r  z*DeprecationTest.test_splituser_deprecationc                 C   rý  )Nr   zWurllib.parse.splitpasswd() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r¢  r.   r   r  r  rD   rD   rE   Útest_splitpasswd_deprecation±  r  z,DeprecationTest.test_splitpasswd_deprecationc                 C   rý  )Nr   zUurllib.parse.splitport() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r¡  r.   r   r  r  rD   rD   rE   Útest_splitport_deprecation¸  r  z*DeprecationTest.test_splitport_deprecationc                 C   rý  )Nr   zVurllib.parse.splitnport() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r«  r.   r   r  r  rD   rD   rE   Útest_splitnport_deprecation¿  r  z+DeprecationTest.test_splitnport_deprecationc                 C   rý  )Nr   zVurllib.parse.splitquery() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r   r.   r   r  r  rD   rD   rE   Útest_splitquery_deprecationÆ  r  z+DeprecationTest.test_splitquery_deprecationc                 C   rý  )Nr   zTurllib.parse.splittag() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   rª  r.   r   r  r  rD   rD   rE   Útest_splittag_deprecationÍ  r  z)DeprecationTest.test_splittag_deprecationc                 C   rý  )Nr   zUurllib.parse.splitattr() is deprecated as of 3.8, use urllib.parse.urlparse() instead)rþ  rÿ  r+   r,   r£  r.   r   r  r  rD   rD   rE   Útest_splitattr_deprecationÔ  r  z*DeprecationTest.test_splitattr_deprecationc                 C   rý  )Nr   zWurllib.parse.splitvalue() is deprecated as of 3.8, use urllib.parse.parse_qsl() instead)rþ  rÿ  r+   r,   rŸ  r.   r   r  r  rD   rD   rE   Útest_splitvalue_deprecationÛ  r  z+DeprecationTest.test_splitvalue_deprecationc                 C   rý  )Nr   z/urllib.parse.to_bytes() is deprecated as of 3.8)rþ  rÿ  r+   r,   r¨  r.   r   r  r  rD   rD   rE   Útest_to_bytes_deprecationâ  r  z)DeprecationTest.test_to_bytes_deprecationN)r€  r  r‚  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ü  r€  ÚmainrD   rD   rD   rE   Ú<module>   s”    



èè         D 
Oÿ