Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_http_cookiejar.cpython-311.pyc
�

�KeYF���dZddlZddlZddlZddlZddlZddlmZddlmZddl	Z	ddl
Z
ddlZddl
Z
ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ej&dkZ'Gd�de
j(��Z)Gd	�d
e
j(��Z*Gd�d��Z+d
�Z,d�Z-d�Z.Gd�de
j(��Z/Gd�de
j(��Z0Gd�de
j(��Z1e2dkre
j3��dSdS)zTests for http/cookiejar.py.�N)�	os_helper)�warnings_helper)�	time2isoz�	http2time�iso2time�
time2netscape�parse_ns_headers�join_header_words�split_header_words�Cookie�	CookieJar�DefaultCookiePolicy�LWPCookieJar�MozillaCookieJar�	LoadError�lwp_cookie_str�DEFAULT_HTTP_PORT�escape_path�reach�is_HDN�domain_match�user_domain_match�request_path�request_port�request_host�win32c�J�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZdS)�
DateTimeTestsc	���d}d}|�t|��d��|�t||z��d��|�t|d|zz��d��|�t|d|zz��d��t��}td	��}||fD]}|�|d
d|�d|����� dS)
N�x+�<�Qz2002-04-19 14:36:40Zz2002-04-20 14:36:40Z�z2002-04-21 14:36:40Z�z2002-04-22 14:36:40Z� �z!^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$zbad time2isoz format: � )�assertEqualr�assertRegex��self�base�day�az�bz�texts      �B/usr/local/apps/python3/lib/python3.11/test/test_http_cookiejar.py�test_time2isozzDateTimeTests.test_time2isozs����������4���*@�A�A�A�����4��8�,�,�.D�E�E�E�����4��#��:�.�.�0F�G�G�G�����4��#��:�.�.�0F�G�G�G�
�[�[��
�v�
�
����H�	G�	G�D����T�#G�#G�>@�b�b�"�"�E�
G�
G�
G�
G�	G�	G�c	���d}d}|�t|��d��|�t||z��d��|�t|d|zz��d��|�t|d|zz��d��t��}td	��}||fD]}|�|d
d|�d|����� dS)
Nr r!zFri, 19-Apr-2002 14:36:40 GMTzSat, 20-Apr-2002 14:36:40 GMTr"zSun, 21-Apr-2002 14:36:40 GMTr#zMon, 22-Apr-2002 14:36:40 GMTr$z;[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$zbad time2netscape format: r%)r&rr'r(s      r/�test_time2netscapez DateTimeTests.test_time2netscape(s����������t�,�,�.M�N�N�N�����t�C�x�0�0�8�	:�	:�	:�	
����t�A�c�E�z�2�2�8�	:�	:�	:�	
����t�A�c�E�z�2�2�8�	:�	:�	:��_�_��
�6�
"�
"����H�	>�	>�D�����N�N�57�R�R���<�
>�
>�
>�
>�	>�	>r1c���d�}|�|d��d��|�|d��d��|�|d��d��dS)Nc�T�tjt|����dd�S�N�)�time�gmtimer�r.s r/�
parse_datez0DateTimeTests.test_http2time.<locals>.parse_date?s!���;�y����/�/����3�3r1z01 Jan 2001)i��r<rr�z	03-Feb-20)i�r"r#rrr=z	03-Feb-98)i�r"r#rrr=�r&�r)r;s  r/�test_http2timezDateTimeTests.test_http2time>s���	4�	4�	4�	
�����M�2�2�4K�L�L�L�	
�����K�0�0�2I�J�J�J�	
�����K�0�0�2I�J�J�J�J�Jr1c
���gd�}d}t|��}d}|�|||�d|�d|�d���|D]�}|�t|��||��|�t|�����||�����|�t|�����||�������dS)N)zThu, 03 Feb 1994 00:00:00 GMT� Thursday, 03-Feb-94 00:00:00 GMTz"Thursday, 03-Feb-1994 00:00:00 GMTz03 Feb 1994 00:00:00 GMTz03-Feb-94 00:00:00 GMTz03-Feb-1994 00:00:00 GMTz03-Feb-1994 00:00 GMTz03-Feb-1994 00:00z02-Feb-1994 24:00z	03-Feb-94z03-Feb-1994z03 Feb 1994z  03   Feb   1994  0:00  z  03-Feb-1994  �>P-z1994-02-03 00:00:00Zz  =>  'z' (�))rr&r�lower�upper)r)�tests�test_t�result�expected�ss      r/�test_http2time_formatsz$DateTimeTests.test_http2time_formatsJs��
�
�
��,���6�"�"��)�������06���������I�	K�	K�	K��	F�	F�A����Y�q�\�\�6�1�5�5�5����Y�q�w�w�y�y�1�1�6�1�7�7�9�9�E�E�E����Y�q�w�w�y�y�1�1�6�1�7�7�9�9�E�E�E�E�	F�	Fr1c
�|�dD]8}|�t|��d|�dt|�������9dS)N)��GarbagezMandag 16. September 1996z
01-00-1980z
01-13-1980z
00-01-1980z
32-01-1980z01-01-1980 25:00:00z01-01-1980 00:61:00�01-01-1980 00:00:62z08-Oct-3697739z
08-01-3697739z09 Feb 19942632 22:23:32 GMTz Wed, 09 Feb 1994834 22:23:32 GMTz
http2time(z) is not None
http2time(test) )�assertIsNoner�r)�tests  r/�test_http2time_garbagez$DateTimeTests.test_http2time_garbagense���	N�	N�D� 
���i��o�o�o�6:�d�d�I�d�O�O�O�M�
N�
N�
N�
N�!	N�	Nr1c��td�ddz����td�ddz����dS)Nz01 Jan 1970{}00:00:00 GMT!r%i��z01 Jan 1970 00:00:00{}GMT!)r�format�r)s r/�2test_http2time_redos_regression_actually_completesz@DateTimeTests.test_http2time_redos_regression_actually_completes�sL��	�.�5�5�c�G�m�D�D�E�E�E��.�5�5�c�G�m�D�D�E�E�E�E�Er1c���d�}|�|d��d��|�|d��d��|�|d��d��dS)Nc�T�tjt|����dd�Sr6)r8r9rr:s r/r;z/DateTimeTests.test_iso2time.<locals>.parse_date�s!���;�x��~�~�.�.�r��r�2�2r1�19940203T141529Z)i�r"r#���z1994-02-03 07:15:29 -0700z1994-02-03 19:45:29 +0530r>r?s  r/�
test_iso2timezDateTimeTests.test_iso2time�s���	3�	3�	3�	
�����$6�7�7�1�	3�	3�	3�	
�����$?�@�@�1�	3�	3�	3�	
�����$?�@�@�1�	3�	3�	3�	3�	3r1c��gd�}d}|D]�}|�t|��||��|�t|�����||�����|�t|�����||�������dS)N)
z1994-02-03 00:00:00 -0000z1994-02-03 00:00:00 +0000z1994-02-03 00:00:00z
1994-02-03z1994-02-03T00:00:00�19940203z1994-02-02 24:00:00�19940203T000000Zz
  1994-02-03 z  1994-02-03T00:00:00  rC)r&rrErF)r)rGrHrKs    r/�test_iso2time_formatsz#DateTimeTests.test_iso2time_formats�s���

�

�

�����	E�	E�A����X�a�[�[�&�!�4�4�4����X�a�g�g�i�i�0�0�&�!�'�'�)�)�D�D�D����X�a�g�g�i�i�0�0�&�!�'�'�)�)�D�D�D�D�	E�	Er1c�\�dD](}|�t|��d|z���)dS)N)rNrOrBz
1980-00-01z
1980-13-01z
1980-01-00z
1980-01-32z1980-01-01 25:00:00z1980-01-01 00:61:00rPz01-01-1980T00:00:62�19800101T250000Zziso2time(%r))rQrrRs  r/�test_iso2time_garbagez#DateTimeTests.test_iso2time_garbage�sL��
�	5�	5�D�
���h�t�n�n�,�t�3�
5�
5�
5�
5�	5�	5r1c��td�ddz����td�ddz����dS)Nz1994-02-03{}14:15:29 -0100!r%i@Bz1994-02-03 14:15:29{}-0100!)rrVrWs r/�$test_iso2time_performance_regressionz2DateTimeTests.test_iso2time_performance_regression�sL��	�.�5�5�c�%�i�@�@�A�A�A��.�5�5�c�%�i�@�@�A�A�A�A�Ar1N)
�__name__�
__module__�__qualname__r0r3r@rLrTrXr_rcrfrh�r1r/rrs�������G�G�G�>�>�>�,
K�
K�
K�"F�"F�"F�HN�N�N�*F�F�F�3�3�3� E�E�E�.5�5�5�$B�B�B�B�Br1rc�2�eZdZd�Zd�Zd�Zd�Zd�Zd�ZdS)�HeaderTestsc�b�gd�g}dD]&}|�t|g��|���'dS)N)��foo�bar)�expiresld9W��version�0)z)foo=bar; expires=01 Jan 2040 22:23:32 GMTz+foo=bar; expires="01 Jan 2040 22:23:32 GMT"�r&r	�r)rJ�hdrs   r/�test_parse_ns_headersz!HeaderTests.test_parse_ns_headers�sU��O�O�O�P���	@�	@�C�
���-�s�e�4�4�h�?�?�?�?�		@�	@r1c�b�ddgg}dD]&}|�t|g��|���'dS)Nrp)ru�1)zfoo=bar; version="1"�foo=bar; Version="1"rwrxs   r/�test_parse_ns_headers_versionz)HeaderTests.test_parse_ns_headers_version�sW��$�%5�6�7���	@�	@�C�
���-�s�e�4�4�h�?�?�?�?�		@�	@r1c�\�d}ddgg}|�t|g��|��dS)Nz expires=01 Jan 2040 22:23:32 GMT)rsz01 Jan 2040 22:23:32 GMTrtrw)r)ryrJs   r/�#test_parse_ns_headers_special_namesz/HeaderTests.test_parse_ns_headers_special_names�s>��1��<�>N�O�P�����)�3�%�0�0�(�;�;�;�;�;r1c��tddgg��}|�|d��|�tgg��d��dS)N�rqN�rr�bazzfoo; bar=bazrN)r
r&)r)�joineds  r/�test_join_header_wordsz"HeaderTests.test_join_header_words�sT��"�]�N�$C�#D�E�E�������0�0�0����*�B�4�0�0�"�5�5�5�5�5r1c��ddggfddggfddggfddggfddggfd	dggfd
ddggfdddggfd
dggfdddggfdgd�gfddgdgdggfdddgdgdgdggfg
}|D]�\}}	t|g��}nP#ddl}ddl}|���}|�d|��d|���z}YnxYw|�||d|�d|�d|�d�����dS) Nrqr��foo=barrp�	   foo   z
   foo=   )rqrNz   foo=z   foo=   ; z   foo=   ; bar= baz r��foo=bar bar=bazzfoo= bar=baz)rqzbar=baz�foo=bar;bar=baz�foo bar baz)r�)rrN)r�Nza, b, c)�aN)�bN)�cNz(foo; bar=baz, spam=, foo="\,\;\"", bar= )�spamrN)rqz,;")rrrNrz (error -- traceback follows)

