a
    ññ"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rzeƒ  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 ]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!   ú>/opt/python-3.9.21/usr/lib/python3.9/test/test_http_cookies.pyÚ
test_basic   sB    ýýýýüå(zCookieTests.test_basicc              	   C   sh   g d¢}|D ]V\}}|   |¡4 t ¡ }| |¡ |  |d j|¡ W d   ƒ q1 sX0    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 ]–}|   |¡x d||  d }t ¡ }| |¡ |d j}|  |d d… d¡ |  |dd … d	¡ |  t|ƒ|d ¡ W d   ƒ q1 s”0    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   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_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   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 )Nr?   Tr/   Ú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 ]„}| 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)r<   r?   r/   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   s:   t  ¡ }| d¡ |  |d d ¡ |  |d d ¡ d S )Nzeggs=scrambled; Path=/baconÚeggsrG   rF   )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=/baconrK   rG   rF   )r   r   r   rC   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=/baconrK   rG   rF   ÚfooÚbar)r   r   r   rC   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   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   rY   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   r`   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õ   Â©rO   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>   rE   rH   rJ   rM   rN   rQ   rR   rS   rV   ra   rd   rh   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 ©NrT   )
r   ÚMorselZassertIsNoneÚkeyr   Úcoded_valuer   ÚkeysÚ	_reservedr   )r   Úmorselro   r<   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   rn   rr   rC   ZisReservedKeyr   Úsplitrb   rc   Ú__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 )
Nru   z(thou cast _the- !holy! ^hand| +*grenade~z/foor3   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   rn   rr   rb   rc   Úsetrv   r   ro   r   rp   r
   r9   )r   rx   ry   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 rm   )r   rn   rb   ÚAttributeErrorro   r   rp   ©r   rs   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 ]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)ro   r   ú"value"ú/rO   úexample.comé   )r3   rf   Údomainr1   ))ro   r   Úmismatch)ro   r…   r€   )r…   r   r€   rP   rf   rW   rT   )
r   rn   Úupdater{   rC   rL   r'   Úlistr   r   )	r   Z	base_caseÚattribsÚmorsel_aÚmorsel_br   Zcase_br   rs   r!   r!   r"   Útest_eqS  sP    ü





.



zMorselTests.test_eqc                 C   sˆ   t  ¡ }| ddd¡ | dddœ¡ | ¡ }|  |t j¡ |  ||¡ |  ||¡ t |¡}|  |t j¡ |  ||¡ |  ||¡ d S )NrO   rP   Úbazrƒ   ©r1   rf   )r   rn   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 sz0    Y  |  d
|¡ d S )Nr   r@   rƒ   ÚVersionr1   r‚   ÚDOMAINr„   r   Úinvalid)r   rn   r   rb   rc   Ú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 s²0    Y  |  d|¡ d S )Nr‚   rƒ   )r„   r1   r@   r   rT   r‘   rW   r1   r’   r„   r“   )r   rn   r†   r   Ú
setdefaultrb   rc   r”   r~   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 )NrW   rƒ   r‚   )r@   r‘   r’   r@   r1   r„   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   rn   r†   r   r‡   r   rb   rc   r”   Ú	TypeError)r   rˆ   rs   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 )NrO   rP   rŒ   rƒ   r   rW   rX   )r   rn   r{   r†   r[   r\   r]   r'   r^   r_   r   r   rg   )r   r‰   rY   rŠ   r!   r!   r"   ra   Ò  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=Nonero   r<   Z	coded_valz<Morsel: key=coded_val>zSet-Cookie: key=coded_valr   rO   r‚   r   rW   )r3   rf   r„   rB   rF   r1   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   rn   r   r	   rg   r{   r†   ZassertRegexr~   r!   r!   r"   Ú	test_reprà  sJ    ú
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzMorselTests.test_reprN)ri   rj   rk   Ú__doc__rt   rz   r|   r   r‹   r   r•   r—   r   ra   rž   r!   r!   r!   r"   rl     s   		4rl   c                   C   s   t ttƒ ttƒ d S r˜   )r   r   rl   r   r   r!   r!   r!   r"   Ú	test_main  s    
r    Ú__main__)rŽ   Ztest.supportr   r   ZunittestÚhttpr   r\   Útestr   ZTestCaser   rl   r    ri   r!   r!   r!   r"   Ú<module>   s      y