o
    °ó®gÒJ  ã                   @   sv   d dl Z d dlmZmZ d dlZd dlmZ d dlZG dd„ dejƒZ	G dd„ dejƒZ
dd	„ Zed
kr9eƒ  dS dS )é    N)Úrun_unittestÚrun_doctest)Úcookiesc                   @   s„   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd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!   úL/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_http_cookies.pyÚ
test_basic   sF   ýýýýüå(ÿûzCookieTests.test_basicc                 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_load=   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	   r0   r!   r!   r"   Útest_extended_encodeV   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   r%   Ú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   r0   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 )Nr5   Tr%   ÚsecureÚhttponlyz6Set-Cookie: Customer="WILE_E_COYOTE"; HttpOnly; Securer3   r0   r!   r!   r"   Útest_set_secure_httponly_attrsu   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   ƒ q1 sCw   Y  qd S )N)ZStrictZLaxÚstrictZlax)r2   r5   r%   Zsamesitez1Set-Cookie: Customer="WILE_E_COYOTE"; SameSite=%sz%Customer="WILL_E_COYOTE"; SameSite=%s)ÚsubTestr   r   r   r	   r   )r   Zsamesite_valuesr2   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Úeggsr=   r<   )r   r   r   ÚassertFalser0   r!   r!   r"   Ú)test_secure_httponly_false_if_not_present‰   s   
z5CookieTests.test_secure_httponly_false_if_not_presentc                 C   rB   )Nz-eggs=scrambled; httponly; secure; Path=/baconrC   r=   r<   )r   r   r   r9   r0   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=/baconrC   r=   r<   ÚfooÚbar)r   r   r   r9   r   r0   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	   r0   r!   r!   r"   Útest_extra_spaces¢   s
   

ÿzCookieTests.test_extra_spacesc                 C   r$   )Nz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r0   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   ƒ q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   rQ   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   rX   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õ   Â©rG   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#   r1   r4   r;   r>   rA   rE   rF   rI   rJ   rK   rN   rY   r\   r`   r!   r!   r!   r"   r   
   s     1r   c                   @   sh   e Zd 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 )ÚMorselTestszTests for the Morsel object.c                 C   sh   t  ¡ }|  |j¡ |  |j¡ |  |j¡ |  | ¡ t jj ¡ ¡ | 	¡ D ]\}}|  |d|¡ q&d S ©NrL   )
r   ÚMorselZassertIsNoneÚkeyr   Úcoded_valuer   ÚkeysÚ	_reservedr   )r   Úmorselrg   r2   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   rf   rj   r9   ZisReservedKeyr   ÚsplitrZ   r[   Ú__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 )
Nrm   z(thou cast _the- !holy! ^hand| +*grenade~z/foor)   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   rf   rj   rZ   r[   Úsetrn   r   rg   r   rh   r	   r/   )r   rp   rq   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 re   )r   rf   rZ   ÚAttributeErrorrg   r   rh   ©r   rk   r!   r!   r"   Útest_set_properties$  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   ƒ q71 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)rg   r   ú"value"ú/rG   úexample.comé   )r)   r^   Údomainr'   ))rg   r   Úmismatch)rg   r}   rx   )r}   r   rx   rH   r^   rO   rL   )
r   rf   Úupdaters   r9   rD   r@   Úlistr   r   )	r   Z	base_caseÚattribsÚmorsel_aÚmorsel_br   Zcase_br   rk   r!   r!   r"   Útest_eq-  sR   ü





û



zMorselTests.test_eqc                 C   sˆ   t  ¡ }| ddd¡ | dddœ¡ | ¡ }|  |t j¡ |  ||¡ |  ||¡ t |¡}|  |t j¡ |  ||¡ |  ||¡ d S )NrG   rH   Úbazr{   ©r'   r^   )r   rf   rs   r~   ÚcopyÚassertIsInstanceZassertIsNotr   )r   r   r‚   r!   r!   r"   Ú	test_copya  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   r6   r{   ÚVersionr'   rz   ÚDOMAINr|   r   Úinvalid)r   rf   r   rZ   r[   ÚassertNotInrv   r!   r!   r"   Útest_setitemr  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 )Nrz   r{   )r|   r'   r6   r   rL   r‰   rO   r'   rŠ   r|   r‹   )r   rf   r~   r   Ú
setdefaultrZ   r[   rŒ   rv   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 )NrO   r{   rz   )r6   r‰   rŠ   r6   r'   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   rf   r~   r   r   r   rZ   r[   rŒ   Ú	TypeError)r   r€   rk   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   ƒ q1 sMw   Y  qd S )NrG   rH   r„   r{   r…   rO   rP   )r   rf   rs   r~   rS   rT   rU   r@   rV   rW   r‡   r   r_   )r   r   rQ   r‚   r!   r!   r"   rY   ¬  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=Nonerg   r2   Z	coded_valz<Morsel: key=coded_val>zSet-Cookie: key=coded_valry   rG   rz   r   rO   )r)   r^   r|   r8   r<   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=1Tr<   r=   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=1r6   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   rf   r   r   r_   rs   r~   ZassertRegexrv   r!   r!   r"   Ú	test_reprº  sJ   ú
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzMorselTests.test_reprN)ra   rb   rc   Ú__doc__rl   rr   rt   rw   rƒ   rˆ   r   r   r”   rY   r•   r!   r!   r!   r"   rd   ê   s    		4rd   c                   C   s   t ttƒ ttƒ d S r   )r   r   rd   r   r   r!   r!   r!   r"   Ú	test_mainâ  s   
r—   Ú__main__)r†   Ztest.supportr   r   ZunittestÚhttpr   rT   ZTestCaser   rd   r—   ra   r!   r!   r!   r"   Ú<module>   s    a y
ÿ