%s�
When parsing: '�'
Expected:     '�'
Got:          '�'
)r�	traceback�io�StringIO�	print_exc�getvaluer&)r)rG�arg�expectrIr�r��fs        r/�test_split_header_wordsz#HeaderTests.test_split_header_words�s���
�m�_�%�&�
�.�)�*�+�
�M�?�+�,�
�[�M�?�+�
�+���(�
�{�m�_�-�
$��^�'D�&E�F�
�.�.�!A� B�C�
�1�2�3�4�
�.�.�!A� B�C�
�J�J�J�K�L�
�+���
��}�E�F�
8��n�-��n�~�.��
�?�
@���&!�	�	�K�C��
M�+�S�E�2�2����
M�$�$�$�$�$�$�$�$��K�K�M�M���#�#�D�!�,�,�,�=��
�
���L����������V�f�f��s�s�F�F�F�F�F�F�	/�
�
�
�
�	�	s
�A,�,AB9c��gd�}|D]H\}}t|g��}t|��}|�||d|�d|�d|�d|�d�	���IdS)N)
)rqrq)r�r�)r�rq)zfoo=zfoo="")r��foo=bar; bar=baz)r�r�)r�z
foo; bar; baz)zfoo="\"" bar="\\"zfoo="\""; bar="\\")z	foo,,,barzfoo, bar)zfoo=bar,bar=bazzfoo=bar, bar=baz)ztext/html; charset=iso-8859-1ztext/html; charset="iso-8859-1")z)foo="bar"; port="80,81"; discard, bar=bazz'foo=bar; port="80,81"; discard, bar=baz)zBasic realm="\"foo\\\\bar\""zBasic; realm="\"foo\\\\bar\""r�r�r�z'
Input was:    'r�)rr
r&)r)rGr�r��input�ress      r/�test_roundtripzHeaderTests.test_roundtrips�������,!�	!�	!�K�C��&��u�-�-�E�#�E�*�*�C����S�&�&�
�s�s�F�F�F�C�C�C����+ �
!�
!�
!�
!�	!�	!r1N)	rirjrkrzr~r�r�r�r�rlr1r/rnrn�su������@�@�@�@�@�@�<�<�<�6�6�6� � � �D!�!�!�!�!r1rnc� �eZdZgdfd�Zd�ZdS)�FakeResponseNc�v�ddl}|�d�|����|_||_dS)zD
        headers: list of RFC822-style 'Key: value' strings
        rN�
)�email�message_from_string�join�_headers�_url)r)�headers�urlr�s    r/�__init__zFakeResponse.__init__2s9��	�����1�1�$�)�)�G�2D�2D�E�E��
���	�	�	r1c��|jS�N)r�rWs r/�infozFakeResponse.info9s	��4�=�(r1)rirjrkr�r�rlr1r/r�r�1s4������!�t�����)�(�(�(�(r1r�c�&�t|||d��S)NzSet-Cookie2��	_interact��	cookiejarr��set_cookie_hdrss   r/�
interact_2965r�;s���Y��_�m�D�D�Dr1c�&�t|||d��S)Nz
Set-Cookier�r�s   r/�interact_netscaper�>s���Y��_�l�C�C�Cr1c�(�tj�|��}|�|��|�dd��}g}|D]}|�|�d|�����t
||��}|�||��|S)zDPerform a single request / response cycle, returning Cookie: header.rrNz: )�urllib�request�Request�add_cookie_header�
get_header�appendr��extract_cookies)	r�r�r��hdr_name�req�
cookie_hdrr�ryr�s	         r/r�r�As���
�.�
 �
 ��
%�
%�C�
����$�$�$�����"�-�-�J��G��3�3�����8�8�8�S�S�1�2�2�2�2�
�w��
$�
$�C�
���c�3�'�'�'��r1c��eZdZd�Zd�Zd�Zd�Zd�Zej	e
d��ejd�����Z
ej	e
d��ejd�����Zej	e
d��ejd	�����Zd
�ZdS)�FileCookieJarTestsc�r�tj}t|��}|�|j|��dSr�)r�TESTFNrr&�filename�r)r�r�s   r/�test_constructor_with_strz,FileCookieJarTests.test_constructor_with_strOs5���#����"�"�������X�.�.�.�.�.r1c��tjtj��}t	|��}|�|jtj|����dSr�)	�pathlib�Pathrr�rr&r��os�fspathr�s   r/�test_constructor_with_path_likez2FileCookieJarTests.test_constructor_with_path_likeTsI���<�	� 0�1�1����"�"�������R�Y�x�%8�%8�9�9�9�9�9r1c�X�td��}|�|j��dSr�)rrQr��r)r�s  r/�test_constructor_with_nonez-FileCookieJarTests.test_constructor_with_noneYs+����������!�*�%�%�%�%�%r1c�8�Gd�d��}tt|fD]|}|�|���5|�t��5|��}t|���}ddd��n#1swxYwYddd��n#1swxYwY�}dS)Nc��eZdZdS)�?FileCookieJarTests.test_constructor_with_other_types.<locals>.AN)rirjrkrlr1r/�Ar�^s�������Dr1r��r�)�int�float�subTest�assertRaises�	TypeErrorr)r)r��type_�instancer�s     r/�!test_constructor_with_other_typesz4FileCookieJarTests.test_constructor_with_other_types]s9��	�	�	�	�	�	�	�	��5�!�_�	8�	8�E����u��-�-�
8�
8��&�&�y�1�1�8�8�$�u�w�w�H�$�h�7�7�7�A�8�8�8�8�8�8�8�8�8�8�8����8�8�8�8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8��	8�	8s5�B�A7�+B�7A;�;B�>A;�?B�B	�B	c��tj}t��}t|dd��|�|jdddjd��	|�|d���t��}|�|d���tj	|��n#tj	|��wxYw|�|jdddjd��dS)N�http://www.acme.com/�boo�www.acme.com�/T��ignore_discard)
rr�rr�r&�_cookies�value�save�load�unlinkr�s   r/�test_lwp_valueless_cookiez,FileCookieJarTests.test_lwp_valueless_cookiegs����#���N�N���!�3�U�;�;�;������N�3�C�8��?�E�t�L�L�L�	'�
�F�F�8�D�F�1�1�1����A�
�F�F�8�D�F�1�1�1���X�&�&�&�&��I��X�&�&�&�&���������N�3�C�8��?�E�t�L�L�L�L�Ls�<B0�0Cz9windows file permissions are incompatible with file modesc�h�tj}t��}t|dd��	|�|d���tj|��}|�t
j|j	��d��tj
|��dS#tj
|��wxYw�Nr�r�Tr�i�)rr�rr�r�r��statr&�S_IMODE�st_moder��r)r�r��sts    r/�test_lwp_filepermissionsz+FileCookieJarTests.test_lwp_filepermissionsus����#���N�N���!�3�U�;�;�;�	'�
�F�F�8�D�F�1�1�1����"�"�B����T�\�"�*�5�5�u�=�=�=���X�&�&�&�&�&��I��X�&�&�&�&�����AB�B1c�h�tj}t��}t|dd��	|�|d���tj|��}|�t
j|j	��d��tj
|��dS#tj
|��wxYwr�)rr�rr�r�r�r�r&r�r�r�r�s    r/�test_mozilla_filepermissionsz/FileCookieJarTests.test_mozilla_filepermissions�s����#�������!�3�U�;�;�;�	'�
�F�F�8�D�F�1�1�1����"�"�B����T�\�"�*�5�5�u�=�=�=���X�&�&�&�&�&��I��X�&�&�&�&���r�c�t�tj}ttfD�]}||��}tj�d��}dg}t|d��}|�||��|�	t|��d��	|���|���|���|�
��tj|��n#tj|��wxYw|�	t|��d����dS)Nr�z1Set-Cookie: pll_lang=en; Max-Age=31536000; path=/r<r)rr�rrr�r�r�r�r�r&�lenr��clearr�r�)r)r��cookiejar_classr�r�r�r�s       r/�test_cookie_files_are_truncatedz2FileCookieJarTests.test_cookie_files_are_truncated�s���#�� ,�.>�?�	(�	(�O����)�)�A��.�(�(�)?�@�@�C�J�K�G��w�(>�?�?�C�
���c�3�'�'�'����S��V�V�Q�'�'�'�	
+����������	�	�	�������������� ��*�*�*�*��	� ��*�*�*�*�������S��V�V�Q�'�'�'�'�)	(�	(s
�AC:�:Dc�j�tj}ttfD]o}|��}	|�d���|�d���9#t$r*}|�|jt��Yd}~�hd}~wwxYw	t|d��5}|�d��ttfD]-}|��}|�t|j|���.	ddd��n#1swxYwYtj
|��dS#tj
|��wxYw)NzAfor this test to work, a file with this filename should not existr�z%expected OSError for invalid filename�wzoops
)rr�rrr��fail�OSError�assertIsNot�	__class__r�open�writer�r�)r)r�r�r��excr�s      r/�test_bad_magicz!FileCookieJarTests.test_bad_magic�s����#��+�-=�=�
	C�
	C�O���!�!�A�
