a
    äzeÒJ  ã                   @   sr   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rneƒ  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 ]r}t ¡ }| |d ¡ |  t|ƒ|d  ¡ |  |jdd!|d" ¡ t|d#  ¡ ƒD ]\}}|  || j	|¡ q¼qfd 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ÚcasesZcaseÚCÚkÚv© r    ú,/usr/lib/python3.9/test/test_http_cookies.pyÚ
test_basic   sB    ýýýýüå(zCookieTests.test_basicc                 C   sˆ   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	   r.   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   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 )Nr3   Tr#   ÚsecureÚhttponlyz6Set-Cookie: Customer="WILE_E_COYOTE"; HttpOnly; Securer1   r.   r    r    r!   Útest_set_secure_httponly_attrsu   s    

ÿz*CookieTests.test_set_secure_httponly_attrsc              	   C   s–   g d¢}|D ]„}| j |dd t d¡}||d d< |  | ¡ d| ¡ t ¡ }| d| ¡ |  |d d |¡ W d   ƒ q1 s†0    Y  qd S )N)ZStrictZLaxÚstrictZlax)r0   r3   r#   Zsamesitez1Set-Cookie: Customer="WILE_E_COYOTE"; SameSite=%sz%Customer="WILL_E_COYOTE"; SameSite=%s)ÚsubTestr   r   r   r	   r   )r   Zsamesite_valuesr0   r   r    r    r!   Útest_samesite_attrs|   s    

ÿzCookieTests.test_samesite_attrsc                 C   s:   t  ¡ }| d¡ |  |d d ¡ |  |d d ¡ d S )Nzeggs=scrambled; Path=/baconÚeggsr;   r:   )r   r   r   ÚassertFalser.   r    r    r!   Ú)test_secure_httponly_false_if_not_present‰   s    
z5CookieTests.test_secure_httponly_false_if_not_presentc                 C   s:   t  ¡ }| d¡ |  |d d ¡ |  |d d ¡ d S )Nz-eggs=scrambled; httponly; secure; Path=/baconr@   r;   r:   )r   r   r   r7   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=/baconr@   r;   r:   ÚfooÚbar)r   r   r   r7   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   sˆ   t  ¡ }| 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'   r(   r)   r*   r+   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 ]T}| j|d4 t 	tj
||d¡}|  | ¡ |¡ W d   ƒ q<1 s†0    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   rN   ZC1r    r    r!   Útest_pickleÌ   s    
zCookieTests.test_picklec                 C   sF   d}t  ¡ }|  t j¡ | |¡ W d   ƒ n1 s80    Y  d S )Nz
a=b; c,d=e)r   r   ÚassertRaisesÚCookieErrorr   )r   rU   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õ   Â©rD   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/   r2   r9   r<   r?   rB   rC   rF   rG   rH   rK   rV   rY   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|¡ qLd S ©NrI   )
r   ÚMorselZassertIsNoneÚkeyr   Úcoded_valuer   ÚkeysÚ	_reservedr   )r   Úmorselrd   r0   r    r    r!   Útest_defaultsí   s    zMorselTests.test_defaultsc                 C   sz   t  ¡ }|jD ] }|  | |¡¡ d| ||< q|jD ]}|  || d| ¡ q6d ¡ D ]}|  t j|j	|d| ¡ qXd S )Nú%s_valuezthe holy hand grenade)
r   rc   rg   r7   ZisReservedKeyr   ÚsplitrW   rX   Ú__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 ]}d|d< | |d| d| ¡ |  |j|¡ |  |j	d| ¡ |  |j
d| ¡ |  | ¡ d|d| f ¡ d|d| f }|  | ¡ |¡ q:d	D ]"}|  t j|j|d| d| ¡ qÐd S )
Nrj   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   rc   rg   rW   rX   Úsetrk   r   rd   r   re   r	   r-   )r   rm   rn   Zexpected_js_outputr    r    r!   Útest_setter  s.    
ÿþ
úÿzMorselTests.test_setterc                 C   sœ   t  ¡ }|  t¡ d|_W d   ƒ n1 s.0    Y  |  t¡ d|_W d   ƒ n1 s^0    Y  |  t¡ d|_W d   ƒ n1 sŽ0    Y  d S rb   )r   rc   rW   ÚAttributeErrorrd   r   re   ©r   rh   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 ]f}|  |¡H t  ¡ }| |¡ |j|Ž  |  ||k¡ |  ||k¡ W d   ƒ qn1 sÊ0    Y  qnt  ¡ }| |¡ |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)rd   r   ú"value"ú/rD   úexample.comé   )r'   r[   Údomainr%   ))rd   r   Úmismatch)rd   rz   ru   )rz   r   ru   rE   r[   rL   rI   )
r   rc   Úupdaterp   r7   rA   r>   Úlistr   r   )	r   Z	base_caseÚattribsÚmorsel_aÚmorsel_br   Zcase_br   rh   r    r    r!   Útest_eq-  sP    ü





