
    <eJ                         d dl Z d dlZd dlZd dlmZ d dlZ G d dej                  Z G d dej                  Zd Z	e
dk    r ej                     dS dS )	    N)cookiesc                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )CookieTestsc           
      <   ddddddddd	d
iddddd	diddddddiddddddddddd                     d          dg}|D ]}t          j                    }|                    |d                    |                     t          |          |d                     |                     |                    d!          |d"                    t          |d#                                                   D ]&\  }}|                     ||         j	        |           'd S )$Nzchips=ahoy; vienna=fingerahoyfinger)chipsviennaz,<SimpleCookie: chips='ahoy' vienna='finger'>z0Set-Cookie: chips=ahoy
Set-Cookie: vienna=finger)datadictreproutputz)keebler="E=mc2; L=\"Loves\"; fudge=\012;"keeblerzE=mc2; L="Loves"; fudge=
;z5<SimpleCookie: keebler='E=mc2; L="Loves"; fudge=\n;'>z5Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"zkeebler=E=mc2zE=mc2z<SimpleCookie: keebler='E=mc2'>zSet-Cookie: keebler=E=mc2zkey:term=value:termzkey:termz
value:termz%<SimpleCookie: key:term='value:term'>zSet-Cookie: key:term=value:termza=b; c=[; d=r; f=hb[rh)acdfz'<SimpleCookie: a='b' c='[' d='r' f='h'>
)zSet-Cookie: a=bzSet-Cookie: c=[zSet-Cookie: d=rzSet-Cookie: f=hr   r   )sepr   r   )
joinr   SimpleCookieloadassertEqualr   r   sorteditemsvalue)selfcasescaseCkvs         -/usr/lib/python3.11/test/test_http_cookies.py
test_basiczCookieTests.test_basic   s   0$x88CJL L
 D"ABQQS S %'*624 4 , <0<8: : - cs<<A)) %  	
 
7&
P  	0 	0D$&&AFF4<   T!WWd6l333QXX$X//h@@@tF|113344 0 01  1Q////0	0 	0    c                    t          j                    }|                    d           |                     |d         j        d           |                     |d         d         d           |                     |d         d         d           |                     |                    dg          d           |                     |                                d	           |                     |                    dg          d
           d S )Nz/Customer="WILE_E_COYOTE"; Version=1; Path=/acmeCustomerWILE_E_COYOTEversion1path/acme0Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "Customer=\"WILE_E_COYOTE\"; Path=/acme; Version=1";
        // end hiding -->
        </script>
        
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "Customer=\"WILE_E_COYOTE\"; Path=/acme";
        // end hiding -->
        </script>
        r   r   r   r   r    r   	js_outputr!   r$   s     r'   	test_loadzCookieTests.test_load=   s    ""	@AAA:,o>>>:y13777:v.8886(++>	@ 	@ 	@ ) 	 	 	 	fX.. 1 	 	 	 	 	r)   c                     t          j                    }d|d<   |                     |                    dg          d           d S )Nzsome,funky;stuffvalz(Set-Cookie: val="some\054funky\073stuff"r   r   r   r   r6   s     r'   test_extended_encodez CookieTests.test_extended_encodeV   sP      ""%%5'**8	: 	: 	: 	: 	:r)   c                 n   t          j        d          }d|d         d<   |                     |                                                    d                     t          j                    }|                    d           |                     |d         d         d           t          j                    }|                    d           |                     |d         d         d	           t          j        d          }d
|d         d<   |                     |                                d           d S )NCustomer="WILE_E_COYOTE"r   r+   expiresGMTz3Customer="W"; expires=Wed, 01 Jan 2010 00:00:00 GMTzWed, 01 Jan 2010 00:00:00 GMTz1Customer="W"; expires=Wed, 01 Jan 98 00:00:00 GMTzWed, 01 Jan 98 00:00:00 GMT
   max-agez0Set-Cookie: Customer="WILE_E_COYOTE"; Max-Age=10)r   r   
assertTruer   endswithr   r   r6   s     r'   test_special_attrszCookieTests.test_special_attrs^   s.    !;<<#$*i 

