Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_urllib2.cpython-34.pyo

�
g f��@s�ddlZddlmZddlmZddlZddlZddlZddlZddlZddl	Z
ddl	mZmZm
Z
mZddlmZddlZ
ddlZGdd�dej�ZGdd	�d	ej�ZGd
d�d�ZGdd
�d
�ZGdd�de�ZGdd�dej�ZGdd�d�ZGdd�d�ZGdd�dej�Z Gdd�d�Z!Gdd�d�Z"dd�Z#dd�Z$Gd d!�d!e
j%j&�Z'Gd"d#�d#e
j%j(�Z)Gd$d%�d%�Z*Gd&d'�d'ej�Z+d(d)�Z,Gd*d+�d+ej�Z-Gd,d-�d-ej�Z.Gd.d/�d/ej�Z/e0d0kr�ej1�ndS)1�N)�support)�test_urllib)�Request�OpenerDirector�_parse_proxy�_proxy_bypass_macosx_sysconf)�urlparsec@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TrivialTestsc	Cs�x�dD]�}i}td||�|d=|dkr�tjdkr�|jd	�|jd
�}}|j|jd�|j|jd�nxD|j�D]6\}}|j|jd|d
|||jf�q�WqWdS)N�request�response�parse�error�robotparserzfrom urllib.%s import *�__builtins__�ntZurl2pathname�pathname2urlZ
nturl2pathz	urllib.%sz.%r is exposed in 'urllib.%s' but defined in %r)zrequestzresponsezparsezerrorr)�exec�os�name�pop�assertEqual�
__module__�items)�self�module�context�u�p�k�v�r �6/opt/alt/python34/lib64/python3.4/test/test_urllib2.py�test___all__s
zTrivialTests.test___all__cCs�|jttjjd�tjjtjj�j	tj
d�}tjdkr\d|}n
d|}tjj|�}|j�|j
�dS)Nz	bogus url�/rz
file:///%sz	file://%s)�assertRaises�
ValueError�urllibr
Zurlopenr�path�abspath�__file__�replace�sepr�read�close)rZfnameZfile_url�fr r r!�test_trivial)s'


zTrivialTests.test_trivialc
Cs�ddddgfdddgfdddd	d
ddd
gfddddgfg}x0|D](\}}|jtjj|�|�q^WdS)Nza,b,c�a�b�czpath"o,l"og"i"cal, examplezpath"o,l"og"i"calZexampleza, b, "c", "d", "e,f", g, hz"c"z"d"z"e,f"�g�hza="b\"c", d="e\,f", g="h\\i"za="b"c"zd="e,f"zg="h\i")rr&r
Zparse_http_list)rZtests�string�listr r r!�test_parse_http_list;sz!TrivialTests.test_parse_http_listcCs/tjjd�}|j|jt|��dS)N�reason)r&r
�URLError�assertInr8�str)r�errr r r!�test_URLError_reasonstrFsz$TrivialTests.test_URLError_reasonstrN)�__name__r�__qualname__r"r/r7r=r r r r!r	sr	c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RequestHdrsTestscCs^d}|jt|didd6�jdd�|jt|didd6�jdd�dS)a(
        The Request.headers dictionary is not a documented interface.  It
        should stay that way, because the complete set of headers are only
        accessible through the .get_header(), .has_header(), .header_items()
        interface.  However, .headers pre-dates those methods, and so real code
        will be using the dictionary.

        The introduction in 2.4 of those methods was a mistake for the same
        reason: code that previously saw all (urllib2 user)-provided headers in
        .headers now sees only a subset.

        zhttp://example.com�headers�blahz	Spam-eggsz	spam-EggSN)rrrA)r�urlr r r!�test_request_headers_dictLs
z*RequestHdrsTests.test_request_headers_dictcCs8d}t|didd6�}|j|jd��|j|j�d
g�|jdd�|jt|j��ddg�|j|jd��|j|j	d��|j|j	dd	�d	�|j
d�|j|jd��|jd
d�|j|jd
��|j
d
�|j|jd
��dS)a;
        Note the case normalization of header names here, to
        .capitalize()-case.  This should be preserved for
        backwards-compatibility.  (In the HTTP case, normalization to
        .title()-case is done by urllib2 before sending headers to
        http.client).

        Note that e.g. r.has_header("spam-EggS") is currently False, and
        r.get_header("spam-EggS") returns None, but that could be changed in
        future.

        Method r.remove_header should remove items both from r.headers and
        r.unredirected_hdrs dictionaries
        zhttp://example.comrArB�	Spam-eggszFoo-Bar�baz�Foo-barz	Not-there�defaultzUnredirected-spamZEggsN)rE�blah)rGrF)rErI)r�
assertTrue�
has_headerrZheader_items�
add_header�sorted�assertFalse�assertIsNone�
get_headerZ
remove_header�add_unredirected_header)rrC�reqr r r!�test_request_headers_methodsas 


