
    0hh]G                       S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKrSSKrSSKrSSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  \RP                  S:H  r) " S	 S
\RT                  5      r+ " S S\RT                  5      r, " S S5      r-S r.S r/S r0 " S S\RT                  5      r1 " S S\RT                  5      r2 " S S\RT                  \5      r3\4S:X  a  \Rj                  " 5         gg)zTests for http/cookiejar.py.    N)support)	os_helper)warnings_helper)ExtraAssertions)	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_hostwin32c                       \ rS rSrS rS rS rS r\R                  " S/ SQ5      S 5       r
S	 rS
 r\R                  " S/ SQ5      S 5       r\R                  " S/ SQ5      S 5       rS rSrg)DateTimeTests   c           	      t   SnSnU R                  [        U5      S5        U R                  [        X-   5      S5        U R                  [        USU-  -   5      S5        U R                  [        USU-  -   5      S5        [        5       n[        S	5      nX44 H  nU R                  US
SU< SU< 35        M      g )Nx+<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:  )assertEqualr   assertRegexselfbasedayazbztexts         A/opt/python-3.13.8/usr/lib/python3.13/test/test_http_cookiejar.pytest_time2isozDateTimeTests.test_time2isoz   s    4*@A48,.DE4#:.0FG4#:.0FG[vHDT#G>@"EG     c           	      t   SnSnU R                  [        U5      S5        U R                  [        X-   5      S5        U R                  [        USU-  -   5      S5        U R                  [        USU-  -   5      S5        [        5       n[        S	5      nX44 H  nU R                  US
SU< SU< 35        M      g )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: r(   )r)   r
   r*   r+   s         r2   test_time2netscape DateTimeTests.test_time2netscape(   s    t,.MNtx08	: 	tAcEz28	: 	tAcEz28	: _6"HDN57<> r5   c                     S nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )Nc                 F    [         R                  " [        U 5      5      S S $ N   )timegmtimer   r1   s    r2   
parse_date0DateTimeTests.test_http2time.<locals>.parse_date?   s    ;;y/33r5   z01 Jan 2001)i     rB   r   r           z	03-Feb-20)i  r%   r&   r   r   rC   z	03-Feb-98)i  r%   r&   r   r   rC   r)   r,   r@   s     r2   test_http2timeDateTimeTests.test_http2time>   sO    	4 	M24KL 	K02IJ 	K02IJr5   c           
         / SQnSn[        U5      nSnU R                  X4U< SU< SU< S35        U H  nU R                  [        U5      X%5        U R                  [        UR                  5       5      X%R                  5       5        U R                  [        UR	                  5       5      X%R	                  5       5        M     g )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  =>  'z' ())r   r)   r   lowerupper)r,   teststest_tresultexpectedss         r2   test_http2time_formats$DateTimeTests.test_http2time_formatsJ   s    
