B
    ˦Z^              !   @   s  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)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d0d"gfd1d$d%gfd2d'd(g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d3gifdd4gd5gdfddd6d7g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d8gifd#d9gd:gd"fd&dd;d<gifd)i fd*i fd+dd3gifd,d4gd5gdfd-dd6d7gifd.i fd/i fd0dd8gifd1d9gd:gd"fd2dd;d<gifgZ
G d=d> d>ejZG d?d@ d@ejZedAkre  dS )B    Nzhttp://a/b/c/d;p?q#fzhttp://a/b/c/d;p?qz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   za b)r   z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   s   a b)r   s   b cs   a=1&a=2)r      1)r      2;z;;z;a=bza=a+b;b=b+cza=1;a=2   ;s   ;;s   ;a=bs   a=a+b;b=b+cs   a=1;a=2r   za bzb cr   r   r   s   a bs   b cr   r   c               @   sT  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSS )TUrlParseTestCasec             C   s`  t j|}| || |j|j|j|j|j|j	f}| || t j
|}| || | ||  t j| }| | |  | || | |j|j | |j|j | |j|j | |j|j | |j|j | |j	|j	 | |j|j | |j|j | |j|j | |j|j t j|}| || |j|j|j|j|j	f}| || t j|}| || | ||  t j| }| | |  | || | |j|j | |j|j | |j|j | |j|j | |j	|j	 | |j|j | |j|j | |j|j | |j|j d S )N)urllibparseurlparseassertEqualschemenetlocpathparamsqueryfragment
urlunparsegeturlusernamepasswordhostnameporturlsplit
urlunsplit)selfurlparsedsplitresulttZresult2Zresult3 r+   D/work/yifan.wang/lscsoft/opt/python37/lib/python3.7/test_urlparse.pycheckRoundtripsU   sR    z UrlParseTestCase.checkRoundtripsc             C   sh   xbt D ]Z\}}tjj|dd}| ||d|  dd |D }tjj|dd}| ||d|  qW d S )NT)keep_blank_valueszError parsing %rc             S   s   g | ]}t |d  r|qS )   )len).0vr+   r+   r,   
<listcomp>   s    z-UrlParseTestCase.test_qsl.<locals>.<listcomp>F)parse_qsl_test_casesr   r   	parse_qslr   )r%   origexpectr)   expect_without_blanksr+   r+   r,   test_qsl   s    zUrlParseTestCase.test_qslc                sl   xft D ]^\} tjj|dd}| | d|   fdd D }tjj|dd}| ||d|  qW d S )NT)r.   zError parsing %rc                s&   i | ]}t  | d  r | |qS )r   )r0   )r1   r2   )r7   r+   r,   
<dictcomp>   s   z,UrlParseTestCase.test_qs.<locals>.<dictcomp>F)parse_qs_test_casesr   r   parse_qsr   )r%   r6   r)   r8   r+   )r7   r,   test_qs   s    
zUrlParseTestCase.test_qsc                sT   ddddddg}dd   fd	d
|D }x$|| D ]\}}}|  ||| q4W d S )N)zfile:///tmp/junk.txt)filer   z/tmp/junk.txtr   r   r   )r>   r   z/tmp/junk.txtr   r   )zimap://mail.python.org/mbox1)imapzmail.python.orgz/mbox1r   r   r   )r?   zmail.python.orgz/mbox1r   r   )z1mms://wms.sys.hinet.net/cts/Drama/09006251100.asf)mmszwms.sys.hinet.netz/cts/Drama/09006251100.asfr   r   r   )r@   zwms.sys.hinet.netz/cts/Drama/09006251100.asfr   r   )znfs://server/path/to/file.txt)nfsserverz/path/to/file.txtr   r   r   )rA   rB   z/path/to/file.txtr   r   )z0svn+ssh://svn.zope.org/repos/main/ZConfig/trunk/)zsvn+sshzsvn.zope.orgz/repos/main/ZConfig/trunk/r   r   r   )zsvn+sshzsvn.zope.orgz/repos/main/ZConfig/trunk/r   r   )z)git+ssh://git@github.com/user/project.git)zgit+sshzgit@github.comz/user/project.gitr   r   r   )zgit+sshzgit@github.comz/user/project.gitr   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 )rC   N)encode)r1   xr+   r+   r,   	<genexpr>   s    zDUrlParseTestCase.test_roundtrips.<locals>._encode.<locals>.<genexpr>r/   c             s   s   | ]}| d V  qdS )rC   N)rD   )r1   rE   r+   r+   r,   rF      s       )rD   tuple)r*   r+   r+   r,   _encode   s    z1UrlParseTestCase.test_roundtrips.<locals>._encodec                s   g | ]} |qS r+   r+   )r1   rE   )rI   r+   r,   r3      s    z4UrlParseTestCase.test_roundtrips.<locals>.<listcomp>)r-   )r%   	str_casesbytes_casesr&   r'   r(   r+   )rI   r,   test_roundtrips   s    z UrlParseTestCase.test_roundtripsc                s   dddddg}dd   fdd	|D }d
}d}||f}||f}x`||fD ]T\}}xJ|D ]B}	x<|D ]4\}
}}|	|
 }
|	f| }|	f| }|  |
|| qbW qXW qJW d S )N)z://www.python.org)zwww.python.orgr   r   r   r   )zwww.python.orgr   r   r   )z://www.python.org#abc)zwww.python.orgr   r   r   abc)zwww.python.orgr   r   rM   )z://www.python.org?q=abc)zwww.python.orgr   r   zq=abcr   )zwww.python.orgr   zq=abcr   )z://www.python.org/#abc)zwww.python.org/r   r   rM   )zwww.python.orgrN   r   rM   )z://a/b/c/d;p?q#f)r   z/b/c/dpqf)r   z/b/c/d;prP   rQ   c             S   s8   | d  dtdd | d D tdd | d D fS )Nr   rC   c             s   s   | ]}| d V  qdS )rC   N)rD   )r1   rE   r+   r+   r,   rF      s    zIUrlParseTestCase.test_http_roundtrips.<locals>._encode.<locals>.<genexpr>r/   c             s   s   | ]}| d V  qdS )rC   N)rD   )r1   rE   r+   r+   r,   rF      s    rG   )rD   rH   )r*   r+   r+   r,   rI      s    z6UrlParseTestCase.test_http_roundtrips.<locals>._encodec                s   g | ]} |qS r+   r+   )r1   rE   )rI   r+   r,   r3      s    z9UrlParseTestCase.test_http_roundtrips.<locals>.<listcomp>)httphttps)s   https   https)r-   )r%   rJ   rK   Zstr_schemesZbytes_schemesZ	str_testsZbytes_testsZschemesZ
test_casesr   r&   r'   r(   r+   )rI   r,   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 )rC   )rD   )r1   rE   r+   r+   r,   r3      s    z.UrlParseTestCase.checkJoin.<locals>.<listcomp>)r   r   r   urljoin)	r%   baseZrelurlexpectedZstr_componentsZbytes_componentsZbasebZrelurlbZ	expectedbr+   r+   r,   	checkJoin   s    
zUrlParseTestCase.checkJoinc             C   sn   dddddddg}dd	 |D }xH|| D ]<}|  tjtj|| |  tjtj|| q*W d S )
NPythonz./Pythonzx-newscheme://foo.com/stuffzx://yzx:/yzx:/rN   c             S   s   g | ]}| d qS )rC   )rD   )r1   rE   r+   r+   r,   r3      s    z7UrlParseTestCase.test_unparse_parse.<locals>.<listcomp>)r   r   r   r$   r#   r   r   )r%   rJ   rK   ur+   r+   r,   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 )7Nzg:hgzhttp://a/b/c/gz./gzg/zhttp://a/b/c/g/z/gz
http://a/gz//gzhttp://gzg?yzhttp://a/b/c/g?yzg?y/./xzhttp://a/b/c/g?y/./xz#szhttp://a/b/c/d;p?q#szg#szhttp://a/b/c/g#szg#s/./xzhttp://a/b/c/g#s/./xzg?y#szhttp://a/b/c/g?y#szg;xzhttp://a/b/c/g;xzg;x?y#szhttp://a/b/c/g;x?y#s.zhttp://a/b/c/z./z..zhttp://a/b/z../z../gzhttp://a/b/gz../..z	http://a/z../../z../../gr   zhttp://a/b/c/d;p?q#fzg.zhttp://a/b/c/g.z.gzhttp://a/b/c/.gzg..zhttp://a/b/c/g..z..gzhttp://a/b/c/..gz./../gz./g/.zg/./hzhttp://a/b/c/g/hzg/../hzhttp://a/b/c/h)rX   RFC1808_BASE)r%   r+   r+   r,   test_RFC1808   s>    zUrlParseTestCase.test_RFC1808c             C   s   |  tjdd d S )Nzmailto:1337@example.org)Zmailtor   z1337@example.orgr   r   r   )r   r   r   r   )r%   r+   r+   r,   test_RFC2368"  s    zUrlParseTestCase.test_RFC2368c             C   s  |  tdd |  tdd |  tdd |  tdd |  tdd |  td	d
 |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd  |  td!d  |  td"d |  td#t |  td$d% |  td&d' |  td(d) |  td*d+ |  td,d |  td-d |  td.d/ |  td0d1 |  td2d3 |  td4d5 |  td6d7 |  td8d9 |  td:d; |  td<d= d S )>Nzg:hr\   zhttp://a/b/c/gz./gzg/zhttp://a/b/c/g/z/gz
http://a/gz//gzhttp://gzg?yzhttp://a/b/c/g?yz#szhttp://a/b/c/d;p?q#szg#szhttp://a/b/c/g#szg?y#szhttp://a/b/c/g?y#szg;xzhttp://a/b/c/g;xzg;x?y#szhttp://a/b/c/g;x?y#sr]   zhttp://a/b/c/z./z..zhttp://a/b/z../z../gzhttp://a/b/gz../..z	http://a/z../../z../../gr   zg.zhttp://a/b/c/g.z.gzhttp://a/b/c/.gzg..zhttp://a/b/c/g..z..gzhttp://a/b/c/..gz./../gz./g/.zg/./hzhttp://a/b/c/g/hzg/../hzhttp://a/b/c/hz	g;x=1/./yzhttp://a/b/c/g;x=1/yz
g;x=1/../yzhttp://a/b/c/yzg?y/./xzhttp://a/b/c/g?y/./xzg?y/../xzhttp://a/b/c/g?y/../xzg#s/./xzhttp://a/b/c/g#s/./xzg#s/../xzhttp://a/b/c/g#s/../x)rX   RFC2396_BASE)r%   r+   r+   r,   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 )INz?yzhttp://a/b/c/d;p?yz;xzhttp://a/b/c/;xzg:hr\   zhttp://a/b/c/gz./gzg/zhttp://a/b/c/g/z/gz
http://a/gz//gzhttp://gzg?yzhttp://a/b/c/g?yz#szhttp://a/b/c/d;p?q#szg#szhttp://a/b/c/g#szg?y#szhttp://a/b/c/g?y#szg;xzhttp://a/b/c/g;xzg;x?y#szhttp://a/b/c/g;x?y#sr   zhttp://a/b/c/d;p?qr]   zhttp://a/b/c/z./z..zhttp://a/b/z../z../gzhttp://a/b/gz../..z	http://a/z../../z../../gz
../../../gz../../../../gz/./gz/../gzg.zhttp://a/b/c/g.z.gzhttp://a/b/c/.gzg..zhttp://a/b/c/g..z..gzhttp://a/b/c/..gz./../gz./g/.zg/./hzhttp://a/b/c/g/hzg/../hzhttp://a/b/c/hz	g;x=1/./yzhttp://a/b/c/g;x=1/yz
g;x=1/../yzhttp://a/b/c/yzg?y/./xzhttp://a/b/c/g?y/./xzg?y/../xzhttp://a/b/c/g?y/../xzg#s/./xzhttp://a/b/c/g#s/./xzg#s/../xzhttp://a/b/c/g#s/../xzhttp:gzhttp://a/b/c/de)rX   RFC3986_BASE)r%   r+   r+   r,   test_RFC3986T  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 )BNzg:hzhttp:gzhttp://a/b/c/gzhttp:zhttp://a/b/c/dr\   z./gzg/zhttp://a/b/c/g/z/gz
http://a/gz//gzhttp://gz?yzhttp://a/b/c/d?yzg?yzhttp://a/b/c/g?yzg?y/./xzhttp://a/b/c/g?y/./xr]   zhttp://a/b/c/z./z..zhttp://a/b/z../z../gzhttp://a/b/gz../..z	http://a/z../../gz./../gz./g/.zg/./hzhttp://a/b/c/g/hzg/../hzhttp://a/b/c/hz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/grN   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   )rX   SIMPLE_BASE)r%   r+   r+   r,   test_urljoins  sT    zUrlParseTestCase.test_urljoinsc                s   ddddddddd	d
ddddddddddddddg}dd   fdd|D }x:|| D ].\}}}t j|}| |j|jf||f qXW dddd d!g}d"d |D }x"|| D ]}| tt jj| qW d S )#N)z http://Test.python.org:5432/foo/ztest.python.orgi8  )zhttp://12.34.56.78:5432/foo/z12.34.56.78i8  )zhttp://[::1]:5432/foo/z::1i8  )zhttp://[dead:beef::1]:5432/foo/zdead:beef::1i8  )zhttp://[dead:beef::]:5432/foo/zdead:beef::i8  )z:http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:5432/foo/z'dead:beef:cafe:5417:affe:8fa3:deaf:feedi8  )z http://[::12.34.56.78]:5432/foo/z::12.34.56.78i8  )z%http://[::ffff:12.34.56.78]:5432/foo/z::ffff:12.34.56.78i8  )zhttp://Test.python.org/foo/ztest.python.orgN)zhttp://12.34.56.78/foo/z12.34.56.78N)zhttp://[::1]/foo/z::1N)zhttp://[dead:beef::1]/foo/zdead:beef::1N)zhttp://[dead:beef::]/foo/zdead:beef::N)z5http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/z'dead:beef:cafe:5417:affe:8fa3:deaf:feedN)zhttp://[::12.34.56.78]/foo/z::12.34.56.78N)z http://[::ffff:12.34.56.78]/foo/z::ffff:12.34.56.78N)zhttp://Test.python.org:/foo/ztest.python.orgN)zhttp://12.34.56.78:/foo/z12.34.56.78N)zhttp://[::1]:/foo/z::1N)zhttp://[dead:beef::1]:/foo/zdead:beef::1N)zhttp://[dead:beef::]:/foo/zdead:beef::N)z6http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]:/foo/z'dead:beef:cafe:5417:affe:8fa3:deaf:feedN)zhttp://[::12.34.56.78]:/foo/z::12.34.56.78N)z!http://[::ffff:12.34.56.78]:/foo/z::ffff:12.34.56.78Nc             S   s"   | d  d| d  d| d fS )Nr   rC   r/   rG   )rD   )r*   r+   r+   r,   rI     s    z.UrlParseTestCase.test_RFC2732.<locals>._encodec                s   g | ]} |qS r+   r+   )r1   rE   )rI   r+   r,   r3     s    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 )rC   )rD   )r1   rE   r+   r+   r,   r3     s    )r   r   r   r   r!   r"   assertRaises
ValueError)r%   rJ   rK   r&   r!   r"   Z	urlparsedZinvalid_urlr+   )rI   r,   test_RFC2732  sJ    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 }x^|| D ]R\}}}tj|}| | | | |||f | |j| | |j| qHW d S )N)zhttp://python.org#fragzhttp://python.orgfrag)zhttp://python.orgzhttp://python.orgr   )zhttp://python.org/#fragzhttp://python.org/rk   )zhttp://python.org/zhttp://python.org/r   )zhttp://python.org/?q#fragzhttp://python.org/?qrk   )zhttp://python.org/?qzhttp://python.org/?qr   )zhttp://python.org/p#fragzhttp://python.org/prk   )zhttp://python.org/p?qzhttp://python.org/p?qr   zhttp://a/b/c/d;p?qrQ   r   c             S   s   t | dd | D S )Nc             s   s   | ]}| d V  qdS )rC   N)rD   )r1   rE   r+   r+   r,   rF     s    zCUrlParseTestCase.test_urldefrag.<locals>._encode.<locals>.<genexpr>)type)r*   r+   r+   r,   rI     s    z0UrlParseTestCase.test_urldefrag.<locals>._encodec                s   g | ]} |qS r+   r+   )r1   rE   )rI   r+   r,   r3     s    z3UrlParseTestCase.test_urldefrag.<locals>.<listcomp>)	r^   ra   r   r   Z	urldefragr   r   r&   r   )r%   rJ   rK   r&   Zdefragrk   r)   r+   )rI   r,   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   r!   r   )r%   rO   r+   r+   r,   test_urlsplit_scoped_IPv6  s    z*UrlParseTestCase.test_urlsplit_scoped_IPv6c          	   C   s  d}t j|}| |jd | |jd | |jd | |jd | |jd | |j	d  | |j
d  | |jd | |jd  | | dd  |dd   d	}t j|}| |jd | |jd
 | |jd | |jd | |jd | |j	d | |j
d | |jd | |jd | | | d}t j|}| |jd | |jd | |jd | |jd | |jd | |j	d | |j
d | |jd | |jd | | | d}t j|}| |jd | |jd | |jd | |jd | |jd | |j	d  | |j
d  | |jd | |jd  | | dd  |dd   d}t j|}| |jd | |jd | |jd | |jd | |jd | |j	d | |j
d | |jd | |jd | | | d}t j|}| |jd | |jd | |jd | |jd | |jd | |j	d  | |j
d | |jd | |jd | | | d!}t j|}| td" |j W d Q R X d S )#NzHTTP://WWW.PYTHON.ORG/doc/#fragrR   zWWW.PYTHON.ORGz/doc/r   rk   zwww.python.org   z7http://User:Pass@www.python.org:080/doc/?query=yes#fragzUser:Pass@www.python.org:080z	query=yesZUserZPassP   zChttp://User@example.com:Pass@www.python.org:080/doc/?query=yes#fragz(User@example.com:Pass@www.python.org:080zUser@example.coms   HTTP://WWW.PYTHON.ORG/doc/#frags   https   WWW.PYTHON.ORGs   /doc/r	   s   frags   www.python.orgs7   http://User:Pass@www.python.org:080/doc/?query=yes#frags   User:Pass@www.python.org:080s	   query=yess   Users   PasssC   http://User@example.com:Pass@www.python.org:080/doc/?query=yes#frags(   User@example.com:Pass@www.python.org:080s   User@example.coms%   HTTP://WWW.PYTHON.ORG:65536/doc/#fragzout of range)r   r   r#   r   r   r   r   r   r   r   r    r!   r"   r   assertRaisesRegexri   )r%   r&   rO   r+   r+   r,   test_urlsplit_attributes  s      z)UrlParseTestCase.test_urlsplit_attributesc             C   s   xdD ]}xt jjt jjfD ]}xdD ]z}| j|||d` d| }d| }|rd|d}|d}||}| |j| | t	 |j
 W d Q R X W d Q R X q&W qW qW d S )N)FT)re   z1.5z-1Z0x10)bytesr   r"   zwww.example.net:zhttp://rC   )r   r   r#   r   subTestrD   r   r   rh   ri   r"   )r%   rs   r   r"   r   r&   rO   r+   r+   r,   test_attributes_bad_ports  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   r   r   r    r!   r"   r   r   )r%   ZurirO   r+   r+   r,   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)rR   zexample.comr   r   zblahblah=/foor   s    http://example.com?blahblah=/foo)s   https   example.comr	   r	   s   blahblah=/foor	   )r   r   r   r   )r%   r+   r+   r,   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 )Nr   )r   r   r   r   r   r   z//www.python.org:80)r   zwww.python.org:80r   r   r   r   zhttp://www.python.org:80)rR   zwww.python.org:80r   r   r   r   s   path)r	   r	   s   pathr	   r	   r	   s   //www.python.org:80)r	   s   www.python.org:80r	   r	   r	   r	   s   http://www.python.org:80)s   https   www.python.org:80r	   r	   r	   r	   )r   r   r   r   )r%   r+   r+   r,   test_withoutscheme  s    z#UrlParseTestCase.test_withoutschemec             C   s   |  tjdd |  tjdd |  tjdd |  tjdd |  tjd	d
 |  tjdd |  tjdd |  tjdd |  tjdd |  tjdd |  tjdd |  tjdd d S )Nzhttp:80)rR   r   80r   r   r   zhttps:80)rS   r   ry   r   r   r   zpath:80)r   r   ry   r   r   r   zhttp:)rR   r   r   r   r   r   zhttps:)rS   r   r   r   r   r   zhttp://www.python.org:80)rR   zwww.python.org:80r   r   r   r   s   http:80)s   httpr	   s   80r	   r	   r	   s   https:80)s   httpsr	   s   80r	   r	   r	   s   path:80)s   pathr	   s   80r	   r	   r	   s   http:)s   httpr	   r	   r	   r	   r	   s   https:)s   httpsr	   r	   r	   r	   r	   s   http://www.python.org:80)s   https   www.python.org:80r	   r	   r	   r	   )r   r   r   r   )r%   r+   r+   r,   test_portseparator  s    z#UrlParseTestCase.test_portseparatorc             C   s   |  ttjjd d S )Nre   )rh   	TypeErrorr   r   	urlencode)r%   r+   r+   r,   test_usingsys  s    zUrlParseTestCase.test_usingsysc             C   s   |  tjdd |  tjdd |  tjdd |  tjdd |  tjd	d
 |  tjdd |  tjdd |  tjdd d S )Nzs3://foo.com/stuff)Zs3zfoo.comz/stuffr   r   r   zx-newscheme://foo.com/stuff)zx-newschemezfoo.comz/stuffr   r   r   z*x-newscheme://foo.com/stuff?query#fragment)zx-newschemezfoo.comz/stuffr   r   r   z!x-newscheme://foo.com/stuff?query)zx-newschemezfoo.comz/stuffr   r   r   s   s3://foo.com/stuff)s   s3s   foo.coms   /stuffr	   r	   r	   s   x-newscheme://foo.com/stuff)s   x-newschemes   foo.coms   /stuffr	   r	   r	   s*   x-newscheme://foo.com/stuff?query#fragment)s   x-newschemes   foo.coms   /stuffr	   s   querys   fragments!   x-newscheme://foo.com/stuff?query)s   x-newschemes   foo.coms   /stuffr	   s   queryr	   )r   r   r   r   )r%   r+   r+   r,   test_anyscheme  s     zUrlParseTestCase.test_anyschemec          
   C   s   xt 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 R X qW d S )N)functionzhttp://example.net/ftprR   s   http://example.net/s   ftps   httpr   )r   s   pathr   r	   )r   r   r   r#   rt   r   r   )r%   funcr)   r+   r+   r,   test_default_scheme  s    