z-RequestHdrsTests.test_request_headers_methodscCsZtjj�}|j}|j}|dddd�|dddd�|ddd	d�|dd
dd�|d
ddd�|d
ddd�|dddd�|dddd�|dddd�|dddd�|j|dd�d#�|j|dd�d$�|j|dd�d%�|j|dd�d&�|j|dd�d'�|j|dd�d(�|j|dd
�d)�|j|d
d�d*�|j|dd�d+�|j|dd �d,�|j|dd!�d-�|j|dd"�d.�|j|dd�d/�|j|dd�d0�|j|dd�d1�dS)2Nz
Some Realmzhttp://example.com/�joe�passwordzhttp://example.com/ni�nir2zhttp://example.com/foo�foozhttp://example.com/bar�bar�ninir1�firstrB�second�spamr0zhttp://example.com�1zhttp://c.example.com:3128�3z
d.example.com�4�dze.example.com:3128�5�ezexample.comzhttp://example.com/spamzhttp://example.com/spam/spamzhttp://a.example.com/z
c.example.comzc.example.com:3128)rT�password)rTrc)rTrc)rTrc)rTrc)rWrV)rXrY)zsecondr\)r]r0)NN)NN)r^r2)r^r2)r_r`)rarb)r&r
�HTTPPasswordMgr�add_password�find_user_passwordr)r�mgr�add�find_user_passr r r!�test_password_manager�s\		z&RequestHdrsTests.test_password_managercCstjj�}|j}|j}|dddd�|dddd�|d	d
dd�|d
ddd�|j|dd�d�|j|dd�d �|j|dd�d!�|j|dd�d"�|j|dd�d#�|j|dd�d$�|j|dd�d%�|j|dd�d&�|j|dd�d'�|j|d	d�d(�|j|d	d
�d)�|j|d	d�d*�|j|d
d�d+�|j|d
d�d,�|j|d
d�d-�|j|d
d�d.�dS)/z�
        The point to note here is that we can't guess the default port if
        there's no scheme.  This applies to both add_password and
        find_user_password.
        r.zhttp://g.example.com:80�10�jr3zhttp://h.example.com�11rr4zi.example.com:80�12�l�iz
j.example.com�13�mzg.example.com:100Nzg.example.com:80z
g.example.comzhttp://g.example.com:100zhttp://g.example.comz
h.example.comzh.example.com:80zhttp://h.example.com:80z
i.example.comzhttp://i.example.com:80zj.example.com:80zhttp://j.example.comzhttp://j.example.com:80)NN)rkrl)NN)NN)rkrl)rkrl)rmr)rmr)rmr)NN)rnro)rnro)rqrr)NN)rqrr)NN)r&r
rdrerfr)rrgrhrir r r!�"test_password_manager_default_port�sD		z3RequestHdrsTests.test_password_manager_default_portN)r>rr?rDrSrjrsr r r r!r@Js%;r@c@s7eZdZgZdejdd�Zdd�ZdS)�
MockOpenerNcCs!||||_|_|_dS)N)rR�data�timeout)rrRrurvr r r!�open�szMockOpener.opencGs|||_|_dS)N)�proto�args)rrxryr r r!r
�szMockOpener.error)r>rr?�
addheaders�socket�_GLOBAL_DEFAULT_TIMEOUTrwr
r r r r!rt�srtc@s:eZdZddd�Zddd�Zdd�ZdS)�MockFileNcCsdS)Nr )r�countr r r!r,�sz
MockFile.readcCsdS)Nr )rr~r r r!�readline�szMockFile.readlinecCsdS)Nr )rr r r!r-�szMockFile.close)r>rr?r,rr-r r r r!r}�sr}c@seZdZdd�ZdS)�MockHeaderscCst|j��S)N)r6�values)rrr r r!�
getheaders�szMockHeaders.getheadersN)r>rr?r�r r r r!r��sr�c@s7eZdZddd�Zdd�Zdd�ZdS)�MockResponseNcCsAtjj||�||||f\|_|_|_|_dS)N)�io�StringIO�__init__�code�msgrArC)rr�r�rArurCr r r!r��szMockResponse.__init__cCs|jS)N)rA)rr r r!�info�szMockResponse.infocCs|jS)N)rC)rr r r!�geturlszMockResponse.geturl)r>rr?r�r�r�r r r r!r��sr�c@s(eZdZdd�Zdd�ZdS)�
MockCookieJarcCs
||_dS)N)�ach_req)rr
r r r!�add_cookie_headerszMockCookieJar.add_cookie_headercCs|||_|_dS)N)�ec_req�ec_r)rrr
r r r!�extract_cookiesszMockCookieJar.extract_cookiesN)r>rr?r�r�r r r r!r�sr�c@s(eZdZdd�Zdd�ZdS)�
FakeMethodcCs||_||_||_dS)N)�	meth_name�handle�action)rr�r�r�r r r!r�s		zFakeMethod.__init__cGs|j|j|j|�S)N)r�r�r�)rryr r r!�__call__szFakeMethod.__call__N)r>rr?r�r�r r r r!r�
sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�MockHTTPResponsecCs1||_||_||_||_d|_dS)N��)�fpr��statusr8r�)rr�r�r�r8r r r!r�s
				zMockHTTPResponse.__init__cCsdS)N�r )rr r r!r,szMockHTTPResponse.readcCsiS)Nr )rr r r!r�szMockHTTPResponse.infocCs|jS)N)rC)rr r r!r� szMockHTTPResponse.geturlN)r>rr?r�r,r�r�r r r r!r�sr�c@sveZdZdd�Zejdd�Zdd�Zdddd	�Zddd
d�Z	dd
�Z
dd�ZdS)�
MockHTTPClasscCs:d|_g|_d|_d|_d|_i|_dS)NrF)�level�req_headersru�raise_on_endheadersZsock�_tunnel_headers)rr r r!r�%s					zMockHTTPClass.__init__cCs||_||_|S)N)�hostrv)rr�rvr r r!r�-s		zMockHTTPClass.__call__cCs
||_dS)N)r�)rr�r r r!�set_debuglevel2szMockHTTPClass.set_debuglevelNcCs5||_||_|r$||_n
|jj�dS)N)�_tunnel_hostZ_tunnel_portr��clear)rr��portrAr r r!�
set_tunnel5s
		zMockHTTPClass.set_tunnelcCsn||_||_|dk	r6|j|j�7_n|jj�|rU||_n|jrjt��ndS)N)�method�selectorr�r�sortrur��OSError)rr�rCZbodyrAr r r!r
=s		
	zMockHTTPClass.requestcCstt�idd�S)Nr��OK)r�r})rr r r!�getresponseGszMockHTTPClass.getresponsecCsdS)Nr )rr r r!r-JszMockHTTPClass.close)r>rr?r�r{r|r�r�r�r
r�r-r r r r!r�$s
r�c@s^eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�MockHandleri�cCs|j|�dS)N)�_define_methods)r�methodsr r r!r�QszMockHandler.__init__cCskxd|D]\}t|�dkr.|\}}n
|d}}t|||j�}t|j||�qWdS)N�)�lenr�r��setattr�	__class__)rr��specrr��methr r r!r�Ss

zMockHandler._define_methodscOs(|jjj||||f�|dkr/dS|dkr?|S|dkrdtddid�}|S|dkrztd�S|jd�r||jd	�d
d�}yt|�}Wntk
r�YnXtddid�}|jj	d|d||di�S|d
kr$t
j	jd��ndS)Nzreturn selfzreturn responser�r�r�zreturn requestzhttp://blah/r
� ��httpr�raiserB)�parent�calls�appendr�r�
startswith�rfind�intr%r
r&r9)rZfn_namer�ry�kwds�resr�r r r!r�Ys*

#zMockHandler.handlecCsdS)Nr )rr r r!r-oszMockHandler.closecCs||_g|j_dS)N)r�r�)rr�r r r!�
add_parentps	zMockHandler.add_parentcCs#t|d�sdS|j|jkS)N�
handler_orderT)�hasattrr�)r�otherr r r!�__lt__sszMockHandler.__lt__N)
r>rr?r�r�r�r�r-r�r�r r r r!r�Msr�cCs�g}d}xp|D]h}Gdd�dt�}||�}|j|7_|j|�|d}|j|�|j|�qW|S)a�Create MockHandlers and add them to an OpenerDirector.

    meth_spec: list of lists of tuples and strings defining methods to define
    on handlers.  eg:

    [["http_error", "ftp_open"], ["http_open"]]

    defines methods .http_error() and .ftp_open() on one handler, and
    .http_open() on another.  These methods just record their arguments and
    return None.  Using a tuple instead of a string causes the method to
    perform some action (see MockHandler.handle()), eg:

    [["http_error"], [("http_open", "return request")]]

    defines .http_error() on one handler (which simply returns None), and
    .http_open() on another handler, which returns a Request object.

    rc@seZdZdS)z6add_ordered_mock_handlers.<locals>.MockHandlerSubclassN)r>rr?r r r r!�MockHandlerSubclass�sr�r�)r�r�r�r��add_handler)�opener�	meth_spec�handlersr~�methsr�r4r r r!�add_ordered_mock_handlersys



r�cGs+t�}x|D]}|j|�qW|S)N)rr�)Zhandler_instancesr�r4r r r!�build_test_opener�s	
r�c@s4eZdZdd�Zdd�Zdd�ZdS)�MockHTTPHandlercCs ||_||_|j�dS)N)r�rA�reset)rr�rAr r r!r��s		zMockHTTPHandler.__init__cCsd|_g|_dS)Nr)�_count�requests)rr r r!r��s	zMockHTTPHandler.resetcCs�ddl}ddl}ddl}|jj|j|��|jdkr�|jd|_|jj|j	}|j
|j�}|jj
d|t�|j	||�S||_|j
d�}tdd|d|j��SdS)Nrr�r�z

r�r�r�)�email�http.client�copyr�r��deepcopyr��clientZ	responsesr�Zmessage_from_stringrAr�r
r}rRr��get_full_url)rrRr�r�r�rr�r r r!�	http_open�s$		zMockHTTPHandler.http_openN)r>rr?r�r�r�r r r r!r��sr�c@s(eZdZdd�Zdd�ZdS)�MockHTTPSHandlercCs#tjjj|�t�|_dS)N)r&r
�AbstractHTTPHandlerr�r��httpconn)rr r r!r��szMockHTTPSHandler.__init__cCs|j|j|�S)N)�do_openr�)rrRr r r!�
https_open�szMockHTTPSHandler.https_openN)r>rr?r�r�r r r r!r��sr�c@s(eZdZdd�Zdd�ZdS)�MockPasswordManagercCs(||_||_||_||_dS)N)�realmrC�userrU)rr�Zurir�rUr r r!re�s			z MockPasswordManager.add_passwordcCs"||_||_|j|jfS)N)�target_realm�
target_urlr�rU)rr�Zauthurir r r!rf�s		z&MockPasswordManager.find_user_passwordN)r>rr?rerfr r r r!r��sr�c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�OpenerDirectorTestscCs6Gdd�dt�}|jtt�j|��dS)Nc@seZdZdS)z<OpenerDirectorTests.test_add_non_handler.<locals>.NonHandlerN)r>rr?r r r r!�
NonHandler�sr�)�objectr$�	TypeErrorrr�)rr�r r r!�test_add_non_handler�s	z(OpenerDirectorTests.test_add_non_handlercCs�ddlm}t�}ddgd
gg}t||�|jtjj��x(dD] }|j||j	|d
�qXWdS)Nr)r9r��return self�
proxy_open�redirect_request�do�proxy�redirectz://example.com/)zdo_openr�)r�r�)r�r�)r�zproxyzredirect)
�urllib.errorr9rr�r�r&r
ZUnknownHandlerr$rw)rr9�or��schemer r r!�test_badly_named_methods�s			

z,OpenerDirectorTests.test_badly_named_methodsc
Cs�t�}dddgdgdgd	gg}t||�}td�}|j|�}|j||d�|ddf|ddfg}x[t||j�D]G\}}|\}	}
}}|j|	|
f|�|j||f�q�WdS)
Nr��ftp_open�http_error_302�return selfzhttp://example.com/r�r)�	http_openr�)r�r�)rr�rrwr�zipr�)
rr�r�r�rR�rr��expected�got�handlerrryr�r r r!�test_handled�s	 z OpenerDirectorTests.test_handledcCs�t�}g}xqd	gdfdgdfgD]Q\}}Gdd�dt�}||�}||_|j|�|j|�q.W|jd�|j|jdd|d�|j|jdd|d�dS)
Nr��return selfi�rc@seZdZdS)zCOpenerDirectorTests.test_handler_order.<locals>.MockHandlerSubclassN)r>rr?r r r r!r�sr�zhttp://example.com/r�)z	http_openr�)rr�r�r�r�rwrr�)rr�r�r�r�r�r4r r r!�test_handler_orders		

z&OpenerDirectorTests.test_handler_ordercCst�}dgdgg}t||�}td�}|jtjj|j|�|j|j	|dd|fifg�dS)Nr�r��return selfzhttp://example.com/r)�	http_openzraise)r�r�)
rr�rr$r&r
r9rwrr�)rr�r�r�rRr r r!�
test_raises	zOpenerDirectorTests.test_raisecCst�}dgddgdddgdgg}t||�}Gd	d
�d
�}td�}|j|�|dd|ff|d
d||�ddiffg}xct||j�D]O\}}|\}	}
}|j|	|
f|dd
��|j||d
�q�WdS)Nr��	error 302�http_error_400r�r��return responseZhttp_error_303Z
http_errorc@seZdZdd�ZdS)z4OpenerDirectorTests.test_http_error.<locals>.UnknowncSsdS)NTr )rr�r r r!�__eq__2sz;OpenerDirectorTests.test_http_error.<locals>.Unknown.__eq__N)r>rr?rr r r r!�Unknown1srzhttp://example.com/rr�i.r�)z	http_openr)rzraise)zhttp_error_302r)rr�rrwr�r�r)rr�r�r�rrRr�r�r�r�Zmethod_nameryr r r!�test_http_error$s"		

 z#OpenerDirectorTests.test_http_errorcCsqt�}d	d
gddgg}t||�}td�}|j|�|ddf|ddf|ddf|ddfg}x�t|j�D]�\}\}}}	}
|dkr�|j||f||�|jt|	�d�|j|	dt�q�|j||f||�|jt|	�d�|j|	dt�|	ddk	r�|j|	dt	�q�q�WdS)
N�http_request�return request�
http_response�return responsezhttp://example.com/rr�r�)�http_requestr)�
http_responser
)rr)rr
)
rr�rrw�	enumerater�rr�ZassertIsInstancer�)rr�r�r�rRr�rpr�rryr�r r r!�test_processors@s(	
 (z#OpenerDirectorTests.test_processorsN)
r>rr?r�r�r�r�rrrr r r r!r��s
r�cCs|y|jd�Wn!tk
r4tjd��YnXtjj|�}tjdkrx|j	d�rx|dd�}n|S)Nzutf-8zpath is not encodable to utf8rz///r�)
�encode�UnicodeEncodeError�unittestZSkipTestr&r
rrrr�)r'�urlpathr r r!�sanepathname2urlcs
rc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zejejd'kd(�d)d*��Zd+d,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Z d8d9�Z!d:d;�Z"d<d=�Z#d>d?�Z$d@S)A�HandlerTestscsmGdd�d��G�fdd�dtjj�}ddl}d}||�}t�|_xdd|jd	d	d
ddgd
df	dd|jdd	d
ddgd
df	dd|jdd	d
ddgd
df	dd|jdd	d
ddgd
df	dddd	d	dddgd	df	dd|jd	d	dgddf	gD]\	}}}}}	}
}}}
t|�}d|_|j	|�}|j
|j|�|j
|j|	�|j
|j
tj|��|j
|j|�|j
|j|�|j
|jj|�|j
|jj|
�|j�}|j
|jd�|
�|j
t|d�t|��qGWdS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z-HandlerTests.test_ftp.<locals>.MockFTPWrappercSs
||_dS)N)ru)rrur r r!r�rsz6HandlerTests.test_ftp.<locals>.MockFTPWrapper.__init__cSs2|||_|_tj|j�t|j�fS)N)�filename�filetyper�r�rur�)rrrr r r!�retrfilessz6HandlerTests.test_ftp.<locals>.MockFTPWrapper.retrfilecSsdS)Nr )rr r r!r-vsz3HandlerTests.test_ftp.<locals>.MockFTPWrapper.closeN)r>rr?r�rr-r r r r!�MockFTPWrapperqsrcs4eZdZdd�Zej�fdd�ZdS)z-HandlerTests.test_ftp.<locals>.NullFTPHandlercSs
||_dS)N)ru)rrur r r!r�ysz6HandlerTests.test_ftp.<locals>.NullFTPHandler.__init__csH|||_|_|||_|_||_�|j�|_|jS)N)r��passwdr�r��dirsru�
ftpwrapper)rr�rr�r�rrv)rr r!�connect_ftpzs
	z9HandlerTests.test_ftp.<locals>.NullFTPHandler.connect_ftpN)r>rr?r�r{r|rr )rr r!�NullFTPHandlerxsrrzrheum rhaponicumz ftp://localhost/foo/bar/baz.html�	localhostr��IrWrXzbaz.htmlz	text/htmlz'ftp://parrot@localhost/foo/bar/baz.htmlZparrotz*ftp://%25parrot@localhost/foo/bar/baz.htmlz%parrotz,ftp://%2542parrot@localhost/foo/bar/baz.htmlz	%42parrotzftp://localhost:80/foo/bar/�P�Dzftp://localhost/baz.gif;type=a�Azbaz.gifzContent-typezContent-length)r&r
Z
FTPHandler�ftplibrtr�ZFTP_PORTrrvr�rr�rr�r{�
gethostbynamer�rrrrr��getr�r�)rrr#rur4rCr�r�r�rZtype_rrZmimetyperRr�rAr )rr!�test_ftppsL"
1	zHandlerTests.test_ftpc#Cs�ddl}tjj�}t�}|_tj}tt	j
j|��}d}d|d|dtj
d�|fg}ytj
tj��}Wntjk
r�d}YnX|r�|jd||f�nx"|D]}	t|d�}
z�z|
j|�Wd|
j�X|jt|	��}z(|j�}|j�}
|j�}Wd|j�Xt	j|�}|jj|jd	d
�}Wdt	j|�X|j||�|j|
dd�|j|
d
d�|j|
d|�|j||	�q�Wx�d|dddtj
d�t	j�|fdt	j�|fgD]k}	zTt|d�}
z|
j|�Wd|
j�X|j tj!j"|jt|	��Wdt	j|�Xq>Wtjj�}t�}|_x�ddddd gD]�\}	}t|	�}y|j|�Wn+tj!j"t#fk
r8|j$|�Yn'X|j%|j&|�|j|j'd�|j|j'dk|�q�WdS)!Nrs
hello, world
zfile://localhost%sz	file://%szfile://%s%srr��wbZusegmtTzContent-typez
text/plainzContent-lengthrqz
Last-modifiedzfile://localhost:80%szfile:///file_does_not_exist.txtz)file://not-a-local-host.com//dir/file.txtzfile://%s:80%s/%sz,file://somerandomhost.ontheinternet.com%s/%s�file://ftp.example.com//foo.txtF� file://ftp.example.com///foo.txt�file://ftp.example.com/foo.txt�"file://somehost//foo/something.txt�#file://localhost//foo/something.txt�ftp)r(F)r)F)r*F)r+F)r,F)(Zemail.utilsr&r
ZFileHandlerrtr�r�TESTFNrrr'r(r{r$ZgethostnameZgaierrorr�rw�writer-Z	file_openrr,r�r��statZutilsZ
formatdate�st_mtime�remover�getcwdr$r
r9r�rN�assertIsrR�type)rr�r4r�r.rZtowrite�urlsZ	localaddrrCr.r�rurAZrespurlZstatsZmodifiedr-rRr r r!�	test_file�s�	
zHandlerTests.test_filecCs�tjj�}t�}|_d}xGd'd(gD]9\}}t||idd6�}d|_|jdd�t�}|j	||�}|j
|j|j|j
|j|jd	kd
f|j�}	|	j|	j|j|j
�|�|j|jd�|j|jd�|j|j|�|j|jd
�|j|jd)d*d+g�|j|j|�q2Wd|_|jtjj|j	||�tdd�}|jt|j|�d,g|_x}d-D]u}td|�}t d	d
id�}|j|�}
|dkr=|j!d|j"�|j!d|j"�n.|j|j"dd�|j|j"dd�|j|j"dd�|j|j"dd�|jdd�|jdd�|jdd�|jdd�|j|�}
|j|j"dd�|j|j"dd�|j|j"dd�|j|j"dd�q�Wdd�}x^iidd6fD]I}td|�|�}|s�|jt#|j|�qh|j|�}
qhWt$j%�}
|
j&d�xziid d6fD]e}td|
|�}|s|jt#|j|�q�|j|�}
|jt'|
j(d��d �q�W|
j)�t*j*d!d"d#d$d%g�}x[iid&d6fD]F}td||�}|j|�}
|jt'|
j(d��d&�q�WdS).Nzhttp://example.com/�GET�POST�blahrX�Foo�Spam�eggsr�r�zexample.comrr#�
Connectionr-TZbadpost�r�zContent-lengthzContent-type�0z!application/x-www-form-urlencoded�HostrWrFcssdVdVdVdS)Nsonestwosthreer r r r r!�
iterable_bodyKsz-HandlerTests.test_http.<locals>.iterable_body�zContent-LengthsSomething
Something
Something
�rr�r����)r8N)r9r:)r>zclose)r;zbar)r<r=)r<r=)r?N)+r&r
r�rtr�rrvrQr�r�r,rr�r�r�r�r%�__contains__rr�r�r�r�r�rur�r$r
r9r��do_request_rzr��assertNotIn�unredirected_hdrsr%r��BytesIOr/r�rPr-�array)rr4r�rCr�rurRr�r��hdrs�newreqrBrAZfile_objZiterable_arrayr r r!�	test_https�		
	

#
zHandlerTests.test_httpcCs�tjj�}t�|_d}ddddg}xy|D]q}t||�}|j|�}|j|jdd�|j	dd�|j|�}|j|jdd�q:WdS)	Nr?z#http://example.com/foo/bar/baz.htmlz$http://example.com//foo/bar/baz.htmlz$http://example.com/foo//bar/baz.htmlz$http://example.com/foo/bar//baz.htmlrAzexample.comzsomeproxy:3128)
r&r
r�rtr�rrIrrK�	set_proxy)rr4ruZds_urlsZds_urlZds_reqZ	np_ds_reqZp_ds_reqr r r!�test_http_doubleslashts	
z"HandlerTests.test_http_doubleslashcCs�dddg}td�}xw|D]o}||_t|�}|j|j�|�|j|jped|j�|jt|j��j|j�q"WdS)Nzhttp://example.com?foo=bar#bazz)http://example.com?foo=bar&spam=eggs#bashzhttp://example.comr�)r�full_urlrrr��fragmentZquery)rr6r�rCZparsedr r r!�test_full_url_setter�s	
	z!HandlerTests.test_full_url_settercCsItd�}|`|j|j�|j|j�|j|jd�dS)Nzhttp://www.example.comr�)rrSrOrTrr�)rr�r r r!�test_full_url_deleter�s