C����!<��=�=�=��	�	�A�B�B�B�B���
;�
;�
;�� � ���	�:�:�:�:�:�:�:�:�����
;����	'��h��$�$�
C������!�!�!�'3�5E�'E�C�C�O�'��)�)�A��%�%�i����B�B�B�B�C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C����
C�
C�
C�
C�
��X�&�&�&�&�&��I��X�&�&�&�&���sH�A�
B� B�B�D�AC;�/D�;C?�?D�C?�D�D2N)rirjrkr�r�r�r�r��unittest�skipIf�	mswindowsr�skip_unless_working_chmodr�r�r�r	rlr1r/r�r�Ns������/�/�/�
:�:�:�
&�&�&�8�8�8�M�M�M��X�_�Y� [�\�\��(�
'�
'�)�(�]�\�
'��X�_�Y� [�\�\��(�
'�
'�)�(�]�\�
'��X�_�Y� [�\�\��(�(�(�)�(�]�\�(�0'�'�'�'�'r1r�c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)d(�Z*d)S)*�CookieTestsc��t��}dD]h\}}}tj�|��}|�||��}|r|�|���S|�|���idS)N))�http://foo.bar.com/zblah.comF)rzrhubarb.blah.comF)rzrhubarb.foo.bar.comF)r�.foo.bar.comT)r�foo.bar.comT)rz.bar.comT)r�bar.comT)r�comT)�http://foo.com/zrhubarb.foo.comF)r�.foo.comT)r�foo.comT)rrT)�http://foo/zrhubarb.fooF)rz.fooT)rrqT)rz	foo.localT)r�.localT)�http://barfoo.comrF)rrF)rr�r�r��domain_return_ok�
assertTrue�assertFalse)r)�polr��domain�okr��rs       r/�test_domain_return_okz!CookieTests.test_domain_return_ok�s���"�#�#�� �	&�	&�O�C���*�n�,�,�S�1�1�G��$�$�V�W�5�5�A��
&�4�?�?�1�%�%�%�%��"�"�1�%�%�%�%�1	&�	&r1c���tj}t|��}t|dd��t|dd��|jddd}|�|j��|�|jd��|jddd}|�|j��|�|jd��|�t|��d��t|��}|�d	d	�
��	t|��}|�d	d	�
��tj
|j��n#tj
|j��wxYw|�t|��tjdd	zddz|����|�t|d
��d��dS)Nr��eggsz"spam"; path=/foo/r�r��/foo/z"spam"zJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0T)�ignore_expiresr�zpath_specified=%sF�http://www.acme.com/foo/z"spam"; eggs)rr�rr�r�rQr�r&�namer�reprr��revertr�r��re�sub)r)r�r��cookie�old_strs     r/�test_missing_valuezCookieTests.test_missing_values����#���X�&�&���!�3�V�<�<�<��!�3�5I�J�J�J���N�+�C�0��8�����&�,�'�'�'������f�-�-�-���N�+�G�4�X�>�����&�,�'�'�'������h�/�/�/������/�/�
,�	.�	.�	.��q�'�'��	���d�4��8�8�8�	)� ��*�*�A�
�H�H�D��H�>�>�>���Q�Z�(�(�(�(��I��Q�Z�(�(�(�(���������G�G��F�&��-�/B�U�/J��
�
�	�	�	�
	
���*�1�.H�I�I�'�	)�	)�	)�	)�	)s�$&E$�$E?c��dD]�\}}}t||���}t|��}t|dd��	|jddd}|�|j|��t
|dd��|r4|jddd	}|�|jd
����#t$r|�|��Y��wxYwdS)N))NFr)NTr<)FFN)FTr<)TFr)TTr)�rfc2109_as_netscape�rfc2965�http://www.example.com/zni=ni; Version=1�www.example.comr��ni�foo=bar; Version=1rqr<)	rr
r�r�r&rur��KeyErrorrQ)r)r2r3ru�policyr�r.�
cookie2965s        r/�test_rfc2109_handlingz!CookieTests.test_rfc2109_handling4s$��	6�	<�	<�1���'�)�$7��!�!�!�F��&�!�!�A��a�!:�<N�O�O�O�
<���$5�6�s�;�D�A��� � ����9�9�9��a�!:�2�4�4�4��<�!"��,=�!>�s�!C�E�!J�J��$�$�Z�%7��;�;�;����
+�
+�
+��!�!�'�*�*�*�*�*�
+����#	<�	<s�B7�7C�Cc�P�t��}t|dd��t|dd��t|dd��t|dd��t|dd��t|dd��t|dd	��t|dd
��|jddd
}|�|jd��|�|j��|�|jt��|�	|j
��|�|�d����|�	|�d����|jddd}|�|jd��|�	|j��|�|jd��|�|j
��|jddd}|�|j��|�	|j
��|jddd}|jddd}|�|j
��|�|j
��|jddd}|�|j��|�|jd��|jddd
}|�|j��dS)Nr�z0spam=eggs; DoMain=.acme.com; port; blArgh="feep"zni=ni; port=80,8080�http://www.acme.com:80/znini=nizfoo=bar; expires=z-spam=eggs; expires="Foo Bar 25 33:22:11 3022"z	fortytwo=z=unladenswallow�holyhandgrenade�	.acme.comr�r��blArgh�blarghr�r6z80,8080�ninirq�fortytworN)r
r�r�r&r r�domain_specified�portrr�port_specified�has_nonstandard_attrrQrs�assertIsNotNoner�)r)r�r.rqr�s     r/�test_ns_parserzCookieTests.test_ns_parserSs����K�K���!�3�L�	N�	N�	N��!�3�5J�K�K�K��!�6�	�B�B�B��!�6�8K�L�L�L��!�6�9?�	@�	@�	@��!�3�[�A�A�A��!�3�5F�G�G�G��!�3�5F�G�G�G���K�(��-�f�5��������4�4�4�����/�0�0�0������&7�8�8�8�����.�/�/�/�����3�3�H�=�=�>�>�>�����4�4�X�>�>�?�?�?���N�+�C�0��6��������7�7�7�����0�1�1�1������i�0�0�0�����-�.�.�.���N�+�C�0��8�����&�+�&�&�&�����.�/�/�/��j��(��-�e�4���z�.�)�#�.�u�5�����#�+�&�&�&����$�,�'�'�'���N�+�C�0��<�����V�\�*�*�*������r�*�*�*�
��N�+�C�0�1B�C�����&�,�'�'�'�'�'r1c���t��}t|dd��t|dd��|jdd}|�d|��|�d|��dS)Nr�zexpires=eggszversion=eggs; spam=eggsr�r�rsru)r
r�r��assertIn)r)r��cookiess   r/�test_ns_parser_special_namesz(CookieTests.test_ns_parser_special_names�ss��
�K�K���!�3�^�D�D�D��!�3�5N�O�O�O��*�^�,�S�1���
�
�i��)�)�)��
�
�i��)�)�)�)�)r1c�R�t��}ttj��dz��}tj|��5d|��g}t
j�d��}t|d��}|�	||��}|�
t|��d��|�
t|dj��|��ddd��n#1swxYwYt|dd|z��|�
t|��d��ttj��dz
��}t|dd|z��t|d��}|�
t|��d��|�d	|��|�d
|��t|dd|z��t|dd|z��|�
t|��d
��t|dd|z��t|dd|z��t|d��}|�
t|��d��t|dd��|�
t|��d��|���|�
t|��d��|�d	|��t#dddddddddddddddi��}	|�
|	jd��dS)N�z%Set-Cookie: FOO=BAR; path=/; expires=�http://www.coyote.com/r<rr�zspam="bar"; expires=%szfoo="eggs"; expires=%s�
spam="bar"rqzeggs="bar"; expires=%szbar="bar"; expires=%sr#z!eggs="bar"; expires=%s; max-age=0z bar="bar"; max-age=0; expires=%szhttp://www.rhubarb.net/zwhum="fizz"r"r)r�Fzwww.python.orgTr�z1444312383.018307i?uV)r
rr8r�check_no_warningsr�r�r�r��make_cookiesr&r�rsr�rK�assertNotIn�clear_session_cookiesr)
r)r��futurer�r�r�rL�now�hr.s
          r/�test_expireszCookieTests.test_expires�s����K�K���t�y�{�{�4�/�0�0��
�
.�t�
4�
4�	H�	H�G�v�G�G�H�G��.�(�(�)A�B�B�C��w�(@�A�A�C��n�n�S�#�.�.�G����S��\�\�1�-�-�-����]�7�1�:�+=�>�>��G�G�G�
	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�	�!�3�5M� �6!�	"�	"�	"�����Q����#�#�#��D�I�K�K��M�*�*���!�3�5M��6�	�	�	��a�!7�8�8������Q����#�#�#��
�
�l�A�&�&�&������"�"�"�	�!�3�5M� �6!�	"�	"�	"��!�3�5L� �6!�	"�	"�	"�����Q����#�#�#��!�3�62�4:�6;�	<�	<�	<��!�3�62�4:�6;�	<�	<�	<��a�!7�8�8������Q����#�#�#�	�!�6�
�F�F�F�����Q����#�#�#�	���!�!�!�����Q����#�#�#��
�
�l�A�&�&�&���F�G��u�&6��u�c���':���d�����	
������4�4�4�4�4s�BC/�/C3�6C3c�.�td���}t|��}t|dd��|�d|jd��t|��}t|dd��|�d|jd��t|��}t|d	d��|�d
|jd��t|��}t|dd��|�d|jd��t��}t|dd
��|�d|jd��t��}t|dd��|�d|jd��t��}t|d	d��|�d|jd��t��}t|dd��|�d|jd��dS)NT�r3r�zspam="bar"; Version="1"r�r�zhttp://www.acme.com/blahzeggs="bar"; Version="1"z http://www.acme.com/blah/rhubarb�/blah/z!http://www.acme.com/blah/rhubarb/z/blah/rhubarb/rQ�
eggs="bar"�/blahz
/blah/rhubarb)rr
r�rKr�r��r)rr�s   r/�test_default_pathzCookieTests.test_default_path�s���!�$�/�/�/���c�N�N���a�/�1J�K�K�K��
�
�c�1�:�n�5�6�6�6��c�N�N���a�3�5N�O�O�O��
�
�c�1�:�n�5�6�6�6��c�N�N���a�;�/�	1�	1�	1��
�
�h��
�>� :�;�;�;��c�N�N���a�<�/�	1�	1�	1��
�
�&��
�>�(B�C�C�C�
�K�K���!�3�\�B�B�B��
�
�c�1�:�n�5�6�6�6��K�K���!�7��F�F�F��
�
�c�1�:�n�5�6�6�6��K�K���!�?��N�N�N��
�
�g�q�z�.�9�:�:�:��K�K���!�@�,�O�O�O��
�
�o�q�z�.�'A�B�B�B�B�Br1c���t��}d}d}t|||��|�d|jd��|�t||��|��dS)Nzhttp://example.com/?spam/eggsr]r�zexample.com)r
r�rKr�r&)r)�cj�urir�s    r/�test_default_path_with_queryz(CookieTests.test_default_path_with_query�si��
�[�[��-�����"�c�5�)�)�)��
�
�c�2�;�}�5�6�6�6����*�2�s�3�3�U�;�;�;�;�;r1c�d�gd�}|D](\}}|�t|��|���)dS)N))z/foo%2f/bar�/foo%2F/bar)rfrf)�
/foo%%/barrg)�/fo%19o/barrh)z/fo%7do/barz/fo%7Do/bar)�	/foo/bar&ri)�	/foo//barrj)�	~/foo/barrk)z	/foo/barz/foo%19/bar)z	/}foo/barz/%7Dfoo/bar)u
/foo/barüz/foo/bar%C3%BC)u/foo/barꯍz/foo/bar%EA%AF%8D)r&r)r)�casesr�rIs    r/�test_escape_pathzCookieTests.test_escape_path�sS������*!�	7�	7�K�C�����[��-�-�v�6�6�6�6�	7�	7r1c��tj�d��}|�t	|��d��tj�d��}|�t	|��d��tj�d��}|�t	|��d��dS)NzThttp://www.example.com/rheum/rhaponticum;foo=bar;sing=song?apples=pears&spam=eggs#niz$/rheum/rhaponticum;foo=bar;sing=songzBhttp://www.example.com/rheum/rhaponticum?apples=pears&spam=eggs#niz/rheum/rhaponticumzhttp://www.example.comr�)r�r�r�r&r�r)r�s  r/�test_request_pathzCookieTests.test_request_paths����n�$�$�
:�;�;��	
����c�*�*�?�	A�	A�	A��n�$�$�
(�)�)��	
����c�*�*�,@�A�A�A��n�$�$�%=�>�>������c�*�*�C�0�0�0�0�0r1c�D�t��}td���}t|��}d}t||d��|jddd}dD]�\}}|�|��}tj�|��}	t||��}
|rD|�d	|
d
|����|�|�	||	������|�
d	|
d|����|�|�	||	������dS)NT)�strict_ns_set_pathzhttp://bar.comzspam=eggs; Path=/foor�/foor�))rsT)r&T)�/foo/barT)r�F)z/foobad/fooFz	spam=eggszcookie not set for zcookie set for )rr
r�r�r�r�r�rKr�set_ok_pathrTr)r)r�strict_ns_path_polr��base_urlr.�pathr!r�r�rXs           r/�test_path_prefix_matchz"CookieTests.test_path_prefix_match"sG��!�#�#��0�D�I�I�I���c�N�N��#���!�X�'=�>�>�>���I�&�v�.�v�6��1�
	N�
	N�H�D�"�
�%�t�%�%�C��.�(�(��-�-�C�!�!�S�)�)�A��
N��
�
�k�1�.J�D�.J�.J�K�K�K���� 2� >� >�v�s� K� K�L�L�L�L�� � ��a�1I�4�1I�1I�J�J�J�� � �!3�!?�!?���!L�!L�M�M�M�M�
	N�
	Nr1c�(�tj�dddi���}|�t	|��d��tj�dddi���}|�t	|��t
��dS)Nzhttp://www.acme.com:1234/�Hostzwww.acme.com:4321�r��1234r�)r�r�r�r&rrros  r/�test_request_portzCookieTests.test_request_port:s����n�$�$�%@�.4�6I�-J�%�L�L������c�*�*�F�3�3�3��n�$�$�%;�.4�6I�-J�%�L�L������c�*�*�,=�>�>�>�>�>r1c��tj�dddi���}|�t	|��d��tj�dddi���}|�t	|��d��tj�d	dd
i���}|�t	|��d��dS)Nzhttp://1.1.1.1/r{�www.acme.com:80r|z1.1.1.1r�zirrelevant.comr�z&http://www.acme.com:2345/resource.htmlzwww.acme.com:5432)r�r�r�r&rros  r/�test_request_hostzCookieTests.test_request_hostBs����n�$�$�%6�.4�6G�-H�%�J�J��
	
����c�*�*�I�6�6�6��n�$�$�%;�.4�6F�-G�%�I�I������c�*�*�N�;�;�;��n�$�$�%M�.4�6I�-J�%�L�L������c�*�*�N�;�;�;�;�;r1c�&�|�td����|�td����|�td����|�td����|�td����|�td����|�td����|�td����dS)	Nrz1foo2.3bar4.5com�192.168.1.1rN�.rz..foozfoo.)rrrrWs r/�test_is_HDNzCookieTests.test_is_HDNRs�������}�-�-�.�.�.�����1�2�2�3�3�3�����
�.�.�/�/�/��������$�$�$��������%�%�%������/�/�0�0�0��������)�)�)��������(�(�(�(�(r1c�6�|�td��d��|�td��d��|�td��d��|�td��d��|�td��d��|�td��d��|�td��d��|�td	��d	��dS)
Nr�r?�acme.comz
acme.localr�.comr�rNz192.168.0.1)r&rrWs r/�
test_reachzCookieTests.test_reach\s�������~�.�.��<�<�<�����z�*�*�J�7�7�7�����|�,�,�h�7�7�7�����x���(�3�3�3�����v����/�/�/�����s���S�)�)�)�����r���B�'�'�'�����}�-�-�}�=�=�=�=�=r1c��|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�td	d
����|�tdd����|�tdd
����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����|�tdd����dS)Nr�z.168.1.1zx.y.comzx.Y.comz.Y.comzY.comz	a.b.c.comz.c.comz
example.localrz	blah.blahrNz.rhubarb.rhubarbr�r?zrhubarb.acme.comzwww.rhubarb.acme.comzy.comz.y.comr�r�mz.mr�)rrrrrWs r/�test_domain_matchzCookieTests.test_domain_matchfs�������]�M�B�B�C�C�C�����m�Z�@�@�A�A�A�����Y�	�:�:�;�;�;�����Y��9�9�:�:�:�����i��9�9�:�:�:�����[�(�;�;�<�<�<�����h��<�<�=�=�=�����_�h�?�?�@�@�@�����k�2�6�6�7�7�7�����b�*<�=�=�>�>�>�����R��,�,�-�-�-����)�*�j�A�A�B�B�B����*�:�{�C�C�D�D�D����)�*<�k�J�J�K�K�K����)�*@�+�N�N�O�O�O����)�)�Y�?�?�@�@�@����)�)�X�>�>�?�?�?����*�9�g�>�>�?�?�?����)�'�7�;�;�<�<�<����*�8�W�=�=�>�>�>����)�(�H�=�=�>�>�>����)�)�V�<�<�=�=�=����*�9�e�<�<�=�=�=����*�9�c�:�:�;�;�;����*�9�d�;�;�<�<�<����*�9�b�9�9�:�:�:����*�9�c�:�:�;�;�;����)�-��G�G�H�H�H����*�=�*�E�E�F�F�F����*�=�#�>�>�?�?�?����*�=�"�=�=�>�>�>�>�>r1c��t��}t|dd��|�t|��d��dS)Nzhttp://www.nasty.com/z)foo=bar; domain=friendly.org; Version="1"r)r
r�r&r�r�s  r/�test_wrong_domainzCookieTests.test_wrong_domain�sL��

