o
    HXīhP  ć                   @   s   d dl Z d dlmZmZ d dlZd dlmZ d dlZd dlm	Z	 G dd dej
ZG dd dej
Zd	d
 Zedkr?e  dS dS )é    N)Śrun_unittestŚrun_doctest)Ścookies)Śsupportc                   @   s   e Zd Zdd Zdd Ze d”dd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%ŚCookieTestsc              
   C   sŽ   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 ]9}t ” }| |d ” |  t||d  ” |  |jdd!|d" ” t|d#  ” D ]\}}|  || j	|” q^q3d S )$Nzchips=ahoy; vienna=fingerZahoyZfinger)ZchipsZ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;"Z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Śv© r"   ś@/opt/python-3.10.19/usr/lib/python3.10/test/test_http_cookies.pyŚ
test_basic   sF   żżżżüå(’ūzCookieTests.test_basicc              	   C   sh   g d¢}|D ]+\}}|   |” t ” }| |” |  |d j|” W d    n1 s,w   Y  qd S )N))za="b=\""śb=")za="b=\\"śb=\)za="b=\="zb==)za="b=\n"zb=n)z
a="b=\042"r%   )z
a="b=\134"r&   )z
a="b=\377"u   b=Ćæ)z
a="b=\400"zb=400)z	a="b=\42"zb=42)za="b=\\042"zb=\042)za="b=\\134"zb=\134)z
a="b=\\\""śb=\")za="b=\\\042"r'   )za="b=\134\""r'   )za="b=\134\042"r'   r   )ŚsubTestr   r   r   r   r   )r   r   ŚencodedZdecodedr   r"   r"   r#   Śtest_unquote>   s   
ż’zCookieTests.test_unquoteZcpuc              	   C   s¤   d}dD ]K}|   |”< d||  d }t ” }| |” |d j}|  |d d d” |  |dd  d	” |  t||d ” W d    n1 sJw   Y  qd S )
Ni@B )z\\z\134za="b=z;"r   é   r&   éž’’’z\;)r(   r   r   r   r   r   Ślen)r   Śnr)   r   r   r   r"   r"   r#   Śtest_unquote_largeV   s   

ł’zCookieTests.test_unquote_largec                 C   ó   t  ” }| 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ś/acmeś0Set-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   r"   r"   r#   Ś	test_loadc   s   
’zCookieTests.test_loadc                 C   s(   t  ” }d|d< |  | dg”d” d S )Nzsome,funky;stuffŚvalz(Set-Cookie: val="some\054funky\073stuff"©r   r   r   r
   r<   r"   r"   r#   Śtest_extended_encode|   s
   ’z CookieTests.test_extended_encodec                 C   s    t  d”}d|d d< |  | ”  d”” t  ” }| d” |  |d d d” t  ” }| d” |  |d d d	” t  d”}d
|d d< |  | ” d” d S )NśCustomer="WILE_E_COYOTE"r   r1   ŚexpiresZ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   r<   r"   r"   r#   Śtest_special_attrs   s$   

’
’

’zCookieTests.test_special_attrsc                 C   s6   t  d”}d|d d< d|d d< |  | ” d” d S )NrA   Tr1   ŚsecureŚhttponlyz6Set-Cookie: Customer="WILE_E_COYOTE"; HttpOnly; Securer?   r<   r"   r"   r#   Śtest_set_secure_httponly_attrs   s   

’z*CookieTests.test_set_secure_httponly_attrsc              	   C   s   g d¢}|D ]B}| j |d2 t d”}||d d< |  | ” d| ” t ” }| d| ” |  |d d |” W d    n1 sCw   Y  qd S )N)ZStrictZLaxŚstrictZlax)r>   rA   r1   Zsamesitez1Set-Cookie: Customer="WILE_E_COYOTE"; SameSite=%sz%Customer="WILL_E_COYOTE"; SameSite=%s)r(   r   r   r   r
   r   )r   Zsamesite_valuesr>   r   r"   r"   r#   Śtest_samesite_attrs¢   s   

’ų’zCookieTests.test_samesite_attrsc                 C   ó:   t  ” }| d” |  |d d ” |  |d d ” d S )Nzeggs=scrambled; Path=/baconŚeggsrI   rH   )r   r   r   ŚassertFalser<   r"   r"   r#   Ś)test_secure_httponly_false_if_not_presentÆ   s   
z5CookieTests.test_secure_httponly_false_if_not_presentc                 C   rM   )Nz-eggs=scrambled; httponly; secure; Path=/baconrN   rI   rH   )r   r   r   rE   r<   r"   r"   r#   Ś$test_secure_httponly_true_if_presentµ   s   
z0CookieTests.test_secure_httponly_true_if_presentc                 C   sb   t  ” }| d” |  |d d ” |  |d d ” |  |d d d” |  |d d d” d S )Nz5eggs=scrambled; httponly=foo; secure=bar; Path=/baconrN   rI   rH   ŚfooŚbar)r   r   r   rE   r   r<   r"   r"   r#   Ś'test_secure_httponly_true_if_have_value¼   s   
z3CookieTests.test_secure_httponly_true_if_have_valuec                 C   s&   t  ” }| 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
   r<   r"   r"   r#   Śtest_extra_spacesČ   s
   