++E22333  ""	DEEE:y18	: 	: 	: ""	BCCC:y16	8 	8 	8  !;<<#%*i K	M 	M 	M 	M 	Mr)   c                     t          j        d          }d|d         d<   d|d         d<   |                     |                                d           d S )Nr=   Tr+   securehttponlyz6Set-Cookie: Customer="WILE_E_COYOTE"; HttpOnly; Securer:   r6   s     r'   test_set_secure_httponly_attrsz*CookieTests.test_set_secure_httponly_attrsu   sc     !;<<"&*h$(*j!D	F 	F 	F 	F 	Fr)   c                    g d}|D ]}|                      |          5  t          j        d          }||d         d<   |                     |                                d|z             t          j                    }|                    d|z             |                     |d         d         |           d d d            n# 1 swxY w Y   d S )N)StrictLaxstrictlax)r9   r=   r+   samesitez1Set-Cookie: Customer="WILE_E_COYOTE"; SameSite=%sz%Customer="WILL_E_COYOTE"; SameSite=%s)subTestr   r   r   r   r   )r!   samesite_valuesr9   r$   s       r'   test_samesite_attrszCookieTests.test_samesite_attrs|   s8   <<<" 		A 		AC#&& A A()CDD,/*j)  G#MO O O (**>DEEE  :z!:C@@@A A A A A A A A A A A A A A A		A 		As   BCC	
C	c                     t          j                    }|                    d           |                     |d         d                    |                     |d         d                    d S )Nzeggs=scrambled; Path=/baconeggsrG   rF   )r   r   r   assertFalser6   s     r'   )test_secure_httponly_false_if_not_presentz5CookieTests.test_secure_httponly_false_if_not_present   sc     ""	,---6:.///68,-----r)   c                     t          j                    }|                    d           |                     |d         d                    |                     |d         d                    d S )Nz-eggs=scrambled; httponly; secure; Path=/baconrS   rG   rF   )r   r   r   rB   r6   s     r'   $test_secure_httponly_true_if_presentz0CookieTests.test_secure_httponly_true_if_present   s_     ""	>???&	*-...&	(+,,,,,r)   c                 b   t          j                    }|                    d           |                     |d         d                    |                     |d         d                    |                     |d         d         d           |                     |d         d         d           d S )Nz5eggs=scrambled; httponly=foo; secure=bar; Path=/baconrS   rG   rF   foobar)r   r   r   rB   r   r6   s     r'   'test_secure_httponly_true_if_have_valuez3CookieTests.test_secure_httponly_true_if_have_value   s      ""	FGGG&	*-...&	(+,,, 	6:.66668,e44444r)   c                     t          j                    }|                    d           |                     |                                d           d S )Nz=eggs  =  scrambled  ;  secure  ;  path  =  bar   ; foo=foo   zASet-Cookie: eggs=scrambled; Path=bar; Secure
Set-Cookie: foo=foo)r   r   r   r   r   r6   s     r'   test_extra_spaceszCookieTests.test_extra_spaces   sW     ""	NOOOQ	S 	S 	S 	S 	Sr)   c                    t          j                    }|                    d           |                     |d         j        d           |                     |d         d         d           |                     |d         d         d           |                     |                    dg          d           |                     |                                d	           |                     |                    dg          d
           d S )Nz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r6   s     r'   test_quoted_metazCookieTests.test_quoted_meta   s    ""	DEEE:,o>>>:y13777:v.8886(++K	M 	M 	M ) 	 	 	 	fX.. 1 	 	 	 	 	r)   c                     t          j                    }dD ]b}|                    |           |                     t	          |          i            |                     |                                d           cd S )N)