z$UrlParseTestCase.test_default_schemec             C   s  d}x |D ]\}}}xt jjt jjfD ]}|dkrD|t jjkrDd}| j||d ||dd}| |jd | t||	d|  | ||ddjd ||d	d}| |j| | 
t||	| | ||dd	j| | ||j| W d Q R X q(W qW d S )
N)
)z
http:#fragr   rk   )z//example.net#fragr   rk   )zindex.html#fragr   rk   )z	;a=b#fragr   rk   )z	?a=b#fragr   rk   )z#fragr   rk   )z	abc#@fragr   z@frag)z//abc#@fragr   z@frag)z//abc:80#@fragr   z@frag)z//abc#@frag:80r   z@frag:80r   r   )r&   r   F)Zallow_fragmentsr   #T)r   r   r   r#   rt   r   r   Z
assertTruegetattrendswithZassertFalse)r%   Ztestsr&   attrZexpected_fragr   r)   r+   r+   r,   test_parse_fragments   s$    z%UrlParseTestCase.test_parse_fragmentsc          	   C   sx  |  td tjdd W d Q R X |  td tjdd W d Q R X |  td tjdd W d Q R X |  td tjdd W d Q R X |  td tjd W d Q R X |  td tjd W d Q R X |  td tjd W d Q R X |  td tjd	 W d Q R X |  td tjd
d W d Q R X |  td tjdd
 W d Q R X d S )NzCannot mix strzwww.python.orgs   https   www.python.orgrR   )s   httpzwww.python.orgr   r   r   r   )rR   s   www.python.orgr   r   r   r   )s   httpzwww.python.orgr   r   r   )rR   s   www.python.orgr   r   r   zhttp://python.orgs   http://python.org)	rq   r{   r   r   r   r#   r   r$   rU   )r%   r+   r+   r,   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	   rC   strict)r0   _fieldsZ_encoded_counterpartZassertIsZ_decoded_counterpartr   decoderD   )
