o
    °ó®g`: ã                   @   sZ  	 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Zd dlZd dlZ	d dl
Z
d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" G dd„ dej#ƒZ$G dd„ dej#ƒZ%G d	d
„ d
ƒZ&dd„ Z'dd„ Z(dd„ Z)G dd„ dej#ƒZ*G dd„ dej#ƒZ+G dd„ dej#ƒZ,ddd„Z-e.dkr«e-dd dS dS )é    N)Ú	os_helper)Úwarnings_helper)Ú	time2isozÚ	http2timeÚiso2timeÚtime2netscapeÚparse_ns_headersÚjoin_header_wordsÚsplit_header_wordsÚCookieÚ	CookieJarÚDefaultCookiePolicyÚLWPCookieJarÚMozillaCookieJarÚ	LoadErrorÚlwp_cookie_strÚDEFAULT_HTTP_PORTÚescape_pathÚreachÚis_HDNÚdomain_matchÚuser_domain_matchÚrequest_pathÚrequest_portÚrequest_hostc                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚDateTimeTestsc                 C   ó’   d}d}|   t|ƒd¡ |   t|| ƒd¡ |   t|d|  ƒd¡ |   t|d|  ƒd¡ tƒ }td	ƒ}||fD ]}|  |d
d||f ¡ q9d S )Néx+À<é€Q z2002-04-19 14:36:40Zz2002-04-20 14:36:40Zé   z2002-04-21 14:36:40Zé   z2002-04-22 14:36:40Zé ¡ z!^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$zbad time2isoz format: %s %s)ÚassertEqualr   ÚassertRegex©ÚselfÚbaseZdayZazZbzÚtext© r(   úN/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_http_cookiejar.pyÚtest_time2isoz   s   
ÿÿzDateTimeTests.test_time2isozc                 C   r   )Nr   r   zFri, 19-Apr-2002 14:36:40 GMTzSat, 20-Apr-2002 14:36:40 GMTr   zSun, 21-Apr-2002 14:36:40 GMTr    zMon, 22-Apr-2002 14:36:40 GMTr!   z;[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$zbad time2netscape format: %s %s)r"   r   r#   r$   r(   r(   r)   Útest_time2netscape%   s*   ÿÿÿ
ýþz DateTimeTests.test_time2netscapec                 C   s<   dd„ }|   |dƒd¡ |   |dƒd¡ |   |dƒd¡ d S )	Nc                 S   ó   t  t| ƒ¡d d… S ©Né   )ÚtimeÚgmtimer   ©r'   r(   r(   r)   Ú
parse_date<   ó   z0DateTimeTests.test_http2time.<locals>.parse_datez01 Jan 2001)iÑ  é   r4   r   r   ç        z	03-Feb-20)iä  r   r    r   r   r5   z	03-Feb-98)iÎ  r   r    r   r   r5   ©r"   ©r%   r2   r(   r(   r)   Útest_http2time;   s   zDateTimeTests.test_http2timec                 C   s„   g d¢}d}t |ƒ}d}|  ||d|||f ¡ |D ]%}|  t|ƒ||¡ |  t| ¡ ƒ|| ¡ ¡ |  t| ¡ ƒ|| ¡ ¡ qd S )N)zThu, 03 Feb 1994 00:00:00 GMTú Thursday, 03-Feb-94 00:00:00 GMTz"Thursday, 03-Feb-1994 00:00:00 GMTz03 Feb 1994 00:00:00 GMTz03-Feb-94 00:00:00 GMTz03-Feb-1994 00:00:00 GMTz03-Feb-1994 00:00 GMTz03-Feb-1994 00:00z02-Feb-1994 24:00z	03-Feb-94z03-Feb-1994z03 Feb 1994z  03   Feb   1994  0:00  z  03-Feb-1994  é€>P-z1994-02-03 00:00:00Zz%s  =>  '%s' (%s))r   r"   r   ÚlowerÚupper)r%   ÚtestsÚtest_tÚresultÚexpectedÚsr(   r(   r)   Útest_http2time_formatsG   s   ÿýz$DateTimeTests.test_http2time_formatsc                 C   s*   dD ]}|   t|ƒd|t|ƒf ¡ qd S )N)Ú ÚGarbagezMandag 16. September 1996z
01-00-1980z
01-13-1980z
00-01-1980z
32-01-1980z01-01-1980 25:00:00z01-01-1980 00:61:00ú01-01-1980 00:00:62z08-Oct-3697739z08-01-3697739z09 Feb 19942632 22:23:32 GMTz Wed, 09 Feb 1994834 22:23:32 GMTz,http2time(%s) is not None
http2time(test) %s)ÚassertIsNoner   ©r%   Útestr(   r(   r)   Útest_http2time_garbagek   s   

ÿÿðz$DateTimeTests.test_http2time_garbagec                 C   ó(   t d dd ¡ƒ t d dd ¡ƒ d S )Nz01 Jan 1970{}00:00:00 GMT!ú i † z01 Jan 1970 00:00:00{}GMT!)r   Úformat©r%   r(   r(   r)   Ú2test_http2time_redos_regression_actually_completes€   s   z@DateTimeTests.test_http2time_redos_regression_actually_completesc                 C   s<   dd„ }|   |dƒd¡ |   |dƒd¡ |   |dƒd¡ d S )Nc                 S   r,   r-   )r/   r0   r   r1   r(   r(   r)   r2   ˆ   r3   z/DateTimeTests.test_iso2time.<locals>.parse_dateZ19940203T141529Z)iÊ  r   r    é   é   é   z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530r6   r7   r(   r(   r)   Útest_iso2time‡   s   
ÿ
ÿ
ÿzDateTimeTests.test_iso2timec                 C   s`   g d¢}d}|D ]%}|   t|ƒ||¡ |   t| ¡ ƒ|| ¡ ¡ |   t| ¡ ƒ|| ¡ ¡ qd S )N)
z1994-02-03 00:00:00 -0000z1994-02-03 00:00:00 +0000z1994-02-03 00:00:00z
1994-02-03z1994-02-03T00:00:00Z19940203z1994-02-02 24:00:00Z19940203T000000Zz  1994-02-03 z  1994-02-03T00:00:00  r:   )r"   r   r;   r<   )r%   r=   r>   rA   r(   r(   r)   Útest_iso2time_formats—   s   ýz#DateTimeTests.test_iso2time_formatsc                 C   s"   dD ]}|   t|ƒd| ¡ qd S )N)rC   rD   r9   z
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rE   z01-01-1980T00:00:62Z19800101T250000Zziso2time(%r))rF   r   rG   r(   r(   r)   Útest_iso2time_garbage®   s
   
ÿòz#DateTimeTests.test_iso2time_garbagec                 C   rJ   )Nz1994-02-03{}14:15:29 -0100!rK   i@B z1994-02-03 14:15:29{}-0100!)r   rL   rM   r(   r(   r)   Ú$test_iso2time_performance_regressionÀ   s   z2DateTimeTests.test_iso2time_performance_regressionN)Ú__name__Ú
__module__Ú__qualname__r*   r+   r8   rB   rI   rN   rR   rS   rT   rU   r(   r(   r(   r)   r      s    $r   c                   @   ó<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚHeaderTestsc                 C   s*   g d¢g}dD ]}|   t|gƒ|¡ qd S )N)©ÚfooÚbar)Úexpiresl   d9W ©ÚversionÚ0)z)foo=bar; expires=01 Jan 2040 22:23:32 GMTz+foo=bar; expires="01 Jan 2040 22:23:32 GMT"©r"   r   ©r%   r@   Úhdrr(   r(   r)   Útest_parse_ns_headersÉ   s   
üz!HeaderTests.test_parse_ns_headersc                 C   s*   ddgg}dD ]}|   t|gƒ|¡ qd S )Nr[   )r`   Ú1)zfoo=bar; version="1"úfoo=bar; Version="1"rb   rc   r(   r(   r)   Útest_parse_ns_headers_versionÒ   s   
üz)HeaderTests.test_parse_ns_headers_versionc                 C   s$   d}ddgg}|   t|gƒ|¡ d S )Nz expires=01 Jan 2040 22:23:32 GMT)r^   z01 Jan 2040 22:23:32 GMTr_   rb   )r%   rd   r@   r(   r(   r)   Ú#test_parse_ns_headers_special_namesÜ   s   
z/HeaderTests.test_parse_ns_headers_special_namesc                 C   s0   t ddggƒ}|  |d¡ |  t g gƒd¡ d S )N©r\   N©r]   Úbazzfoo; bar=bazrC   )r	   r"   )r%   Zjoinedr(   r(   r)   Útest_join_header_wordsä   s   z"HeaderTests.test_join_header_wordsc                 C   s  ddggfddggfddggfddggfddggfd	dggfd
ddggfdddggfddggfdddggfdg d¢gfddgdgdggfdddgdgdgdggfg}|D ]4\}}zt |gƒ}W n   dd l}dd l}| ¡ }| d |¡ d| ¡  }Y |  ||d|||f ¡ qTd S )Nr\   rj   úfoo=barr[   ú	   foo   z
   foo=   )r\   rC   z   foo=z   foo=   ; z   foo=   ; bar= baz rk   úfoo=bar bar=bazzfoo= bar=baz)r\   zbar=bazúfoo=bar;bar=bazúfoo bar baz)rj   )r]   N)rl   Nza, b, c)ÚaN)ÚbN)ÚcNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )ÚspamrC   )r\   z,;")r]   rC   r   z (error -- traceback follows)

%sz:
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
)r
   Ú	tracebackÚioÚStringIOÚ	print_excÚgetvaluer"   )r%   r=   ÚargÚexpectr?   rw   rx   Úfr(   r(   r)   Útest_split_header_wordsê   s<   






ÿÿò
üøz#HeaderTests.test_split_header_wordsc              
   C   sF   g d¢}|D ]\}}t |gƒ}t|ƒ}|  ||d||||f ¡ qd S )N))r\   r\   )rn   rn   )ro   r\   )zfoo=zfoo="")rp   úfoo=bar; bar=baz)rq   r€   )rr   zfoo; bar; baz)zfoo="\"" bar="\\"zfoo="\""; bar="\\")z	foo,,,barzfoo, bar)zfoo=bar,bar=bazzfoo=bar, bar=baz)ztext/html; charset=iso-8859-1ztext/html; charset="iso-8859-1")z)foo="bar"; port="80,81"; discard, bar=bazz'foo=bar; port="80,81"; discard, bar=baz)zBasic realm="\"foo\\\\bar\""zBasic; realm="\"foo\\\\bar\""zM
When parsing: '%s'
Expected:     '%s'
Got:          '%s'
Input was:    '%s'
)r
   r	   r"   )r%   r=   r|   r}   ÚinputÚresr(   r(   r)   Útest_roundtrip  s   


ûýzHeaderTests.test_roundtripN)	rV   rW   rX   re   rh   ri   rm   r   rƒ   r(   r(   r(   r)   rZ   Ç   s    	
"rZ   c                   @   s"   e Zd Zg dfdd„Zdd„ ZdS )ÚFakeResponseNc                 C   s&   	 dd l }| d |¡¡| _|| _d S )Nr   Ú
)ÚemailZmessage_from_stringÚjoinÚ_headersZ_url)r%   ÚheadersÚurlr†   r(   r(   r)   Ú__init__/  s   
zFakeResponse.__init__c                 C   s   | j S ©N)rˆ   rM   r(   r(   r)   Úinfo6  s    zFakeResponse.info)rV   rW   rX   r‹   r   r(   r(   r(   r)   r„   .  s    r„   c                 G   ó   t | ||dƒS )NzSet-Cookie2©Ú	_interact©Ú	cookiejarrŠ   Úset_cookie_hdrsr(   r(   r)   Úinteract_29658  ó   r”   c                 G   rŽ   )Nz
Set-Cookier   r‘   r(   r(   r)   Úinteract_netscape;  r•   r–   c           	      C   s^   	 t j |¡}|  |¡ | dd¡}g }|D ]}| d||f ¡ qt||ƒ}|  ||¡ |S )Nr   rC   z%s: %s)ÚurllibÚrequestÚRequestÚadd_cookie_headerÚ
get_headerÚappendr„   Úextract_cookies)	r’   rŠ   r“   Zhdr_nameÚreqZ
cookie_hdrr‰   rd   r‚   r(   r(   r)   r   >  s   

r   c                   @   rY   )ÚFileCookieJarTestsc                 C   s    t j}t|ƒ}|  |j|¡ d S rŒ   )r   ÚTESTFNr   r"   Úfilename©r%   r¡   ru   r(   r(   r)   Útest_constructor_with_strL  s   z,FileCookieJarTests.test_constructor_with_strc                 C   s,   t  tj¡}t|ƒ}|  |jt |¡¡ d S rŒ   )	ÚpathlibÚPathr   r    r   r"   r¡   ÚosÚfspathr¢   r(   r(   r)   Útest_constructor_with_path_likeQ  s   z2FileCookieJarTests.test_constructor_with_path_likec                 C   s   t d ƒ}|  |j¡ d S rŒ   )r   rF   r¡   ©r%   ru   r(   r(   r)   Útest_constructor_with_noneV  s   z-FileCookieJarTests.test_constructor_with_nonec              
   C   sˆ   G dd„ dƒ}t t|fD ]5}| j|d% |  t¡ |ƒ }t|d}W d   ƒ n1 s-w   Y  W d   ƒ q1 s<w   Y  qd S )Nc                   @   s   e Zd ZdS )z?FileCookieJarTests.test_constructor_with_other_types.<locals>.AN)rV   rW   rX   r(   r(   r(   r)   ÚA[  s    r«   ©r¡   )ÚintÚfloatZsubTestÚassertRaisesÚ	TypeErrorr   )r%   r«   Ztype_Úinstanceru   r(   r(   r)   Ú!test_constructor_with_other_typesZ  s   þ€ÿÿz4FileCookieJarTests.test_constructor_with_other_typesc                 C   s¾   t j}tƒ }t|ddƒ |  |jd d d jd ¡ z#|j|dd tƒ }|j|dd W zt	 
|¡ W n ty=   Y nw zt	 
|¡ W w  tyN   Y w w |  |jd d d jd ¡ d S )Núhttp://www.acme.com/Zbooúwww.acme.comú/T©Úignore_discard)r   r    r   r–   r"   Ú_cookiesÚvalueÚsaveÚloadr¦   ÚunlinkÚOSErrorr¢   r(   r(   r)   Útest_lwp_valueless_cookied  s   ÿ z,FileCookieJarTests.test_lwp_valueless_cookiec                 C   s  t j}ttfD ],}|ƒ }z|jdd W n ty- } z|  |jt¡ W Y d }~qd }~ww |  	d¡ qz@t
|dƒ}| d¡ ttfD ]}|ƒ }|  t|j|¡ qDW d   ƒ n1 s\w   Y  W zt |¡ W d S  tyt   Y d S w zt |¡ W w  ty…   Y w w )NzAfor this test to work, a file with this filename should not existr¬   z%expected OSError for invalid filenameÚwzoops
)r   r    r   r   r»   r½   ZassertIsNotÚ	__class__r   ZfailÚopenÚwriter¯   r¦   r¼   )r%   r¡   Zcookiejar_classru   Úexcr~   r(   r(   r)   Útest_bad_magics  s.   €ý
þþ€ÿz!FileCookieJarTests.test_bad_magicN)	rV   rW   rX   r£   r¨   rª   r²   r¾   rÄ   r(   r(   r(   r)   rŸ   K  s    
rŸ   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dES )FÚCookieTestsc                 C   sL   t ƒ }dD ]\}}}tj |¡}| ||¡}|r|  |¡ q|  |¡ qd S )N))úhttp://foo.bar.com/zblah.comF)rÆ   zrhubarb.blah.comF)rÆ   zrhubarb.foo.bar.comF)rÆ   ú.foo.bar.comT)rÆ   úfoo.bar.comT)rÆ   z.bar.comT)rÆ   úbar.comT)rÆ   ÚcomT)úhttp://foo.com/zrhubarb.foo.comF)rË   ú.foo.comT)rË   úfoo.comT)rË   rÊ   T)úhttp://foo/zrhubarb.fooF)rÎ   z.fooT)rÎ   r\   T)rÎ   z	foo.localT)rÎ   ú.localT)úhttp://barfoo.comrÌ   F)rÐ   rÍ   F)r   r—   r˜   r™   Zdomain_return_okÚ
assertTrueÚassertFalse)r%   ÚpolrŠ   ÚdomainÚokr˜   Úrr(   r(   r)   Útest_domain_return_ok¼  s   èz!CookieTests.test_domain_return_okc              	   C   s  t j}t|ƒ}t|ddƒ t|ddƒ |jd d d }|  |j¡ |  |jd¡ |jd d d }|  |j¡ |  |jd¡ |  t	|ƒd¡ t
|ƒ}|jd	d	d
 zt|ƒ}|jd	d	d
 W t |j¡ nt |j¡ w |  t
|ƒt dd	 dd |¡¡ |  t|dƒd¡ d S )Nr³   Úeggsz"spam"; path=/foo/r´   rµ   ú/foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)Zignore_expiresr·   zpath_specified=%sFúhttp://www.acme.com/foo/z"spam"; eggs)r   r    r   r–   r¸   rF   r¹   r"   Únamer   Úreprrº   Zrevertr¦   r¼   r¡   ÚreÚsub)r%   r¡   ru   ÚcookieZold_strr(   r(   r)   Útest_missing_valueÝ  s8   
ÿÿþÿzCookieTests.test_missing_valuec              	   C   s¦   dD ]N\}}}t ||d}t|ƒ}t|ddƒ z|jd d d }W n ty0   |  |¡ Y qw |  |j|¡ t|ddƒ |rP|jd d d	 }|  |jd
¡ qd S )N))NFr   )NTr4   )FFN)FTr4   )TFr   )TTr   )Úrfc2109_as_netscapeÚrfc2965úhttp://www.example.com/zni=ni; Version=1úwww.example.comrµ   Úniúfoo=bar; Version=1r\   r4   )	r   r   r–   r¸   ÚKeyErrorrF   r"   r`   r”   )r%   rá   râ   r`   Úpolicyru   rß   Z
cookie2965r(   r(   r)   Útest_rfc2109_handlingý  s*   
þÿÿ€æz!CookieTests.test_rfc2109_handlingc                 C   sÆ  t ƒ }t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|dd	ƒ t|dd
ƒ |jd d d }|  |jd¡ |  |j¡ |  |jt¡ |  	|j
¡ |  | d¡¡ |  	| d¡¡ |jd d d }|  |jd¡ |  	|j¡ |  |jd¡ |  |j
¡ |jd d d }|  |j¡ |  	|j
¡ |jd d d }|jd d d }|  |j¡ |  |j¡ |jd d d }|  |j¡ |  |jd¡ |jd d d
 }|  |j¡ d S )Nr³   z0spam=eggs; DoMain=.acme.com; port; blArgh="feep"zni=ni; port=80,8080úhttp://www.acme.com:80/znini=nizfoo=bar; expires=z-spam=eggs; expires="Foo Bar 25 33:22:11 3022"z	fortytwo=z=unladenswallowZholyhandgrenadeú	.acme.comrµ   rv   ZblArghZblarghr´   rå   z80,8080Zninir\   ZfortytworC   )r   r–   r¸   r"   rÔ   rÑ   Zdomain_specifiedÚportr   rÒ   Zport_specifiedZhas_nonstandard_attrrF   r^   ZassertIsNotNoner¹   )r%   ru   rß   r\   rv   r(   r(   r)   Útest_ns_parser  sF   ÿzCookieTests.test_ns_parserc                 C   sH   t ƒ }t|ddƒ t|ddƒ |jd d }|  d|¡ |  d|¡ d S )Nr³   zexpires=eggszversion=eggs; spam=eggsr´   rµ   r^   r`   )r   r–   r¸   ÚassertIn)r%   ru   Úcookiesr(   r(   r)   Útest_ns_parser_special_namesL  s   z(CookieTests.test_ns_parser_special_namesc           
      C   sè  t ƒ }tt ¡ d ƒ}t | ¡2 d|› g}tj d¡}t|dƒ}| 	||¡}|  