z]foo=xz[foo=xz
blah]foo=xz
blah[foo=xzSet-Cookie: foo=barzSet-Cookie: foozfoo=bar; bazzbaz; foo=barzsecure;foo=barzVersion=1;foo=bar )r   r   r   r   r   r   )r!   r$   ss      r'   test_invalid_cookiesz CookieTests.test_invalid_cookies   sy     ""9 	- 	-A FF1IIIT!WWb)))QXXZZ,,,,	- 	-r)   c                    d}d|z  }t          j                    }|                    |           |                     |                                |           t          t          j        dz             D ]}|                     |          5  t          j	        t          j
        ||                    }|                     |                                |           d d d            n# 1 swxY w Y   d S )Nz/Customer="WILE_E_COYOTE"; Path=/acme; Version=1zSet-Cookie: %s   proto)protocol)r   r   r   r   r   rangepickleHIGHEST_PROTOCOLrO   loadsdumps)r!   rawdataexpected_outputr$   rg   C1s         r'   test_picklezCookieTests.test_pickle   s   C*W4 ""	w_55562Q677 	? 	?EE** ? ?\&,q5"A"A"ABB  o>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	? 	?s   AC))C-	0C-	c                     d}t          j                    }|                     t           j                  5  |                    |           d d d            d S # 1 swxY w Y   d S )Nz
a=b; c,d=e)r   r   assertRaisesCookieErrorr   )r!   rn   r$   s      r'   test_illegal_charszCookieTests.test_illegal_chars   s     ""w233 	 	FF7OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t          j                    }d|d<   |                     t          |d                   d           d|d         d<   |                     t          |d                   d           d S )N   ©rY   zSet-Cookie: foo="\251"u
   comment ©commentz.Set-Cookie: foo="\251"; Comment="comment \251")r   r   r   str)r!   r   s     r'   test_comment_quotingz CookieTests.test_comment_quoting   sz     ""'%QuX(ABBB:%%MM>	
 	
 	
 	
 	
r)   N)__name__
__module____qualname__r(   r7   r;   rD   rH   rQ   rU   rW   r[   r]   r_   rc   rq   ru   rz    r)   r'   r   r   
   s       /0 /0 /0b  2: : :M M M.F F FA A A. . .- - -
5 
5 
5S S S  2	- 	- 	-? ? ?  
 
 
 
 
r)   r   c                   T    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )MorselTestszTests for the Morsel object.c                    t          j                    }|                     |j                   |                     |j                   |                     |j                   |                     |                                t           j        j                                                   |	                                D ]\  }}|                     |d|           d S Nra   )
r   MorselassertIsNonekeyr    coded_valuer   keys	_reservedr   )r!   morselr   r9   s       r'   test_defaultszMorselTests.test_defaults   s    !!&*%%%&,'''&,---(@(E(E(G(GHHH 	+ 	+HCS"c****	+ 	+r)   c                 t   t          j                    }|j        D ]2}|                     |                    |                     d|z  ||<   3|j        D ]!}|                     ||         d|z             "d                                D ],}|                     t           j        |j	        |d|z             -d S )N%s_valuezthe holy hand grenade)
r   r   r   rB   isReservedKeyr   splitrs   rt   __setitem__)r!   Mis      r'   test_reserved_keyszMorselTests.test_reserved_keys   s    N 	" 	"AOOAOOA..///>AaDD 	3 	3AQqT:>2222(..00 	@ 	@Ag1mQ
Q@ @ @ @	@ 	@r)   c           	         t          j                    }|j        D ]0}|                     t           j        |j        |d|z  d|z             1d                                D ]}d|d<   |                    |d|z  d|z             |                     |j        |           |                     |j	        d|z             |                     |j
        d|z             |                     |                                d|dd|z  d	           d
|dd|z  d}|                     |                                |           dD ]0}|                     t           j        |j        |d|z  d|z             1d S )Nr   z(thou cast _the- !holy! ^hand| +*grenade~z/foor/   z%s_valz%s_coded_valzSet-Cookie: =z; Path=/fooz^
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "zB; Path=/foo";
        // end hiding -->
        </script>
        )zfoo barzfoo@bar)r   r   r   rs   rt   setr   r   r   r    r   r   r5   )r!   r   r   expected_js_outputs       r'   test_setterzMorselTests.test_setter  s   N 	H 	HAg1eQ
Q
QH H H H;AACC 	@ 	@A AfIEE!X\>A#5666QUA&&&QWhl333Q]NQ,>???