z"HandlerTests.test_full_url_deletercCs�tjj�}t�|_d}t|�}|j|�}|j|jd�|j|j	d�d}t|�}|j|�}|j|jd�|j|j	d�dS)Nzhttp://www.python.org?getspamzwww.python.orgz	/?getspamzhttp://www.python.orgr�)
r&r
r�rtr�rrIrr�r�)rr4Z	weird_urlrRrOZurl_without_pathr r r!�test_fixpath_in_weirdurls�sz&HandlerTests.test_fixpath_in_weirdurlscCs�tjj�}t�}|_d}t|�}tddid|�}|j||�}|j||�|j	t
|d��tddid|�}|j||�}|j||�|j	t
|d��tdd	id|�}|j||�}|j||�|j	t
|d��td
did|�}|j|j||��|j|j
d�|j|j||d
dif�dS)
Nzhttp://example.com/r�r�r�rx��ZAccepted��zPartial contenti�zBad gatewayr�)r&r
ZHTTPErrorProcessorrtr�rr�r	r4rNr�rOrrxry)rr4r�rCrRr��newrr r r!�test_errors�s(zHandlerTests.test_errorscCs�t�}tjj|�}t�|_td�}tddid�}|j|�}|j	|j
|�|j	|j
|�|j|jd�|j
|j�|j||�}|j	|j|�|j	|j|�|j	||�dS)Nzhttp://example.com/r�r�r�zexample.com)r�r&r
�HTTPCookieProcessorrtr�rr�rr4r�r�origin_req_hostrNZunverifiabler	r�r�)r�cjr4rRr�rOrZr r r!�test_cookies�s	zHandlerTests.test_cookiescCs.d}d}tjj�}t�}|_x�dD]�}x�dD]�}t|d|�}t||�}tj|_	|j
d	d
�|dk	r�|j
dtt|���n|j
dd
�y*||t�|dti|d6��Wn5tjjk
r|j|d�|j|�YnX|j|jj�|�y|j|jj�d�Wn%tk
r}|j|jj�YnXdd�|jjD�}	|jd|	�|jd|	�|j|jjd	d
�|jd|jj�|jd|jj�q?Wq2Wt|�}tj|_	|dd�}
t|dd�}d}tj|_	y%x|
||d�|d}qVWWn1tjjk
r�|j|tjjj�YnXt|dd�}d}tj|_	y)x"|
||d|�|d}q�WWn1tjjk
r)|j|tjjj�YnXdS)Nzhttp://example.com/a.htmlzhttp://example.com/b.html�-�.�/�3�
blah
blah
z
http_error_%sZNonsensezviking=withholdzContent-Lengthr<r\�Blah�locationr8cSsg|]}|j��qSr )�lower)�.0�xr r r!�
<listcomp>
s	z.HandlerTests.test_redirect.<locals>.<listcomp>zcontent-lengthzcontent-typec	Ss-|j|t�ddti|d6��dS)Ni.rerf)r�r}r�)r4rRrCr r r!r�sz,HandlerTests.test_redirect.<locals>.redirectr]zexample.comrzhttp://example.com/r�zhttp://example.com/%d)r`rarbrc)Nrd)r&r
�HTTPRedirectHandlerrtr��getattrrr{r|rvrLr;r�rQr}r�r
�	HTTPErrorr�assertIsNotNonerRr��
get_method�AttributeErrorrNrurArJrKZmax_repeatsZmax_redirections)r�from_urlZto_urlr4r�r�rur�rRrAr�r~r r r!�
test_redirect�sj


	zHandlerTests.test_redirectcCsd}dddg}dddg}d}tjj�}t�}|_t|�}tj|_xT|D]L}|d	|}	|j	tj