�K�K���a�0�A�	C�	C�	C�����Q����#�#�#�#�#r1c�H�td���}t|���}t|dd��t|dd��|�t	|��d��dD]9}t|d	|zd
��|�t	|��d���:dS)NT)�
strict_domain�r9zhttp://example.co.uk/zno=problemoz!okey=dokey; Domain=.example.co.ukr")z.co.ukz.org.zaz.tx.usz.name.uszhttp://example.%s/zspam=eggs; Domain=.co.uk)rr
r�r&r�)r)�cprb�
pseudo_tlds    r/�test_strict_domainzCookieTests.test_strict_domain�s���!�t�
4�
4�
4��
�b�
!�
!�
!���"�5�}�E�E�E��"�5�=�	?�	?�	?�����R���!�$�$�$�E�	)�	)�J��b�"6��"C�8�
:�
:�
:����S��W�W�a�(�(�(�(�	)�	)r1c��t��}t|dd��|�t|��d��|�|jdddjd��|�t|d��d��|�t|d��d��t
tj�	��}|�|��|�t|d��d
��t|dd��t|d
d��|�t|��d��|�|jdddjd��|�|jdddjd��|�t|d
��d��t|dd��|�t|��d��t|dd��|�t|��d��dS)N�http://foo.net/zns=barr<�foo.netr��nsrr�http://www.foo.net/)�strict_ns_domainrN�http://foo.net/foo/zspam1=eggs; domain=foo.netzhttp://foo.net/foo/bar/zspam2=eggs; domain=.foo.netr#�.foo.netrs�spam1r%rt�spam2zspam2=eggs; spam1=eggs; ns=barznini="ni"; domain=.netzhttp://foo.co.ukznasty=trick; domain=.co.uk�)	r
r�r&r�r�r�r�DomainStrictNonDomain�
set_policy)r)r�rs   r/�test_two_component_domain_nsz(CookieTests.test_two_component_domain_ns�sO��
�K�K��	�!�.��9�9�9�����Q����#�#�#������I�.�s�3�D�9�?��G�G�G����*�1�.?�@�@�(�K�K�K����*�1�.C�D�D�!�	#�	#�	#�"�0�F�H�H�H��	���S�������*�1�.C�D�D�b�I�I�I�	�!�2�6�	8�	8�	8�	�!�6�7�	9�	9�	9�����Q����#�#�#������J�/��7��@�F��	!�	!�	!������J�/�
�;�G�D�J��	!�	!�	!����*�1�.G�H�H�9�	;�	;�	;�	�!�.�0H�I�I�I�����Q����#�#�#�	�!�/�1M�N�N�N�����Q����#�#�#�#�#r1c��t��}t|dd��|�t|��d��dS)N�http://localhost�foo=bar; domain=localhost;r<�r
r�r&r�r�s  r/�test_localhost_domainz!CookieTests.test_localhost_domain�sA���K�K���!�/�1M�N�N�N�����Q����#�#�#�#�#r1c��t��}t|dd��|�|jdddjd��dS)Nr�r�z
.localhostr�rqrr�r
r�r&r�r�r�s  r/�test_localhost_domain_contentsz*CookieTests.test_localhost_domain_contents�sO���K�K���!�/�1M�N�N�N������L�1�#�6�u�=�C�U�K�K�K�K�Kr1c��t��}t|dd��|�|jdddjd��dS)Nr�zfoo=bar;zlocalhost.localr�rqrrr�r�s  r/� test_localhost_domain_contents_2z,CookieTests.test_localhost_domain_contents_2�sO���K�K���!�/��<�<�<������$5�6�s�;�E�B�H�%�P�P�P�P�Pr1c��t��}t|dd��|�t|��d��dS)Nzhttp://evil.comzfoo=bar; domain=.localhostrr�r�s  r/�test_evil_nonlocal_domainz%CookieTests.test_evil_nonlocal_domain�sA���K�K���!�.�0L�M�M�M�����Q����#�#�#�#�#r1c��t��}t|dd��|�t|��d��dS)Nr�zfoo=bar; domain=.evil.comrr�r�s  r/�test_evil_local_domainz"CookieTests.test_evil_local_domain�sA���K�K���!�/�1L�M�M�M�����Q����#�#�#�#�#r1c��t��}t|dd��|�t|��d��dS)Nr�z foo=bar; domain=.someother.localrr�r�s  r/�test_evil_local_domain_2z$CookieTests.test_evil_local_domain_2�sA���K�K���!�/�1S�T�T�T�����Q����#�#�#�#�#r1c�|�td���}t|��}t|dd��|�t	|��d��|�|jdddjd	��|�t|d��d
��|�t|d��d��t|d
d��|�t	|��d��|�t|d
��d
��t|dd��|�|jdddjd��|�t	|��d��|�t|d��d
��|�t|d��d��t|dd��|�t	|��d��t|dd��|�t	|��d��dS)NTr[r�r}r<r�r�rqrrz$Version=1; foo=barr�rNzhttp://foo.net/fooz1spam=eggs; domain=foo.net; path=/foo; Version="1"zhttp://www.foo.net/foo/z&spam=eggs; domain=foo.net; Version="1"r�r&r�r%r"r�z($Version=1; spam=eggs; $Domain="foo.net"z#ni="ni"; domain=".net"; Version="1"zhttp://foo.co.uk/z'nasty=trick; domain=.co.uk; Version="1"r#)rr
r�r&r�r�r�r_s   r/�!test_two_component_domain_rfc2965z-CookieTests.test_two_component_domain_rfc2965�s_��!�$�/�/�/���c�N�N��	�a�*�,B�C�C�C�����Q����#�#�#������I�.�s�3�E�:�@�%�H�H�H�����q�*;�<�<�.�	0�	0�	0�	
����q�*?�@�@�"�E�E�E�
	�a�-�I�	K�	K�	K�����Q����#�#�#�����q�*>�?�?�.�	0�	0�	0�
	�a�2�>�	@�	@�	@������J�/��8��@�F��	!�	!�	!�����Q����#�#�#�����q�*?�@�@�.�	0�	0�	0�����q�*C�D�D�C�	E�	E�	E�	�a�*�;�	=�	=�	=�����Q����#�#�#�	�a�,�?�	A�	A�	A�����Q����#�#�#�#�#r1c�>�ttdgdg������}tj�d��}dg}t|d��}|�||��|�t|��d��tj�d��}t|d��}|�||��|�t|��d	��tj�d