t|ƒd¡ |  
t|d jƒ|¡ W d   ƒ n1 sEw   Y  t|dd| ƒ |  
t|ƒd¡ tt ¡ d ƒ}t|dd| ƒ t|dƒ}|  
t|ƒd¡ |  d	|¡ |  d
|¡ t|dd| ƒ t|dd| ƒ |  
t|ƒd¡ t|dd| ƒ t|dd| ƒ t|dƒ}|  
t|ƒd¡ t|ddƒ |  
t|ƒd¡ | ¡  |  
t|ƒd¡ |  d	|¡ tdddd dddddddddd d i ƒ}	|  
|	jd¡ d S )Né  z%Set-Cookie: FOO=BAR; path=/; expires=úhttp://www.coyote.com/r4   r   r³   zspam="bar"; expires=%szfoo="eggs"; expires=%sú
spam="bar"r\   zeggs="bar"; expires=%szbar="bar"; expires=%sr    z!eggs="bar"; expires=%s; max-age=0z bar="bar"; max-age=0; expires=%szhttp://www.rhubarb.net/zwhum="fizz"r   rÛ   r¹   Fzwww.python.orgTrµ   z1444312383.018307i?uV)r   r   r/   r   Zcheck_no_warningsr—   r˜   r™   r„   Úmake_cookiesr"   Úlenr^   r–   rî   ÚassertNotInÚclear_session_cookiesr   )
r%   ru   Úfuturer‰   rž   r‚   rï   ZnowÚhrß   r(   r(   r)   Útest_expiresW  sd   
úÿÿ
ÿÿÿÿ
ûzCookieTests.test_expiresc                 C   s6  t dd}t|ƒ}t|ddƒ |  d|jd ¡ t|ƒ}t|ddƒ |  d|jd ¡ t|ƒ}t|d	dƒ |  d
|jd ¡ t|ƒ}t|ddƒ |  d|jd ¡ tƒ }t|ddƒ |  d|jd ¡ tƒ }t|ddƒ |  d|jd ¡ tƒ }t|d	dƒ |  d|jd ¡ tƒ }t|ddƒ |  d|jd ¡ d S )NT©râ   r³   zspam="bar"; Version="1"rµ   r´   zhttp://www.acme.com/blahzeggs="bar"; Version="1"z http://www.acme.com/blah/rhubarbú/blah/z!http://www.acme.com/blah/rhubarb/z/blah/rhubarb/ró   ú
eggs="bar"ú/blahz/blah/rhubarb)r   r   r”   rî   r¸   r–   ©r%   rÓ   ru   r(   r(   r)   Útest_default_path  s:   
ÿÿzCookieTests.test_default_pathc                 C   sB   t ƒ }d}d}t|||ƒ |  d|jd ¡ |  t||ƒ|¡ d S )Nzhttp://example.com/?spam/eggsrý   rµ   zexample.com)r   r–   rî   r¸   r"   )r%   ÚcjZurir¹   r(   r(   r)   Útest_default_path_with_query¸  s   z(CookieTests.test_default_path_with_queryc                 C   s*   g d¢}|D ]\}}|   t|ƒ|¡ qd S )N))z/foo%2f/barú/foo%2F/bar)r  r  )ú
/foo%%/barr  )ú/fo%19o/barr  )z/fo%7do/barz/fo%7Do/bar)ú	/foo/bar&r  )ú	/foo//barr  )ú	~/foo/barr  )z	/foo/barz/foo%19/bar)z	/}foo/barz/%7Dfoo/bar)u
   /foo/barÃ¼z/foo/bar%C3%BC)u   /foo/barê¯z/foo/bar%EA%AF%8D)r"   r   )r%   Úcasesr|   r?   r(   r(   r)   Útest_escape_pathÂ  s   ÿzCookieTests.test_escape_pathc                 C   sX   t j d¡}|  t|ƒd¡ t j d¡}|  t|ƒd¡ t j d¡}|  t|ƒd¡ d S )NzThttp://www.example.com/rheum/rhaponticum;foo=bar;sing=song?apples=pears&spam=eggs#niz$/rheum/rhaponticum;foo=bar;sing=songzBhttp://www.example.com/rheum/rhaponticum?apples=pears&spam=eggs#niz/rheum/rhaponticumzhttp://www.example.comrµ   )r—   r˜   r™   r"   r   ©r%   rž   r(   r(   r)   Útest_request_pathÛ  s   ÿ
ÿÿzCookieTests.test_request_pathc                 C   sÀ   t ƒ }t dd}t|ƒ}d}t||dƒ |jd d d }dD ]>\}}|› |› }tj |¡}	t||ƒ}
|rJ|  d	|
d
|› ¡ |  | 	||	¡¡ q|  
d	|
d|› ¡ |  | 	||	¡¡ qd S )NT)Zstrict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foorÉ   ú/foorv   ))r  T)rÙ   T)ú/foo/barT)rµ   F)z/foobad/fooFz	spam=eggszcookie not set for zcookie set for )r   r   r–   r¸   r—   r˜   r™   rî   rÑ   Zset_ok_pathrö   rÒ   )r%   rÓ   Zstrict_ns_path_polru   Zbase_urlrß   ÚpathrÕ   rŠ   rž   rù   r(   r(   r)   Útest_path_prefix_matchë  s    

óz"CookieTests.test_path_prefix_matchc                 C   sL   t jjdddid}|  t|ƒd¡ t jjdddid}|  t|ƒt¡ d S )Nzhttp://www.acme.com:1234/ÚHostzwww.acme.com:4321©r‰   Z1234r³   )r—   r˜   r™   r"   r   r   r  r(   r(   r)   Útest_request_port  s   ÿÿzCookieTests.test_request_portc                 C   sp   t jjdddid}|  t|ƒd¡ t jjdddid}|  t|ƒd¡ t jjd	dd
id}|  t|ƒd¡ d S )Nzhttp://1.1.1.1/r  úwww.acme.com:80r  z1.1.1.1r³   zirrelevant.comr´   z&http://www.acme.com:2345/resource.htmlzwww.acme.com:5432)r—   r˜   r™   r"   r   r  r(   r(   r)   Útest_request_host  s   ÿÿÿzCookieTests.test_request_hostc                 C   st   |   tdƒ¡ |   tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ |  tdƒ¡ d S )	NrÈ   z1foo2.3bar4.5comú192.168.1.1rC   Ú.rÇ   z..foozfoo.)rÑ   r   rÒ   rM   r(   r(   r)   Útest_is_HDN  s   zCookieTests.test_is_HDNc                 C   s„   |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   td	ƒd	¡ d S )
Nr´   rë   úacme.comz
acme.localrÏ   ú.comr  rC   z192.168.0.1)r"   r   rM   r(   r(   r)   Ú
test_reach%  s   zCookieTests.test_reachc                 C   sô  |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   td	d
ƒ¡ |  tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |  tddƒ¡ |   tddƒ¡ |   tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ |   tddƒ¡ |  tddƒ¡ |  tddƒ¡ |  tddƒ¡ d S )Nr  z.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz	a.b.c.comz.c.comzexample.localrÏ   z	blah.blahrC   z.rhubarb.rhubarbr  rë   zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comr  rÊ   Úmz.mr  )rÑ   r   rÒ   r   rM   r(   r(   r)   Útest_domain_match/  s>   zCookieTests.test_domain_matchc                 C   s&   t ƒ }t|ddƒ |  t|ƒd¡ d S )Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r   )r   r”   r"   rõ   r©   r(   r(   r)   Útest_wrong_domainS  s
   ÿzCookieTests.test_wrong_domainc                 C   sj   t dd}t|d}t|ddƒ t|ddƒ |  t|ƒd¡ dD ]}t|d	| d