j|j|t
�d
dti|	d6��qhWx^|D]V}|d	|}
|j|t
�d
d
ti|
d6��|j|jj�|
�q�WdS)Nzhttp://example.com/a.htmlr��httpsr-�fileZimapZldapzexample.com/b.htmlz://i.zSecurity LoopholerfzThat's fine)r&r
rkrtr�rr{r|rvr$r
rmr�r}r�rrRr�)rrqZ
valid_schemesZinvalid_schemesZschemeless_urlr4r�rRr�Zinvalid_url�	valid_urlr r r!�test_invalid_redirect5s$

z"HandlerTests.test_invalid_redirectc	Cs�d}d}tjj�}t�}|_t|�}tj|_tj	j
||�}|j|t�ddt
i|d6��|j|jj�|�dS)Nzhttp://example.com/a.htmlz/b.htmli.zThat's finerf)r&r
rkrtr�rr{r|rvrZurljoinr�r}r�rrRr�)rrqZrelative_urlr4r�rRrur r r!�test_relative_redirectKsz#HandlerTests.test_relative_redirectc	Cs�ddlm}ddlm}|�}||dd�tdd�}tjj�}tjj�}tjj	|�}t
||||�}|jd�|j|j
jd��dS)	Nr)�	CookieJar)�interact_netscapezhttp://www.example.com/z	spam=eggsi.z%Location: http://www.cracker.com/