23!!^a5G5G5GHJ J J J qq.1$$$"& Q[[]],>????' 	H 	HAg1eQ
Q
QH H H H	H 	Hr)   c                    t          j                    }|                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S r   )r   r   rs   AttributeErrorr   r    r   r!   r   s     r'   test_set_propertieszMorselTests.test_set_properties$  so   !!~.. 	 	FJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~.. 	 	FL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~.. 	$ 	$!#F	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s5   AA	A'A;;A?A? B55B9<B9c                    d}ddddd}t          j                    }|                    |            |j        |  t          j                    }|                    |            |j        |  |                     ||k               |                     ||k               d}|D ]}|                     |          5  t          j                    }|                    |            |j        |  |                     ||k               |                     ||k               d d d            n# 1 swxY w Y   t          j                    }|                    |            |j        |  d|d	<   |                     ||k               |                     ||k               |                     t          j                    d
k               |                     t          j                    d
k               |                     t          j                    dk               |                     t          j                    dk               t          t          j                                                              }|                     t          j                    |k               |                     t          j                    |k               t          j                    } |j        |  |                    |           |                     |t          |          k               |                     |t          |          k               d S )N)r   r    "value"/rY   example.com   )r/   rx   domainr-   ))r   r    mismatch)r   r   r   )r   r    r   rZ   rx   re   ra   )
r   r   updater   rB   rT   rO   listr   r   )	r!   	base_caseattribsmorsel_amorsel_br"   case_br   r   s	            r'   test_eqzMorselTests.test_eq-  sJ   /	#	
 
 >##   i  >##   i  H,---X-...

  	6 	6Ff%% 6 6">++(((f%%  X!5666H 45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 >##   i  #X-...H,--- 	))Q.///((A-...))R/000((B.///W^%%++--..))U2333((E1222 !!
Ig$v,,.///4<</00000s   ;A%D,,D0	3D0	c                 
   t          j                    }|                    ddd           |                    ddd           |                                }|                     |t           j                   |                     ||           |                     ||           t	          j        |          }|                     |t           j                   |                     ||           |                     ||           d S )NrY   rZ   bazr   r-   rx   )r   r   r   r   copyassertIsInstanceassertIsNotr   )r!   r   r   s      r'   	test_copyzMorselTests.test_copya  s    >##UE5)))
 
 	 	 	 ==??h7778,,,8,,,9X&&h7778,,,8,,,,,r)   c                    t          j                    }d|d<   |                     |d         d           d|d<   |                     |d         d           d|d<   |                     |d         d           |                     t           j                  5  d	|d