ƒ |  t|ƒd¡ q d S )NT)Zstrict_domain©rè   zhttp://example.co.uk/zno=problemoz!okey=dokey; Domain=.example.co.ukr   )z.co.ukz.org.zaz.tx.usz.name.uszhttp://example.%s/zspam=eggs; Domain=.co.uk)r   r   r–   r"   rõ   )r%   Zcpr  Z
pseudo_tldr(   r(   r)   Útest_strict_domain]  s   

ÿ
ÿýzCookieTests.test_strict_domainc                 C   s8  t ƒ }t|ddƒ |  t|ƒd¡ |  |jd d d jd¡ |  t|dƒd¡ |  t|dƒd¡ ttjd	}| |¡ |  t|dƒd
¡ t|ddƒ t|ddƒ |  t|ƒd¡ |  |jd d d jd¡ |  |jd d d jd¡ |  t|dƒd¡ t|ddƒ |  t|ƒd¡ t|ddƒ |  t|ƒd¡ d S )Núhttp://foo.net/zns=barr4   úfoo.netrµ   Únsr]   úhttp://www.foo.net/)Zstrict_ns_domainrC   úhttp://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netr    ú.foo.netr  Zspam1rØ   r  Zspam2zspam2=eggs; spam1=eggs; ns=barznini="ni"; domain=.netzhttp://foo.co.ukznasty=trick; domain=.co.uké   )	r   r–   r"   rõ   r¸   r¹   r   ZDomainStrictNonDomainÚ
set_policy)r%   ru   rÓ   r(   r(   r)   Útest_two_component_domain_nsk  sB   ÿÿ
ÿÿÿÿÿz(CookieTests.test_two_component_domain_nsc                 C   s4  t dd}t|ƒ}t|ddƒ |  t|ƒd¡ |  |jd d d jd	¡ |  t|dƒd
¡ |  t|dƒd¡ t|ddƒ |  t|ƒd¡ |  t|dƒd
¡ t|ddƒ |  |jd d d jd¡ |  t|ƒd¡ |  t|dƒd
¡ |  t|dƒd¡ t|ddƒ |  t|ƒd¡ t|ddƒ |  t|ƒd¡ d S )NTrû   r!  rg   r4   r"  rµ   r\   r]   z$Version=1; foo=barr$  rC   zhttp://foo.net/fooz1spam=eggs; domain=foo.net; path=/foo; Version="1"zhttp://www.foo.net/foo/z&spam=eggs; domain=foo.net; Version="1"r&  rÙ   rv   rØ   r   r%  z($Version=1; spam=eggs; $Domain="foo.net"z#ni="ni"; domain=".net"; Version="1"zhttp://foo.co.uk/z'nasty=trick; domain=.co.uk; Version="1"r    )r   r   r”   r"   rõ   r¸   r¹   rÿ   r(   r(   r)   Ú!test_two_component_domain_rfc2965›  sJ   
ÿÿÿÿÿÿÿÿÿz-CookieTests.test_two_component_domain_rfc2965c                 C   s  t tdgdgdd}tj d¡}dg}t|dƒ}| ||¡ |  t|ƒd¡ tj d¡}t|dƒ}| ||¡ |  t|ƒd	¡ tj d
¡}t|d
ƒ}| ||¡ |  t|ƒd	¡ tj d
¡}t|d
ƒ}| 	||¡}| 
|d ¡ |  t|ƒd¡ | |¡ |  | d¡¡ d S )Nr  r´   )Úblocked_domainsZallowed_domainsr  úhttp://acme.com/ú*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/r   r³   r4   rò   r   r   )r   r   r—   r˜   r™   r„   r   r"   rõ   rô   Ú
set_cookierš   rÒ   Ú
has_header)r%   ru   rž   r‰   r‚   rï   r(   r(   r)   Útest_domain_allowÇ  s0   
þ




zCookieTests.test_domain_allowc                 C   s€  t ddgd}t|d}dg}tj d¡}t|dƒ}| ||¡ |  t|ƒd¡ | 	dg¡}| ||¡ |  t|ƒd	¡ | 
¡  tj d
¡}t|d
ƒ}| ||¡ |  t|ƒd	¡ tj d
¡}| |¡ |  | d¡¡ |  | d¡¡ | 
¡  | 	dg¡ | ||¡ |  t|ƒd	¡ tj d¡}t|dƒ}| ||¡}| |d ¡ |  t|ƒd¡ | |¡ |  | d¡¡ | 
¡  | 	g ¡ tj d¡}t|dƒ}| ||¡}| ||¡ |  t|ƒd	¡ tj d¡}| |¡ |  | d¡¡ tj d¡}| |¡ |  | |d |¡¡ |  | d¡¡ | 	dg¡}tj d¡}| |¡ |  | d¡¡ tj d¡}| |¡ |  | d¡¡ d S )NTrë   )râ   r+  r  r-  r³   r   r  r4   zhttp://www.roadrunner.net/r   ÚCookie2r   r,  zhttp://badacme.com/)r   r   r—   r˜   r™   r„   r   r"   rõ   Zset_blocked_domainsÚclearrš   rÑ   r/  rô   r.  rÒ   Z	return_ok)r%   rÓ   ru   r‰   rž   r‚   Úprï   r(   r(   r)   Útest_domain_blockæ  sj   ÿ