, 6")06I	K AYq\65Yqwwy16779EYqwwy16779E r5   test) 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 GMTc                 8    U R                  [        U5      5        g N)assertIsNoner   r,   rU   s     r2   test_http2time_garbage$DateTimeTests.test_http2time_garbagen   s    " 	)D/*r5   c                 x    [        SR                  SS-  5      5        [        SR                  SS-  5      5        g )Nz01 Jan 1970{}00:00:00 GMT!r(   i z01 Jan 1970 00:00:00{}GMT!)r   formatr,   s    r2   2test_http2time_redos_regression_actually_completes@DateTimeTests.test_http2time_redos_regression_actually_completes   s4     	.55cGmDE.55cGmDEr5   c                     S nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )Nc                 F    [         R                  " [        U 5      5      S S $ r;   )r=   r>   r	   r?   s    r2   r@   /DateTimeTests.test_iso2time.<locals>.parse_date   s    ;;x~.r22r5   19940203T141529Z)i  r%   r&            z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530rD   rE   s     r2   test_iso2timeDateTimeTests.test_iso2time   sX    	3 	$671	3 	$?@1	3 	$?@1	3r5   rR   )
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:0019940203z1994-02-02 24:00:0019940203T000000Zz  1994-02-03 z  1994-02-03T00:00:00  c                    SnU R                  [        U5      X!5        U R                  [        UR                  5       5      X!R                  5       5        U R                  [        UR                  5       5      X!R                  5       5        g )NrJ   )r)   r	   rL   rM   )r,   rR   rO   s      r2   test_iso2time_formats#DateTimeTests.test_iso2time_formats   s_      !f0!''),fggi@!''),fggi@r5   )rV   rW   rI   z
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rX   z01-01-1980T00:00:6219800101T250000Zc                 8    U R                  [        U5      5        g rZ   )r[   r	   r\   s     r2   test_iso2time_garbage#DateTimeTests.test_iso2time_garbage   s     	(4.)r5   c                 x    [        SR                  SS-  5      5        [        SR                  SS-  5      5        g )Nz1994-02-03{}14:15:29 -0100!r(   i@B z1994-02-03 14:15:29{}-0100!)r	   r`   ra   s    r2   $test_iso2time_performance_regression2DateTimeTests.test_iso2time_performance_regression   s4     	.55c%i@A.55c%i@Ar5    N)__name__
__module____qualname____firstlineno__r3   r7   rF   rS   r   subTestsr]   rb   rk   rp   rt   rw   __static_attributes__ry   r5   r2   r    r       s    G>,
K"FH f 
  +! +F3  c 
 AA f 
 **Br5   r    c                      \ rS rSr\R
                  " SSS/5      S 5       r\R
                  " SSS/5      S 5       rS	 rS
 r	\R
                  " SSS//4SS//4SS//4SS//4SS//4SS//4SSS//4SSS//4SS//4SSS//4S/ SQ/4SS/S/S //4S!SS/S"/S#/S$//4/5      S% 5       r
\R
                  " S/ S&Q5      S' 5       rS(rg))*HeaderTests   hdrz)foo=bar; expires=01 Jan 2040 22:23:32 GMTz+foo=bar; expires="01 Jan 2040 22:23:32 GMT"c                 F    / SQ/nU R                  [        U/5      U5        g )N)foobar)expiresl   d9W version0r)   r   r,   r   rQ   s      r2   test_parse_ns_headers!HeaderTests.test_parse_ns_headers   s%     PP)3%0(;r5   zfoo=bar; version="1"foo=bar; Version="1"c                 F    SS//nU R                  [        U/5      U5        g )Nr   )r   1r   r   s      r2   test_parse_ns_headers_version)HeaderTests.test_parse_ns_headers_version   s*     $%567)3%0(;r5   c                 J    SnSS//nU R                  [        U/5      U5        g )Nz expires=01 Jan 2040 22:23:32 GMT)r   z01 Jan 2040 22:23:32 GMTr   r   r   s      r2   #test_parse_ns_headers_special_names/HeaderTests.test_parse_ns_headers_special_names   s/     1<>NOP)3%0(;r5   c                 |    [        SS//5      nU R                  US5        U R                  [        / /5      S5        g )Nr   Nr   bazzfoo; bar=bazrV   )r   r)   )r,   joineds     r2   test_join_header_words"HeaderTests.test_join_header_words   s<    "]N$C#DE0*B40"5r5   z
arg,expectr   r   foo=barr   	   foo   z
   foo=   )r   rV   z   foo=z   foo=   ; z   foo=   ; bar= baz r   foo=bar bar=bazzfoo= bar=baz)r   zbar=bazfoo=bar;bar=bazfoo bar baz)r   )r   N)r   Nza, b, c)aN)bN)cNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )spamrV   )r   z,;")r   rV   c                      [        U/5      nU R                  X2SU< SU< SU< S35        g !   SS KnSS KnUR                  5       nUR	                  S U5        SUR                  5       -  n Na= f)Nr   z (error -- traceback follows)

%s
When parsing: ''
Expected:     ''
Got:          ''
)r   	tracebackioStringIO	print_excgetvaluer)   )r,   argexpectrP   r   r   fs          r2   test_split_header_words#HeaderTests.test_split_header_words   sl    &	I'.F 	& FF	+ 		I Aa(9AJJLHFs	   . ?A/))r   r   )r   r   )r   r   )zfoo=foo="")r   foo=bar; bar=baz)r   r   )r   zfoo; bar; baz)zfoo="\"" bar="\\"zfoo="\""; bar="\\")u	   föo=bäru   föo="bär")z	foo,,,barzfoo, bar)zfoo=bar,bar=bazzfoo=bar, bar=baz)zfoo=
r   )foo="
"r   )zfoo=bar
r   )
foo="bar
"r   )zfoo=bar
bazzfoo=bar; baz)foo="bar
baz"r   )text/html; charset=iso-8859-1r   )text/html; charset="iso-8859/1"r   )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\"")n; foo="foo;_", bar="foo,_"r   c                 x    [        U/5      n[        U5      nU R                  XBSU< SU< SU< SU< S3	5        g )Nr   r   r   z'
Input was:    'r   )r   r   r)   )r,   r   r   inputress        r2   test_roundtripHeaderTests.test_roundtrip  s=    F #C5)&f
 FC'  	!r5   ry   N)rz   r{   r|   r}   r   r~   r   r   r   r   r   r   r   ry   r5   r2   r   r      s   e79
 <	<
 e""
 <	<
<6 lm_%&.)*+M?+,[M?++({m_-$^'D&EF..!A BC1234..!A BCJKL+}EF8n-n~.?@%
 $%$ l !%
 !D!E!D!r5   r   c                   (    \ rS rSr/ S4S jrS rSrg)FakeResponsei4  Nc                 b    SSK nUR                  SR                  U5      5      U l        X l        g)z4
headers: list of RFC822-style 'Key: value' strings
r   N
)emailmessage_from_stringjoin_headers_url)r,   headersurlr   s       r2   __init__FakeResponse.__init__5  s'     	11$))G2DE	r5   c                     U R                   $ rZ   )r   ra   s    r2   infoFakeResponse.info<  s    4==(r5   )r   r   )rz   r{   r|   r}   r   r   r   ry   r5   r2   r   r   4  s    !t  )r5   r   c                     [        XUS5      $ )NzSet-Cookie2	_interact	cookiejarr   set_cookie_hdrss      r2   interact_2965r   >  s    Y_mDDr5   c                     [        XUS5      $ )Nz
Set-Cookier   r   s      r2   interact_netscaper   A  s    Y_lCCr5   c                    [         R                  R                  U5      nU R                  U5        UR	                  SS5      n/ nU H  nUR                  U< SU< 35        M     [        Xa5      nU R                  X5        U$ )zDPerform a single request / response cycle, returning Cookie: header.r   rV   z: )urllibrequestRequestadd_cookie_header
get_headerappendr   extract_cookies)	r   r   r   hdr_namereq
cookie_hdrr   r   r   s	            r2   r   r   D  sr    
..
 
 
%C$"-JG8S12 
w
$Cc'r5   c                   (   \ rS rSrS rS rS rS rS r\	R                  " \S5      \R                  S 5       5       r\	R                  " \S5      \R                  S	 5       5       r\	R                  " \S5      \R                  S
 5       5       rS rSrg)FileCookieJarTestsiQ  c                 r    [         R                  n[        U5      nU R                  UR                  U5        g rZ   )r   TESTFNr   r)   filenamer,   r   r   s      r2   test_constructor_with_str,FileCookieJarTests.test_constructor_with_strR  s+    ##"X.r5   c                     [         R                  n[        [         R                  " U5      5      nU R	                  UR
                  U5        g rZ   )r   r   r   FakePathr)   r   r   s      r2   test_constructor_with_path_like2FileCookieJarTests.test_constructor_with_path_likeW  s6    ##++H56X.r5   c                 P    [        S 5      nU R                  UR                  5        g rZ   )r   r[   r   r,   r   s     r2   test_constructor_with_none-FileCookieJarTests.test_constructor_with_none\  s    !**%r5   c                     " S S5      n[         [        U4 HI  nU R                  US9   U R                  [        5         U" 5       n[        US9nS S S 5        S S S 5        MK     g ! , (       d  f       N= f! , (       d  f       Mn  = f)Nc                       \ rS rSrSrg)?FileCookieJarTests.test_constructor_with_other_types.<locals>.Aia  ry   N)rz   r{   r|   r}   r   ry   r5   r2   Ar   a  s    r5   r   r   )intfloatsubTestassertRaises	TypeErrorr   )r,   r   type_instancer   s        r2   !test_constructor_with_other_types4FileCookieJarTests.test_constructor_with_other_types`  sh    	 	 5!_Eu-&&y1$wH$h7A 2 .- %11 .-s#   A7 A&A7&
A40A77
B	c                    [         R                  n[        5       n[        USS5        U R	                  UR
                  S   S   S   R                  S 5         UR                  USS9  [        5       nUR                  USS9  [         R                  " U5        U R	                  UR
                  S   S   S   R                  S 5        g ! [         R                  " U5        f = f)Nhttp://www.acme.com/boowww.acme.com/Tignore_discard)
r   r   r   r   r)   _cookiesvaluesaveloadunlinkr   s      r2   test_lwp_valueless_cookie,FileCookieJarTests.test_lwp_valueless_cookiej  s    ##N!3U;N3C8?EEtL	'FF8DF1AFF8DF1X&N3C8?EEtL X&s   *C C z9windows file permissions are incompatible with file modesc                 b   [         R                  n[        5       n[        USS5         UR	                  USS9  [
        R                  " U5      nU R                  [        R                  " UR                  5      S5        [         R                  " U5        g ! [         R                  " U5        f = fNr  r  Tr  i  )r   r   r   r   r  osstatr)   S_IMODEst_moder  r,   r   r   sts       r2   test_lwp_filepermissions+FileCookieJarTests.test_lwp_filepermissionsx  s     ##N!3U;	'FF8DF1"BT\\"**5u=X&IX&   AB B.c                 b   [         R                  n[        5       n[        USS5         UR	                  USS9  [
        R                  " U5      nU R                  [        R                  " UR                  5      S5        [         R                  " U5        g ! [         R                  " U5        f = fr  )r   r   r   r   r  r  r  r)   r  r  r  r  s       r2   test_mozilla_filepermissions/FileCookieJarTests.test_mozilla_filepermissions  s     ##!3U;	'FF8DF1"BT\\"**5u=X&IX&r  c                 (   [         R                  n[        [        4 H  nU" U5      n[        R
                  R                  S5      nS/n[        US5      nUR                  Xd5        U R                  [        U5      S5         UR                  5         UR                  5         UR                  5         UR                  5         [         R                  " U5        U R                  [        U5      S5        M     g ! [         R                  " U5        f = f)Nr  z1Set-Cookie: pll_lang=en; Max-Age=31536000; path=/rB   r   )r   r   r   r   r   r   r   r   r   r)   lenr  clearr  r  )r,   r   cookiejar_classr   r   r   r   s          r2   test_cookie_files_are_truncated2FileCookieJarTests.test_cookie_files_are_truncated  s     ## ,.>?O)A..(()?@CJKGw(>?Cc'SVQ'	+	  *SVQ')  @$   *s   A C99Dc                 R   [         R                  n[        [        4 H+  nU" 5       n UR	                  SS9  U R                  S5        M-      [        US5       nUR                  S5        [        [        4 H+  nU" 5       nU R                  [        UR                  U5        M-     S S S 5        [         R                  " U5        g ! [         a+  nU R                  UR                  [        5         S nAM  S nAff = f! , (       d  f       N]= f! [         R                  " U5        f = f)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  failOSErrorassertIsNot	__class__r   openwriter   r  )r,   r   r%  r   excr   s         r2   test_bad_magic!FileCookieJarTests.test_bad_magic  s    ##+-==O!AC !< = 		AB  >	'h$!'35E'EO')A%%iB (F % X&  ;   	::; %$ X&s<   CD AC=&D 
C: C55C:=
DD D&ry   N)rz   r{   r|   r}   r   r   r   r  r  unittestskipIf	mswindowsr   skip_unless_working_chmodr  r   r&  r1  r   ry   r5   r2   r   r   Q  s    /
/
&8M __Y [\((
' ) ]
' __Y [\((
' ) ]
' __Y [\((( ) ](0'r5   r   c                      \ rS rSr\R
                  " S/ SQ5      S 5       rS r\R
                  " S/ SQ5      S 5       rS	 r	S
 r
S rS rS r\R
                  " S/ SQ5      S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS  rS! rS" r S# r!S$ r"S% r#S& r$S' r%S( r&S) r'S* r(S+ r)S, r*S- r+S. r,S/ r-S0r.g1)2CookieTestsi  zurl,domain,ok))http://foo.bar.com/zblah.comF)r9  zrhubarb.blah.comF)r9  zrhubarb.foo.bar.comF)r9  .foo.bar.comT)r9  foo.bar.comT)r9  z.bar.comT)r9  bar.comT)r9  comT)http://foo.com/zrhubarb.foo.comF)r>  .foo.comT)r>  foo.comT)r>  r=  T)http://foo/zrhubarb.fooF)rA  z.fooT)rA  r   T)rA  z	foo.localT)rA  .localT)http://barfoo.comr?  F)rC  r@  Fc                     [        5       n[        R                  R                  U5      nUR	                  X%5      nU(       a  U R                  U5        g U R                  U5        g rZ   )r   r   r   r   domain_return_ok
assertTrueassertFalse)r,   r   domainokpolr   rs          r2   test_domain_return_ok!CookieTests.test_domain_return_ok  sL    6 "#..((-  1tq!q!r5   c                 r   [         R                  n[        U5      n[        USS5        [        USS5        UR                  S   S   S   nU R                  UR                  5        U R                  UR                  S5        UR                  S   S   S   nU R                  UR                  5        U R                  UR                  S5        U R                  [        U5      S5        [        U5      nUR                  S	S	S
9   [        U5      nUR                  S	S	S
9  [         R                  " UR                  5        U R                  [        U5      [        R                   " SS	-  SS-  U5      5        U R                  [        US5      S5        g ! [         R                  " UR                  5        f = f)Nr  eggsz"spam"; path=/foo/r	  r
  /foo/z"spam"zH"spam"; path="/foo/"; domain=www.acme.com; path_spec; discard; version=0T)ignore_expiresr  zpath_specified=%sFhttp://www.acme.com/foo/z"spam"; eggs)r   r   r   r   r  r[   r  r)   namer   reprr  revertr  r   resub)r,   r   r   cookieold_strs        r2   test_missing_valueCookieTests.test_missing_value  s~    ##X&!3V<!35IJN+C08&,,'f-N+G4X>&,,'h//,	. q'	d48	) *AHHDH>QZZ(GFF&-/BU/J	
 	*1.HI'	) QZZ(s   F "F6z#rfc2109_as_netscape,rfc2965,version))NFr   )NTrB   )FFN)FTrB   )TFr   )TTr   c                 z   [        UUS9n[        U5      n[        USS5         UR                  S   S   S   nU R	                  UR
                  U5        [        USS5        U(       a2  UR                  S   S   S   nU R	                  UR
                  S	5        g g ! [         a    U R                  U5         g f = f)
N)rfc2109_as_netscaperfc2965http://www.example.com/zni=ni; Version=1www.example.comr
  nifoo=bar; Version=1r   rB   )	r   r   r   r  r)   r   r   KeyErrorr[   )r,   r]  r^  r   policyr   rX  
cookie2965s           r2   test_rfc2109_handling!CookieTests.test_rfc2109_handling7  s     % 3 f!68JK	8ZZ 1237=F V^^W5!602ZZ(9:3?F
  !3!3Q7   	'g&	's   B B:9B:c                    [        5       n[        USS5        [        USS5        [        USS5        [        USS5        [        USS5        [        USS5        [        USS	5        [        USS
5        UR                  S   S   S   nU R                  UR                  S5        U R                  UR                  5        U R                  UR                  [        5        U R                  UR                  5        U R                  UR                  S5      5        U R                  UR                  S5      5        UR                  S   S   S   nU R                  UR                  S5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  5        UR                  S   S   S   nU R                  UR                  5        U R                  UR                  5        UR                  S   S   S   nUR                  S   S   S   nU R                  UR                  5        U R                  UR                  5        UR                  S   S   S   nU R                  UR                  5        U R                  UR                  S5        UR                  S   S   S
   nU R                  UR                  5        g )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=unladenswallowholyhandgrenade	.acme.comr
  r   blArghblarghr	  ra  z80,8080ninir   fortytworV   )r   r   r  r)   rH  rF  domain_specifiedportr   rG  port_specifiedhas_nonstandard_attrr[   r   assertIsNotNoner  )r,   r   rX  r   r   s        r2   test_ns_parserCookieTests.test_ns_parserV  s{   K!3L	N!35JK!6	B!68KL!6 9? 	@!3[A!35FG!35FGK(-f54//0&78../33H=>44X>?N+C067001i0--.N+C08&++&../ jj(-e4zz.)#.u5#++&$,,'N+C0<V\\*r*
 N+C01BC&,,'r5   c                     [        5       n[        USS5        [        USS5        UR                  S   S   nU R                  SU5        U R                  SU5        g )Nr  zexpires=eggszversion=eggs; spam=eggsr	  r
  r   r   )r   r   r  assertIn)r,   r   cookiess      r2   test_ns_parser_special_names(CookieTests.test_ns_parser_special_names  sU     K!3^D!35NO**^,S1i)i)r5   c                 N   [        5       n[        [        R                  " 5       S-   5      n[        R                  " U 5         SU 3/n[
        R                  R                  S5      n[        US5      nUR                  XT5      nU R                  [        U5      S5        U R                  [        US   R                  5      U5        S S S 5        [        USSU-  5        U R                  [        U5      S5        [        [        R                  " 5       S-
  5      n[        USSU-  5        [        US5      nU R                  [        U5      S5        U R                  S	U5        U R                  S
U5        [        USSU-  5        [        USSU-  5        U R                  [        U5      S5        [        USSU-  5        [        USSU-  5        [        US5      nU R                  [        U5      S5        [        USS5        U R                  [        U5      S5        UR!                  5         U R                  [        U5      S5        U R                  S	U5        [#        SSSS SSSSSSSSSS S 0 5      n	U R                  U	R                  S5        g ! , (       d  f       GN= f)N  z%Set-Cookie: FOO=BAR; path=/; expires=http://www.coyote.com/rB   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%   rS  r  Fzwww.python.orgTr
  z1444312383.018307i?uV)r   r
   r=   r   check_no_warningsr   r   r   r   make_cookiesr)   r#  r   r   rx  assertNotInclear_session_cookiesr   )
r,   r   futurer   r   r   ry  nowhrX  s
             r2   test_expiresCookieTests.test_expires  s{   Ktyy{4/0..t4>vhGHG..(()ABCw(@ACnnS.GS\1-]71:+=+=>G 5 	!35M 6! 	"Q#DIIKM*!35M6 	a!78Q#lA&" 	!35M 6! 	"!35L 6! 	"Q#!3 624:6; 	<!3 624:6; 	<a!78Q# 	!6FQ#	!Q#lA& FGu&6uc':d 	4a 54s   BJ
J$c                 ~   [        SS9n[        U5      n[        USS5        U R                  SUR                  S   5        [        U5      n[        USS5        U R                  SUR                  S   5        [        U5      n[        US	S5        U R                  S
UR                  S   5        [        U5      n[        USS5        U R                  SUR                  S   5        [        5       n[        USS5        U R                  SUR                  S   5        [        5       n[        USS5        U R                  SUR                  S   5        [        5       n[        US	S5        U R                  SUR                  S   5        [        5       n[        USS5        U R                  SUR                  S   5        g )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   rx  r  r   r,   rJ  r   s      r2   test_default_pathCookieTests.test_default_path  sw   !$/cNa/1JKc1::n56cNa35NOc1::n56cNa;/	1h

> :;cNa</	1&

>(BC K!3\Bc1::n56K!7Fc1::n56K!?Ngqzz.9:K!@,Ooqzz.'ABr5   c                     [        5       nSnSn[        XU5        U R                  SUR                  S   5        U R	                  [        X5      U5        g )Nzhttp://example.com/?spam/eggsr  r
  zexample.com)r   r   rx  r  r)   )r,   cjurir  s       r2   test_default_path_with_query(CookieTests.test_default_path_with_query  sJ    [-"5)c2;;}56*23U;r5   z
arg,result))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%8Dc                 :    U R                  [        U5      U5        g rZ   )r)   r   )r,   r   rP   s      r2   test_escape_pathCookieTests.test_escape_path  s    , 	S)62r5   c                 `   [         R                  R                  S5      nU R                  [	        U5      S5        [         R                  R                  S5      nU R                  [	        U5      S5        [         R                  R                  S5      nU R                  [	        U5      S5        g )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   s     r2   test_request_pathCookieTests.test_request_path  s    nn$$:; 	c*?	A nn$$() 	c*,@Ann$$%=>c*C0r5   c                    [        5       n[        SS9n[        U5      nSn[        X4S5        UR                  S   S   S   nS H  u  pgU U 3n[        R
                  R                  U5      n	[        X85      n
U(       a8  U R                  S	U
S
U 35        U R                  UR                  XY5      5        Mt  U R                  S	U
SU 35        U R                  UR                  XY5      5        M     g )NT)strict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foor<  /foor   ))r  T)rP  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   rx  rF  set_ok_pathr  rG  )r,   rJ  strict_ns_path_polr   base_urlrX  pathrI  r   r   r  s              r2   test_path_prefix_match"CookieTests.test_path_prefix_match$  s    !#0DIcN#!'=>I&v.v61HD
 Jtf%C..((-C!!)Ak10CD6.JK 2 > >v KL  a?4&1IJ  !3!?!?!LM1r5   c                     [         R                  R                  SSS0S9nU R                  [	        U5      S5        [         R                  R                  SSS0S9nU R                  [	        U5      [
        5        g )Nzhttp://www.acme.com:1234/Hostzwww.acme.com:4321r   1234r  )r   r   r   r)   r   r   r  s     r2   test_request_portCookieTests.test_request_port<  sy    nn$$%@.46I-J % Lc*F3nn$$%;.46I-J % Lc*,=>r5   c                 f   [         R                  R                  SSS0S9nU R                  [	        U5      S5        [         R                  R                  SSS0S9nU R                  [	        U5      S5        [         R                  R                  S	SS
0S9nU R                  [	        U5      S5        g )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  s     r2   test_request_hostCookieTests.test_request_hostD  s    nn$$%6.46G-H % J
 	c*I6nn$$%;.46F-G % Ic*N;nn$$%M.46I-J % Lc*N;r5   c                    U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        U R                  [        S5      5        g )	Nr;  z1foo2.3bar4.5com192.168.1.1rV   .r:  z..foozfoo.)rF  r   rG  ra   s    r2   test_is_HDNCookieTests.test_is_HDNT  s    }-.123./$%/0)(r5   c                    U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S	5      S	5        g )
Nr	  rk  acme.comz
acme.localrB  .comr  rV   z192.168.0.1)r)   r   ra   s    r2   
test_reachCookieTests.test_reach^  s    ~.<z*J7|,h7x(3v/sS)rB'}-}=r5   c                    U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        S	S
5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        U R                  [        SS5      5        g )Nr  z.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz	a.b.c.comz.c.comzexample.localrB  z	blah.blahrV   z.rhubarb.rhubarbr  rk  zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comr  r=  mz.mr  )rF  r   rG  r   ra   s    r2   test_domain_matchCookieTests.test_domain_matchh  s   ]MBCmZ@AY	:;Y9:i9:[(;<h<=_h?@k267b*<=>R,-)*jAB*:{CD)*<kJK)*@+NO))Y?@))X>?*9g>?)'7;<*8W=>)(H=>))V<=*9e<=*9c:;*9d;<*9b9:*9c:;)-GH*=*EF*=#>?*="=>r5   c                 h    [        5       n[        USS5        U R                  [        U5      S5        g )Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r   )r   r   r)   r#  r   s     r2   test_wrong_domainCookieTests.test_wrong_domain  s0    
 Ka0A	CQ#r5   c                     [        SS9n[        US9n[        USS5        [        USS5        U R                  [	        U5      S5        S H.  n[        US	U-  S
5        U R                  [	        U5      S5        M0     g )NT)strict_domainrd  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,   cpr  
pseudo_tlds       r2   test_strict_domainCookieTests.test_strict_domain  s}     !t4b!"5}E"5=	?R!$EJb"6"C8:SWa( Fr5   c                    [        5       n[        USS5        U R                  [        U5      S5        U R                  UR                  S   S   S   R
                  S5        U R                  [        US5      S5        U R                  [        US5      S5        [        [        R                  S	9nUR                  U5        U R                  [        US5      S
5        [        USS5        [        USS5        U R                  [        U5      S5        U R                  UR                  S   S   S   R
                  S5        U R                  UR                  S   S   S   R
                  S5        U R                  [        US5      S5        [        USS5        U R                  [        U5      S5        [        USS5        U R                  [        U5      S5        g )Nhttp://foo.net/zns=barrB   foo.netr
  nsr   http://www.foo.net/)strict_ns_domainrV   http://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netr&   .foo.netr  spam1rO  r  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   DomainStrictNonDomain
set_policy)r,   r   rJ  s      r2   test_two_component_domain_ns(CookieTests.test_two_component_domain_ns  s    K 	!.9Q#I.s3D9??G*1.?@(K*1.CD!	# "0FFH	S*1.CDbI 	!26	8 	!67	9Q#J/7@FF	!J/
;GDJJ	!*1.GH9	; 	!.0HIQ# 	!/1MNQ#r5   c                 h    [        5       n[        USS5        U R                  [        U5      S5        g )Nhttp://localhostfoo=bar; domain=localhost;rB   r   r   r)   r#  r   s     r2   test_localhost_domain!CookieTests.test_localhost_domain  s+    K!/1MNQ#r5   c                     [        5       n[        USS5        U R                  UR                  S   S   S   R                  S5        g )Nr  r  z
.localhostr
  r   r   r   r   r)   r  r  r   s     r2   test_localhost_domain_contents*CookieTests.test_localhost_domain_contents  s@    K!/1MNL1#6u=CCUKr5   c                     [        5       n[        USS5        U R                  UR                  S   S   S   R                  S5        g )Nr  zfoo=bar;zlocalhost.localr
  r   r   r  r   s     r2    test_localhost_domain_contents_2,CookieTests.test_localhost_domain_contents_2  s@    K!/<$56s;EBHH%Pr5   c                 h    [        5       n[        USS5        U R                  [        U5      S5        g )Nzhttp://evil.comzfoo=bar; domain=.localhostr   r  r   s     r2   test_evil_nonlocal_domain%CookieTests.test_evil_nonlocal_domain  s+    K!.0LMQ#r5   c                 h    [        5       n[        USS5        U R                  [        U5      S5        g )Nr  zfoo=bar; domain=.evil.comr   r  r   s     r2   test_evil_local_domain"CookieTests.test_evil_local_domain  s+    K!/1LMQ#r5   c                 h    [        5       n[        USS5        U R                  [        U5      S5        g )Nr  z foo=bar; domain=.someother.localr   r  r   s     r2   test_evil_local_domain_2$CookieTests.test_evil_local_domain_2  s+    K!/1STQ#r5   c                    [        SS9n[        U5      n[        USS5        U R                  [	        U5      S5        U R                  UR
                  S   S   S   R                  S	5        U R                  [        US5      S
5        U R                  [        US5      S5        [        USS5        U R                  [	        U5      S5        U R                  [        US5      S
5        [        USS5        U R                  UR
                  S   S   S   R                  S5        U R                  [	        U5      S5        U R                  [        US5      S
5        U R                  [        US5      S5        [        USS5        U R                  [	        U5      S5        [        USS5        U R                  [	        U5      S5        g )NTr  r  r   rB   r  r
  r   r   z$Version=1; foo=barr  rV   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  rP  r   rO  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  s      r2   !test_two_component_domain_rfc2965-CookieTests.test_two_component_domain_rfc2965  s   !$/cN 	a*,BCQ#I.s3E:@@%Hq*;<.	0 	q*?@"E
 	a-I	KQ#q*>?.	0
 	a2>	@J/8@FF	!Q#q*?@.	0q*CDC	E 	a*;	=Q# 	a,?	AQ#r5   c                 r   [        [        S/S/S9S9n[        R                  R	                  S5      nS/n[        US5      nUR                  XB5        U R                  [        U5      S5        [        R                  R	                  S5      n[        US5      nUR                  XB5        U R                  [        U5      S	5        [        R                  R	                  S
5      n[        US
5      nUR                  XB5        U R                  [        U5      S	5        [        R                  R	                  S
5      n[        US
5      nUR                  XB5      nUR                  US   5        U R                  [        U5      S5        UR                  U5        U R                  UR                  S5      5        g )Nr  r	  )blocked_domainsallowed_domainsr  http://acme.com/*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/r   r  rB   r~  r%   r   )r   r   r   r   r   r   r   r)   r#  r  
set_cookier   rG  
has_header)r,   r   r   r   r   ry  s         r2   test_domain_allowCookieTests.test_domain_allow*  sp   0'L+,. / nn$$%78?@7$67	##Q#nn$$%;<7$:;	##Q#nn$$%=>7$<=	##Q# nn$$%=>7$<=..*	WQZ Q#	C 12r5   c                    [        SS/S9n[        US9nS/n[        R                  R	                  S5      n[        US5      nUR                  XT5        U R                  [        U5      S5        UR                  S/5      nUR                  XT5        U R                  [        U5      S	5        UR                  5         [        R                  R	                  S
5      n[        US
5      nUR                  XT5        U R                  [        U5      S	5        [        R                  R	                  S
5      nUR                  U5        U R                  UR                  S5      5        U R                  UR                  S5      5        UR                  5         UR                  S/5        UR                  XT5        U R                  [        U5      S	5        [        R                  R	                  S5      n[        US5      nUR                  XT5      nUR                  US   5        U R                  [        U5      S5        UR                  U5        U R!                  UR                  S5      5        UR                  5         UR                  / 5        [        R                  R	                  S5      n[        US5      nUR                  XT5      nUR                  XT5        U R                  [        U5      S	5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S5      nUR                  U5        U R!                  UR#                  US   U5      5        U R!                  UR                  S5      5        UR                  S/5      n[        R                  R	                  S5      nUR                  U5        U R!                  UR                  S5      5        [        R                  R	                  S5      nUR                  U5        U R!                  UR                  S5      5        g )NTrk  )r^  r  r  r  r  r   r  rB   zhttp://www.roadrunner.net/r   Cookie2r%   r  zhttp://badacme.com/)r   r   r   r   r   r   r   r)   r#  set_blocked_domainsr$  r   rF  r  r  r  rG  	return_ok)r,   rJ  r   r   r   r   pry  s           r2   test_domain_blockCookieTests.test_domain_blockI  sk   !;-9S!?@nn$$%;<7$:;	##Q###ZL1	##Q#		nn$$%AB7$@A	##Q#nn$$%AB	C x01y12		.	##Q# nn$$%;<7$:;..*	WQZ Q#	C 12		#nn$$%787$67..*	##Q#nn$$%78	C x01nn$$%:;	C wqz37812##ZL1nn$$%78	C 12nn$$%:;	C 12r5   c           
         S H  nS H  n[        5       nU(       a  [        SS9n[        nSnO[        SS9n[        nSnUR	                  U5        SnU" X7S	U< U< 35        U" X7S
U< SU< 35        U R                  UR                  S   S   S   R                  S5        U R                  UR                  S   S   S   R                  S5        M     M     g )N)TF)r(   rV   Fr  rV   Tz; Version=1r  foo1=barfoo2=barz; securer	  r
  foo1z#non-secure cookie registered securefoo2z#secure cookie registered non-secure)	r   r   r   r   r  rG  r  securerF  )r,   r  
whitespacer   rJ  r   vsr   s           r2   test_secureCookieTests.test_secure  s    B%
K-e<C+CB-d;C'C&BS!,Asb*=>Asr:FG  JJ~.s3F;BB9; JJ~.s3F;BB9;# & r5   c                 ^   [        5       n[        US9nS/n[        R                  R	                  S5      n[        US5      nUR                  XT5        U R                  [        U5      S5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        g )	Nr  (Set-Cookie: session=narf; secure; path=/https://www.acme.com/rB   r   r  zwss://www.acme.com/zws://www.acme.com/)r   r   r   r   r   r   r   r)   r#  r   rF  r  rG  r,   rJ  r   r   r   r   s         r2   test_secure_blockCookieTests.test_secure_block  sH   !#S!=>nn$$%<=7$;<	##Q#nn$$%<=	C x01nn$$%;<	C 12 nn$$%:;	C x01 nn$$%9:	C 12r5   c                 ^   [        S/S9n[        US9nS/n[        R                  R	                  S5      n[        US5      nUR                  XT5        U R                  [        U5      S5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S	5      nUR                  U5        U R                  UR                  S5      5        [        R                  R	                  S
5      nUR                  U5        U R                  UR                  S5      5        g )Nfoos)secure_protocolsr  r  r  rB   r   r  zfoos://www.acme.com/zfoo://www.acme.com/)r   r   r   r   r   r   r   r)   r#  r   rG  r  rF  r  s         r2   test_custom_secure_protocols(CookieTests.test_custom_secure_protocols  sL   !F8<S!=>nn$$%<=7$;<	##Q# nn$$%<=	C 12nn$$%;<	C 12nn$$%;<	C x01nn$$%:;	C 12r5   c                 z    [        [        SS9S9n[        USS5        [        US5      nU R                  US5        g )NTr  r  r  zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r   r   r   r)   )r,   r   r  s      r2   test_quote_cookie_value#CookieTests.test_quote_cookie_value  s>    0>?a/1IJ!3489r5   c                    Sn[        [        SS95      n[        X!S5        [        R                  R                  U5      nU R                  [        U5      S5        UR                  U5        U R                  UR                  S5      5        g )Nhttp://www.acme.comTr  rb  rB   r   )r   r   r   r   r   r   r)   r#  r   rF  r  )r,   r   r   r   s       r2   test_missing_final_slash$CookieTests.test_missing_final_slash  sm    #)$78a23nn$$S)Q#	C x01r5   c                 `   [        SS9n[        U5      nSn[        X#S5        [        X#5      nU R                  SUS5        [        U5      nSn[        X#S5        [        X#5      nU R	                  SUS	5        [        U5      nSn[        X#S
5        [        X#5      nU R	                  SUS	5        g )NTr  r9  spam=eggs; Version=1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  rx  r,   rJ  r   r   r  s        r2   test_domain_mirrorCookieTests.test_domain_mirror  s    !$/cN#a45!!1A	C cN#aEF!!*A/DEcN#aDE!!)1.CDr5   c                     [        SS9n[        U5      nSn[        X#S5        [        X#5      nU R                  SUS5        [        U5      nSn[        X#S5        [        X#5      nU R	                  SUS	5        g )
NTr  r9  r$  Pathz&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedr&  r'  s        r2   test_path_mirrorCookieTests.test_path_mirror  sv    !$/cN#a45!!$LMcN#a<=!!k1&9:r5   c                    [        SS9n[        U5      nSn[        X#S5        [        X#5      nU R                  SUS5        [        U5      nSn[        X#S5        [        X#5      nU R	                  USS	5        [        U5      nSn[        X#S
5        [        X#5      nU R                  SUS5        [        U5      nSn[        X#S5        [        X#5      nU R                  SUS5        g )NTr  r9  r$  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*   rx  r'  s        r2   test_port_mirrorCookieTests.test_port_mirror  s    !$/cN#a45!!$LMcN#a:;!!-H	J cN#a?@!!lAM	O cN#aDE!!'	 r5   c                     [        [        SS95      nSn[        XS5        [        X5      nU R                  SUS5        g )NTr  r9  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,   r   r   r  s       r2   test_no_return_comment"CookieTests.test_no_return_comment/  sJ    )$78#a E 	F !!AH	Jr5   c                 *   [        [        SS95      n[        USS5        [        USS5        [        USS5        [        USS5        [        US	S
5        / SQn/ SQn/ SQn/ SQn[	        S5       H  nSnU H  nU R                  U[        5        U R                  UR                  X&   5        U R                  UR                  X6   5        U R                  UR                  XF   5        U R                  UR                  XV   5        US-   nM     M     g )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.nosbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) ")rB   r   rB   rB   rB   )r   r   r   r   bang)zblah.spam.orgr	  r	  r	  z.sol.no)r
  r  r  r
  r
  r  r   rB   )r   r   r   r   rangeassertIsInstancer   r)   r   rS  rH  r  )r,   csversionsnamesdomainspathsir   s           r2   test_Cookie_iterator CookieTests.test_Cookie_iterator9  s   *489b1 4E 	F 	"9;MNb52	4b52	4b-K	L
 #5.2qAA%%a0  HK8  2  7:6  2E  r5   c                 r   U R                  [        S/5      / SQ/5        U R                  [        S/5      / SQ/5        U R                  [        S/5      SS//5        U R                  [        S/5      / SQ/5        U R                  [        S	/5      S
S//5        U R                  [        S/5      / 5        g )Nzfoo=bar; path=/; domain)r   )r  r
  )rH  Nr   z)foo=bar; expires=Foo Bar 12 33:22:11 2000)r   )r   Nr   r   r   r   zfoo=bar; expireszfoo=bar; versionr   )r   NrV   r   ra   s    r2   r   !CookieTests.test_parse_ns_headersY  s    789A B	 	IJKBC	
 	eW%-./	
 	012BC	E 	012/01	3 	)2$/4r5   c                 8   S n[        [        R                  " 5       S-   5      nS/S/S/S/S/SU-  /4 H&  nU" U5      nU R                  [        U5      S	5        M(     S
/nU" U5      nUR                  S   S   S   nU R                  UR                  5        g )Nc                     [        5       n[        R                  R                  S5      n[	        U S5      nUR                  X25        U$ )Nr_  )r   r   r   r   r   r   )r   r   r   rK  s       r2   cookiejar_from_cookie_headersICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headersv  s>    A..(()BCCW&?@Aa%Hr5   r}  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
  r   )r
   r=   r)   r#  r  r[   r   )r,   rH  r  r   r   rX  s         r2   test_bad_cookie_header"CookieTests.test_bad_cookie_headert  s    	 tyy{4/0 <=././&/0
G .g6ASVQ'
  II)'2-.s3C8&..)r5   ry   N)/rz   r{   r|   r}   r   r~   rL  rZ  rf  ru  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r(  r,  r0  r4  rB  r   rJ  r   ry   r5   r2   r8  r8    s?   ^ o (
 *
"+*
")@ ; 	>
 	8	8*.(`	*55r&CP< l %
 *3+*31 N0?< )>"?H$).$`$LQ$$$*$X3>A3F;.3836:2E.; >J@56*r5   r8  c                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)LWPCookieTestsi  c                 F   [         R                  " 5       S   S-   n/ n[        [        SS95      n[        R
                  R                  SSS0S9nUR                  S	U-  5        [        US
5      nUR                  XT5        [        R
                  R                  S
5      nUR                  U5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        UR                  S5        [        US
5      nUR                  XT5        [        R
                  R                  S5      nUR                  U5        UR                  S5      nU R                  SU5        U R                  SU5        UR                  S5        [        US5      nUR                  XT5        [        R
                  R                  S
5      nUR                  U5        UR                  S5      nU R                  SU5        U R                  SU5        U R                  SU5        [        R
                  R                  S5      nUR                  U5        UR                  S5      nU R                  SU5        U R                  SU5        U R                  US5        g )Nr   rB   Tr  ri  r  r  r  zVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTr  r   zCUSTOMER=WILE_E_COYOTEr  $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=FEDEXrR  zSHIPPING=FEDEX;)r=   	localtimer   r   r   r   r   r   r   r   r   r)   r   rx  r  assertStartsWith)r,   year_plus_oner   r   r   r   r  s          r2   test_netscape_example_1&LWPCookieTests.test_netscape_example_1  sF   J (+a/)D9: nn$$%>%'89 % ; 	8:GH	I 7$:;	##nn$$%;<	C 13KL	2NCMN7$:;	##nn$$%BC	C NN8$8!<.2>?7$9:	##nn$$%;<	C NN8$8!<.2)1-nn$$%?@	C NN8$8!<.2a!23r5   c                 V   [        5       n/ n[        R                  R                  S5      nUR	                  S5        [        US5      nUR                  XC5        [        R                  R                  S5      nUR                  U5        U R                  UR                  S5      S5        UR	                  S5        [        US5      nUR                  XC5        [        R                  R                  S5      nUR                  U5        U R                  UR                  S5      S5        g )Nr  rP  r   rQ  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,   r   r   r   r   s        r2   test_netscape_example_2&LWPCookieTests.test_netscape_example_2  s    0 Knn$$%;<MN7$:;	##nn$$%;<	C 1;	= 	D	F7$:;	##nn$$%?@	C 1=	>r5   c                    [        [        SS95      n[        USS5      nU R                  U5        [        USS5      nU R	                  US5        [        USS	5      nU R	                  US
5        U R	                  US5        U R	                  US5        [        US5      nU R	                  US5        U R                  SU5        g )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"WILE_E_COYOTE)r   r   r   rG  r*   rx  r,   r   rX  s      r2   test_ietf_example_1"LWPCookieTests.test_ietf_example_1'  s     )$78, /AC 	 & q"E ;< 	L	N* q"ELN 	!56 "7 	8 "7 	8* q"DE!IJov.r5   c                     [        [        SS95      n[        USSS5        [        US5      nU R                  US5        [        US5      nU R	                  S	U5        U R                  S
U5        g )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/Rocket_Launcher_0001Riding_Rocket_0023)r   r   r   r*   rx  r  r^  s      r2   test_ietf_example_2"LWPCookieTests.test_ietf_example_2  sz     )$78 	7KN	P" q"EF!LM q"CD,f5-v6r5   c                    [        SS9n[        US9nSn[        USS5      nU R                  U5        [        USS5      nU R	                  [        U5      S5        [        US	S
5      nU R	                  [        U5      S5        [        US	S5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        USS5      nU R	                  [        U5      S5        [        R                  n UR                  USS9  [        U5      n[        US9nUR                  USS9  [        R                  " U5        U R	                  U[        U5      5        g ! [        R                  " U5        f = f)NTr  r  zmax-age=3600r   z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1rB   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=1r7  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=1r8  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   rG  r)   r#  r   r   r  rT  r  r  )r,   rJ  r   max_agerX  r   olds          r2   test_rejectionLWPCookieTests.test_rejection  sc   !$/$  q"7BD q"7HJQ# q"9HJQ# q"9MOQ# q":KMQ# q"5 +, 	Q# q"= +, 	Q# q"5 +, 	Q# "AB
 	Q# q"5 ./ 	Q# q":DFQ# ##	'FF8DF1q'CC(AFF8DF1X&d1g& X&s   4H: :Ic                 >   [        [        SS95      n[        USS5        [        USS5      n[        R                  " S[        R
                  5      nU R                  SU5        U R                  X#5        [        US	5      nU R                  U5        [        US
5      ng )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\"?r   u-   http://www.acme.com/foo/%25/<<%0anewå/æøåu   http://www.acme.com/ü)	r   r   r   rV  compileIrx  r*   rG  )r,   r   rX  
version_res       r2   test_url_encoding LWPCookieTests.test_url_encoding&  s     )$78a 56	8 H.0 ZZ 5rtt<
i(,FH  q"<=r5   c                   ^ [         R                  " 5       S   S-   n[        R                  m[	        T[        SS9S9n[        USS5        [        USS5        [        USS	5        S
U4-  n[        USSU-  5        [        USSU-  5        [        USSU-  5        U H'  nUR                  S:X  d  M  UR                  SS5        M)     U4S jnU" US5      nU R                  [        U5      S5        U R                  S[        U5      5        U R                  S[        U5      5        U" US5      nU R                  [        U5      S5        U R                  S[        U5      5        g )Nr   rB   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; %sr
  HTTPOnlyrV   c                    >  U R                  US9  [        T[        SS95      nUR                  US9  [        R
                  " T5        U$ ! [        R
                  " T5        f = f)Nr  Tr  )r  r   r   r  r   r  )r  r  new_cr   s      r2   save_and_restore5LWPCookieTests.test_mozilla.<locals>.save_and_restoreV  s^    +~6()<T)JL

.
9  *L   *s   1A A$r<   zname='foo1', value='bar'zrest={'HTTPOnly': ''}Fr  )r=   rR  r   r   r   r   r   r   rS  set_nonstandard_attrr)   r#  rx  rT  )r,   rT  r   r   rX  rv  ru  r   s          @r2   test_mozillaLWPCookieTests.test_mozilla<  s^   (+a/##X$7$EGa/8	:a/L	Na/1NO2m5EE!2(72	4!29GC	E!2<wF	H F{{f$++J; 	 !D)UQ'0$u+>-tE{; E*UQ'0$u+>r5   c                    [        5       n/ n[        R                  R                  S5      nUR	                  S5        [        US5      nUR                  XC5        UR	                  S5        [        US5      nUR                  XC5        [        R                  R                  S5      nUR                  U5        U R                  SUR                  S5      5        U R                  SUR                  S5      5        g )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   rx  r   rX  s        r2   test_netscape_misc!LWPCookieTests.test_netscape_misci  s    Knn$$%BC 	MN7$=>	##
 	MN7$=>	##nn$$%BC	C ')AB.s~~h/GHr5   c                    [        [        SS95      n[        USS5        [        USS5      nU R                  SU5        [        USS5        [        US5      nU R                  SU5        U R	                  [        U5      S	5        g )
NTr  http://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1r  zfoo3=bar; Version=1r	  r&   )r   r   r   rx  r)   r#  r^  s      r2   test_intranet_domains_2965)LWPCookieTests.test_intranet_domains_2965  s    )$78a*;	=q"3EGj&)a*,ABq"34j&)Q#r5   c                 (   [        [        SS95      n[        USS5        [        USS5      nU R                  [	        U5      S5        U R                  SU5        [        US5      nU R                  SU5        U R                  [	        U5      S5        g )NFr  r  r  zfoo2=bar; domain=.localr%   r	  )r   r   r   r)   r#  rx  r^  s      r2   test_intranet_domains_ns'LWPCookieTests.test_intranet_domains_ns  s    )E:;!.
;"1&7#<>Q#j&)"1&78j&)Q#r5   c                    [        [        SS95      n/ n[        R                  R	                  S5      nUR                  S5        [        US5      nUR                  XC5        [        R                  R	                  S5      nUR                  U5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        [        R                  R	                  S	5      nUR                  U5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        g )
NTr  zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=r   zJSESSIONID=ABCDERANDOM123r  rO  zhttp://www.ants.com:8080)r   r   r   r   r   r   r   r   r   r)   r   rX  s        r2   test_empty_pathLWPCookieTests.test_empty_path  s    )D9:nn$$%;<EF7$:;	##nn$$%;<	C 14	6	2NC nn$$%?@	C 14	6	2NCr5   c                    [         R                  " 5       S   S-   n[        R                  R	                  S5      n/ nUR                  S5        UR                  SU-  5        UR                  SU-  5        UR                  S5        UR                  S5        [        US5      n[        5       nUR                  XB5        SSSSS	.nU H  nS
UR                  -  nXh   S-   Xh'   M     UR                  5         U H  nSUR                  -  nXh   S-   Xh'   M     U R                  US   US   5        U R                  US   S5        U R                  US   S5        g )Nr   rB   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_afterr  r  r  r  )r=   rR  r   r   r   r   r   r   r   r  r  r)   assertNotEqual)	r,   rT  r   r   r   r   counterrX  keys	            r2   test_session_cookies#LWPCookieTests.test_session_cookies  sn   (+a/
 nn$$%IJ=> D$% 	& 	 02?@ 	A 1 	2KL7$HIK	##$%!"%&"#% F,C"<!+GL  	
!Fv||+C"<!+GL 
 	.0FG115G$45q9r5   ry   N)rz   r{   r|   r}   rU  rY  r_  rd  rj  rp  ry  r|  r  r  r  r  r   ry   r5   r2   rM  rM    sI    Y4v1>fg/`37jX't>,+?ZI.$
$D>(:r5   rM  __main__)6__doc__r  r  sysrV  rU   r   test.supportr   r   test.support.testcaser   r=   r3  urllib.requestr   http.cookiejarr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   platformr5  TestCaser    r   r   r   r   r   r   r8  rM  rz   mainry   r5   r2   <module>r     s    " 	  
 	  " ( 1   ! ! ! ! ! ! ! \\W$	jBH%% jBZl!(## l!^) )ED
t'** t'lL*(## L*^K	:X&& K	:\ zMMO r5   