<   d d d            n# 1 swxY w Y   |                     d
|           d S )Nr   r>   r   Versionr-   r   DOMAINr   r    invalid)r   r   r   rs   rt   assertNotInr   s     r'   test_setitemzMorselTests.test_setitemr  s   !!y	*A...y	*A...(x)=999w233 	( 	( 'F9	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(F+++++s   B((B,/B,c                    t          j                    }|                    ddd           |                     |                    dd          d           |                     |d         d           |                     |                    dd          d           |                     |d	         d           |                     |                    d
d          d           |                     |d         d           |                     t           j                  5  |                    dd           d d d            n# 1 swxY w Y   |                     d|           d S )Nr   r   )r   r-   r>   r    ra   r   re   r-   r   r   r   )r   r   r   r   
setdefaultrs   rt   r   r   s     r'   test_setdefaultzMorselTests.test_setdefault  s   !!#
 
 	 	 	
 	**9g>>CCC	*B///**9a88!<<<	*A...**8W==}MMM)=999w233 	2 	2i111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2F+++++s   E  EEc                    dddd}t          j                    }|                    |           |                     |d         d           |                     |d         d           |                     |d         d           t          j                    }|                    t	          |                                                     |                     |d         d           |                     |d         d           |                     |d         d           t          j                    }|                    d |                                D                        |                     |d         d           |                     |d         d           |                     |d         d           |                     t           j                  5  |                    d	d
i           d d d            n# 1 swxY w Y   |                     d	|           |                     t          |j                   |                     t          |j        d           d S )Nre   r   r   )r>   r   r   r>   r-   r   c              3   $   K   | ]\  }}||fV  d S Nr~   ).0r%   r&   s      r'   	<genexpr>z*MorselTests.test_update.<locals>.<genexpr>  s*      99Aq!f999999r)   r   r    r   )
r   r   r   r   r   r   rs   rt   r   	TypeError)r!   r   r   s      r'   test_updatezMorselTests.test_update  sY   AGG!!g	*A...	*A...)=999!!d7==??++,,,	*A...	*A...)=999!!99999999	*A...	*A...)=999w233 	0 	0MM9g.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0F+++)V]333)V]A66666s   G99G= G=c                 >   t          j                    }|                    ddd           |                    ddd           t	          t
          j        dz             D ]}|                     |          5  t          j        t          j	        ||                    }| 
                    |t           j                   |                     ||           |                     t          |          t          |                     d d d            n# 1 swxY w Y   d S )NrY   rZ   r   r   r   re   rf   )r   r   r   r   ri   rj   rk   rO   rl   rm   r   r   ry   )r!   r   rg   r   s       r'   rq   zMorselTests.test_pickle  sK   >##UE5)))
 
 	 	 	 62Q677 	? 	?EE** ? ?!<Xu(E(EFF%%h???  8444  XH>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	? 	?s   7BDD	D	c           	         t          j                    }|                     t          |          d           |                     t	          |          d           |                    ddd           |                     t          |          d           |                     t	          |          d           |                    dd	d
dddd           |                     t          |          d           |                     t	          |          d           d|d<   d|d<   |                     t          |          d           |                     t	          |          d           t          j                    }|                    ddd           d|d<   |                     t          |          d           |                     t	          |          d           d S )Nz<Morsel: None=None>zSet-Cookie: None=Noner   r9   	coded_valz<Morsel: key=coded_val>zSet-Cookie: key=coded_valr   rY   r   r   re   )r/   rx   r   rA   rF   r-   zV<Morsel: key=coded_val; Comment=foo; Domain=example.com; Max-Age=0; Path=/; Version=1>zXSet-Cookie: key=coded_val; Comment=foo; Domain=example.com; Max-Age=0; Path=/; Version=1TrF   rG   zh<Morsel: key=coded_val; Comment=foo; Domain=example.com; HttpOnly; Max-Age=0; Path=/; Secure; Version=1>zjSet-Cookie: key=coded_val; Comment=foo; Domain=example.com; HttpOnly; Max-Age=0; Path=/; Secure; Version=1r>   zA<Morsel: key=coded_val; expires=\w+, \d+ \w+ \d+ \d+:\d+:\d+ \w+>zCSet-Cookie: key=coded_val; expires=\w+, \d+ \w+ \d+ \d+:\d+:\d+ \w+)r   r   r   r   ry   r   r   assertRegexr   s     r'   	test_reprzMorselTests.test_repr  s   !!f'<===V&=>>>

5%---f'@AAAV&ABBB#
 
 	 	 	 	f0	1 	1 	1 	V/	0 	0 	0  xzfB	C 	C 	C 	VA	B 	B 	B !!

5%---yf=	> 	> 	> 	V<	= 	= 	= 	= 	=r)   N)r{   r|   r}   __doc__r   r   r   r   r   r   r   r   r   rq   r   r~   r)   r'   r   r      s        &&+ + +@ @ @H H H>$ $ $21 21 21h- - -", , ,, , ,$7 7 76? ? ?&= &= &= &= &=r)   r   c                 ^    |                     t          j        t                               |S r   )addTestdoctestDocTestSuiter   )loadertestspatterns      r'   
load_testsr     s$    	MM'&w//000Lr)   __main__)r   unittestr   httpr   rj   TestCaser   r   r   r{   mainr~   r)   r'   <module>r      s             ]
 ]
 ]
 ]
 ]
(# ]
 ]
 ]
@v= v= v= v= v=(# v= v= v=r  
 zHMOOOOO r)   