zCookieTests.test_domain_blockc                 C   s¶   dD ]V}dD ]Q}t ƒ }|rtdd}t}d}n	tdd}t}d}| |¡ d}|||d	||f ƒ |||d
||f ƒ |  |jd d d jd¡ |  |jd d d jd¡ qqd S )N)TF)rK   rC   Frû   rC   Tz; Version=1r³   zfoo1=bar%s%szfoo2=bar%s; secure%sr´   rµ   Úfoo1z#non-secure cookie registered secureZfoo2z#secure cookie registered non-secure)	r   r   r–   r”   r(  rÒ   r¸   ZsecurerÑ   )r%   r#  Ú
whitespaceru   rÓ   r­   ZvsrŠ   r(   r(   r)   Útest_secure)  s0   


þþïÿzCookieTests.test_securec                 C   sä   t ƒ }t|d}dg}tj d¡}t|dƒ}| ||¡ |  t|ƒd¡ tj d¡}| 	|¡ |  
| d¡¡ tj d¡}| 	|¡ |  | d¡¡ tj d¡}| 	|¡ |  
| d¡¡ tj d¡}| 	|¡ |  | d¡¡ d S )	Nr  ú(Set-Cookie: session=narf; secure; path=/úhttps://www.acme.com/r4   r   r³   zwss://www.acme.com/zws://www.acme.com/)r   r   r—   r˜   r™   r„   r   r"   rõ   rš   rÑ   r/  rÒ   ©r%   rÓ   ru   r‰   rž   r‚   r(   r(   r)   Útest_secure_block@  s&   





zCookieTests.test_secure_blockc                 C   sê   t dgd}t|d}dg}tj d¡}t|dƒ}| ||¡ |  t|ƒd¡ tj d¡}| 	|¡ |  
| d¡¡ tj d¡}| 	|¡ |  
| d¡¡ tj d	¡}| 	|¡ |  | d¡¡ tj d
¡}| 	|¡ |  
| d¡¡ d S )NZfoos)Zsecure_protocolsr  r8  r9  r4   r   r³   zfoos://www.acme.com/zfoo://www.acme.com/)r   r   r—   r˜   r™   r„   r   r"   rõ   rš   rÒ   r/  rÑ   r:  r(   r(   r)   Útest_custom_secure_protocols\  s&   