��}t|d
��}|�||��|�t|��d	��tj�d
��}t|d
��}|�	||��}|�
|d��|�t|��d��|�|��|�|�
d����dS)
Nr�r�)�blocked_domains�allowed_domainsr��http://acme.com/�*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/rr�r<rPr"r)r
rr�r�r�r�r�r&r�rS�
set_cookier�r�
has_header)r)r�r�r�r�rLs      r/�test_domain_allowzCookieTests.test_domain_allow(s����0�'�L�+�,�.�.�.�
/�
/�
/���n�$�$�%7�8�8��?�@���7�$6�7�7��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%;�<�<���7�$:�;�;��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%=�>�>���7�$<�=�=��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%=�>�>���7�$<�=�=���.�.��c�*�*��	���W�Q�Z� � � �����Q����#�#�#�	���C� � � ��������1�1�2�2�2�2�2r1c�
�tddg���}t|���}dg}tj�d��}t|d��}|�||��|�t|��d��|�	dg��}|�||��|�t|��d	��|�
��tj�d
��}t|d
��}|�||��|�t|��d	��tj�d
��}|�|��|�|�
d����|�|�
d����|�
��|�	dg��|�||��|�t|��d	��tj�d��}t|d��}|�||��}|�|d��|�t|��d
��|�|��|�|�
d����|�
��|�	g��tj�d��}t|d��}|�||��}|�||��|�t|��d	��tj�d��}|�|��|�|�
d����tj�d��}|�|��|�|�|d|����|�|�
d����|�	dg��}tj�d��}|�|��|�|�
d����tj�d��}|�|��|�|�
d����dS)NTr?)r3r�r�r�r�rr�r<zhttp://www.roadrunner.net/r�Cookie2r"r�zhttp://badacme.com/)rr
r�r�r�r�r�r&r��set_blocked_domainsr�r�rr�rSr�r�	return_ok)r)rr�r�r�r��prLs        r/�test_domain_blockzCookieTests.test_domain_blockGs���!��;�-�9�9�9���S�!�!�!��?�@���n�$�$�%;�<�<���7�$:�;�;��	���#�s�#�#�#�����Q����#�#�#��#�#�Z�L�1�1��	���#�s�#�#�#�����Q����#�#�#�	���	�	�	��n�$�$�%A�B�B���7�$@�A�A��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%A�B�B��	���C� � � �������x�0�0�1�1�1�������y�1�1�2�2�2�	���	�	�	�����
�.�.�.�	���#�s�#�#�#�����Q����#�#�#��n�$�$�%;�<�<���7�$:�;�;���.�.��c�*�*��	���W�Q�Z� � � �����Q����#�#�#�	���C� � � ��������1�1�2�2�2�	���	�	�	�����#�#�#��n�$�$�%7�8�8���7�$6�7�7���.�.��c�*�*��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%7�8�8��	���C� � � �������x�0�0�1�1�1��n�$�$�%:�;�;��	���C� � � �������w�q�z�3�7�7�8�8�8��������1�1�2�2�2��#�#�Z�L�1�1���n�$�$�%7�8�8��	���C� � � ��������1�1�2�2�2��n�$�$�%:�;�;��	���C� � � ��������1�1�2�2�2�2�2r1c
���dD]�}dD]�}t��}|rtd���}t}d}ntd���}t}d}|�|��d}|||d	|�|����|||d
|�d|����|�|jdd
djd��|�|jdd
djd�����dS)N)TF)r%rNFr[rNTz; Version=1r��foo1=bar�foo2=barz; securer�r��foo1z#non-secure cookie registered secure�foo2z#secure cookie registered non-secure)	r
rr�r�r�rr��securer)r)r��
whitespacer�rr��vsr�s        r/�test_securezCookieTests.test_secure�s6���	;�	;�B�%�
;�
;�
��K�K���'�-�e�<�<�<�C�+�C��B�B�-�d�;�;�;�C�'�C�&�B����S�!�!�!�,����A�s�s�b�b�*�*�=�>�>�>���A�s�s�r�r�r�:�:�F�G�G�G�� � ��J�~�.�s�3�F�;�B�9�;�;�;�����J�~�.�s�3�F�;�B�9�;�;�;�;�#
;�	;�	;r1c��t��}t|���}dg}tj�d��}t|d��}|�||��|�t|��d��tj�d��}|�	|��|�
|�d����tj�d��}|�	|��|�|�d����tj�d��}|�	|��|�
|�d����tj�d��}|�	|��|�|�d����dS)	Nr��(Set-Cookie: session=narf; secure; path=/�https://www.acme.com/r<rr�zwss://www.acme.com/zws://www.acme.com/)
rr
r�r�r�r�r�r&r�r�rr�r�r)rr�r�r�r�s      r/�test_secure_blockzCookieTests.test_secure_block�s���!�#�#���S�!�!�!��=�>���n�$�$�%<�=�=���7�$;�<�<��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%<�=�=��	���C� � � �������x�0�0�1�1�1��n�$�$�%;�<�<��	���C� � � ��������1�1�2�2�2��n�$�$�%:�;�;��	���C� � � �������x�0�0�1�1�1��n�$�$�%9�:�:��	���C� � � ��������1�1�2�2�2�2�2r1c��tdg���}t|���}dg}tj�d��}t|d��}|�||��|�t|��d��tj�d��}|�	|��|�
|�d����tj�d��}|�	|��|�
|�d����tj�d	��}|�	|��|�|�d����tj�d
��}|�	|��|�
|�d����dS)N�foos)�secure_protocolsr�r�r�r<rr�zfoos://www.acme.com/zfoo://www.acme.com/)
rr
r�r�r�r�r�r&r�r�rr�rr�s      r/�test_custom_secure_protocolsz(CookieTests.test_custom_secure_protocols�s���!�F�8�<�<�<���S�!�!�!��=�>���n�$�$�%<�=�=���7�$;�<�<��	���#�s�#�#�#�����Q����#�#�#��n�$�$�%<�=�=��	���C� � � ��������1�1�2�2�2��n�$�$�%;�<�<��	���C� � � ��������1�1�2�2�2��n�$�$�%;�<�<��	���C� � � �������x�0�0�1�1�1��n�$�$�%:�;�;��	���C� � � ��������1�1�2�2�2�2�2r1c��ttd������}t|dd��t|d��}|�|d��dS)NTr[r�r�zfoo=\b"a"r; Version=1z$Version=1; foo=\\b\"a\"r)r
rr�r&)r)r�rXs   r/�test_quote_cookie_valuez#CookieTests.test_quote_cookie_value�s_���0��>�>�>�?�?�?���a�/�1I�J�J�J��!�3�4�4������8�9�9�9�9�9r1c�d�d}ttd�����}t||d��tj�|��}|�t|��d��|�|��|�	|�
d����dS)N�http://www.acme.comTr[r7r<r)r
rr�r�r�r�r&r�r�rr�)r)r�r�r�s    r/�test_missing_final_slashz$CookieTests.test_missing_final_slash�s���#���)�$�7�7�7�8�8���a��2�3�3�3��n�$�$�S�)�)������Q����#�#�#�	���C� � � �������x�0�0�1�1�1�1�1r1c���td���}t|��}d}t||d��t||��}|�d|d��t|��}d}t||d��t||��}|�d|d	��t|��}d}t||d
��t||��}|�d|d	��dS)NTr[r�spam=eggs; Version=1�Domainz*absent domain returned with domain presentz%spam=eggs; Version=1; Domain=.bar.comz$Domain=".bar.com"zdomain not returnedz$spam=eggs; Version=1; Domain=bar.comz$Domain="bar.com"�rr
r�rTrK�r)rr�r�rXs     r/�test_domain_mirrorzCookieTests.test_domain_mirror�s��!�$�/�/�/���c�N�N��#���a��4�5�5�5��!�S�!�!������1�A�	C�	C�	C�
�c�N�N��#���a��E�F�F�F��!�S�!�!���
�
�*�A�/D�E�E�E��c�N�N��#���a��D�E�E�E��!�S�!�!���
�
�)�1�.C�D�D�D�D�Dr1c�J�td���}t|��}d}t||d��t||��}|�d|d��t|��}d}t||d��t||��}|�d|d	��dS)
NTr[rr�r�z&absent path returned with path presentzspam=eggs; Version=1; Path=/z	$Path="/"zpath not returnedr�r�s     r/�test_path_mirrorzCookieTests.test_path_mirror�s���!�$�/�/�/���c�N�N��#���a��4�5�5�5��!�S�!�!�������$L�M�M�M��c�N�N��#���a��<�=�=�=��!�S�!�!���
�
�k�1�&9�:�:�:�:�:r1c�n�td���}t|��}d}t||d��t||��}|�d|d��t|��}d}t||d��t||��}|�|dd	��t|��}d}t||d
��t||��}|�d|d��t|��}d}t||d
��t||��}|�d|d��dS)NTr[rr��Portz&absent port returned with port presentzspam=eggs; Version=1; Portz\$Port([^=]|$)z-port with no value not returned with no valuezspam=eggs; Version=1; Port="80"z
$Port="80"z5port with single value not returned with single valuez$spam=eggs; Version=1; Port="80,8080"z$Port="80,8080"z;port with multiple values not returned with multiple values)rr
r�rTr'rKr�s     r/�test_port_mirrorzCookieTests.test_port_mirrorsd��!�$�/�/�/���c�N�N��#���a��4�5�5�5��!�S�!�!�������$L�M�M�M��c�N�N��#���a��:�;�;�;��!�S�!�!������-�H�	J�	J�	J�
�c�N�N��#���a��?�@�@�@��!�S�!�!���
�
�l�A�M�	O�	O�	O�
�c�N�N��#���a��D�E�E�E��!�S�!�!���
�
�'���	 �	 �	 �	 �	 r1c��ttd�����}d}t||d��t||��}|�d|d��dS)NTr[rzfspam=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"�Commentz:Comment or CommentURL cookie-attributes returned to server)r
rr�rT)r)r�r�rXs    r/�test_no_return_commentz"CookieTests.test_no_return_comment-s~���)�$�7�7�7�8�8��#���a��E�	F�	F�	F�
�!�S�!�!������A�H�	J�	J�	J�	J�	Jr1c��ttd�����}t|dd��t|dd��t|dd��t|dd��t|d	d
��gd�}gd�}gd
�}gd�}t	d��D]�}d}|D]�}|�|t��|�|j||��|�|j	||��|�|j
||��|�|j||��|dz}����dS)NTr[zhttp://blah.spam.org/zefoo=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"zhttp://www.acme.com/blah/zspam=bar; securezfoo=bar; secure; Version=1zfoo=bar; path=/; Version=1�http://www.sol.no�sbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) ")r<rr<r<r<)rqr�rqrq�bang)z
blah.spam.orgr�r�r�z.sol.no)r�r^r\r�r�r�rr<)r
rr�r��range�assertIsInstancerr&rur)r rx)r)�cs�versions�names�domains�paths�ir�s        r/�test_Cookie_iteratorz CookieTests.test_Cookie_iterator7s���
�*�4�8�8�8�
9�
9���b�1�4E�	F�	F�	F�	�"�9�;M�N�N�N��b�5�2�	4�	4�	4��b�5�2�	4�	4�	4��b�-�K�	L�	L�	L�
#�?�?��5�5�5��.�.�.��2�2�2���q���	�	�A��A��
�
���%�%�a��0�0�0�� � ���H�Q�K�8�8�8�� � ����q��2�2�2�� � ���7�1�:�6�6�6�� � ����q��2�2�2���E���

�	�	r1c���|�tdg��gd�g��|�tdg��gd�g��|�tdg��ddgg��|�tdg��gd�g��|�td	g��d
dgg��|�tdg��g��dS)
Nzfoo=bar; path=/; domain)rp)rxr�)r Nrtz)foo=bar; expires=Foo Bar 12 33:22:11 2000)rp)rsNrtrqr�rtzfoo=bar; expireszfoo=bar; versionrp)ruNrNrwrWs r/rzz!CookieTests.test_parse_ns_headersWs?������7�8�9�9�A�A�A�
B�	�	�	�	
����I�J�K�K�
B�
B�
B�C�	�	�	�
	
����e�W�%�%��-�
.�/�	�	�	�
	
