
    <ev                       d Z ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlZ	 ddlZn# e$ r dZY nw xY wddlZddlZddlmZmZ dd	lmZ ddlZej        s e
j        d
          d Z da!d5dZ"d Z#d6dZ$ G d de%          Z& G d de%          Z' G d de
j(                  Z) G d de
j(                  Z* G d de
j(                  Z+ G d de
j(        e&e'          Z, G d de
j(                  Z- G d de
j(                  Z. G d  d!e
j(        e&          Z/ G d" d#e
j(                  Z0 G d$ d%e
j(                  Z1 G d& d'e
j(                  Z2 G d( d)e
j(                  Z3 G d* d+e
j(                  Z4 G d, d-e&e
j(                  Z5 G d. d/e
j(                  Z6 G d0 d1e
j(                  Z7 G d2 d3e
j(                  Z8e9d4k    r e
j:                     dS dS )7z;Regression tests for what was in Python 2's "urllib" module    N)patch)support)	os_helper)socket_helper)warnings_helper)url2pathnamepathname2url)	b64encodeztest requires gethostname()c                     t          t          |                     dd                                         }t          |          dk    rd|z  }d|z   S )z!Escape char as RFC 2396 specifies   N   z0%s%)hexordupperlen)charhex_reprs     '/usr/lib/python3.11/test/test_urllib.py	hexescaper       sM    3t99~~abb!''))H
8}}8#>    c                     |!t           j                            |          }nt          st                      }|ant          }||                    |           S |                    | |          S )z.urlopen(url [, data]) -> open file-like objectN)proxies)urllibrequestFancyURLopener
_urlopeneropen)urldatar   openers       r   urlopenr"   +   sn     ..w.?? !!

|{{3{{3%%%r   c                      t          j        dt          f          5  t          j                                        cd d d            S # 1 swxY w Y   d S )Nz8FancyURLopener style of invoking requests is deprecated.)r   check_warningsDeprecationWarningr   r   r    r   r   r   r   ;   s    		'G 
! 
! / / ~,,../ / / / / / / / / / / / / / / / / /s   AAAFc                      G fddt           j                   G fddt          j        j                  | _        S )Nc                   :    e Zd ZdZ fdZd ZddZddZd ZdS )	fakehttp.<locals>.FakeSocketr   c                     |_         d S N)buf)selfr    FakeHTTPConnections     r   sendallz$fakehttp.<locals>.FakeSocket.sendallF   s    %)"""r   c                 &    | xj         dz  c_         | S )Nr   )io_refs)r-   argskwdss      r   makefilez%fakehttp.<locals>.FakeSocket.makefileI   s    LLALLKr   Nc                 T    | j         rdS t          j                            | |          S Nr   )closedioBytesIOread)r-   amts     r   r:   z!fakehttp.<locals>.FakeSocket.readM   s'    { s:??4---r   c                 T    | j         rdS t          j                            | |          S r6   )r7   r8   r9   readline)r-   lengths     r   r=   z%fakehttp.<locals>.FakeSocket.readlineR   s)    { s:&&tV444r   c                 ~    | xj         dz  c_         | j         dk    r!t          j                            |            d S d S )Nr   r   )r1   r8   r9   closer-   s    r   r@   z"fakehttp.<locals>.FakeSocket.closeW   sC    LLALL|q  
  &&&&& ! r   r+   )	__name__
__module____qualname__r1   r/   r4   r:   r=   r@   )r.   s   r   
FakeSocketr)   C   sy        	* 	* 	* 	* 	*	 	 		. 	. 	. 	.
	5 	5 	5 	5
	' 	' 	' 	' 	'r   rE   c                   ,    e Zd ZdZ fdZrd ZdS dS )$fakehttp.<locals>.FakeHTTPConnectionNc                 d     | j                   | _        | j        t          |           _        d S r+   )fakedatasocktypefakesock)r-   rE   s    r   connectz,fakehttp.<locals>.FakeHTTPConnection.connecta   s,    "
4=11DI"&)DJJr   c                     d S r+   r&   rA   s    r   r@   z*fakehttp.<locals>.FakeHTTPConnection.closej       r   )rB   rC   rD   r,   rM   r@   )rE   
mock_closes   r   r.   rG   \   sX         	, 	, 	, 	, 	,  	
    	 	r   r.   )r8   r9   httpclientHTTPConnectionrI   )rI   rP   r.   rE   s    `@@r   fakehttprT   B   s    ' ' ' ' ' ' 'RZ ' ' '2       T[7     #+r   c                       e Zd ZddZd ZdS )FakeHTTPMixinFc                 v    t          ||          }t          j        j        | _        |t          j        _        d S )NrP   )rT   rQ   rR   rS   _connection_class)r-   rI   rP   fake_http_classs       r   rT   zFakeHTTPMixin.fakehttpr   s1    "8
CCC!%!;%4"""r   c                 2    | j         t          j        _        d S r+   )rY   rQ   rR   rS   rA   s    r   
unfakehttpzFakeHTTPMixin.unfakehttpw   s    %)%;"""r   NF)rB   rC   rD   rT   r\   r&   r   r   rV   rV   q   s7        5 5 5 5
< < < < <r   rV   c                       e Zd Zd Zd ZdS )FakeFTPMixinc                 z     G d dt                     }t          j        j        | _        |t          j        _        d S )Nc                   &    e Zd Z	 	 ddZd Zd ZdS ),FakeFTPMixin.fakeftp.<locals>.FakeFtpWrapperNTc                     d S r+   r&   )r-   userpasswdhostportdirstimeout
persistents           r   __init__z5FakeFTPMixin.fakeftp.<locals>.FakeFtpWrapper.__init__~   s    r   c                 ,    t          j                    dfS )Nr   )r8   r9   )r-   filerK   s      r   retrfilez5FakeFTPMixin.fakeftp.<locals>.FakeFtpWrapper.retrfile   s    z||Q&r   c                     d S r+   r&   rA   s    r   r@   z2FakeFTPMixin.fakeftp.<locals>.FakeFtpWrapper.close   rO   r   )NT)rB   rC   rD   rk   rn   r@   r&   r   r   FakeFtpWrapperrb   }   sL        HL $   ' ' '    r   rp   )objectr   r   
ftpwrapper_ftpwrapper_class)r-   rp   s     r   fakeftpzFakeFTPMixin.fakeftp|   sK    		 		 		 		 		V 		 		 		 "(!:$2!!!r   c                 2    | j         t          j        _        d S r+   )rs   r   r   rr   rA   s    r   	unfakeftpzFakeFTPMixin.unfakeftp   s    $($:!!!r   N)rB   rC   rD   rt   rv   r&   r   r   r_   r_   {   s2        3 3 3; ; ; ; ;r   r_   c                   r    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )urlopen_FileTestszTest urlopen() opening a temporary file.

    Try to test as much functionality as possible so as to cut down on reliance
    on connecting to the Net for testing.

    c                    t          d| j        j        z  d          | _        t	          t
          j        d          }	 |                    | j                   |                                 n# |                                 w xY wt
          j        | _	        t          j                            | j	                  | _        t          d| j        z            | _        d S )Nztest_urllib: %s
asciiwbfile:%s)bytes	__class__rB   textr   r   TESTFNwriter@   pathnamer   parsequotequoted_pathnamer"   returned_obj)r-   fs     r   setUpzurlopen_FileTests.setUp   s    -0GG!# #	!4((	GGDIGGIIIIAGGIIII!(%|11$-@@#I0D$DEEs   A- -Bc                 t    | j                                          t          j        t          j                   dS )zShut down the open objectN)r   r@   osremover   r   rA   s    r   tearDownzurlopen_FileTests.tearDown   s0    !!!
	)"#####r   c                 h    dD ].}|                      t          | j        |          d|z             /d S )N)	r:   r=   	readlinesfilenor@   infogeturlgetcode__iter__/object returned by urlopen() lacks %s attribute)
assertTruehasattrr   r-   attrs     r   test_interfacez urlopen_FileTests.test_interface   sS    G 	 	DOOGD$5t<<J   	 	r   c                 j    |                      | j        | j                                                   d S r+   )assertEqualr   r   r:   rA   s    r   	test_readzurlopen_FileTests.test_read   s/    D$5$:$:$<$<=====r   c                     |                      | j        | j                                                   |                      d| j                                        d           d S )Nr   zKcalling readline() after exhausting the file did not return an empty string)r   r   r   r=   rA   s    r   test_readlinezurlopen_FileTests.test_readline   sc    D$5$>$>$@$@AAAd/88::3	4 	4 	4 	4 	4r   c                     | j                                         }|                     t          |          dd           |                     |d         | j        d           d S )Nr   z.readlines() returned the wrong number of linesr   z"readlines() returned improper text)r   r   r   r   r   )r-   
lines_lists     r   test_readlinesz urlopen_FileTests.test_readlines   sm    &0022
Z!I	K 	K 	KA	=	? 	? 	? 	? 	?r   c                     | j                                         }|                     |t          d           |                     t          j        |t          | j                            | j        d           d S )Nzfileno() did not return an intzTReading on the file descriptor returned by fileno() did not return the expected text)	r   r   assertIsInstanceintr   r   r:   r   r   )r-   file_nums     r   test_filenozurlopen_FileTests.test_fileno   sp    $++--h-MNNN3ty>>::DI<	= 	= 	= 	= 	=r   c                 8    | j                                          d S r+   )r   r@   rA   s    r   
test_closezurlopen_FileTests.test_close   s     	!!!!!r   c                 d    |                      | j        j        t          j        j                   d S r+   )r   r   headersemailmessageMessagerA   s    r   test_headerszurlopen_FileTests.test_headers   s)    d/79NOOOOOr   c                 P    |                      | j        j        | j                   d S r+   )r   r   r   r   rA   s    r   test_urlzurlopen_FileTests.test_url   s'    *.0DEEEEEr   c                 D    |                      | j        j                   d S r+   )assertIsNoner   statusrA   s    r   test_statuszurlopen_FileTests.test_status   s"    $+233333r   c                 ~    |                      | j                                        t          j        j                   d S r+   )r   r   r   r   r   r   rA   s    r   	test_infozurlopen_FileTests.test_info   s2    d/44668MNNNNNr   c                 j    |                      | j                                        | j                   d S r+   )r   r   r   r   rA   s    r   test_geturlzurlopen_FileTests.test_geturl   s0    *1133T5IJJJJJr   c                 ^    |                      | j                                                   d S r+   )r   r   r   rA   s    r   test_getcodezurlopen_FileTests.test_getcode   s+    $+335566666r   c                 P    | j         D ]}|                     || j                   d S r+   )r   r   r   )r-   lines     r   	test_iterzurlopen_FileTests.test_iter   s;     % 	. 	.DT49----	. 	.r   c                 l    |                      t          t          j        j        d| j        z              d S )Nz./)assertRaises
ValueErrorr   r   r"   r   rA   s    r   test_relativelocalfilez(urlopen_FileTests.test_relativelocalfile   s,    *V^%;D4=<PQQQQQr   N)rB   rC   rD   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r   r   rx   rx      s"        F F F$ $ $
  > > >4 4 4? ? ?= = =" " "
P P PF F F4 4 4O O OK K K7 7 7. . .R R R R Rr   rx   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
ProxyTestsc                     |                      t          j                              | _        t	          t
          j                  D ]2}d|                                v r| j                            |           3d S )Nproxy)	enterContextr   EnvironmentVarGuardenvlistr   environlowerunset)r-   ks     r   r   zProxyTests.setUp   sk    $$Y%B%D%DEEbj!! 	" 	"A!''))##q!!!	" 	"r   c                    | j                             dd           t          j                                        }|                     d|d                    | j                             dd           |                     t          j                            d                     |                     t          j                            d                     |                     t          j                            d                     d S )NNO_PROXY	localhostno0localhost, anotherdomain.com, newdomain.com:1234anotherdomain.comanotherdomain.com:8888newdomain.com:1234)r   setr   r   getproxies_environmentr   r   proxy_bypass_environmentr-   r   s     r   +test_getproxies_environment_keep_no_proxiesz6ProxyTests.test_getproxies_environment_keep_no_proxies   s    Z---.7799gdm444Z!STTT??@STTUUU??@XYYZZZ??@TUUVVVVVr   c                 *   	 | j                             dd           t          j                                        }|                     d|d                    | j                             dd           t          j                                        }|                     d|           | j                             d           | j                             d           d S # | j                             d           | j                             d           w xY w)N
HTTP_PROXYhttp://somewhere:3128rQ   REQUEST_METHODGET)r   r   r   r   r   r   assertNotInr   r   s     r   test_proxy_cgi_ignorez ProxyTests.test_proxy_cgi_ignore  s    		)HLL'>???n;;==G4gfoFFFHLL)5111n;;==GVW---HNN+,,,HNN<((((( HNN+,,,HNN<((((s   B$C 6Dc                    t           j        j        }| j                            dd           |                      |d                     |                      |d                     |                      |d                     |                      |d                     |                      |d                     |                      |d                     |                      |d	                     |                      |d
                     |                      |d                     |                      |d                     |                      |d                     |                      |d                     |                      |d                     |                      |d                     d S )Nr   z8localhost, anotherdomain.com, newdomain.com:1234, .d.o.tr   	LocalHost	LOCALHOSTz
.localhostr   z.newdomain.com:1234z	foo.d.o.tzd.o.tr   z.anotherdomain.com:8888zwww.newdomain.com:1234prelocalhostnewdomain.comznewdomain.com:1235r   r   r   r   r   r   assertFalser-   bypasss     r   (test_proxy_bypass_environment_host_matchz3ProxyTests.test_proxy_bypass_environment_host_match  s   8ZO	Q 	Q 	Q{++,,,{++,,,{++,,,|,,---344555455666{++,,,w(((788999899:::788999//00000111 45566666r   c                    t           j        j        }| j                            dd           |                      |d                     |                      |d                     | j                            dd           |                      |d                     |                      |d                     |                      |d                     d S )Nr   *r   r   z*, anotherdomain.comr   r   r   s     r   *test_proxy_bypass_environment_always_matchz5ProxyTests.test_proxy_bypass_environment_always_match   s    8Z%%%//000344555Z!788823344400111 45566666r   c                    t           j        j        }| j                            dd           |                      |d                     |                      |d                     |                      |d                     d S )Nr   r   z
localhost
zanotherdomain.com:8888
znewdomain.com:1234
)r   r   r   r   r   r   r   s     r   %test_proxy_bypass_environment_newlinez0ProxyTests.test_proxy_bypass_environment_newline*  s    8ZG	I 	I 	I../// :;;<<< 67788888r   N)	rB   rC   rD   r   r   r   r   r   r   r&   r   r   r   r      sq        " " "	W 	W 	W
) 
) 
)7 7 7&7 7 79 9 9 9 9r   r   c                        e Zd Zd Zd Zd ZdS )ProxyTests_withOrderedEnvc                 b    t           j        | _        t          j                    t           _        d S r+   )r   r   
_saved_envcollectionsOrderedDictrA   s    r   r   zProxyTests_withOrderedEnv.setUp5  s    * ,..


r   c                 (    | j         t          _        d S r+   )r   r   r   rA   s    r   r   z"ProxyTests_withOrderedEnv.tearDown;  s    _


r   c                    dt           j        d<   dt           j        d<   |                     t          j                            d                     |                     t          j                            d                     dt           j        d<   dt           j        d<   t          j                                        }|                     i |           d	t           j        d<   d
t           j        d<   |                     t          j                            d                     |                     t          j                            d                     |                     t          j                            d                     |                     t          j                            d                     |                     t          j                            d                     dt           j        d<   dt           j        d<   t          j                                        }|                     d|d                    d S )N no_proxyr   No_Proxy	arbitrary
http_proxyr   r   z%localhost, noproxy.com, my.proxy:1234zxyz.comznoproxy.com:5678zmy.proxy:1234zmy.proxyzhttp://somewhereelse:3128
Http_ProxyrQ   )	r   r   r   r   r   r   r   r   r   r   s     r   ,test_getproxies_environment_prefer_lowercasezFProxyTests_withOrderedEnv.test_getproxies_environment_prefer_lowercase>  s   !#
:!,
:@@MMNNN@@MMNNN#%
< #:
< .7799W%%%!H
:!*
:??LLMMM??@RSSTTT??PPQQQ@@LLMMM@@MMNNN#:
< #>
< .77990'&/BBBBBr   N)rB   rC   rD   r   r   r   r&   r   r   r   r   3  sF        / / /% % %C C C C Cr   r   c                      e Zd ZdZd Zd Zd Z ej        e	d          d             Z
 ej        e	d          d             Z ej        e	d          d             Z ej        e	d          d	             Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej        ej        dd          d             Zd Zd Zd Z  ej        e	d          d             Z!dS )urlopen_HttpTestsz.Test urlopen() opening a fake http connection.c                    |                      d|z   dz              	 t          d          }|                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                                  d S # |                                  w xY w)Ns   HTTP/s    200 OK

Hello!http://python.org/   Hello!r      rT   r"   r   r=   r   r   r\   )r-   verfps      r   
check_readzurlopen_HttpTests.check_readZ  s    hn'??@@@	-..BR[[]]I666R[[]]C000RYY[[*>???RZZ\\3///OODOOs   B/C" "C8c                    d}|                      d           	 t          j                            |          }|                     |                                |           |                                  d S # |                                  w xY w)Nz-http://docs.python.org/library/urllib.html#OK   HTTP/1.1 200 OK

Hello!)rT   r   r   r"   r   r   r\   )r-   r   r	  s      r   test_url_fragmentz#urlopen_HttpTests.test_url_fragmente  s~    =6777	'',,BRYY[[#...OODOOs   AA6 6Bc                     |                      d           	 t          d          }|                     |j        j                   |                                  d S # |                                  w xY w)Nr  http://www.python.org)rT   r"   r   r	  
will_closer\   )r-   resps     r   test_willclosez urlopen_HttpTests.test_willcloseo  sk    6777	233DOODG.///OODOOs   .A A1zssl module requiredc                 *   t          t          dd                    dgz   D ]o}t          |          }d| d}|                     d           	 t	          |                              dd          }t          j        j        }| 	                    |d	|           5  t          j                            d
|            d d d            n# 1 swxY w Y   | 	                    |d	|           5  t          j                            d|            d d d            n# 1 swxY w Y   t          d
|           }|                     ||                                           |                                  X# |                                  w xY wd S )Nr   !      z//localhost:7777/test/   HTTP/1.1 200 OK

Hello.\\\contain control.*http:https:)r   rangechrrT   reprreplacerQ   rR   
InvalidURLassertRaisesRegexr   r   r"   r   r   r\   )r-   char_nor   schemeless_urlescaped_char_reprr!  r  s          r   (test_url_path_with_control_char_rejectedz:urlopen_HttpTests.test_url_path_with_control_char_rejectedw  sF   E!TNN++tf4 	" 	"Gw<<D<T<<<NMM:;;;" %)JJ$6$6tU$C$C!![3
++ G4E G GI I E EN**+C>+C+CDDDE E E E E E E E E E E E E E E ++ G4E G GI I F FN**+DN+D+DEEEF F F F F F F F F F F F F F F 7~7788  t{{}}555!!!!!!!!/	" 	"sU   AE:#C E:C	E:C	E:0#DE:D#	#E:&D#	'=E::Fc                    |                      d           d}d|z   dz   }	 t          j        j        }|                     |d          5  t
          j                            d|            d d d            n# 1 swxY w Y   |                     |d          5  t
          j                            d|            d d d            n# 1 swxY w Y   t          d|           }|                     d	|	                                           |                     d
|	                                           |                     d|	                                           | 
                                 d S # | 
                                 w xY w)Nr  z:localhost:7777?a=1 HTTP/1.1
X-injected: header
TEST: 123//:8080/test/?test=az*contain control.*\\r.*(found at least . .)r  contain control.*\\nr   
)rT   rQ   rR   r!  r"  r   r   r"   r   r   r\   )r-   rf   r$  r!  r  s        r   4test_url_path_with_newline_header_injection_rejectedzFurlopen_HttpTests.test_url_path_with_newline_header_injection_rejected  s   6777O';;	 /J''IK K A A&&'?~'?'?@@@A A A A A A A A A A A A A A A ''
4KLL B B&&'@'@'@AAAB B B B B B B B B B B B B B B 3>3344DS$++--000T4;;==111T4;;==111OODOOsT   'E2 #A7+E2 7A;;E2 >A;?E2 #C;E2 CE2 CBE2 2Fc                 t   t          t          dd                    dgz   D ]}t          |          }d| d}|                     d           	 t	          |                              dd          }t          j        j        }| 	                    |d	|           5  t          d
|            d d d            n# 1 swxY w Y   | 	                    |d	|           5  t          d|            d d d            n# 1 swxY w Y   |                                  # |                                  w xY wd S )Nr   r  r  z//localhostz/test/r  r  r  r  r  r  )r   r  r  rT   r  r   rQ   rR   r!  r"  r"   r\   )r-   r#  r   r$  r%  r!  s         r   (test_url_host_with_control_char_rejectedz:urlopen_HttpTests.test_url_host_with_control_char_rejected  s   E!TNN++tf4 	" 	"Gw<<D74777NMM:;;;	"$(JJ$6$6tU$C$C!![3
++ G4E G GI I 6 64N445556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ++J8_L]8_8_`` 7 75^556667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 !!!!!!!!	" 	"sU   ADB<0D<C 	 DC 	D C?3D?D	DD	DD5c                    |                      d           d}d|z   dz   }	 t          j        j        }|                     |d          5  t          d|            d d d            n# 1 swxY w Y   |                     |d          5  t          d|            d d d            n# 1 swxY w Y   |                                  d S # |                                  w xY w)	Nr  zlocalhost
X-injected: header
r(  r)  zcontain control.*\\rr  r*  r  )rT   rQ   rR   r!  r"  r"   r\   )r-   rf   r$  r!  s       r   4test_url_host_with_newline_header_injection_rejectedzFurlopen_HttpTests.test_url_host_with_newline_header_injection_rejected  ss   67774';;	/J''35 5 2 20001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ''
4KLL 3 31112223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 OODOOsS   'C A'C 'A++C .A+/C B'C 'B++C .B+/C Cc                 0    |                      d           d S )Ns   0.9r
  rA   s    r   test_read_0_9zurlopen_HttpTests.test_read_0_9  s     	r   c                 0    |                      d           d S )Ns   1.0r4  rA   s    r   test_read_1_0zurlopen_HttpTests.test_read_1_0      r   c                 0    |                      d           d S )Ns   1.1r4  rA   s    r   test_read_1_1zurlopen_HttpTests.test_read_1_1  r8  r   c                     |                      dd           	 |                     t          t          d           |                                  d S # |                                  w xY w)Ns   HTTP/1.1 401 Authentication Required
Date: Wed, 02 Jan 2008 03:03:54 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
Connection: close
Content-Type: text/html; charset=iso-8859-1
TrX   r  rT   r   OSErrorr"   r\   rA   s    r   test_read_bogusz!urlopen_HttpTests.test_read_bogus  sq     
  	 	 	 		gw0DEEEOODOOs   !A A&c                 ,   |                      dd           	 d}|                     t          j        j        |          5  t          d           d d d            n# 1 swxY w Y   |                                  d S # |                                  w xY w)Ns   HTTP/1.1 302 Found
Date: Wed, 02 Jan 2008 03:03:54 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
Location: file://guidocomputer.athome.com:/python/license
Connection: close
Content-Type: text/html; charset=iso-8859-1
TrX   zRedirection to url 'file:r  )rT   r"  r   error	HTTPErrorr"   r\   )r-   msgs     r   test_invalid_redirectz'urlopen_HttpTests.test_invalid_redirect  s       	 	 	 		-C''(>DD . .,---. . . . . . . . . . . . . . . OODOOs/   'A=  AA= A  A= #A $A= =Bc                 ,   t          t                      j                  D ]r}|                     dd           	 |                     t
          j        j        t          d           | 	                                 Z# | 	                                 w xY wd S )Ns_   HTTP/1.1 302 Found
Location: file://guidocomputer.athome.com:/python/license
Connection: close
TrX   http://something)
r  r   maxtriesrT   r   r   r@  rA  r"   r\   )r-   is     r   test_redirect_limit_independentz1urlopen_HttpTests.test_redirect_limit_independent  s     ~''011 		" 		"AMM      "!!&,"8'&( ( ( !!!!!!!!		" 		"s   +A;;Bc                     |                      d           	 |                     t          t          d           |                                  d S # |                                  w xY w)Nr   rE  r<  rA   s    r   test_empty_socketz#urlopen_HttpTests.test_empty_socket  s`     	c	gw0BCCCOODOOs   !A A$c                    |                      t          j        j                  5 }t	          d           d d d            n# 1 swxY w Y   |                     |j        j                   |                     |j        j                   d S )Nz/file://localhost/a/file/which/doesnot/exists.py)	r   r   r@  URLErrorr"   r   	exceptionfilenamereasonr-   es     r   test_missing_localfilez(urlopen_HttpTests.test_missing_localfile  s    v|455 	GEFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G,---*+++++   AAAc                    t          j                    \  }}d|                    t          j        j        d          z   }	 |                     t          j                            |                     t          |          5 }|                     |           d d d            n# 1 swxY w Y   t          j	        |           t          j
        |           n-# t          j	        |           t          j
        |           w xY w|                     t          j                            |                     |                     t          j        j                  5  t          |           d d d            d S # 1 swxY w Y   d S )Nzfile://localhost/r  )tempfilemkstempr   r   pathsepr   existsr"   r@   unlinkr   r   r   r@  rL  )r-   fdtmp_filetmp_fileurlfobjs        r   test_file_notexistsz%urlopen_HttpTests.test_file_notexists  s   '))H)H,<,<RW[#,N,NN	 OOBGNN844555%% &%%%& & & & & & & & & & & & & & & HRLLLIh HRLLLIh11222v|455 	! 	!K   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sC    AC B#C #B''C *B'+C *DE77E;>E;c                    d}|                      t          j        j                  5 }t	          |           d d d            n# 1 swxY w Y   |                     |j        j                   |                     |j        j	                   d S )Nzftp:///path
r   r   r@  rL  r"   r   rM  rN  r   rO  )r-   test_ftp_urlrQ  s      r   test_ftp_nohostz!urlopen_HttpTests.test_ftp_nohost   s    $v|455 	"L!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"-...*+++++s   AA
Ac                    |                      t          j        j                  5 }t	          d           d d d            n# 1 swxY w Y   |                     |j        j                   |                     |j        j	                   d S )Nz.ftp://localhost/a/file/which/doesnot/exists.pyra  rP  s     r   test_ftp_nonexistingz&urlopen_HttpTests.test_ftp_nonexisting'  s    v|455 	FDEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F-...*+++++rS  MAXFTPCACHEr   c                    |                                   	 t          j                            ddddg           t          j        j        d<   t          d           |                                  d S # |                                  w xY w)Nrd   passr      testzftp://localhost)rt   r   r   rr   ftpcacher"   rv   rA   s    r   test_ftp_cache_pruningz(urlopen_HttpTests.test_ftp_cache_pruning-  sz    	.4n.G.GPVXcegik.l.lFN#F+%&&&NNDNNs   AA0 0Bc                    |                      d           	 t          d          }|                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                                  d S # |                                  w xY w)N   HTTP/1.0 200 OK

Hello!zhttp://user:pass@python.org/r  r   r  r  )r-   r	  s     r   test_userpass_inurlz%urlopen_HttpTests.test_userpass_inurl6  s    6777	788BR[[]]I666R[[]]C000RYY[[*HIIIRZZ\\3///OODOOs   B/C C2c                    |                      d           	 d}d                    |          }t          j        j        }dt          |                    d                                        d          z  }t          |          }| 	                    ||j
                            d                     |                     |                                d           |                     |                                d           |                     |                                |           |                     |                                d	           |                                  d S # |                                  w xY w)
Nrn  za b:c dzhttp://{}@python.org/zAuthorization: Basic %s
ASCIIzUTF-8r  r   r  )rT   formatrQ   rR   rS   r
   encodedecoder"   assertInr,   r   r=   assertNotEqualr   r   r\   )r-   userpassr   fakehttp_wrapperauthorizationr	  s         r   test_userpass_inurl_w_spacesz.urlopen_HttpTests.test_userpass_inurl_w_spacesA  sB   6777	 H)00::C#{9:&xw'?'?@@GGPPQMBMM-)9)=)D)DW)M)MNNNR[[]]I666R[[]]C000		S111RZZ\\3///OODOOs   D=E* *F c                     t          j        dt          f          5  t          j                                         d d d            d S # 1 swxY w Y   d S Nr   )r   r$   r%   r   r   	URLopenerrA   s    r   test_URLopener_deprecationz,urlopen_HttpTests.test_URLopener_deprecationT  s    +R0B,CDD 	' 	'N$$&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   AAAc                 <   t          j                    }t          j        dt          f          5  |                     t                    5  t          j        	                    dd|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   zhttps://localhostz/nonexistent/path)cafilecontext)
sslcreate_default_contextr   r$   r%   r   r   r   r   r"   )r-   r  s     r   test_cafile_and_contextz)urlopen_HttpTests.test_cafile_and_contextX  s   ,..+R1C,DEE 	 	"":..  &&'0CW '                 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   B
#A9-B9A=	=B A=	BBBN)"rB   rC   rD   r   r
  r  r  unittest
skipUnlessr  r&  r.  r0  r2  r5  r7  r:  r>  rC  rH  rJ  rR  r_  rc  re  r   rq   r   r   rl  ro  rz  r~  r  r&   r   r   r  r  W  s#       88	 	 	     X344" " 54"4 X344  542 X344" " 54"  X344  54     
               " " "  , , ,! ! !, , ,, , , U\&.-33  43	 	 	  &' ' ' X344  54  r   r  c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )urlopen_DataTestsz"Test urlopen() opening a data URL.c                    |                      t          j        j                   d| _        d| _        d| _        d| _        d| _        t          j        	                    | j                  | _
        t          j        	                    | j                  | _        t          j        	                    | j                  | _        d S )Nu   test data URLs :;,%=& ö Ä sU   PNG

   IHDR         {@   sRGB    IDATc```? 
o/    IENDB`zZdata:text/plain;charset=UTF-8,test%20data%20URLs%20%3A%3B%2C%25%3D%26%20%C3%B6%20%C3%84%20zPdata:text/plain;charset=ISO-8859-1;base64,dGVzdCBkYXRhIFVSTHMgOjssJT0mIPYgxCA%3Dzdata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7
QOjdAAAAAXNSR0IArs4c6QAAAA9JREFUCNdj%0AYGBg%2BP//PwAGAQL%2BCm8 vHgAAAABJRU5ErkJggg%3D%3D%0A%20)
addCleanupr   r   
urlcleanupr   imagetext_urltext_url_base64	image_urlr"   text_url_resptext_url_base64_respimage_url_resprA   s    r   r   zurlopen_DataTests.setUpe  s    1222 ;	F 	
( 	 	. 	
 $^33DMBB$*N$:$: %" %"!$n44T^DDr   c                 h    dD ].}|                      t          | j        |          d|z             /d S )N)r:   r=   r   r@   r   r   r   r   r   )r   r   r  r   s     r   r   z urlopen_DataTests.test_interface  sS    G 	 	DOOGD$6==J   	 	r   c                 V   |                      | j                                        t          j        j                   |                     | j                                                                        ddg           |                     | j	                                        d         t          t          | j                                       |                     t          j                            d                                                                          ddg           d S )N)z
text/plainr   )charsetz
ISO-8859-1zcontent-lengthzdata:,)r  zUS-ASCII)r   r  r   r   r   r   r   r  
get_paramsr  strr   r  r   r   r"   rA   s    r   r   zurlopen_DataTests.test_info  s   d055779NOOO27799DDFF!:;	= 	= 	=,11334DEDJ  	" 	" 	"//99>>@@KKMM!89	; 	; 	; 	; 	;r   c                 2   |                      | j                                        | j                   |                      | j                                        | j                   |                      | j                                        | j                   d S r+   )r   r  r   r  r  r  r  r  rA   s    r   r   zurlopen_DataTests.test_geturl  s    +2244dmDDD299;; 	" 	" 	",3355t~FFFFFr   c                    |                      | j                                                            t	          | j                                                                                  d                   | j                   d S Nr  )r   r  r:   rt  dictr   r  r   rA   s    r   test_read_textz urlopen_DataTests.test_read_text  s|    +002299#((**557788CE EFJi	Q 	Q 	Q 	Q 	Qr   c                    |                      | j                                                            t	          | j                                                                                  d                   | j                   d S r  )r   r  r:   rt  r  r   r  r   rA   s    r   test_read_text_base64z'urlopen_DataTests.test_read_text_base64  sw    27799@@*//11<<>>??	JL LI	 	 	 	 	r   c                 j    |                      | j                                        | j                   d S r+   )r   r  r:   r  rA   s    r   test_read_imagez!urlopen_DataTests.test_read_image  s/    ,1133TZ@@@@@r   c                 \    |                      t          t          j        j        d           d S )Nzdata:text/plainr   r   r   r   r"   rA   s    r   test_missing_commaz$urlopen_DataTests.test_missing_comma  s&    *V^%;<MNNNNNr   c                 \    |                      t          t          j        j        d           d S )Nzdata:;base64,Cg=r  rA   s    r   test_invalid_base64_dataz*urlopen_DataTests.test_invalid_base64_data  s&    *V^%;<NOOOOOr   N)rB   rC   rD   r   r   r   r   r   r  r  r  r  r  r&   r   r   r  r  b  s        ,,E E E>  ; ; ;G G GQ Q Q  
A A AO O OP P P P Pr   r  c                   V    e Zd ZdZd Zd Zd ZddZd Zd Z	d	 Z
d
 Zd Zd Zd ZdS )urlretrieve_FileTestsz(Test urllib.urlretrieve() on local filesc                    |                      t          j        j                   g | _        |                     t          j                   d| _        	 t          t          j        d          }|
                    | j                   |                                 |                                 d S #  Y d S xY w# |                                 w #  Y w xY wxY w)Ns   testing urllib.urlretriever{   )r  r   r   r  	tempFilesregisterFileForCleanUpr   r   r   r   r   r@   )r-   FILEs     r   r   zurlretrieve_FileTests.setUp  s    1222  	##I$45551			($//DJJty!!!JJLLLDDD DDs1   AB9 B1 1B69C:CCCCc                 P    | j         D ]}t          j        |           #  Y xY wd S r+   )r  r   r   )r-   eachs     r   r   zurlretrieve_FileTests.tearDown  s7    N 	 	D4DD	 	s   #c                     t           j                            |          }	 |                    d           n"# t          $ r t          j        d          w xY wdt          j        	                    |          z  S )Nzutf-8z!filePath is not encodable to utf8z	file://%s)
r   rW  abspathrs  UnicodeEncodeErrorr  SkipTestr   r   r	   )r-   filePaths     r   constructLocalFileUrlz+urlretrieve_FileTests.constructLocalFileUrl  s|    7??8,,	IOOG$$$$! 	I 	I 	I#$GHHH	IV^88BBBBs	   7 Ar   c                 R   t          j                    \  }}	 |                     |           t          j        |d          }|                    |           |                                 |                                 n'#  Y n#xY w# |                                 w #  Y w xY wxY w|S )zCreates a new temporary file containing the specified data,
        registers the file for deletion during the test fixture tear down, and
        returns the absolute path of the file.r{   )rU  rV  r  r   fdopenr   r@   )r-   r    newFdnewFilePathnewFiles        r   createNewTempFilez'urlretrieve_FileTests.createNewTempFile  s    
 &-//{	''444it,,GMM$MMOOODD DDs0   AB +B   BB$BB$B!B$c                 :    | j                             |           d S r+   )r  append)r-   fileNames     r   r  z,urlretrieve_FileTests.registerFileForCleanUp  s    h'''''r   c                    t           j                            dt          j        z            }|                     |d         t          j                   |                     |d         t          j        j	        d           d S )Nr|   r   r   zFdid not get an email.message.Message instance as second returned value)
r   r   urlretriever   r   r   r   r   r   r   )r-   results     r   
test_basicz urlretrieve_FileTests.test_basic  sr     ++I	8H,HIII$4555fQi)>9	: 	: 	: 	: 	:r   c                    dt           j        z  }|                     |           t          j                            |                     t           j                  |          }|                     ||d                    |                     t          j
                            |          d           t          |d          }	 |                                }|                                 |                                 n'#  Y n#xY w# |                                 w #  Y w xY wxY w|                     | j        |           d S )N%s.2r   zcopy of the file was not maderb)r   r   r  r   r   r  r  r   r   r   rW  rY  r   r:   r@   r   )r-   second_tempr  r  r   s        r   	test_copyzurlretrieve_FileTests.test_copy  s    y//##K000++D,F,F- -*, ,fQi000{33 69 	: 	: 	:K&&	99;;DJJLLLDD DDD)))))s0   (D *C? ?DD#DD#D D#c                      dgf fd	}dt           j        z  }                     |           t          j                                                 t           j                  ||           d S )Nr   c                                          | t                                          |t                                          |t                                         | |d                    |d         dz   |d<   d S )Nr   r   )r   r   r   )block_countblock_read_size	file_sizecount_holderr-   s       r   
hooktesterz9urlretrieve_FileTests.test_reporthook.<locals>.hooktester  su    !!+s333!!/3777!!)S111[,q/:::*1o1LOOOr   r  )r   r   r  r   r   r  r  )r-   r  r  s   `  r   test_reporthookz%urlretrieve_FileTests.test_reporthook  s    NOS 	2 	2 	2 	2 	2 	2 y//##K000""&&y'788	% 	% 	% 	% 	%r   c                 B   g }|fd}|                                  }t          j                            |                     |          t
          j        |           |                     t          |          d           |                     |d         d         d           d S )Nc                 6    |                     | ||f           d S r+   r  r  r  r  _reports       r   r  zAurlretrieve_FileTests.test_reporthook_0_bytes.<locals>.hooktester  !    NNK)DEEEEEr   r   r   r   	r  r   r   r  r  r   r   r   r   r-   reportr  srcFileNames       r   test_reporthook_0_bytesz-urlretrieve_FileTests.test_reporthook_0_bytes  s    HN 	F 	F 	F 	F,,..""4#=#=k#J#Jj	* 	* 	*Va(((1q)))))r   c                    g }|fd}|                      d          }t          j                            |                     |          t
          j        |           |                     t          |          d           |                     |d         d         d           |                     |d         d         d           d S )Nc                 6    |                     | ||f           d S r+   r  r  s       r   r  zAurlretrieve_FileTests.test_reporthook_5_bytes.<locals>.hooktester$  r  r   s   xxxxxr   r      r   r  r  s       r   test_reporthook_5_bytesz-urlretrieve_FileTests.test_reporthook_5_bytes  s     HN 	F 	F 	F 	F,,X66""4#=#=k#J#Jj	* 	* 	*Va(((1q)))1q)))))r   c                    g }|fd}|                      ddz            }t          j                            |                     |          t
          j        |           |                     t          |          d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           |                     |d         d         d           d S )	Nc                 6    |                     | ||f           d S r+   r  r  s       r   r  zDurlretrieve_FileTests.test_reporthook_8193_bytes.<locals>.hooktester2  r  r      xi      r   r   r   i    r  r  s       r   test_reporthook_8193_bytesz0urlretrieve_FileTests.test_reporthook_8193_bytes-  s    HN 	F 	F 	F 	F,,TD[99""4#=#=k#J#Jj	* 	* 	*Va(((1t,,,1t,,,1t,,,1t,,,,,r   N)r   )rB   rC   rD   r   r   r   r  r  r  r  r  r  r  r  r  r&   r   r   r  r    s        22  0  C C C    ( ( (: : :* * *$% % %	* 	* 	** * *- - - - -r   r  c                       e Zd ZdZd Zd ZdS )urlretrieve_HttpTestsz5Test urllib.urlretrieve() using fake http connectionsc                    |                      t          j        j                   |                     d           d }|                     t          j        j                  5  	 t          j                            t          j
        |           |                                  n# |                                  w xY w	 d d d            d S # 1 swxY w Y   d S )N   HTTP/1.1 200 OK
Date: Wed, 02 Jan 2008 03:03:54 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
Connection: close
Content-Length: 100
Content-Type: text/html; charset=iso-8859-1

FF
c                     d S r+   r&   )par1par2par3s      r   _reporthookzYurlretrieve_HttpTests.test_short_content_raises_ContentTooShortError.<locals>._reporthookN  s    Dr   )
reporthookr  r   r   r  rT   r   r@  ContentTooShortErrorr  r   TEST_HTTP_URLr\   )r-   r  s     r   .test_short_content_raises_ContentTooShortErrorzDurlretrieve_HttpTests.test_short_content_raises_ContentTooShortErrorA  s   1222  	 	 		 	 	 v|@AA 	" 	""**7+@6A + C C C !!!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s*   !C
#+B#C
#B99C

CCc                    |                      t          j        j                   |                     d           |                     t          j        j                  5  	 t          j                            t          j
                   |                                  n# |                                  w xY w	 d d d            d S # 1 swxY w Y   d S )Nr  r  rA   s    r   Atest_short_content_raises_ContentTooShortError_without_reporthookzWurlretrieve_HttpTests.test_short_content_raises_ContentTooShortError_without_reporthookX  s    1222  	 	 	 v|@AA 	" 	""**7+@AAA!!!!!!!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s*   C )B	CB44CC	C	N)rB   rC   rD   r   r  r  r&   r   r   r  r  >  s8        ??" " "." " " " "r   r  c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )QuotingTestsau  Tests for urllib.quote() and urllib.quote_plus()

    According to RFC 3986 (Uniform Resource Identifiers), to escape a
    character you write it as '%' + <2 character US-ASCII hex value>.
    The Python code of ``'%' + hex(ord(<character>))[2:]`` escapes a
    character properly. Case does not matter on the hex letters.

    The various character sets specified are:

    Reserved characters : ";/?:@&=+$,"
        Have special meaning in URIs and must be escaped if not being used for
        their special meaning
    Data characters : letters, digits, and "-_.!~*'()"
        Unreserved and do not need to be escaped; can be, though, if desired
    Control characters : 0x00 - 0x1F, 0x7F
        Have no use in URIs so must be escaped
    space : 0x20
        Must be escaped
    Delimiters : '<>#%"'
        Must be escaped
    Unwise : "{}|\^[]`"
        Must be escaped

    c                 $   d                     g d          }t          j                            |          }|                     ||d|d|           t          j                            |          }|                     ||d|d|           d S )Nr   )ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
0123456789z_.-~using quote():  != using quote_plus(): )joinr   r   r   r   
quote_plus)r-   do_not_quoter  s      r   test_never_quotezQuotingTests.test_never_quote  s    xx !) !) !) * * ##L11vv6BllFFK	M 	M 	M((66vv:F,,O	Q 	Q 	Q 	Q 	Qr   c                 f    |                      t          j        j        j        d         d           d S )Nr   r  )r   r   r   r   __defaults__rA   s    r   test_default_safezQuotingTests.test_default_safe  s+    +8;SAAAAAr   c                    d}t           j                            ||          }|                     ||d|d|           t           j                            ||          }|                     ||d|d|           t           j                            |d          }|                     ||d|d|           t           j                            ddd	
          }t           j                            ddd
          }|                     ||d|d|           t           j                            ddd
          }t           j                            ddd
          }|                     ||d|d|           d S )Nz<>safer  r  r  s   <>u   aüblatin-1   ü)encodingr  r      )r   r   r   r   r  )r-   quote_by_defaultr  expects       r   	test_safezQuotingTests.test_safe  s   ##$4;K#LL)666F6F6FO	Q 	Q 	Q(()9.> ) @ @)66***FF4	5 	5 	5 ##$45#AA)666F6F6FO	Q 	Q 	Q ##Hyv#NN##Hyr#JJ &&&&*	+ 	+ 	+ ##Hyw#OO##Hyr#JJ &&&&*	+ 	+ 	+ 	+ 	+r   c                 8   d t          d          D             }|                    d           |                    t          d                     d                    |          }|D ]}t          j                            |          }|                     t          |          |d|dt          |          d|           t          j        	                    |          }|                     t          |          |d	|d
t          |          d|           ~d}d}t          j                            |          }|                     ||d|d|           t          j        	                    |          }|                     ||d	|d|           d S )Nc                 ,    g | ]}t          |          S r&   )r  ).0nums     r   
<listcomp>z5QuotingTests.test_default_quoting.<locals>.<listcomp>  s    666SC666r       z<>#%"{}|\^[]`r  r   r  z should be escaped to z, not r  z should be escapes to zab[]cdz
ab%5B%5Dcdr  )
r  r  r  r  r   r   r   r   r   r  )r-   should_quoter   r  partial_quoteexpecteds         r   test_default_quotingz!QuotingTests.test_default_quoting  s    76E"II666,---CHH%%%ww|,,  
	> 
	>D\''--FYt__ff #ddIdOOOOVV=> > > \,,T22FYt__ff #ddIdOOOOVV=> > > >  ##M22666>hhG	I 	I 	I((7766;C88VVL	N 	N 	N 	N 	Nr   c           
         t           j                            d          }|                     |t	          d          d|dt	          d                     t           j                            d          }|                     |dd|z             d}|                    dt	          d                    }t           j                            |          }|                     ||d|d|           |                    dd          }t           j                            |          }|                     ||d|d|           d S )Nr+  r  r  +zusing quote_plus(): %r != +z
a b cd e fr  )r   r   r   r   r   r  r   )r-   r  givenr
  s       r   test_quoting_spacezQuotingTests.test_quoting_space  sU    ##C((36<ffinnnM	O 	O 	O((--6?	A 	A 	AsIcNN33##E**6<ffffE	G 	G 	GsC((((//;A6666J	L 	L 	L 	L 	Lr   c                    |                      t          j                            d          d           |                      t          j                            dd          d           |                      t          j                            d          d           |                      t          j                            dd          d           d S )Nzalpha+beta gammazalpha%2Bbeta+gammar  zalpha+beta+gammas   alpha+beta gamma   +)r   r   r   r  rA   s    r   test_quoting_pluszQuotingTests.test_quoting_plus  s    001CDD-	/ 	/ 	/001CSII+	- 	- 	- 	001DEE-	/ 	/ 	/ 	001CTJJ+	- 	- 	- 	- 	-r   c                 X   d}d}t           j                            |          }|                     ||d|d|           |                     t
          t           j        j        |d           t           j                            |          }|                     ||d|d|           d S )N   ab%A2%D8ab%FFr  r  r  r  zusing quote_from_bytes(): )r   r   r   r   r   	TypeErrorquote_from_bytesr-   r  r
  r  s       r   test_quote_byteszQuotingTests.test_quote_bytes  s    !##E**6<ffffE	G 	G 	G 	)V\%7%. 	 	0 	0 	0 ..u55"FFFF,	- 	- 	- 	- 	-r   c                 r   d}d}t           j                            |          }|                     ||d|d|           t           j                            |d d           }|                     ||d|d|           d}d}t           j                            |d          }|                     ||d|d|           d	}d
}t           j                            |          }|                     ||d|d|           d	}|                     t
          t           j        j        |d           d	}d}t           j                            |dd          }|                     ||d|d|           d	}d}t           j                            |dd          }|                     ||d|d|           d S )Nu   ¢Øabÿz%C2%A2%C3%98ab%C3%BFr  r  r  errorsr  r  r      漢字%E6%BC%A2%E5%AD%97z%3F%3Fr   z%26%2328450%3B%26%2323383%3Bxmlcharrefreplace)r   r   r   r   r   r  r#  s       r   test_quote_with_unicodez$QuotingTests.test_quote_with_unicode  s?    '##E**6<ffffE	G 	G 	G ##ED#FF6<ffffE	G 	G 	G !##EI#>>6<ffffE	G 	G 	G %##E**6<ffffE	G 	G 	G ,fl.@%-6 	 	8 	8 	8 ##EI+4 $ 6 66<ffffE	G 	G 	G /##EI+> $ @ @6<ffffE	G 	G 	G 	G 	Gr   c                    d}d}t           j                            |d          }|                     ||d|d|           d}d}t           j                            |dd	
          }|                     ||d|d|           d S )Nu   ¢Ø ÿz
%A2%D8+%FFr  r   r  r  u   ab漢字 cdzab%3F%3F+cdr   r&  )r   r   r  r   r#  s       r   test_quote_plus_with_unicodez)QuotingTests.test_quote_plus_with_unicode(  s    (((CC;A6666J	L 	L 	L $((09 ) ; ;;A6666J	L 	L 	L 	L 	Lr   N)rB   rC   rD   r   r  r  r  r  r  r  r$  r+  r-  r&   r   r   r  r  k  s         2Q Q QB B B+ + +:N N N8L L L&
- 
- 
-- - - (G (G (GTL L L L Lr   r  c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )UnquotingTestszwTests for unquote() and unquote_plus()

    See the doc string for quoting_Tests for details on quoting and such.

    c           	      *   g }t          d          D ]}t          t          |                    }t          |          }t          j                            |          }|                     ||d|d|           t          j                            |          }|                     ||d|d|           |                    |           d	                    |          }~t          j                            |          }|                     |
                    d          dd|z             |                     t          t          ft          j        j        d            |                     t          t          ft          j        j        d	           d S )
N   using unquote(): r  using unquote_plus(): r   r   r   z/using unquote(): not all characters escaped: %sr&   )r  r   r  r   r   unquoter   unquote_plusr  r  countr   r!  AttributeError)r-   escape_listr  r  r
  r  escape_strings          r   test_unquotingzUnquotingTests.test_unquoting?  s   :: 
	& 
	&Cc#hh''EXXF\))%00FVVV<BFFFFKM M M\..u55FVVV$ffff./ / / u%%%%,,%%m44c**A &'	( 	( 	( 	9n5v|7KTRRR9n5v|7KRPPPPPr   c                 "   d}|}t           j                            |          }|                     ||d|d|           d}|}t           j                            |          }|                     ||d|d|           d}|}t           j                            |          }|                     ||d|d|           d}t	          |d          }t           j                            |          }|                     ||d|d|           d}t	          |d          }t           j                            |          }|                     ||d|d|           d}t	          |d          }t           j                            |          }|                     ||d|d|           |                     t          t          ft           j        j        d            |                     t          t          ft           j        j        d           d S )	Nz%xabr2  r  z%xr   rz   using unquote_to_bytes(): r&   )	r   r   r4  r   r}   unquote_to_bytesr   r!  r7  r#  s       r   test_unquoting_badpercentz(UnquotingTests.test_unquoting_badpercentV  s<   %%e,,"FFFF*, 	- 	- 	-%%e,,"FFFF*, 	- 	- 	-%%e,,"FFFF*, 	- 	- 	- ug&&..u55"FFFF*, 	- 	- 	-ug&&..u55"FFFF*, 	- 	- 	-ug&&..u55"FFFF*, 	- 	- 	-9n5v|7TVZ[[[9n5v|7TVXYYYYYr   c                     d}d}t           j                            |          }|                     ||d|d|           d S )Nz%Ab%eAs   r<  r  r   r   r=  r   r#  s       r   test_unquoting_mixed_casez(UnquotingTests.test_unquoting_mixed_casez  sY    ..u55"FFFF,	- 	- 	- 	- 	-r   c                    dt          d          z  }d}t          j                            |          }|                     ||d|d|           t          j                            |          }|                     ||d|d|           d S )Nzab%sdcabcdr  r  r3  )r   r   r   r4  r   r5  r#  s       r   test_unquoting_partsz#UnquotingTests.test_unquoting_parts  s     )C..(%%e,,6<ffffE	G 	G 	G**511=CVVVVL	N 	N 	N 	N 	Nr   c                 *   d}|}t           j                            |          }|                     ||d|d|           |                    dd          }t           j                            |          }|                     ||d|d|           d S )Nzare+there+spaces...r2  r  r  r+  r3  )r   r   r4  r   r   r5  r#  s       r   test_unquoting_plusz"UnquotingTests.test_unquoting_plus  s    %%%e,,8>G	I 	I 	IsC((**511=CVVVVL	N 	N 	N 	N 	Nr   c                    d}d}t           j                            |          }|                     ||d|d|           t           j                            d          }d}|                     ||d|d|           d}d}t           j                            |          }|                     ||d|d|           d	}d}t           j                            |          }|                     ||d|d|           d S )
N"br%C3%BCckner_sapporo_20050930.docs   brückner_sapporo_20050930.docr<  r  	   漢%C3%BCs   漢üs   %A2%D8ab%FFr  s	   %A2ab%FFr@  r#  s       r   test_unquote_to_bytesz$UnquotingTests.test_unquote_to_bytes  sA   48..u55"FFFF,	- 	- 	- ..~>>("FFFF,	- 	- 	- "..u55"FFFF,	- 	- 	-
  "..u55"FFFF,	- 	- 	- 	- 	-r   c                    d}d}t           j                            |          }|                     ||d|d|           t           j                            |d d           }|                     ||d|d|           t           j                            dd          }d}|                     ||d|d|           d	}d
}t           j                            |          }|                     ||d|d|           d}d}t           j                            |          }|                     ||d|d|           t           j                            |d          }|                     ||d|d|           d}d}t           j                            |d          }|                     ||d|d|           t           j                            d          }d}|                     ||d|d|           t           j                            dd          }d}|                     ||d|d|           d S )NrI  u   brückner_sapporo_20050930.docr2  r  r&  zbr%FCckner_sapporo_20050930.docr  r   r)  r(  z%F3%B1u   �r   )r'  r   ignorerJ  u   漢üu   漢%FCr   r   r4  r   r#  s       r   test_unquote_with_unicodez(UnquotingTests.test_unquote_with_unicode  s   45%%e,,8>G	I 	I 	I %%ed4%HH8>G	I 	I 	I %%&G/8 & : :58>G	I 	I 	I %%%e,,8>G	I 	I 	I %%e,,8>G	I 	I 	I %%eI%>>8>G	I 	I 	I %%eH%==8>G	I 	I 	I %%n558>G	I 	I 	I
 %%kI%FF8>G	I 	I 	I 	I 	Ir   c                    d}d}t           j                            |          }|                     ||d|d|           d}d}t           j                            |          }|                     ||d|d|           d}d}t           j                            |          }|                     ||d|d|           d S )	Ns   blueberryjamblueberryjamr2  r  s   blåbærsyltetøyu   blåbærsyltetøys   bl%c3%a5b%c3%a6rsyltet%c3%b8ju   blåbærsyltetøjrN  r#  s       r   test_unquoting_with_bytes_inputz.UnquotingTests.test_unquoting_with_bytes_input  s    %%e,,8>G	I 	I 	I 70%%e,,8>G	I 	I 	I 10%%e,,8>G	I 	I 	I 	I 	Ir   N)rB   rC   rD   r   r:  r>  rA  rE  rG  rK  rO  rR  r&   r   r   r/  r/  8  s         Q Q Q."Z "Z "ZH- - -
N 
N 
N
N 
N 
N- - ->8I 8I 8ItI I I I Ir   r/  c                   Z    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )urlencode_TestszTests for urlencode()c                 j   g d}t           j                            |          }|D ]"}|                     ||d|d|d|           #|                     |                    d          dd|d|                    d                     |                    d          }||dz
           }||dz            }|                     |                                o|                                d|d	|           |                     t          |          d
d|dt          |          dd
           dS )a  Helper method for testing different input types.

        'given' must lead to only the pairs:
            * 1st, 1
            * 2nd, 2
            * 3rd, 3

        Test cannot assume anything about order.  Docs make no guarantee and
        have possible dictionary input.

        )z1st=1z2nd=2z3rd=3ztesting z: z not found in &r   z: expected 2 '&'s; got r   z%: '&' not located in proper place in    z#: unexpected number of characters: r  N)
r   r   	urlencoderu  r   r6  indexr   isdigitr   )	r-   r  	test_typeexpect_somewherer  r  amp_locationon_amp_lefton_amp_rights	            r   help_inputtypezurlencode_Tests.help_inputtype  s~    766''..( 	8 	8HMM(FF#))XXXvv78 8 8 8 	c**AA#))V\\#%6%6%68	9 	9 	9 ||C((\A-.lQ./++--H,2F2F2H2Hii)	* 	* 	* 	Vkk $))S[[[[++?	@ 	@ 	@ 	@ 	@r   c                 :    |                      ddddd           d S )N123)1st2nd3rdzusing dict as input typer`  rA   s    r   test_using_mappingz"urlencode_Tests.test_using_mapping.  s3    3c==6	8 	8 	8 	8 	8r   c                 6    |                      g dd           d S )N))re  rb  )rf  rc  )rg  rd  z*using sequence of two-item tuples as inputrh  rA   s    r   test_using_sequencez#urlencode_Tests.test_using_sequence3  s5    FFFH	J 	J 	J 	J 	Jr   c                 0   ddi}t          d          dt          d          }t          j                            |          }|                     ||           ddi}d}t          j                            |          }|                     ||           d S )NrV  =zkey namezA bunch of pluseszkey+name=A+bunch+of+pluses)r   r   r   rX  r   r#  s       r   test_quotingzurlencode_Tests.test_quoting8  s    S	%cNNNNIcNNN;''..(((/0-''..(((((r   c                    dg di}dt           j                            t          g d                    z  }t           j                            |          }|                     ||           t           j                            |d          }|d         D ]}d|z  }|                     ||           |                     |                    d          dd|                    d          z             d S )Nsequence)rb  rc  rd  zsequence=%sTrV  r   zExpected 2 '&'s, got %s)r   r   r  r  rX  r   ru  r6  )r-   r  r
  r  values        r   
test_doseqzurlencode_Tests.test_doseqC  s    OOO,!8!8___9M9M!N!NN''..(((''t44:& 	* 	*E"U*FMM&&))))c**A2V\\#5F5FF	H 	H 	H 	H 	Hr   c                     |                      dt          j                            i                      |                      dt          j                            g                      d S r|  r   r   r   rX  rA   s    r   test_empty_sequencez#urlencode_Tests.test_empty_sequenceP  sT    V\33B77888V\33B7788888r   c                     |                      dt          j                            ddi                     |                      dt          j                            dd i                     d S )Nza=1ar   za=Nonert  rA   s    r   test_nonstring_valuesz%urlencode_Tests.test_nonstring_valuesT  s\     6 6Qx @ @AAA6<#9#93+#F#FGGGGGr   c                 ~   |                      dt          j                            dddgid                     |                      dt          j                            dd dgid                     t	          j        ddg          }|                      d	t          j                            d|id                     d S )
Nza=1&a=2rw  r   r   Tz
a=None&a=a)rw  r   )br   za=a&a=b)r   r   r   rX  r   r   )r-   r    s     r   test_nonstring_seq_valuesz)urlencode_Tests.test_nonstring_seq_valuesX  s    FL$:$:C!Q=$$O$OPPP//tSk0BDII	K 	K 	K&(';<<//dTBB	D 	D 	D 	D 	Dr   c                 f   d}d}t           j                            |dd          }|                     ||           d}d}t           j                            |          }|                     ||           d}d}t           j                            |d	          }|                     ||           d S )
N)       Á%3F=%3Frq  r   r&  %C2%A0=%C3%81%A0=%C1r  r   r   r   rX  r   r#  s       r   test_urlencode_encodingz'urlencode_Tests.test_urlencode_encoding`  s    '''	'RR((( ( ''..((( (''	'BB(((((r   c                    d}d}t           j                            |ddd          }|                     ||           d}d}t           j                            |ddd	          }|                     ||           d}d
}t           j                            |d          }|                     ||           d}d}t           j                            |d          }|                     ||           d}d}t           j                            |dd          }|                     ||           d}d}t           j                            |dd          }|                     ||           d S )Nr}  r  Trq  r   )doseqr  r'  ))r~  )r   r  z%3F=1&%3F=%3Fr&  r  ))r~  )*   r  z%C2%A0=42&%C2%A0=%C3%81r  r  r   z%A0=42&%A0=%C1r  r#  s       r   test_urlencode_encoding_doseqz-urlencode_Tests.test_urlencode_encoding_doseqs  s   '''T18 ( L L((( - ''t18 ( L L((( ( ''t44(((-*''t44((( (''ti'HH(((-!''ti'HH(((((r   c                 X   d}d}t           j                            |          }|                     ||           t           j                            |d          }|                     ||           d}d}t           j                            |d          }|                     ||           d S )N)   $   $z%A0%24=%C1%24T))r  )r  r  z%A0%24=42&%A0%24=%C1%24r  r#  s       r   test_urlencode_bytesz$urlencode_Tests.test_urlencode_bytes  s    - ''..(((''t44((( 4*''t44(((((r   c                    d}t           j                            |d          }d}|                     ||           d}t           j                            |dd          }d}|                     ||           d}d}t           j                            |dd          }|                     ||           d}t           j                            |dd	
          }d}|                     ||           d}d}t           j                            |ddd	          }d}d}t           j                            |ddd	
          }|                     ||           d S )Nr  z:$r  z	%A0$=%C1$T)r  r  ))r  )r     r  z%A0$=%C1$&%A0$=13&%A0$=42r  )r  r  )r  r  r  r  )r-   r  r  r
  s       r   &test_urlencode_encoding_safe_parameterz6urlencode_Tests.test_urlencode_encoding_safe_parameter  sy   
 .''D'99(((-''T'EE((( 9,''t$'??((( .''D1: ( < <(((-''T1: ( < < 9,''t$1: ( < <(((((r   N)rB   rC   rD   r   r`  ri  rk  rn  rr  ru  rx  r{  r  r  r  r  r&   r   r   rT  rT    s        @ @ @@8 8 8
J J J
	) 	) 	)H H H9 9 9H H HD D D) ) )&#) #) #)J) ) )&) &) &) &) &)r   rT  c                       e Zd ZdZd Zd Z ej        ej	        dk    d          d             Z
 ej        ej	        dk    d          d             Zd	S )
Pathname_Testsz&Test pathname2url() and url2pathname()c                 >   t           j                            dddd          }d}t          j                            |          }|                     ||d|d|           t          j                            |          }|                     ||d|d|           d S )	Npartsofrw  rW  zparts/of/a/pathpathname2url() failed; r  zurl2pathame() failed; )r   rW  r  r   r   r	   r   r   )r-   expected_pathexpected_urlr  s       r   r  zPathname_Tests.test_basic  s    WdC@@(,,];;vv &&,,0	1 	1 	1 ,,\:: &&--1	2 	2 	2 	2 	2r   c                 8   t           j                            ddd          }dt          j                            d          z  }t          j                            |          }|                     ||d|d|           |}t          j        	                    |          }|                     ||d|d|           t           j                            dd	          }d
t          j                            d          z  }t          j                            |          }|                     ||d|d|           d}t           j                            dd          }t          j        	                    |          }|                     ||d|d|           d S )Nneedszquot=ingherezneeds/%s/herer  r  zurl2pathname() failed; z	make sureusing_quotez%s/using_quotezmake+sure/using_unquotez	make+sureusing_unquote)
r   rW  r  r   r   r   r   r	   r   r   r#  s       r   rn  zPathname_Tests.test_quoting  s    Wj&99 6<#5#5j#A#AA,,U33 &&&&*	+ 	+ 	+ ,,V44 &&&&*	+ 	+ 	+ [-88!FL$6$6{$C$CC,,U33 &&&&*	+ 	+ 	+ *k?;;,,U33 &&&&*	+ 	+ 	+ 	+ 	+r   win32z*test specific to the nturl2path functions.c                    d}d}t           j                            |          }|                     ||d|d|           d}d}t           j                            |          }|                     ||d|d|           d S )Nz
\\?\C:\dirz	///C:/dirr  r  z\\?\unc\server\share\dirz/server/share/dir)r   r   r	   r   r#  s       r   test_prefixeszPathname_Tests.test_prefixes  s     !,,U33 &&&&*	+ 	+ 	+ 1$,,U33 &&&&*	+ 	+ 	+ 	+ 	+r   z.test specific to the urllib.url2path function.c           	         d}d}|D ]>}t           j                            |          }|                     ||d|d|           ?d}d}t           j                            |          }|                     ||d|d|           d S )N)z/C:/z///C:/z/C|//C:\z'urllib.request..url2pathname() failed; r  z
///C|/pathzC:\pathz&urllib.request.url2pathname() failed; )r   r   r   r   )r-   r  r
  r   r  s        r   test_ntpathzPathname_Tests.test_ntpath  s     , 	/ 	/C^0055FVVV$ffff./ / / / ,,U33 &&&&*	+ 	+ 	+ 	+ 	+r   N)rB   rC   rD   r   r  rn  r  r  sysplatformr  r  r&   r   r   r  r    s        002 2 2+ + +6 X0EG G+ +G G+  X0IK K+ +K K+ + +r   r  c                       e Zd ZdZd ZdS )Utility_Testsz=Testcase to test the various utility functions in the urllib.c                 t    |                      t          j                                        t                     dS )zATest the urllib.request.thishost utility function returns a tupleN)r   r   r   thishosttuplerA   s    r   test_thishostzUtility_Tests.test_thishost  s,    fn5577?????r   N)rB   rC   rD   r   r  r&   r   r   r  r    s.        GG@ @ @ @ @r   r  c                       e Zd ZdZd Z ej        e          d             Z ej        e          d             Z	 ej        e          d             Z
dS )URLopener_Testsz4Testcase to test the open method of URLopener class.c                 l    G d dt           j        j                  }t          j        dt
          f          5  |                      |                                d          d           |                      |                                d          d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )8URLopener_Tests.test_quoted_open.<locals>.DummyURLopenerc                     |S r+   r&   r-   r   s     r   	open_spamzBURLopener_Tests.test_quoted_open.<locals>.DummyURLopener.open_spam)      
r   N)rB   rC   rD   r  r&   r   r   DummyURLopenerr  (  #            r   r  z8DummyURLopener style of invoking requests is deprecated.zspam://example/ /z//example/%20/z,spam://c:|windows%/:=&?~#+!$,;'@()*[]|/path/z'//c:|windows%/:=&?~#+!$,;'@()*[]|/path/)r   r   r}  r   r$   r%   r   r   )r-   r  s     r   test_quoted_openz URLopener_Tests.test_quoted_open'  s+   	 	 	 	 	V^5 	 	 	 +K"$% % 		; 		; ^^--22#% %%57 7 7 ^^--22>@ @9; ; ;		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		;s   A#B))B-0B-)categoryc                    t          j                    5 }t          j        |          \  }}t	          j        |           dt          j                            |          z   }t          j        	                                
                    |          \  }}|                     t          j                            |          t          j                            |                     d d d            d S # 1 swxY w Y   d S )N)dirzfile:)r   temp_dirrU  rV  r   r@   r   r   r	   r}  retriever   rW  normcase)r-   tmpdirr[  tmpfilefileurlrN  _s          r   test_urlopener_retrieve_filez,URLopener_Tests.test_urlopener_retrieve_file6  s   !! 	TV"*v666KBHRLLL ; ;G D DDG .2244==gFFKHaRW--h779I9I'9R9RSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts   CC44C8;C8c                 B   d}|                      d           |                     | j                   t          j                                                            |          \  }}|                     t          j	        
                    |          d         d           d S )Nzhttp://www.python.org/file.txtr  r   z.txt)rT   r  r\   r   r   r}  r  r   r   rW  splitext)r-   r   rN  r  s       r   test_urlopener_retrieve_remotez.URLopener_Tests.test_urlopener_retrieve_remote@  s    .6777(((n..0099#>>!))(33A6?????r   c                 8    G d dt           j        j                  }dD ]}|                     t          t           j        j        |           |                     t          t           j                                        j        |           |                     t          t           j                                        j        |           |                     t           |            j        |           |                     t           |            j        |           d S )Nc                       e Zd Zd ZdS )<URLopener_Tests.test_local_file_open.<locals>.DummyURLopenerc                     |S r+   r&   r  s     r   open_local_filezLURLopener_Tests.test_local_file_open.<locals>.DummyURLopener.open_local_fileL  r  r   N)rB   rC   rD   r  r&   r   r   r  r  K  r  r   r  )zlocal_file://examplezlocal-file://example)r   r   r}  r   r=  r"   r   r  )r-   r  r   s      r   test_local_file_openz$URLopener_Tests.test_local_file_openH  s	   	 	 	 	 	V^5 	 	 	 D 	G 	GCgv~'=sCCCgv~'?'?'A'A'FLLLgv~'?'?'A'A'JCPPPg~~'7'7'<cBBBg~~'7'7'@#FFFF	G 	Gr   N)rB   rC   rD   r   r  r   ignore_warningsr%   r  r  r  r&   r   r   r  r  $  s        >>; ; ; %_$.@AAAT T BAT %_$.@AAA@ @ BA@ %_$.@AAA
G 
G BA
G 
G 
Gr   r  c                       e Zd ZdZd Zd ZdS )RequestTestsz&Unit tests for urllib.request.Request.c                     t           j        j        } |d          }|                     |                                d            |di           }|                     |                                d           d S )Nr  r   POST)r   r   Requestr   
get_methodr-   r  r   s      r   test_default_valuesz RequestTests.test_default_valuesY  sx    .('122++--u555'1266++--v66666r   c                 2   t           j        j        } |dd          }|                     |j        d           |                     |                                d            |di d          }|                     |j        d           |                     |                                d            |dd          }|                     |                                d           d|_        |                     |                                d           d S )Nr  HEAD)methodr   )r   r   r  r   r  r  r  s      r   test_with_method_argz!RequestTests.test_with_method_arg`  s   .('1&AAA000++--v666'12fEEE000++--v666'1%@@@++--u555++--v66666r   N)rB   rC   rD   r   r  r  r&   r   r   r  r  V  s8        007 7 77 7 7 7 7r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )URL2PathNameTestsc                     |                      t          d          d           |                      t          d          d           |                      t          d          d           d S )Nz///C|C:///C:z///C|/r  r   r   rA   s    r   test_converting_drive_letterz.URL2PathNameTests.test_converting_drive_letterp  sb    g..555g..555h//88888r   c                     |                      t          d          d           |                      t          d          d           d S )Nz
///C/test/z
\\\C\test\z////C/test/z	\\C\test\r  rA   s    r   $test_converting_when_no_drive_letterz6URL2PathNameTests.test_converting_when_no_drive_letteru  sF    l335FGGGm446FGGGGGr   c                 L    |                      t          d          d           d S )Nz///C|/foo/bar/spam.fooC:\foo\bar\spam.foor  rA   s    r   test_simple_comparez%URL2PathNameTests.test_simple_comparez  s2    &>??/	1 	1 	1 	1 	1r   c                 H    |                      t          t          d           d S )Nu   ///è|/)r   IOErrorr   rA   s    r   test_non_ascii_drive_letterz-URL2PathNameTests.test_non_ascii_drive_letter~  s     '<?????r   c                 x    g d}|D ]2}|                      t          t          |                    |           3d S )N)r  z\\\C\test\\r  )r   r   r	   r-   list_of_pathsrW  s      r   test_roundtrip_url2pathnamez-URL2PathNameTests.test_roundtrip_url2pathname  s[       " 	E 	ED\,t*<*<==tDDDD	E 	Er   N)rB   rC   rD   r  r  r  r  r  r&   r   r   r  r  n  sj        9 9 9
H H H
1 1 1@ @ @E E E E Er   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )PathName2URLTestsc                     |                      t          d          d           |                      t          d          d           d S )Nr  r  r  r   r	   rA   s    r   r  z.PathName2URLTests.test_converting_drive_letter  sD    d++W555f--w77777r   c                     |                      t          d          d           |                      t          d          d           |                      t          d          d           d S )Nz\\\folder\test\/////folder/test/z\\folder\test\z////folder/test/z\folder\test\z/folder/test/r  rA   s    r   r  z6PathName2URLTests.test_converting_when_no_drive_letter  s~    &<==,	. 	. 	.&;<<+	- 	- 	-&:;;(	* 	* 	* 	* 	*r   c                 L    |                      t          d          d           d S )Nr  ///C:/foo/bar/spam.foor  rA   s    r   r  z%PathName2URLTests.test_simple_compare  s2    &<==1	4 	4 	4 	4 	4r   c                 H    |                      t          t          d           d S )NzXX:\)r   r  r	   rA   s    r   test_long_drive_letterz(PathName2URLTests.test_long_drive_letter  s     '<99999r   c                 x    g d}|D ]2}|                      t          t          |                    |           3d S )N)r  r  r  )r   r	   r   r  s      r   test_roundtrip_pathname2urlz-PathName2URLTests.test_roundtrip_pathname2url  s[    3 3 3 " 	E 	ED\,t*<*<==tDDDD	E 	Er   N)rB   rC   rD   r  r  r  r  r  r&   r   r   r  r    sd        8 8 8* * *4 4 4: : :E E E E Er   r  __main__)NNr]   );r   urllib.parser   urllib.requesturllib.errorhttp.clientrQ   email.messager   r8   r  unittest.mockr   rj  r   test.supportr   r   r   r   r  ImportErrorr  rU  
nturl2pathr   r	   base64r
   r   has_gethostnamer  r   r   r"   r   rT   rq   rV   r_   TestCaserx   r   r   r  r  r  r  r  r/  rT  r  r  r  r  r  r  rB   mainr&   r   r   <module>r     s   A A                     				              " " " " " " & & & & & & ( ( ( ( ( ( 				JJJJ   
CCC 



  1 1 1 1 1 1 1 1           $ ;
(
9
:
::   
& & & & / / /, , , ,^< < < < <F < < <; ; ; ; ;6 ; ; ;(ZR ZR ZR ZR ZR) ZR ZR ZRzD9 D9 D9 D9 D9" D9 D9 D9N!C !C !C !C !C 1 !C !C !CHH H H H H)=, H H HVJP JP JP JP JP) JP JP JPZL- L- L- L- L-H- L- L- L-^*" *" *" *" *"H-} *" *" *"ZJL JL JL JL JL8$ JL JL JLZPI PI PI PI PIX& PI PI PIfA) A) A) A) A)h' A) A) A)FL+ L+ L+ L+ L+X& L+ L+ L+\@ @ @ @ @H% @ @ @/G /G /G /G /GmX%6 /G /G /Gd7 7 7 7 78$ 7 7 70E E E E E) E E E6E E E E E) E E E8 zHMOOOOO s   A AA