z(CookieTests.test_custom_secure_protocolsc                 C   s6   t tddd}t|ddƒ t|dƒ}|  |d¡ d S )NTrû   r  r³   zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r   r   r”   r"   )r%   ru   rù   r(   r(   r)   Útest_quote_cookie_valuew  s   
z#CookieTests.test_quote_cookie_valuec                 C   sX   d}t tddƒ}t||dƒ tj |¡}|  t|ƒd¡ | |¡ |  	| 
d¡¡ d S )Núhttp://www.acme.comTrû   ræ   r4   r   )r   r   r”   r—   r˜   r™   r"   rõ   rš   rÑ   r/  )r%   rŠ   ru   rž   r(   r(   r)   Útest_missing_final_slash}  s   
z$CookieTests.test_missing_final_slashc                 C   sž   t dd}t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  d|d	¡ t|ƒ}d}t||d
ƒ t||ƒ}|  d|d	¡ d S )NTrû   rÆ   úspam=eggs; Version=1ZDomainz*absent domain returned with domain presentz%spam=eggs; Version=1; Domain=.bar.comz$Domain=".bar.com"zdomain not returnedz$spam=eggs; Version=1; Domain=bar.comz$Domain="bar.com"©r   r   r”   rö   rî   ©r%   rÓ   ru   rŠ   rù   r(   r(   r)   Útest_domain_mirror‡  s$   

ÿ

zCookieTests.test_domain_mirrorc                 C   sn   t dd}t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  d|d	¡ d S )
NTrû   rÆ   r@  r¥   z&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedrA  rB  r(   r(   r)   Útest_path_mirrorž  s   


zCookieTests.test_path_mirrorc                 C   sÎ   t dd}t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  |dd	¡ t|ƒ}d}t||d
ƒ t||ƒ}|  d|d¡ t|ƒ}d}t||dƒ t||ƒ}|  d|d¡ d S )NTrû   rÆ   r@  ZPortz&absent port returned with port presentzspam=eggs; Version=1; Portz\$Port([^=]|$)z-port with no value not returned with no valuezspam=eggs; Version=1; Port="80"z
$Port="80"z5port with single value not returned with single valuez$spam=eggs; Version=1; Port="80,8080"z$Port="80,8080"z;port with multiple values not returned with multiple values)r   r   r”   rö   r#   rî   rB  r(   r(   r)   Útest_port_mirror­  s6   