’zCookieTests.test_extra_spacesc                 C   r0   )Nz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r<   r"   r"   r#   Śtest_quoted_metaĪ   s   
’zCookieTests.test_quoted_metac                 C   s@   t  ” }dD ]}| |” |  t|i ” |  | ” d” qd 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   Śsr"   r"   r#   Śtest_invalid_cookiesē   s   
śz CookieTests.test_invalid_cookiesc              	   C   s   d}d| }t  ” }| |” |  | ” |” ttjd D ]*}| j|d t 	tj
||d”}|  | ” |” W d    n1 sCw   Y  qd S )Nz/Customer="WILE_E_COYOTE"; Path=/acme; Version=1zSet-Cookie: %sé   ©Śproto)Śprotocol)r   r   r   r   r
   ŚrangeŚpickleŚHIGHEST_PROTOCOLr(   ŚloadsŚdumps)r   ŚrawdataZexpected_outputr   r\   ZC1r"   r"   r#   Śtest_pickleņ   s   
ž’zCookieTests.test_picklec                 C   sH   d}t  ” }|  t j” | |” W d    d S 1 sw   Y  d S )Nz
a=b; c,d=e)r   r   ŚassertRaisesŚCookieErrorr   )r   rc   r   r"   r"   r#   Śtest_illegal_chars’   s
   "’zCookieTests.test_illegal_charsc                 C   sH   t  ” }d|d< |  t|d d” d|d d< |  t|d d” d S )Nõ   Ā©rR   zSet-Cookie: foo="\251"u
   comment Ā©Ścommentz.Set-Cookie: foo="\251"; Comment="comment \251")r   r   r   Śstr)r   r   r"   r"   r#   Śtest_comment_quoting  s   
žz CookieTests.test_comment_quotingN)Ś__name__Ś
__module__Ś__qualname__r$   r*   r   Zrequires_resourcer/   r=   r@   rG   rJ   rL   rP   rQ   rT   rU   rV   rY   rd   rg   rk   r"   r"   r"   r#   r      s&    1
r   c                   @   sf   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )ŚMorselTestsc                 C   sh   t  ” }|  |j” |  |j” |  |j” |  | ” t jj ” ” | 	” D ]\}}|  |d|” q&d S ©NrW   )
r   ŚMorselZassertIsNoneŚkeyr   Ścoded_valuer   ŚkeysŚ	_reservedr   )r   Śmorselrr   r>   r"   r"   r#   Śtest_defaults  s   ’zMorselTests.test_defaultsc                 C   sz   t  ” }|jD ]}|  | |”” d| ||< q|jD ]}|  || d| ” qd ” D ]}|  t j|j	|d| ” q,d S )Nś%s_valuezthe holy hand grenade)
r   rq   ru   rE   ZisReservedKeyr   Śsplitre   rf   Ś__setitem__)r   ŚMŚir"   r"   r#   Śtest_reserved_keys  s   

’žzMorselTests.test_reserved_keysc              	   C   sų   t  ” }|jD ]}|  t j|j|d| d| ” qd ” D ]H}d|d< | |d| d| ” |  |j|” |  |j	d| ” |  |j
d| ” |  | ” d|d| f ” d|d| f }|  | ” |” qd	D ]}|  t j|j|d| d| ” qhd S )
Nrx   z(thou cast _the- !holy! ^hand| +*grenade~z/foor5   z%s_valz%s_coded_valzSet-Cookie: %s=%s; Path=/fooz„
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "%s=%s; Path=/foo";
        // end hiding -->
        </script>
        )zfoo barzfoo@bar)r   rq   ru   re   rf   Śsetry   r   rr   r   rs   r
   r;   )r   r{   r|   Zexpected_js_outputr"   r"   r#   Śtest_setter+  s0   
’ž
ś’žzMorselTests.test_setterc                 C   s   t  ” }|  t” d|_W d    n1 sw   Y  |  t” d|_W d    n1 s/w   Y  |  t” d|_W d    d S 1 sHw   Y  d S rp   )r   rq   re   ŚAttributeErrorrr   r   rs   ©r   rv   r"   r"   r#   Śtest_set_propertiesJ  s   ’’"’zMorselTests.test_set_propertiesc           	   	   C   sÖ  d}ddddd}t  ” }| |” |j|  t  ” }| |” |j|  |  ||k” |  ||k” d}|D ]3}|  |”$ t  ” }| |” |j|  |  ||k” |  ||k” W d    n1 sew   Y  q7t  ” }| |” |j|  d|d	< |  ||k” |  ||k” |  t  ” d
k” |  t  ” d
k” |  t  ” dk” |  t  ” dk” tt  ”  ” }|  t  ” |k” |  t  ” |k” t  ” }|j|  | |” |  |t	|k” |  |t	|k” d S )N)rr   r   ś"value"ś/rR   śexample.comé   )r5   ri   Śdomainr3   ))rr   r   Śmismatch)rr   r   r   )r   r   r   rS   ri   rZ   rW   )
r   rq   Śupdater~   rE   rO   r(   Ślistr   r   )	r   Z	base_caseŚattribsŚmorsel_aŚmorsel_br   Zcase_br   rv   r"   r"   r#   Śtest_eqS  sT   ü