r%   Zstr_typeZnum_argsZ
bytes_typeZstr_argsZ
bytes_argsZ
str_resultZbytes_resultencodingerrorsr+   r+   r,   _check_result_type9  s.    
z#UrlParseTestCase._check_result_typec             C   s2   t jjt jjt jjg}x|D ]}| | qW d S )N)r   r   ZDefragResultZSplitResultZParseResultr   )r%   Zresult_typesZresult_typer+   r+   r,   test_result_pairsR  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 )Nu	   key=Ł%E9zlatin-1)r   keyu   Łéu   key=Ł%C3%A9zutf-8rC   u   Ł��u
   key=Ł%E9-u   Ł�-ignore)r   r   u   Ł-)r   r   r<   r   )r%   r)   r+   r+   r,   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 )Nu	   key=Ł%E9zlatin-1)r   )r   u   Łéu   key=Ł%C3%A9zutf-8rC   )r   u   Ł��u
   key=Ł%E9-)r   u   Ł�-r   )r   r   )r   u   Ł-)r   r   r5   r   )r%   r)   r+   r+   r,   test_parse_qsl_encodingi  s    
z(UrlParseTestCase.test_parse_qsl_encodingc          	   C   s   |  t" tjjddgd dd W d Q R X |  t" tjjddgd dd W d Q R X tjjddgd dd d S )Nr   za=a   
   )Zmax_num_fieldsr   )rh   ri   r   r   r<   join)r%   r+   r+   r,   test_parse_qsl_max_num_fieldsv  s
    &&z.UrlParseTestCase.test_parse_qsl_max_num_fieldsc             C   sJ   t jddgddd}G dd d}t jd| id}| |d	 d S )