ZCookie)Zhttp.cookiejarrxZtest.test_http_cookiejarryr�r&r
�HTTPDefaultErrorHandlerrkr\r�rwrNrRrK)	rrxryr^�hh�hdeh�hrh�cpr�r r r!�test_cookie_redirectXs	
z!HandlerTests.test_cookie_redirectcCsxd}tdd|�}tjj�}tjj�}t|||�}|jd�}|j|j�|j	��dS)Nz(http://www.example.com/index.html#OK

i.z
Location: zhttp://www.example.com)
r�r&r
rzrkr�rwrr��strip)rZredirected_urlr{r|r}r�r�r r r!�test_redirect_fragmentgsz#HandlerTests.test_redirect_fragmentcCs�t�}tjjtdd��}|j|�d
gg}t||�}td�}|j|j	d�|j
|�|j|j	d�|j|ddfgdd	�|jD��dS)Nr�zproxy.example.com:3128r��return responsezhttp://acme.example.com/zacme.example.comrcSs g|]}|dd��qS)rr�r )rh�tupr r r!rjs	z+HandlerTests.test_proxy.<locals>.<listcomp>)z	http_openr�)rr&r
�ProxyHandler�dictr�r�rrr�rwr�)rr��phr�r�rRr r r!�
test_proxyps	