.



zMorselTests.test_eqc                 C   sˆ   t  ¡ }| ddd¡ | dddœ¡ | ¡ }|  |t j¡ |  ||¡ |  ||¡ t |¡}|  |t j¡ |  ||¡ |  ||¡ d S )NrD   rE   Úbazrx   ©r%   r[   )r   rc   rp   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 sz0    Y  |  d
|¡ d S )Nr   r4   rx   ÚVersionr%   rw   ÚDOMAINry   r   Úinvalid)r   rc   r   rW   rX   ÚassertNotInrs   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 s²0    Y  |  d|¡ d S )Nrw   rx   )ry   r%   r4   r   rI   r†   rL   r%   r‡   ry   rˆ   )r   rc   r{   r   Ú
setdefaultrW   rX   r‰   rs   r    r    r!   Útest_setdefault  s    þ*zMorselTests.test_setdefaultc                 C   sR  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0    Y  |  d
|¡ |  t	|j¡ |  t	|jd¡ d S )NrL   rx   rw   )r4   r†   r‡   r4   r%   ry   c                 s   s   | ]\}}||fV  qd S ©Nr    )Ú.0r   r   r    r    r!   Ú	<genexpr>¡  ó    z*MorselTests.test_update.<locals>.<genexpr>rˆ   r   r   )
r   rc   r{   r   r|   r   rW   rX   r‰   Ú	TypeError)r   r}   rh   r    r    r!   Útest_update‘  s*    
.zMorselTests.test_updatec              	   C   sª   t  ¡ }| ddd¡ | dddœ¡ ttjd ƒD ]p}| j|dP t t 	||¡¡}|  
|t j¡ |  ||¡ |  t|ƒt|ƒ¡ W d   ƒ q41 sš0    Y  q4d S )NrD   rE   r   rx   r‚   rL   rM   )r   rc   rp   r{   rP   rQ   rR   r>   rS   rT   r„   r   r\   )r   r~   rN   r   r    r    r!   rV   ¬  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=Nonerd   r0   Z	coded_valz<Morsel: key=coded_val>zSet-Cookie: key=coded_valrv   rD   rw   r   rL   )r'   r[   ry   r6   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=1r4   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   rc   r   r   r\   rp   r{   ZassertRegexrs   r    r    r!   Ú	test_reprº  sJ    ú
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzMorselTests.test_reprN)r^   r_   r`   Ú__doc__ri   ro   rq   rt   r€   r…   rŠ   rŒ   r’   rV   r“   r    r    r    r!   ra   ê   s   		4ra   c                   C   s   t ttƒ ttƒ d S r   )r   r   ra   r   r   r    r    r    r!   Ú	test_mainâ  s    
r•   Ú__main__)rƒ   Ztest.supportr   r   ZunittestÚhttpr   rQ   ZTestCaser   ra   r•   r^   r    r    r    r!   Ú<module>   s    a y