Nr/   rG   )   ro      )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trivialr+   )r%   r+   r+   r,   __str__  s    zBUrlParseTestCase.test_urlencode_sequences.<locals>.Trivial.__str__N)__name__
__module____qualname__r   r+   r+   r+   r,   Trivial  s   r   r   z	a=trivial)r   r   r|   r   )r%   r)   r   r+   r+   r,   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%2FanotherrN   )Zsafer   za=some%20value/another)r   r   r|   r   quote)r%   r)   r+   r+   r,   test_urlencode_quote_via  s    z)UrlParseTestCase.test_urlencode_quote_viac             C   sF   |  ttjjd tjd}| |d tjd}| |d d S )Nre   s   archaeological arcanazarchaeological%20arcanar	   r   )rh   r{   r   r   Zquote_from_bytesr   )r%   r)   r+   r+   r,   test_quote_from_bytes  s
    z&UrlParseTestCase.test_quote_from_bytesc             C   s4   t jd}| |d t jd}| |d d S )Nz	abc%20defs   abc defr   r	   )r   r   Zunquote_to_bytesr   )r%   r)   r+   r+   r,   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   foozutf-8)r   r   )r   )rh   r{   r   r   r   )r%   r+   r+   r,   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   r   r   )r%   p1Zp2r+   r+   r,   test_issue14072  s    z UrlParseTestCase.test_issue14072c             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   r   r   )r%   r   r+   r+   r,   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   Z_ALWAYS_SAFEassertInrepr)r%   Zquoterr+   r+   r,   test_Quoter_repr  s    z!UrlParseTestCase.test_Quoter_reprc             C   s   g }ddddddddd	d