zHandlerTests.test_proxycCs�dtjd<t�}tjjtdd��}|j|�td�}|j	|j
d�|j|�|j	|j
d�td�}|j	|j
d�|j|�|j	|j
d�tjd=dS)	Nz
python.org�no_proxyr�zproxy.example.comzhttp://www.perl.org/zwww.perl.orgzhttp://www.python.orgzwww.python.org)r�environrr&r
r�r�r�rrr�rw)rr�r�rRr r r!�test_proxy_no_proxy�s
	


z HandlerTests.test_proxy_no_proxycCs�dtjd<t�}tjjtdd��}|j|�td�}|j	|j
d�|j|�|j	|j
d�tjd=dS)N�*r�r�zproxy.example.comzhttp://www.python.orgzwww.python.org)rr�rr&r
r�r�r�rrr�rw)rr�r�rRr r r!�test_proxy_no_proxy_all�s
	

z$HandlerTests.test_proxy_no_proxy_allcCs�t�}tjjtdd��}|j|�d
gg}t||�}td�}|j|j	d�|j
|�|j|j	d�|j|ddfgdd	�|jD��dS)Nrszproxy.example.com:3128r��return responsezhttps://www.example.com/zwww.example.comrcSs g|]}|dd��qS)rr�r )rhr�r r r!rj�s	z1HandlerTests.test_proxy_https.<locals>.<listcomp>)z
https_openr�)rr&r
r�r�r�r�rrr�rwr�)rr�r�r�r�rRr r r!�test_proxy_https�s	

zHandlerTests.test_proxy_httpscCst�}tjjtdd��}|j|�t�}|j|�td�}|jdd�|jdd�|j	|j
d�|j|j�|j
|�|jd
|jj�|jd|jj�|j|j�|j	|j
d�|j	|jd	�d�dS)Nrszproxy.example.com:3128zhttps://www.example.com/�Proxy-Authorization�FooBar�
User-Agent�Grailzwww.example.comzProxy-authorization)r�r�)r�r�)rr&r
r�r�r�r�rrLrr�rOr�rwrJr�r�r:rnrP)rr�r�Z
https_handlerrRr r r!�$test_proxy_https_proxy_authorization�s$	
	

	
	
z1HandlerTests.test_proxy_https_proxy_authorization�darwinzonly relevant for OSXcCs�idd6dddddgd6}x+dD]#}|jt||�d|�q*Wx+dD]#}|jt||�d|�qXWidd6gd6}|jtd|��dS)NFZexclude_simple�foo.barz	*.bar.com�	127.0.0.1z10.10z10.0/16�
exceptions�www.bar.com�	10.10.0.1�10.0.0.1z expected bypass of %s to be True�abc.foo.bar�bar.com�	127.0.0.2�	10.11.0.1�notinbypassz!expected bypass of %s to be FalseT�test)r�r�r�r�r�)r�r�r�r�r�)rJrrN)rZbypassr�r r r!�test_osx_proxy_bypass�s


z"HandlerTests.test_osx_proxy_bypass�"c	Cs�t�}t�}tjj|�}d}tdd|||f�}|j|�|j|�|j||d|||dd�dS)NzACME Widget Storei�z(WWW-Authenticate: Basic realm=%s%s%s

�
Authorizationz!http://acme.example.com/protected)rr�r&r
�HTTPBasicAuthHandlerr�r��_test_basic_auth)r�
quote_charr��password_manager�auth_handlerr��http_handlerr r r!�test_basic_auth�s		

	zHandlerTests.test_basic_authcCs|jdd�dS)Nr��')r�)rr r r!�(test_basic_auth_with_single_quoted_realm�sz5HandlerTests.test_basic_auth_with_single_quoted_realmcCs�t�}t�}tjj|�}d}tdd|�}|j|�|j|�|jt��'|j	||d|||dd�WdQXdS)NzACME Widget Storei�z$WWW-Authenticate: Basic realm=%s

r�z!http://acme.example.com/protected)
rr�r&r
r�r�r�ZassertWarns�UserWarningr�)rr�r�r�r�r�r r r!�#test_basic_auth_with_unquoted_realm�s		

	z0HandlerTests.test_basic_auth_with_unquoted_realmc	Cs�t�}tjjtdd��}|j|�t�}tjj|�}d}tdd|�}|j|�|j|�|j	||d|||dd�dS)Nr�zproxy.example.com:3128z