ÿ
ÿ
ÿzCookieTests.test_port_mirrorc                 C   s:   t tddƒ}d}t||dƒ t||ƒ}|  d|d¡ d S )NTrû   rÆ   zfspam=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"ÚCommentz:Comment or CommentURL cookie-attributes returned to server)r   r   r”   rö   )r%   ru   rŠ   rù   r(   r(   r)   Útest_no_return_commentÌ  s   
ÿz"CookieTests.test_no_return_commentc                 C   sæ   t tddƒ}t|ddƒ t|ddƒ t|ddƒ t|ddƒ t|d	d
ƒ g d¢}g d¢}g d¢}g d¢}tdƒD ]7}d}|D ]0}|  |t¡ |  |j|| ¡ |  |j	|| ¡ |  |j
|| ¡ |  |j|| ¡ |d }q?q9d S )NTrû   zhttp://blah.spam.org/zefoo=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"zhttp://www.acme.com/blah/zspam=bar; securezfoo=bar; secure; Version=1zfoo=bar; path=/; Version=1úhttp://www.sol.noúsbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) ")r4   r4   r4   r   r4   )Zbangr\   r\   rv   r\   )z.sol.nozblah.spam.orgr´   r´   r´   )rµ   rµ   rµ   rþ   rü   r'  r   r4   )r   r   r”   r–   ÚrangeZassertIsInstancer   r"   r`   rÛ   rÔ   r  )r%   ZcsZversionsÚnamesZdomainsÚpathsÚiru   r(   r(   r)   Útest_Cookie_iteratorÖ  s6   ÿÿÿ
úþz CookieTests.test_Cookie_iteratorc                 C   sŽ   |   tdgƒg d¢g¡ |   tdgƒg d¢g¡ |   tdgƒddgg¡ |   tdgƒg d¢g¡ |   td	gƒd
dgg¡ |   tdgƒg ¡ d S )Nzfoo=bar; path=/; domain)r[   )r  rµ   )rÔ   Nr_   z)foo=bar; expires=Foo Bar 12 33:22:11 2000)r[   )r^   Nr_   r\   rj   r_   zfoo=bar; expireszfoo=bar; versionr[   )r`   NrC   rb   rM   r(   r(   r)   re   ö  s*   þþþþþz!CookieTests.test_parse_ns_headersc                 C   s†   dd„ }t t ¡ d ƒ}dgdgdgdgdgd	| gfD ]}||ƒ}|  t|ƒd
¡ qdg}||ƒ}|jd d d }|  |j¡ d S )Nc                 S   s,   t ƒ }tj d¡}t| dƒ}| ||¡ |S )Nrã   )r   r—   r˜   r™   r„   r   )r‰   ru   rž   rÖ   r(   r(   r)   Úcookiejar_from_cookie_headers  s
   
zICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headersrñ   zSet-Cookie: zSet-Cookie2: z-Set-Cookie2: a=foo; path=/; Version=1; domainzSet-Cookie: b=foo; max-age=oopszSet-Cookie: b=foo; version=spamzSet-Cookie:; Expires=%sr   z3Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000rä   rµ   ru   )r   r/   r"   rõ   r¸   rF   r^   )r%   rO  rø   r‰   ru   rß   r(   r(   r)   Útest_bad_cookie_header  s   ÷z"CookieTests.test_bad_cookie_headerN)%rV   rW   rX   r×   rà   ré   rí   rð   rú   r   r  r
  r  r  r  r  r  r  r  r  r   r)  r*  r0  r4  r7  r;  r<  r=  r?  rC  rD  rE  rG  rN  re   rP  r(   r(   r(   r)   rÅ     sF    /! 09(


$
0,C

 rÅ   c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚLWPCookieTestsc                 C   sœ  t  ¡ d d }g }ttddƒ}tjjdddid}| d	| ¡ t|d
ƒ}| 	||¡ tj d
¡}| 
|¡ |  | d¡d¡ |  | d¡d¡ | d¡ t|d
ƒ}| 	||¡ tj d¡}| 
|¡ | d¡}|  d|¡ |  d|¡ | d¡ t|dƒ}| 	||¡ tj d
¡}| 
|¡ | d¡}|  d|¡ |  d|¡ |  d|¡ tj d¡}| 
|¡ | d¡}|  d|¡ |  d|¡ |  | d¡¡ d S )Nr   r4   Trû   rê   r  r  r  zVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTr³   r   zCUSTOMER=WILE_E_COYOTEr1  ú$Version="1"ú4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/zhttp://www.acme.com/foo/barú PART_NUMBER=ROCKET_LAUNCHER_0001z%Set-Cookie: SHIPPING=FEDEX; path=/foor>  zSHIPPING=FEDEXrÚ   zSHIPPING=FEDEX;)r/   Ú	localtimer   r   r—   r˜   r™   rœ   r„   r   rš   r"   r›   rî   rö   rÑ   Ú
startswith)r%   Úyear_plus_oner‰   ru   rž   r‚   rù   r(   r(   r)   Útest_netscape_example_16  sP   %ÿÿÿ











z&LWPCookieTests.test_netscape_example_1c                 C   sª   t ƒ }g }tj d¡}| d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  | 	d¡d¡ | d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  
| 	d¡d¡ d S )Nr³   rS  r   rT  z6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammozhttp://www.acme.com/ammozBPART_NUMBER=RIDING_ROCKET_0023;\s*PART_NUMBER=ROCKET_LAUNCHER_0001)r   r—   r˜   r™   rœ   r„   r   rš   r"   r›   r#   ©r%   ru   r‰   rž   r‚   r(   r(   r)   Útest_netscape_example_2‘  s*   


ÿÿ

ÿz&LWPCookieTests.test_netscape_example_2c                 C   s’   t tddƒ}t|ddƒ}|  |¡ t|ddƒ}|  |d¡ t|dd	ƒ}|  |d
¡ |  |d¡ |  |d¡ t|dƒ}|  |d¡ |  d|¡ d S )NTrû   zhttp://www.acme.com/acme/loginz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"z!http://www.acme.com/acme/pickitemú=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z=^\$Version="?1"?; Customer="?WILE_E_COYOTE"?; \$Path="/acme"$z!http://www.acme.com/acme/shippingz+Shipping="FedEx"; Version="1"; Path="/acme"z^\$Version="?1"?;z7Part_Number="?Rocket_Launcher_0001"?;\s*\$Path="\/acme"z-Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"z http://www.acme.com/acme/processz%Shipping="?FedEx"?;\s*\$Path="\/acme"ZWILE_E_COYOTE)r   r   r”   rÒ   r#   rî   ©r%   ru   rß   r(   r(   r)   Útest_ietf_example_1Ä  s*   þ
ÿÿÿ
z"LWPCookieTests.test_ietf_example_1c                 C   sX   t tddƒ}t|dddƒ t|dƒ}|  |d¡ t|dƒ}|  d	|¡ |  d
|¡ d S )NTrû   z&http://www.acme.com/acme/ammo/specificr[  z@Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo"z!http://www.acme.com/acme/ammo/...z(Riding_Rocket_0023.*Rocket_Launcher_0001zhttp://www.acme.com/acme/parts/ZRocket_Launcher_0001ZRiding_Rocket_0023)r   r   r”   r#   rî   rö   r\  r(   r(   r)   Útest_ietf_example_24  s   ý

z"LWPCookieTests.test_ietf_example_2c                 C   sÖ  t dd}t|d}d}t|ddƒ}|  |¡ t|ddƒ}|  t|ƒd¡ t|d	d
ƒ}|  t|ƒd¡ t|d	dƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ t|ddƒ}|  t|ƒd¡ tj}z)|j|dd t	|ƒ}t|d}|j
|dd W zt |¡ W n tyÏ   Y nw zt |¡ W w  tyà   Y w w |  |t	|ƒ¡ d S )NTrû   r  zmax-age=3600r>  z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r4   zhttp://www.a.acme.comz'whiz=bang; domain="acme.com"; version=1z,wow=flutter; domain=".a.acme.com"; version=1r   zhttp://125.125.125.125z*zzzz=ping; domain="125.125.125"; version=1rH  z6blah=rhubarb; domain=".sol.no"; path="/foo"; version=1zhttp://www.sol.no/foo/barz3bing=bong; domain=".sol.no"; path="/foo"; version=1r    z5whiz=ffft; domain=".sol.no"; port="90,100"; version=1rI  r'  z9foo9=bar; version=1; domain=".sol.no"; port; max-age=100;é   zhttp://www.sol.no/<oo/z"foo8=bar; version=1; path="/%3coo"r.   r¶   )r   r   r”   rÒ   r"   rõ   r   r    rº   rÜ   r»   r¦   r¼   r½   )r%   rÓ   ru   Zmax_agerß   r¡   Úoldr(   r(   r)   Útest_rejectioni  sv   

ÿ
ÿÿÿÿÿÿÿþÿ	ÿ
ÿzLWPCookieTests.test_rejectionc                 C   sn   t tddƒ}t|ddƒ t|ddƒ}t dtj¡}|  d|¡ |  ||¡ t|d	ƒ}|  |¡ t|d
ƒ}d S )NTrû   z7http://www.acme.com/foo%2f%25/%3c%3c%0Anew%C3%A5/%C3%A5zfoo  =   bar; version    =   1u/   http://www.acme.com/foo%2f%25/<<%0anewÃ¥/Ã¦Ã¸Ã¥z bar=baz; path="/foo/"; version=1z^\$version=\"?1\"?rn   u-   http://www.acme.com/foo/%25/<<%0anewÃ¥/Ã¦Ã¸Ã¥u   http://www.acme.com/Ã¼)	r   r   r”   rÝ   ÚcompileÚIrî   r#   rÒ   )r%   ru   rß   Z
version_rer(   r(   r)   Útest_url_encodingÄ  s    þþÿ
z LWPCookieTests.test_url_encodingc                    s  t  ¡ d d }tj‰ tˆ tddd}t|ddƒ t|ddƒ t|dd	ƒ d
|f }t|dd| ƒ t|dd| ƒ t|dd| ƒ |D ]}|jdkrR| 	dd¡ qE‡ fdd„}||dƒ}|  
t|ƒd¡ |  dt|ƒ¡ |  dt|ƒ¡ ||dƒ}|  
t|ƒd¡ |  dt|ƒ¡ d S )Nr   r4   Trû   r  r³   z foo1=bar; max-age=100; Version=1z4foo2=bar; port="80"; max-age=100; Discard; Version=1zfoo3=bar; secure; Version=1zexpires=09-Nov-%d 23:12:40 GMTzhttp://www.foo.com/zfooa=bar; %szfoob=bar; Domain=.foo.com; %sz fooc=bar; Domain=www.foo.com; %sr5  ZHTTPOnlyrC   c                    st   z(| j |d tˆ tddƒ}|j|d W zt ˆ ¡ W |S  ty(   Y |S w zt ˆ ¡ W w  ty9   Y w w )Nr¶   Trû   )rº   r   r   r»   r¦   r¼   r½   )r  r·   Únew_cr¬   r(   r)   Úsave_and_restoreô  s   ÿÿÿÿz5LWPCookieTests.test_mozilla.<locals>.save_and_restorer.   zname='foo1', value='bar'zrest={'HTTPOnly': ''}Fr'  )r/   rU  r   r    r   r   r”   r–   rÛ   Zset_nonstandard_attrr"   rõ   rî   rÜ   )r%   rW  ru   r^   rß   rf  re  r(   r¬   r)   Útest_mozillaÚ  sD   ÿÿÿ
ÿÿÿ
€

zLWPCookieTests.test_mozillac                 C   s”   t ƒ }g }tj d¡}| d¡ t|dƒ}| ||¡ | d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  d| 	d¡¡ |  d| 	d¡¡ d S )Nzhttp://foo.bar.acme.com/fooz4Set-Cookie: Customer=WILE_E_COYOTE; domain=.acme.comzhttp://www.acme.com/fooz4Set-Cookie: PART_NUMBER=3,4; domain=foo.bar.acme.comzPART_NUMBER=3,4r   zCustomer=WILE_E_COYOTE)
r   r—   r˜   r™   rœ   r„   r   rš   rî   r›   rY  r(   r(   r)   Útest_netscape_misc  s   




z!LWPCookieTests.test_netscape_miscc                 C   sh   t tddƒ}t|ddƒ t|ddƒ}|  d|¡ t|ddƒ t|dƒ}|  d|¡ |  t|ƒd	¡ d S )
NTrû   úhttp://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1úfoo1=barzfoo3=bar; Version=1úfoo2=barr    )r   r   r”   rî   r"   rõ   r\  r(   r(   r)   Útest_intranet_domains_2965  s   ÿÿ
z)LWPCookieTests.test_intranet_domains_2965c                 C   sl   t tddƒ}t|ddƒ t|ddƒ}|  t|ƒd¡ |  d|¡ t|dƒ}|  d|¡ |  t|ƒd¡ d S )NFrû   ri  rj  zfoo2=bar; domain=.localr   rk  )r   r   r–   r"   rõ   rî   r\  r(   r(   r)   Útest_intranet_domains_ns-  s   ÿ
z'LWPCookieTests.test_intranet_domains_nsc                 C   s¶   t tddƒ}g }tj d¡}| d¡ t|dƒ}| ||¡ tj d¡}| |¡ |  	| 
d¡d¡ |  	| 
d¡d¡ tj d	¡}| |¡ |  	| 
d¡d¡ |  	| 
d¡d¡ d S )
NTrû   zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=r   zJSESSIONID=ABCDERANDOM123r1  rR  zhttp://www.ants.com:8080)r   r   r—   r˜   r™   rœ   r„   r   rš   r"   r›   rY  r(   r(   r)   Útest_empty_path9  s$   


ÿ
ÿzLWPCookieTests.test_empty_pathc           	      C   s  t  ¡ d d }tj d¡}g }| d¡ | d| ¡ | d| ¡ | d¡ | d¡ t|dƒ}tƒ }| ||¡ ddddd	œ}|D ]}d
|j	 }|| d ||< qD| 
¡  |D ]}d|j	 }|| d ||< qZ|  |d |d ¡ |  |d d¡ |  |d d¡ d S )Nr   r4   z"http://www.perlmeister.com/scriptsz$Set-Cookie: s1=session;Path=/scriptszWSet-Cookie: p1=perm; Domain=.perlmeister.com;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTz>Set-Cookie: p2=perm;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTz<Set-Cookie: s2=session;Path=/scripts;Domain=.perlmeister.comz2Set-Cookie2: s3=session;Version=1;Discard;Path="/")Úsession_afterÚ
perm_afterÚsession_beforeÚperm_beforez	%s_beforez%s_afterrp  rr  ro  rq  )r/   rU  r—   r˜   r™   rœ   r„   r   r   r¹   r÷   r"   ZassertNotEqual)	r%   rW  rž   r‰   r‚   ru   Zcounterrß   Úkeyr(   r(   r)   Útest_session_cookiesX  s<   
þÿ


ý

z#LWPCookieTests.test_session_cookiesN)rV   rW   rX   rX  rZ  r]  r^  ra  rd  rg  rh  rl  rm  rn  rt  r(   r(   r(   r)   rQ  3  s    [3p5[.rQ  c                 C   s   t j ttttt¡ d S rŒ   )rH   ÚsupportZrun_unittestr   rZ   rÅ   rŸ   rQ  ©Úverboser(   r(   r)   Ú	test_mainƒ  s   ûrx  Ú__main__Trv  rŒ   )/r¦   rÝ   Ztest.supportrH   r   r   r/   ZunittestZurllib.requestr—   r¤   Zhttp.cookiejarr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZTestCaser   rZ   r„   r”   r–   r   rŸ   rÅ   rQ  rx  rV   r(   r(   r(   r)   Ú<module>   sH    d 3g
B       -    
T	ÿ