dddddh}xLt tjD ]>}|ds2||krJq2ttj|}t|dd dkr2|| q2W | tjj| d S )N	splitattr	splithost
splitnportsplitpasswd	splitport
splitquerysplittag	splittype	splituser
splitvaluer   Z
ResultBaseZclear_cacheto_bytesunwrap_r   zurllib.parse)dirr   r   
startswithr   appendZassertCountEqual__all__)r%   rW   Zundocumentednameobjectr+   r+   r,   test_all  s    
zUrlParseTestCase.test_allc                s   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 Q R X xdD ]x}xrdD ]j}xd|D ]\}d|||}| j|dt|d( | 	t
 tj| W d Q R X W d Q R X qW qW qW d S )Nz/:#?@c             S   s   h | ]}d  t|qS )z{:04X})formatord)r1   cr+   r+   r,   	<setcomp>  s    z?UrlParseTestCase.test_urlsplit_normalization.<locals>.<setcomp>c                s.   g | ]&} t t| @ r|kr|qS r+   )setunicodedatadecompositionr(   )r1   r   )	hex_charsillegal_charsr+   r,   r3     s    z@UrlParseTestCase.test_urlsplit_normalization.<locals>.<listcomp>   u   ℀u   ＃u   http://プ:80u   http://プ︓80)rR   rS   r   )znetloc{}false.netloczn{}user@netlocz{}://{}/pathz{:04X})r&   char)mapchrrangesys