ACME Networksi�z(Proxy-Authenticate: Basic realm="%s"

zProxy-authorizationz&http://acme.example.com:3128/protected)
rr&r
r�r�r�r�ZProxyBasicAuthHandlerr�r�)rr�r�r�r�r�r�r r r!�test_proxy_basic_auth�s	
	

	z"HandlerTests.test_proxy_basic_authc
	Cs�Gdd�dt�}Gdd�dtjj�}Gdd�dtjj�}|�}t�}||�}||�}d}tdd	|�}	|j|�|j|�|j|	�|j||d
||	|dd�|j	|j
dd
gd�dS)Nc@s(eZdZdd�Zdd�ZdS)zQHandlerTests.test_basic_and_digest_auth_handlers.<locals>.RecordingOpenerDirectorcSstj|�g|_dS)N)rr��recorded)rr r r!r�s
zZHandlerTests.test_basic_and_digest_auth_handlers.<locals>.RecordingOpenerDirector.__init__cSs|jj|�dS)N)r�r�)rr�r r r!�recordszXHandlerTests.test_basic_and_digest_auth_handlers.<locals>.RecordingOpenerDirector.recordN)r>rr?r�r�r r r r!�RecordingOpenerDirectorsr�c@seZdZdd�ZdS)zOHandlerTests.test_basic_and_digest_auth_handlers.<locals>.TestDigestAuthHandlerc_s-|jjd�tjjj|||�dS)N�digest)r�r�r&r
�HTTPDigestAuthHandler�http_error_401)rryr�r r r!r�sz^HandlerTests.test_basic_and_digest_auth_handlers.<locals>.TestDigestAuthHandler.http_error_401N)r>rr?r�r r r r!�TestDigestAuthHandlersr�c@seZdZdd�ZdS)zNHandlerTests.test_basic_and_digest_auth_handlers.<locals>.TestBasicAuthHandlerc_s-|jjd�tjjj|||�dS)N�basic)r�r�r&r
r�r�)rryr�r r r!r�#sz]HandlerTests.test_basic_and_digest_auth_handlers.<locals>.TestBasicAuthHandler.http_error_401N)r>rr?r�r r r r!�TestBasicAuthHandler"sr�z
ACME Networksi�z&WWW-Authenticate: Basic realm="%s"

r�z!http://acme.example.com/protectedr�r�r�)rr&r
r�r�r�r�r�r�rr�)
rr�r�r�r�r�Zdigest_handlerZ
basic_handlerr�r�r r r!�#test_basic_and_digest_auth_handlerss$			


	z0HandlerTests.test_basic_and_digest_auth_handlerscCs^t�}tjjd�}tdd�}|j|�|j|�|jt|jd�dS)Ni�zWWW-Authenticate: Kerberos

zhttp://www.example.com)	rr&r
r�r�r�r$r%rw)rr�Zdigest_auth_handlerr�r r r!�$test_unsupported_auth_digest_handler=s	

z1HandlerTests.test_unsupported_auth_digest_handlercCs^t�}tjjd�}tdd�}|j|�|j|�|jt|jd�dS)Ni�zWWW-Authenticate: NTLM

zhttp://www.example.com)	rr&r
r�r�r�r$r%rw)rr�Zbasic_auth_handlerr�r r r!�#test_unsupported_auth_basic_handlerGs	

z0HandlerTests.test_unsupported_auth_basic_handlerc	Cs�ddl}	d	\}
}|j|||
|�|j||j�|j||j�|j|
|j�|j||j�|j|�|j|j|�|j|j	|�|jt
|j�d�|j|jdj
|��td|
|fd�}d|	j|�j�j�}
|j|jdj|�|
�|j|jdj||
�d|_|_|j�|j|�|jt
|j�d�|j|jdj
|��dS)
Nr�wile�coyoter�z%s:%s�asciizBasic r�)r�r�)�base64rerr�rCr�rUrwr�r�r�r�rNrK�bytesZencodebytesr��decoderPrKr�)rr�r�Zauth_headerr�r�r�Zrequest_urlZ
protected_urlr�r�rUZuserpassZauth_hdr_valuer r r!r�Qs0


zHandlerTests._test_basic_authcCs�x�d
D]�\}}dj|�}tj|j�|�}tjj�}td�}d|_|j	||��}|j
�WdQX|j|jj
d	j|��qWdS)z=Test the connection is cleaned up when the response is closed�Connection: close�data�Transfer-Encoding: chunked�4
data
0

�Content-Length: 4zHTTP/1.1 200 OK
{}

z
http://dummy/NzConnection not closed with {!r}�r�r��r�r��r�r�)r�r�r�)�formatr�fakehttprr&r
r�rrvr�r,rJ�fakesock�closed)rZtransferru�header�connr�rRZrespr r r!�test_http_closedvs	zHandlerTests.test_http_closedc
Csytjd�}tjj�}td�}d|_|jtj	j
��|j||�WdQX|j|j
jd�dS)z;Test the connection is cleaned up after an invalid responser?z
http://dummy/NzConnection not closed)rr�r&r
r�rrvr$r�r�Z
BadStatusLiner�rJr�r�)rr�r�rRr r r!�test_invalid_closed�s	z HandlerTests.test_invalid_closedN)%r>rr?r&r7rPrRrUrVrWr[r_rrrvrwrr�r�r�r�r�r�r�
skipUnless�sys�platformr�r�r�r�r�r�r�r�r�r�r�r r r r!rns<:^lJ
	'/

%rc@sgeZdZdd�Zdd�Zejejd�d�dd��Z	d	d
�Z
dd�Zd
S)�	MiscTestscs-|jt�fdd�|jD���dS)Nc3s|]}|j�kVqdS)N)r�)rhr4)�
handler_classr r!�	<genexpr>�sz/MiscTests.opener_has_handler.<locals>.<genexpr>)rJ�anyr�)rr�r�r )r�r!�opener_has_handler�szMiscTests.opener_has_handlercCs�Gdd�dtjj�}Gdd�dtjj�}Gdd�dtjj�}tjj}|||�}|j||�|j||�|||��}|j||�|j||�||�}|j||�|�}|j|tjj�|tjj�}|j|tjj�|tjj��}|j|tjj�Gdd�dtjj�}|||�}|j||�|j||�dS)	Nc@seZdZdS)z2MiscTests.test_build_opener.<locals>.MyHTTPHandlerN)r>rr?r r r r!�
MyHTTPHandler�sr�c@seZdZdd�ZdS)z/MiscTests.test_build_opener.<locals>.FooHandlercSsdS)Nr )rr r r!�foo_open�sz8MiscTests.test_build_opener.<locals>.FooHandler.foo_openN)r>rr?r�r r r r!�
FooHandler�sr�c@seZdZdd�ZdS)z/MiscTests.test_build_opener.<locals>.BarHandlercSsdS)Nr )rr r r!�bar_open�sz8MiscTests.test_build_opener.<locals>.BarHandler.bar_openN)r>rr?r�r r r r!�
BarHandler�sr�c@seZdZdS)z7MiscTests.test_build_opener.<locals>.MyOtherHTTPHandlerN)r>rr?r r r r!�MyOtherHTTPHandler�sr�)r&r
ZHTTPHandler�BaseHandler�build_openerr�)rr�r�r�r�r�r�r r r!�test_build_opener�s,	zMiscTests.test_build_openerZnetworkztest requires network accesscCs�tjd���tjj�}tjjd�}|jd|j�|j|dj	d��|jd|j�|jd|j
d��|j|dj	d��|jd|j�|jd|j
d��WdQXdS)	Nzhttp://www.example.com/r]zus-ascii�1zContent-lengthZ
1234567890s
1234567890rk)rZtransient_internetr&r
r�rrrurwrrP)rr�r
r r r!�test_issue16464�szMiscTests.test_issue16464cCs�d}d}}}d}tjj|||||�}|jt|d��|j|jd�|jt|d��|j|jd�d|j|j	f}|jt
|�|�dS)z�
        Issue 13211 reveals that HTTPError didn't implement the URLError
        interface even though HTTPError is a subclass of URLError.
        zsomething bad happenedNzContent-Length: 42r8rAzHTTP Error %s: %s)r&r