����0�1�2�2�
B�
B�
B�C�	E�	E�	E�	
����0�1�2�2��/�
0�1�	3�	3�	3�	
���)�2�$�/�/��4�4�4�4�4r1c�X�d�}ttj��dz��}dgdgdgdgdgd|zgfD]0}||��}|�t|��d	���1d
g}||��}|jddd
}|�|j��dS)Nc��t��}tj�d��}t	|d��}|�||��|S)Nr4)r
r�r�r�r�r�)r�r�r�r"s    r/�cookiejar_from_cookie_headerszICookieTests.test_bad_cookie_header.<locals>.cookiejar_from_cookie_headerstsL�����A��.�(�(�)B�C�C�C��W�&?�@�@�A�
���a��%�%�%��Hr1rOzSet-Cookie: z
Set-Cookie2: z-Set-Cookie2: a=foo; path=/; Version=1; domainzSet-Cookie: b=foo; max-age=oopszSet-Cookie: b=foo; version=spamzSet-Cookie:; Expires=%srz3Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000r5r�r�)rr8r&r�r�rQrs)r)r�rVr�r�r.s      r/�test_bad_cookie_headerz"CookieTests.test_bad_cookie_headerrs���	�	�	��t�y�{�{�4�/�0�0����
��
<�=�
.�/�
.�/�
&��
/�0�
�
	(�
	(�G�.�-�g�6�6�A����S��V�V�Q�'�'�'�'�I�I��)�)�'�2�2����-�.�s�3�C�8�����&�.�)�)�)�)�)r1N)+rirjrkr#r0r;rIrMrYr`rdrmrpryr~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rzr�rlr1r/rr�s�������^&�&�&�B)�)�)�@<�<�<�>.(�.(�.(�`	*�	*�	*�55�55�55�r&C�&C�&C�P<�<�<�7�7�7�21�1�1� N�N�N�0?�?�?�<�<�<� )�)�)�>�>�>�"?�"?�"?�H$�$�$�)�)�)�.$�.$�.$�`$�$�$�L�L�L�Q�Q�Q�$�$�$�$�$�$�$�$�$�*$�*$�*$�X3�3�3�>A3�A3�A3�F;�;�;�.3�3�3�83�3�3�6:�:�:�2�2�2�E�E�E�.
;�
;�
;� � � �>J�J�J����@5�5�5�6*�*�*�*�*r1rc�V�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
S)�LWPCookieTestsc�p�tj��ddz}g}ttd�����}tj�dddi���}|�d	|z��t|d
��}|�	||��tj�d
��}|�
|��|�|�d��d��|�|�d
��d��|�d��t|d
��}|�	||��tj�d��}|�
|��|�d��}|�
d|��|�
d|��|�d��t|d��}|�	||��tj�d
��}|�
|��|�d��}|�
d|��|�
d|��|�d|��tj�d��}|�
|��|�d��}|�
d|��|�
d|��|�|�d����dS)Nrr<Tr[r=r{r�r|zVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTr�rzCUSTOMER=WILE_E_COYOTEr��$Version="1"�4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/zhttp://www.acme.com/foo/bar� PART_NUMBER=ROCKET_LAUNCHER_0001z%Set-Cookie: SHIPPING=FEDEX; path=/foor�zSHIPPING=FEDEXr(zSHIPPING=FEDEX;)r8�	localtimer
rr�r�r�r�r�r�r�r&r�rKrTr�
startswith)r)�
year_plus_oner�r�r�r�rXs       r/�test_netscape_example_1z&LWPCookieTests.test_netscape_example_1�s��J��(�(��+�a�/�
����)�D�9�9�9�:�:���n�$�$�%>�%�'8�9�%�;�;��	���
8�:G�
H�	I�	I�	I��7�$:�;�;��	���#�s�#�#�#��n�$�$�%;�<�<��	���C� � � ��������1�1�3K�L�L�L�������	�2�2�N�C�C�C����M�N�N�N��7�$:�;�;��	���#�s�#�#�#��n�$�$�%B�C�C��	���C� � � ��N�N�8�$�$���
�
�8�!�<�<�<��
�
�.��2�2�2����>�?�?�?��7�$9�:�:��	���#�s�#�#�#��n�$�$�%;�<�<��	���C� � � ��N�N�8�$�$���
�
�8�!�<�<�<��
�
�.��2�2�2����)�1�-�-�-��n�$�$�%?�@�@��	���C� � � ��N�N�8�$�$���
�
�8�!�<�<�<��
�
�.��2�2�2�������%6�7�7�8�8�8�8�8r1c���t��}g}tj�d��}|�d��t|d��}|�||��tj�d��}|�|��|�|�	d��d��|�d��t|d��}|�||��tj�d��}|�|��|�
|�	d��d��dS)Nr�r�rr�z6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammozhttp://www.acme.com/ammozBPART_NUMBER=RIDING_ROCKET_0023;\s*PART_NUMBER=ROCKET_LAUNCHER_0001)r
r�r�r�r�r�r�r�r&r�r'�r)r�r�r�r�s     r/�test_netscape_example_2z&LWPCookieTests.test_netscape_example_2�sW��0
�K�K�����n�$�$�%;�<�<�����M�N�N�N��7�$:�;�;��	���#�s�#�#�#��n�$�$�%;�<�<��	���C� � � ��������1�1�;�	=�	=�	=�	���D�	F�	F�	F��7�$:�;�;��	���#�s�#�#�#��n�$�$�%?�@�@��	���C� � � ��������1�1�=�	>�	>�	>�	>�	>r1c��ttd�����}t|dd��}|�|��t|dd��}|�|d��t|dd	��}|�|d
��|�|d��|�|d��t|d
��}|�|d��|�d|��dS)NTr[zhttp://www.acme.com/acme/loginz3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"z!http://www.acme.com/acme/pickitem�=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"z=^\$Version="?1"?; Customer="?WILE_E_COYOTE"?; \$Path="/acme"$z!http://www.acme.com/acme/shippingz+Shipping="FedEx"; Version="1"; Path="/acme"z^\$Version="?1"?;z7Part_Number="?Rocket_Launcher_0001"?;\s*\$Path="\/acme"z-Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"z http://www.acme.com/acme/processz%Shipping="?FedEx"?;\s*\$Path="\/acme"�
WILE_E_COYOTE)r
rr�rr'rK�r)r�r.s   r/�test_ietf_example_1z"LWPCookieTests.test_ietf_example_1%sA��
�)�$�7�7�7�8�8��,�
�/�A�C�C��	
���� � � �&�q�"E� ;�<�<��	
����L�	N�	N�	N�*�q�"E�L�N�N��	
����!5�6�6�6�����"7�	8�	8�	8�����"7�	8�	8�	8�*�q�"D�E�E������!I�J�J�J��
�
�o�v�.�.�.�.�.r1c�(�ttd�����}t|ddd��t|d��}|�|d��t|d��}|�d	|��|�d
|��dS)NTr[z&http://www.acme.com/acme/ammo/specificrz@Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo"z!http://www.acme.com/acme/ammo/...z(Riding_Rocket_0023.*Rocket_Launcher_0001zhttp://www.acme.com/acme/parts/�Rocket_Launcher_0001�Riding_Rocket_0023)r
rr�r'rKrTr
s   r/�test_ietf_example_2z"LWPCookieTests.test_ietf_example_2�s���
�)�$�7�7�7�8�8��	�
�7�K�N�	P�	P�	P�"�q�"E�F�F������!L�M�M�M��q�"C�D�D���
�
�,�f�5�5�5����-�v�6�6�6�6�6r1c��td���}t|���}d}t|dd��}|�|��t|dd��}|�t|��d��t|d	d
��}|�t|��d��t|d	d��}|�t|��d��t|d
d��}|�t|��d��t|dd��}|�t|��d��t|dd��}|�t|��d��t|dd��}|�t|��d��t|dd��}|�t|��d��t|dd��}|�t|��d��t|dd��}|�t|��d��tj}	|�|d���t|��}t|���}|�
|d���t
j|��n#t
j|��wxYw|�|t|����dS)NTr[r�zmax-age=3600r�z!foo=bar; domain=".com"; version=1z'ping=pong; domain="acme.com"; version=1r<zhttp://www.a.acme.comz'whiz=bang; domain="acme.com"; version=1z,wow=flutter; domain=".a.acme.com"; version=1r"zhttp://125.125.125.125z*zzzz=ping; domain="125.125.125"; version=1r�z6blah=rhubarb; domain=".sol.no"; path="/foo"; version=1zhttp://www.sol.no/foo/barz3bing=bong; domain=".sol.no"; path="/foo"; version=1r#z5whiz=ffft; domain=".sol.no"; port="90,100"; version=1r�r�z9foo9=bar; version=1; domain=".sol.no"; port; max-age=100;�zhttp://www.sol.no/<oo/z"foo8=bar; version=1; path="/%3coo"r7r�)rrr�rr&r�rr�r�r*r�r�)r)rr��max_ager.r��olds       r/�test_rejectionzLWPCookieTests.test_rejection�s-��!�$�/�/�/����$�$�$�� ���q�"7�B�D�D����������q�"7�H�J�J������Q����#�#�#��q�"9�H�J�J������Q����#�#�#��q�"9�M�O�O������Q����#�#�#��q�":�K�M�M������Q����#�#�#��q�"5� +�,�,��	
����Q����#�#�#��q�"=� +�,�,��	
����Q����#�#�#��q�"5� +�,�,��	
����Q����#�#�#��
�"�
A�B�B��
	