maxunicoder   r   r   r#   rh   ri   r   rt   r   )r%   Zdenorm_charsr   r   r   r&   r+   )r   r   r,   test_urlsplit_normalization  s    "


z,UrlParseTestCase.test_urlsplit_normalizationN),r   r   r   r-   r9   r=   rL   rT   rX   r[   r_   r`   rb   rd   rg   rj   rm   rn   rr   ru   rv   rw   rx   rz   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r   S   sR   3	
#&0-972	])!

r   c               @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )Utility_Testsc             C   s\   t jj}| |dd | |dd | |dd | |dd | |d	d
 d S )Nztype:opaquestring)rl   opaquestringr   )Nr   z:opaquestring)Nz:opaquestringztype:)rl   r   ztype:opaque:string)rl   zopaque:string)r   r   r   r   )r%   r   r+   r+   r,   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)zwww.example.org:80z/foo/bar/baz.htmlz//www.example.org:80)zwww.example.org:80r   z/foo/bar/baz.html)Nz/foo/bar/baz.htmlz//127.0.0.1#@host.com)z	127.0.0.1z/#@host.comz//127.0.0.1#@host.com:80)z	127.0.0.1z/#@host.com:80z//127.0.0.1:80#@host.com)z127.0.0.1:80z/#@host.comz///file)r   z/filez//example.net/file;)zexample.netz/file;z//example.net/file?)zexample.netz/file?z//example.net/file#)zexample.netz/file#)r   r   r   r   )r%   r   r+   r+   r,   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 )NzUser:Pass@www.python.org:080)z	User:Passzwww.python.org:080z@www.python.org:080)r   zwww.python.org:080zwww.python.org:080)Nzwww.python.org:080z
User:Pass@)z	User:Passr   z(User@example.com:Pass@www.python.org:080)zUser@example.com:Passzwww.python.org:080)r   r   r   r   )r%   r   r+   r+   r,   test_splituser%  s    




zUtility_Tests.test_splituserc             C   s   t jj}| |dd | |dd | |dd | |dd | |d	d
 | |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd d S )Nzuser:ab)userabzuser:a
b)r   za
bzuser:a	b)r   za	bzuser:ab)r   zabzuser:ab)r   zabzuser:ab)r   zabzuser:a:b)r   za:bzuser:a b)r   za bz	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   r   r   )r%   r   r+   r+   r,   test_splitpasswd2  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 )Nz	parrot:88)parrot88r   )r   Nzparrot:z	127.0.0.1)z	127.0.0.1Nzparrot:cheese)zparrot:cheeseNz[::1]:88)z[::1]r   z[::1])z[::1]Nz:88)r   r   )r   r   r   r   )r%   r   r+   r+   r,   test_splitportD  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 )Nz	parrot:88)r   X   r   )r   7   )r   r   zparrot:z	127.0.0.1)z	127.0.0.1r   )z	127.0.0.1r   zparrot:cheese)r   N)r   r   r   r   )r%   r   r+   r+   r,   test_splitnportO  s    zUtility_Tests.test_splitnportc             C   sL   t jj}| |dd | |dd | |dd | |dd d S )	Nzhttp://python.org/fake?foo=bar)zhttp://python.org/fakezfoo=barzhttp://python.org/fake?foo=bar?)zhttp://python.org/fake?foo=barr   zhttp://python.org/fake)zhttp://python.org/fakeNz?foo=bar)r   zfoo=bar)r   r   r   r   )r%   r   r+   r+   r,   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 )Nzhttp://example.com?foo=bar#baz)zhttp://example.com?foo=barbazzhttp://example.com?foo=bar#)zhttp://example.com?foo=barr   z#baz)r   r   zhttp://example.com?foo=bar)zhttp://example.com?foo=barNz"http://example.com?foo=bar#baz#boo)zhttp://example.com?foo=bar#bazZboo)r   r   r   r   )r%   r   r+   r+   r,   test_splittagg  s    



zUtility_Tests.test_splittagc             C   sf   t jj}| |ddddgf | |dddgf | |ddddgf | |ddg f d S )Nz/path;attr1=value1;attr2=value2z/pathzattr1=value1zattr2=value2z/path;r   z;attr1=value1;attr2=value2)r   r   r   r   )r%   r   r+   r+   r,   test_splitattrs  s    

zUtility_Tests.test_splitattrc             C   s\   t jj}| |dd | |dd | |dd | |dd | |d	d
 d S )Nzfoo=bar)re   barzfoo=)re   r   z=bar)r   r   foobar)r   Nzfoo=bar=baz)re   zbar=baz)r   r   r   r   )r%   r   r+   r+   r,   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   r   r   rh   UnicodeError)r%   r)   r+   r+   r,   test_to_bytes  s    zUtility_Tests.test_to_bytesc             C   s   t jd}| |d d S )Nz<URL:type://host/path>ztype://host/path)r   r   r   r   )r%   r&   r+   r+   r,   test_unwrap  s    zUtility_Tests.test_unwrapN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r     s   	
r   __main__)r   r   ZunittestZurllib.parser   r^   ra   rc   rf   r4   r;   ZTestCaser   r   r   mainr+   r+   r+   r,   <module>   s   






       0 