rmrJr�rr8rAr�r�r;)rr�rCr�r�rNr<Zexpected_errmsgr r r!�test_HTTPError_interface�sz"MiscTests.test_HTTPError_interfacecCsqddddddddd!d#d%d'g}x*|D]"\}}|jt|�|�q1W|jttd�fdS)(N�proxy.example.com�proxy.example.com:3128�joe:password@proxy.example.comrTrU�#joe:password@proxy.example.com:3128�http://proxy.example.com/r��http://proxy.example.com:3128/�&http://joe:password@proxy.example.com/�*http://joe:password@proxy.example.com:3128�1ftp://joe:password@proxy.example.com/rubbish:3128r-�%http://joe:password@proxy.example.comzfile:/ftp.example.com�NNNr�)r�r��NNNr�)r�r��NNNr�)r�r��NNNr�)r�r��N�joe�passwordr�)r�r��Nr�r�r�)r�r���httpNNr�)r�r��r�NNr�)r�r��r�r�r�r�)r�r��r�r�r�r�)r�r��zftpr�r�r�)r�r��r�r�r�r�)r�r�)rrr$r%)rZparse_proxy_test_casesZtcr�r r r!�test_parse_proxy�s4	zMiscTests.test_parse_proxyN)r>rr?r�r�rr�rZis_resource_enabledr�r�r�r r r r!r��s%r�c@s�eZdZGdd�de�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS) �RequestTestsc@seZdZdZdS)zRequestTests.PutRequest�PUTN)r>rr?r�r r r r!�
PutRequestsrcCsqtd�|_tdddidd6�|_tddd�|_|jd�|_|jddd�|_dS)	Nzhttp://www.python.org/~jeremy/rurAr�zX-Testr��HEADr9)rr%�post�headr�put�
force_post)rr r r!�setUpszRequestTests.setUpcCs�|jd|jj��|jd|jj��|jd|jj��|jd|jj��|jd|jj��dS)Nr9r8rr)rrror%rrr)rr r r!�test_methods
zRequestTests.test_methodcCsh|j|jj�|jd|jj��d|j_|j|jj�|jd|jj��dS)Nr8r\r9)rNr%rurrorJ)rr r r!�	test_datas
zRequestTests.test_datacCsi|jd|jj�|jjdd�|jd|jjd�d|j_|jd|jj�dS)NzContent-length�*r\)rJr%rKrQrru)rr r r!�.test_setting_data_should_remove_content_length!s
z;RequestTests.test_setting_data_should_remove_content_lengthcCsr|jd|jj�d|j_|jjdd�|jd|jjd�|j`|jd|jj�dS)NzContent-lengthrWrE)rJr%rKrurQr)rr r r!�/test_deleting_data_should_remove_content_length)s	z<RequestTests.test_deleting_data_should_remove_content_lengthcCs|jd|jj��dS)Nzhttp://www.python.org/~jeremy/)rr%r�)rr r r!�test_get_full_url1s	zRequestTests.test_get_full_urlcCs9|jd|jj�td�}|jd|j�dS)Nz	/~jeremy/zhttp://www.python.org/r#)rr%r�r)rrRr r r!�
test_selector5szRequestTests.test_selectorcCs|jd|jj�dS)Nr�)rr%r5)rr r r!�
test_get_type:szRequestTests.test_get_typecCs|jd|jj�dS)Nzwww.python.org)rr%r�)rr r r!�
test_get_host=szRequestTests.test_get_hostcCs#td�}|jd|j�dS)Nzhttp://www.%70ython.org/zwww.python.org)rrr�)rrRr r r!�test_get_host_unquote@sz"RequestTests.test_get_host_unquotecCso|j|jj��|jjdd�|j|jj��|jd|jj�|jd|jj�dS)Nzwww.perl.orgr�zwww.python.org)rNr%Z	has_proxyrQrJrr]r�)rr r r!r�Ds
zRequestTests.test_proxycCs#td�}|jd|j�dS)Nz<URL:http://www.python.org>zwww.python.org)rrr�)rrRr r r!�test_wrapped_urlKszRequestTests.test_wrapped_urlcCsjtd�}|jd|j�td�}|jd|j�d}t|�}|j|j�|�dS)Nz-http://www.python.org/?qs=query#fragment=truez
/?qs=queryzhttp://www.python.org/#fun=truer#z.http://docs.python.org/library/urllib2.html#OK)rrr�r�)rrRrCr r r!�test_url_fragmentOszRequestTests.test_url_fragmentcCsIdddg}x3|D]+}t|�}|j|j�|j�qWdS)Nzhttp://docs.python.orgz.http://docs.python.org/library/urllib2.html#OKz-http://www.python.org/?qs=query#fragment=true)rrr�rS)rr6rCrRr r r!�test_url_fullurl_get_full_urlZs	
z*RequestTests.test_url_fullurl_get_full_urlN)r>rr?rrrr	r
rr
rrrrrr�rrrr r r r!rs

r�__main__)2rr�rrrr�r{rMr�Zurllib.requestr&rrrrZurllib.parserr�r�r�ZTestCaser	r@rtr}r�r�r�r�r�r��IOBaser�r�r�r�r�r
r�r�r�r�r�r�rrr�rr>�mainr r r r!�<module>sL"2�	),����'pa