����Q����#�#�#��q�"5� .�/�/��	
����Q����#�#�#��q�":�D�F�F������Q����#�#�#��#��	'�
�F�F�8�D�F�1�1�1��q�'�'�C��C�(�(�(�A�
�F�F�8�D�F�1�1�1���X�&�&�&�&��I��X�&�&�&�&��������d�1�g�g�&�&�&�&�&s
�A
K�Kc��ttd�����}t|dd��t|dd��}tjdtj��}|�d|��|�||��t|d	��}|�|��t|d
��}dS)NTr[z7http://www.acme.com/foo%2f%25/%3c%3c%0Anew%C3%A5/%C3%A5zfoo  =   bar; version    =   1u/http://www.acme.com/foo%2f%25/<<%0anewå/æøåz bar=baz; path="/foo/"; version=1z^\$version=\"?1\"?r�u-http://www.acme.com/foo/%25/<<%0anewå/æøåuhttp://www.acme.com/ü)	r
rr�r,�compile�IrKr'r)r)r�r.�
version_res    r/�test_url_encodingz LWPCookieTests.test_url_encoding$s���
�)�$�7�7�7�8�8���a�5�6�	8�	8�	8��
�H�.�0�0���Z� 5�r�t�<�<�
��
�
�i��(�(�(������,�,�,��
�F�H�H������ � � ��q�"<�=�=���r1c�d��tj��ddz}tj�t	�td������}t
|dd��t
|dd��t
|dd	��d
|fz}t|dd|z��t|dd
|z��t|dd|z��|D]#}|jdkr|�	dd���$�fd�}||d��}|�
t|��d��|�dt|����|�dt|����||d��}|�
t|��d��|�dt|����dS)Nrr<Tr[r�r�z foo1=bar; max-age=100; Version=1z4foo2=bar; port="80"; max-age=100; Discard; Version=1zfoo3=bar; secure; Version=1zexpires=09-Nov-%d 23:12:40 GMTzhttp://www.foo.com/zfooa=bar; %szfoob=bar; Domain=.foo.com; %sz fooc=bar; Domain=www.foo.com; %sr��HTTPOnlyrNc���	|�|���t�td�����}|�|���t	j���n#t	j���wxYw|S)Nr�Tr[)r�rrr�rr�)rbr��new_cr�s   �r/�save_and_restorez5LWPCookieTests.test_mozilla.<locals>.save_and_restoreTs����
+����~��6�6�6�(��)<�T�)J�)J�)J�L�L���
�
�.�
�9�9�9�� ��*�*�*�*��	� ��*�*�*�*�����Ls�A
A"�"A8r7zname='foo1', value='bar'zrest={'HTTPOnly': ''}Fr�)r8rrr�rrr�r�r)�set_nonstandard_attrr&r�rKr*)r)rr�rsr.rrr�s       @r/�test_mozillazLWPCookieTests.test_mozilla:s�����(�(��+�a�/�
��#���X�$7��$E�$E�$E�
G�
G�
G���a�/�8�	:�	:�	:��a�/�L�	N�	N�	N��a�/�1N�O�O�O�2�m�5E�E���!�2�(�7�2�	4�	4�	4��!�2�9�G�C�	E�	E�	E��!�2�<�w�F�	H�	H�	H��	<�	<�F��{�f�$�$��+�+�J��;�;�;��	�	�	�	�	�!� ��D�)�)������U���Q�'�'�'��
�
�0�$�u�+�+�>�>�>��
�
�-�t�E�{�{�;�;�;� � ��E�*�*������U���Q�'�'�'��
�
�0�$�u�+�+�>�>�>�>�>r1c�\�t��}g}tj�d��}|�d��t|d��}|�||��|�d��t|d��}|�||��tj�d��}|�|��|�d|�	d����|�d|�	d����dS)Nzhttp://foo.bar.acme.com/fooz4Set-Cookie: Customer=WILE_E_COYOTE; domain=.acme.comzhttp://www.acme.com/fooz4Set-Cookie: PART_NUMBER=3,4; domain=foo.bar.acme.comzPART_NUMBER=3,4rzCustomer=WILE_E_COYOTE)
r
r�r�r�r�r�r�r�rKr�rs     r/�test_netscape_miscz!LWPCookieTests.test_netscape_miscgs���K�K�����n�$�$�%B�C�C��	���M�N�N�N��7�$=�>�>��	���#�s�#�#�#�
	���M�N�N�N��7�$=�>�>��	���#�s�#�#�#��n�$�$�%B�C�C��	���C� � � ��
�
�'�����)A�)A�B�B�B��
�
�.�s�~�~�h�/G�/G�H�H�H�H�Hr1c�d�ttd�����}t|dd��t|dd��}|�d|��t|dd��t|d��}|�d|��|�t|��d	��dS)
NTr[�http://example/z#foo1=bar; PORT; Discard; Version=1;z$foo2=bar; domain=".local"; Version=1r�zfoo3=bar; Version=1r�r#)r
rr�rKr&r�r
s   r/�test_intranet_domains_2965z)LWPCookieTests.test_intranet_domains_2965~s����)�$�7�7�7�8�8���a�*�;�	=�	=�	=��q�"3�E�G�G���
�
�j�&�)�)�)��a�*�,A�B�B�B��q�"3�4�4���
�
�j�&�)�)�)�����Q����#�#�#�#�#r1c��ttd�����}t|dd��t|dd��}|�t	|��d��|�d|��t|d��}|�d|��|�t	|��d��dS)NFr[r$r�zfoo2=bar; domain=.localr"r�)r
rr�r&r�rKr
s   r/�test_intranet_domains_nsz'LWPCookieTests.test_intranet_domains_ns�s����)�E�:�:�:�;�;���!�.�
�;�;�;�"�1�&7�#<�>�>������Q����#�#�#��
�
�j�&�)�)�)�"�1�&7�8�8���
�
�j�&�)�)�)�����Q����#�#�#�#�#r1c��ttd�����}g}tj�d��}|�d��t
|d��}|�||��tj�d��}|�|��|�	|�
d��d��|�	|�
d��d��tj�d	��}|�|��|�	|�
d��d��|�	|�
d��d��dS)
NTr[zhttp://www.ants.com/z,Set-Cookie: JSESSIONID=ABCDERANDOM123; Path=rzJSESSIONID=ABCDERANDOM123r�r�zhttp://www.ants.com:8080)r
rr�r�r�r�r�r�r�r&r�rs     r/�test_empty_pathzLWPCookieTests.test_empty_path�sc��
�)�D�9�9�9�:�:�����n�$�$�%;�<�<�����E�F�F�F��7�$:�;�;��	���#�s�#�#�#��n�$�$�%;�<�<��	���C� � � ��������1�1�4�	6�	6�	6�������	�2�2�N�C�C�C��n�$�$�%?�@�@��	���C� � � ��������1�1�4�	6�	6�	6�������	�2�2�N�C�C�C�C�Cr1c�$�tj��ddz}tj�d��}g}|�d��|�d|z��|�d|z��|�d��|�d��t
|d��}t��}|�||��ddddd	�}|D]}d
|j	z}||dz||<�|�
��|D]}d|j	z}||dz||<�|�|d|d
��|�|dd��|�|dd��dS)Nrr<z"http://www.perlmeister.com/scriptsz$Set-Cookie: s1=session;Path=/scriptszWSet-Cookie: p1=perm; Domain=.perlmeister.com;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTz>Set-Cookie: p2=perm;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTz<Set-Cookie: s2=session;Path=/scripts;Domain=.perlmeister.comz2Set-Cookie2: s3=session;Version=1;Discard;Path="/")�
session_after�
perm_after�session_before�perm_beforez	%s_beforez%s_afterr,r.r+r-)
r8rr�r�r�r�r�r
r�r�rUr&�assertNotEqual)	r)rr�r�r�r��counterr.�keys	         r/�test_session_cookiesz#LWPCookieTests.test_session_cookies�s�����(�(��+�a�/�
�
�n�$�$�%I�J�J�������=�>�>�>����D�$�%�	&�	&�	&�	���0�2?�@�	A�	A�	A����1�	2�	2�	2����K�L�L�L��7�$H�I�I���K�K��	���#�s�#�#�#�$%�!"�%&�"#�%�%���	,�	,�F����,�C�"�3�<�!�+�G�C�L�L�	���!�!�!��	,�	,�F��v�|�+�C�"�3�<�!�+�G�C�L�L�	
�����.��
�0F�G�G�G������1�1�5�5�5����G�$4�5�q�9�9�9�9�9r1N)rirjrkrrrrrrr r"r%r'r)r2rlr1r/r�r��s�������Y9�Y9�Y9�v1>�1>�1>�fg/�g/�g/�`37�37�37�jX'�X'�X'�t>�>�>�,+?�+?�+?�ZI�I�I�.$�$�$�
$�
$�
$�D�D�D�>(:�(:�(:�(:�(:r1r��__main__)4�__doc__r�r��sysr,�test.supportrSrrr8r
�urllib.requestr�r��http.cookiejarrrrrr	r
rrr
rrrrrrrrrrrrrr�platformr�TestCaserrnr�r�r�r�r�rr�ri�mainrlr1r/�<module>r<s%��"�"�	�	�	�	�����
�
�
�
�	�	�	�	�����"�"�"�"�"�"�(�(�(�(�(�(�����������������!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!��\�W�
$�	�oB�oB�oB�oB�oB�H�%�oB�oB�oB�dd!�d!�d!�d!�d!�(�#�d!�d!�d!�N)�)�)�)�)�)�)�)�E�E�E�D�D�D�
�
�
�t'�t'�t'�t'�t'��*�t'�t'�t'�lM*�M*�M*�M*�M*�(�#�M*�M*�M*�`K	:�K	:�K	:�K	:�K	:�X�&�K	:�K	:�K	:�\�z����H�M�O�O�O�O�O��r1