ū



zMorselTests.test_eqc                 C   s   t  ” }| ddd” | ddd” | ” }|  |t j” |  ||” |  ||” t |”}|  |t j” |  ||” |  ||” d S )NrR   rS   Śbazr   ©r3   ri   )r   rq   r~   r   ŚcopyŚassertIsInstanceZassertIsNotr   )r   r   r   r"   r"   r#   Ś	test_copy  s   ž
zMorselTests.test_copyc                 C   s   t  ” }d|d< |  |d d” d|d< |  |d d” d|d< |  |d d” |  t j” d	|d
< W d    n1 s=w   Y  |  d
|” d S )Nr   rB   r   ŚVersionr3   r   ŚDOMAINr   r   Śinvalid)r   rq   r   re   rf   ŚassertNotInr   r"   r"   r#   Śtest_setitem  s   
’zMorselTests.test_setitemc                 C   sĢ   t  ” }| ddd” |  | dd”d” |  |d d” |  | dd”d” |  |d	 d” |  | d
d”d” |  |d d” |  t j” | dd” W d    n1 sYw   Y  |  d|” d S )Nr   r   )r   r3   rB   r   rW   r   rZ   r3   r   r   r   )r   rq   r   r   Ś
setdefaultre   rf   r   r   r"   r"   r#   Śtest_setdefault„  s   ž’zMorselTests.test_setdefaultc                 C   sP  dddd}t  ” }| |” |  |d d” |  |d d” |  |d d” t  ” }| t| ” ” |  |d d” |  |d d” |  |d d” t  ” }| dd	 | ” D ” |  |d d” |  |d d” |  |d d” |  t j” | d
di” W d    n1 sw   Y  |  d
|” |  t	|j” |  t	|jd” d S )NrZ   r   r   )rB   r   r   rB   r3   r   c                 s   s    | ]	\}}||fV  qd S ©Nr"   )Ś.0r    r!   r"   r"   r#   Ś	<genexpr>Ē  s    z*MorselTests.test_update.<locals>.<genexpr>r   r   r   )
r   rq   r   r   r   r   re   rf   r   Ś	TypeError)r   r   rv   r"   r"   r#   Śtest_update·  s,   
’zMorselTests.test_updatec              	   C   sŖ   t  ” }| ddd” | ddd” ttjd D ]8}| j|d( t t 	||””}|  
|t j” |  ||” |  t|t|” W d    n1 sMw   Y  qd S )NrR   rS   r   r   r   rZ   r[   )r   rq   r~   r   r^   r_   r`   r(   ra   rb   r   r   rj   )r   r   r\   r   r"   r"   r#   rd   Ņ  s   žü’zMorselTests.test_picklec              	   C   s   t  ” }|  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  ” }| ddd” d|d< |  t|d” |  t|d” d S )Nz<Morsel: None=None>zSet-Cookie: None=Nonerr   r>   Z	coded_valz<Morsel: key=coded_val>zSet-Cookie: key=coded_valr   rR   r   r   rZ   )r5   ri   r   rD   rH   r3   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=1TrH   rI   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=1rB   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   rq   r   r	   rj   r~   r   ZassertRegexr   r"   r"   r#   Ś	test_reprą  sJ   ś
’
’
’
’
’
’zMorselTests.test_reprN)rl   rm   rn   rw   r}   r   r   r   r   r   r   r   rd   r    r"   r"   r"   r#   ro     s    		4ro   c                   C   s   t tt tt d S r   )r   r   ro   r   r   r"   r"   r"   r#   Ś	test_main  s   
r”   Ś__main__)r   Ztest.supportr   r   ZunittestŚhttpr   r_   Śtestr   ZTestCaser   ro   r”   rl   r"   r"   r"   r#   Ś<module>   s      y
’