HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/test/test_email/__pycache__/test_headerregistry.cpython-311.opt-2.pyc
�

��Vc���|�ddlZddlZddlZddlmZddlmZddlmZddlm	Z	m
Z
ddlmZddlm
Z
mZddlmZe��ZGd	�d
e	��ZGd�de	��ZGd
�de��Ze
Gd�de����Ze
Gd�de����Ze
Gd�de����Ze
Gd�de����Ze
Gd�de����Ze
Gd�de����Ze
Gd�de����ZGd�de	��ZGd�d e��Zed!krej ��dSdS)"�N)�errors��policy)�Message)�
TestEmailBase�parameterize)�headerregistry)�Address�Group)�	ALWAYS_EQc�l�eZdZd�Zd�ZGd�d��Zd�ZGd�d��Zd�Zd	�Z	d
�Z
d�ZdS)
�TestHeaderRegistryc���tj��}|dd��}|�|tj��|�|tj��dS�N�foobar�test�r	�HeaderRegistry�assertIsInstance�
BaseHeader�UnstructuredHeader��self�factory�hs   �7D:\Python311\Lib\test\test_email\test_headerregistry.py� test_arbitrary_name_unstructuredz3TestHeaderRegistry.test_arbitrary_name_unstructuredsY�� �/�1�1���G�H�f�%�%�����a��!:�;�;�;����a��!B�C�C�C�C�C�c��tj��}|�d|j��|dd��}|�|tj��|�|tj��dS)N�Subjectr)r	r�assertNotIn�registryrr�UniqueUnstructuredHeaderrs   r�test_name_case_ignoredz)TestHeaderRegistry.test_name_case_ignoredsr�� �/�1�1������G�$4�5�5�5��G�I�v�&�&�����a��!:�;�;�;����a��!H�I�I�I�I�Irc��eZdZd�ZdS)�TestHeaderRegistry.FooBasec��dS�N�)r�args�kws   r�__init__z#TestHeaderRegistry.FooBase.__init__!s���DrN)�__name__�
__module__�__qualname__r,r)rr�FooBaser& s#������	�	�	�	�	rr0c���tj|j���}|dd��}|�||j��|�|tj��dS)N)�
base_classrr)r	rr0rrrs   r� test_override_default_base_classz3TestHeaderRegistry.test_override_default_base_class$s_�� �/�4�<�H�H�H���G�H�f�%�%�����a���.�.�.����a��!B�C�C�C�C�Crc�&�eZdZejjZdS)�TestHeaderRegistry.FooDefaultN)r-r.r/r	r�parser)rr�
FooDefaultr5*s�������1�7���rr7c���tj|j���}|dd��}|�|tj��|�||j��dS)N��
default_classrr)r	rr7rrrs   r�test_override_default_classz.TestHeaderRegistry.test_override_default_class-s_�� �/�d�o�N�N�N���G�H�f�%�%�����a��!:�;�;�;����a���1�1�1�1�1rc���tj|j���}|dd��}|�|tj��|�|tj��dS)Nr9�subjectr)r	rr7rrr#rs   r�2test_override_default_class_only_overrides_defaultzETestHeaderRegistry.test_override_default_class_only_overrides_default3s`�� �/�d�o�N�N�N���G�I�v�&�&�����a��!:�;�;�;����a��!H�I�I�I�I�Irc���tjd���}|dd��}|�|tj��|�|tj��dS)NF)�use_default_mapr=rrrs   r�test_dont_use_default_mapz,TestHeaderRegistry.test_dont_use_default_map9s^�� �/��F�F�F���G�I�v�&�&�����a��!:�;�;�;����a��!B�C�C�C�C�Crc��tj��}|dd��}|�dtj��|dd��}|�|tj��|�|tj��|�|tj��|�|tj��dSr)r	r�map_to_typer#rrr)rr�h1�h2s    r�test_map_to_typez#TestHeaderRegistry.test_map_to_type?s��� �/�1�1��
�W�X�v�
&�
&�����H�n�&M�N�N�N�
�W�X�v�
&�
&�����b�.�";�<�<�<����b�.�"C�D�D�D����b�.�";�<�<�<����b�.�"I�J�J�J�J�JrN)r-r.r/rr$r0r3r7r;r>rArFr)rrrrs�������D�D�D�J�J�J���������D�D�D�8�8�8�8�8�8�8�8�2�2�2�J�J�J�D�D�D�K�K�K�K�Krrc�2�eZdZej��Zd�ZdS)�TestHeaderBasec�.�|�||��Sr()r)r�name�values   r�make_headerzTestHeaderBase.make_headerNs���|�|�D�%�(�(�(rN)r-r.r/r	rrrLr)rrrHrHJs3������+�n�+�-�-�G�)�)�)�)�)rrHc�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�TestBaseHeaderFeaturesc���|�dd��}|�|t��|�|d��|�t|��d��dS�Nr=�this is a test)rLr�str�assertEqual�rrs  r�test_strzTestBaseHeaderFeatures.test_strTsh�����Y�(8�9�9�����a��%�%�%�����,�-�-�-�����Q���!1�2�2�2�2�2rc�n�|�dd��}|�|dd�d��dS)Nr=rQ���is)rLrSrTs  r�test_substrz"TestBaseHeaderFeatures.test_substrZs<�����Y�(8�9�9������1�Q�3���&�&�&�&�&rc�h�|�dd��}|�|jd��dSrP)rLrSrJrTs  r�
test_has_namez$TestBaseHeaderFeatures.test_has_name^s6�����Y�(8�9�9��������+�+�+�+�+rc��|�dd��}|�t��5t||d��ddd��dS#1swxYwYdS)Nr=rQ�foo)rL�assertRaises�AttributeError�setattr)r�attrrs   r�
_test_attr_roz$TestBaseHeaderFeatures._test_attr_robs������Y�(8�9�9��
�
�
�~�
.�
.�	$�	$��A�t�U�#�#�#�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�A�A�Ac�0�|�d��dS)NrJ�rc�rs r�test_name_read_onlyz*TestBaseHeaderFeatures.test_name_read_onlygs�����6�"�"�"�"�"rc�0�|�d��dS)N�defectsrerfs r�test_defects_read_onlyz-TestBaseHeaderFeatures.test_defects_read_onlyjs�����9�%�%�%�%�%rc�~�|�dd��}|�t|j��d��|�|jt
��|�dd��}|�t|j��d��|�|jt
��dS)Nr=rQr�date��)rLrS�lenrir�tuplerTs  r�test_defects_is_tuplez,TestBaseHeaderFeatures.test_defects_is_tuplems������Y�(8�9�9������Q�Y����+�+�+����a�i��/�/�/����V�R�(�(������Q�Y����+�+�+����a�i��/�/�/�/�/rN)
r-r.r/rUrZr\rcrgrjrqr)rrrNrNRs}������3�3�3�'�'�'�,�,�,�$�$�$�
#�#�#�&�&�&�0�0�0�0�0rrNc�2�eZdZd�Zddgdfddgdfddd	�Zd
S)�TestUnstructuredHeaderc�x�t|��}|dkr|dng}d|rdndz}||dkr|dn|zdz}|�d|��}|�||��|�|j|��|�|�tj���|��dS)	NrzSubject:� rmrn�
r r)rorLrS�assertDefectsEqualri�foldr�default)	r�source�decodedr*�lri�header�foldedrs	         r�string_as_valuez&TestUnstructuredHeader.string_as_value�s���
��I�I���q�S�(�$�q�'�'�b���f�4�s�s�"�5���a��c�5�4��7�7�v�6��=�����Y��/�/������G�$�$�$�����	�7�3�3�3�������v�~��6�6��?�?�?�?�?rz=?utf-8?q?this_is_a_test?=rQz!=?gb2312?b?1eLKx9bQzsSy4srUo6E=?=u这是中文测试!z(=?utf-8?b?6L+Z5piv5Lit5paH5rWL6K+V77yB?=)z=?utf-8?q?=C3=89ric?=�Éric)z$The =?utf-8?q?=C3=89ric=2C?= Himself�The Éric, Himself)�rfc2047_simple_quopri�rfc2047_gb2312_base64�rfc2047_simple_nonascii_quopri� rfc2047_quopri_with_regular_textN)r-r.r/r�
string_paramsr)rrrsrs�s\������@�@�@� 
)����	"�
0�8��6�	"8�+�-"�%��M�M�Mrrsc	��eZdZdZejd���Zeje��Zejdddddd	e�
��Z	d�Z
d�Zd
�Zd�Z
d�Zd�Zd�Zd�Zd�ZdS)�TestDateHeaderzSun, 23 Sep 2001 20:10:55 -0700i����)�hoursi��	���
�7)�tzinfoc�L�|�d|j��}|�||j��|�|j|j��|�|j���|j��|�|jd��dS�Nrlr))rL�
datestringrS�datetime�dt�	utcoffsetrirTs  r�test_parse_datezTestDateHeader.test_parse_date�s������V�T�_�5�5������D�O�,�,�,������T�W�-�-�-������-�-�/�/���@�@�@������B�'�'�'�'�'rc���|�d|j��}|�||j��|�|j|j��|�|jd��dSr�)rLr�rSr�r�rirTs  r�test_set_from_datetimez%TestDateHeader.test_set_from_datetime�si�����V�T�W�-�-������D�O�,�,�,������T�W�-�-�-������B�'�'�'�'�'rc���|�d|j��}|�|tj��|�|jd��|�|jd��dS)Nrlrnr))rLr�rr	�UniqueDateHeaderrS�	max_countrirTs  r�test_date_header_propertiesz*TestDateHeader.test_date_header_properties�sh�����V�T�_�5�5�����a��!@�A�A�A������a�(�(�(������B�'�'�'�'�'rc���|�d|j��}|�|tj��|�|jd��|�|jd��dS)Nzresent-dater))rLr�rr	�
DateHeaderrSr�rirTs  r�"test_resent_date_header_propertiesz1TestDateHeader.test_resent_date_header_properties�sh�����]�D�O�<�<�����a��!:�;�;�;������d�+�+�+������B�'�'�'�'�'rc���|�dd��}|�t|j��d��|�|jdt
j��dS)Nrlrmrnr)rLrSrorirr�HeaderMissingRequiredValuerTs  r�test_no_value_is_defectz&TestDateHeader.test_no_value_is_defect�sZ�����V�R�(�(������Q�Y����+�+�+����a�i��l�F�,M�N�N�N�N�Nrc�<�d}|�d|��}|�||��|�|j��|�t	|j��d��|�|jdtj��dS)NzNot a date headerrlrnr�	rLrS�assertIsNoner�rorirr�InvalidDateDefect�r�srs   r�test_invalid_date_formatz'TestDateHeader.test_invalid_date_format�s��������V�Q�'�'������A�������!�*�%�%�%�����Q�Y����+�+�+����a�i��l�F�,D�E�E�E�E�Erc�<�d}|�d|��}|�||��|�|j��|�t	|j��d��|�|jdtj��dS)NzTue, 06 Jun 2017 27:39:33 +0600rlrnrr�r�s   r�test_invalid_date_valuez&TestDateHeader.test_invalid_date_value�s���-�����V�Q�'�'������A�������!�*�%�%�%�����Q�Y����+�+�+����a�i��l�F�,D�E�E�E�E�Erc��|�d|j��}|�t��5d|_ddd��dS#1swxYwYdS)Nrlr^)rLr�r_r`r�rTs  r�test_datetime_read_onlyz&TestDateHeader.test_datetime_read_only�s������V�T�_�5�5��
�
�
�~�
.�
.�	�	��A�J�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�A�A�Ac���ttj���}|j|d<|�|d|j��|�|dj|j��dS)Nr�Date)rrryr�rSr�r�)r�ms  r�"test_set_date_header_from_datetimez1TestDateHeader.test_set_date_header_from_datetime�s`���6�>�*�*�*���G��&�	�����6��D�O�4�4�4�����6��+�T�W�5�5�5�5�5rN)r-r.r/r�r��	timedeltar��timezone�tzr�r�r�r�r�r�r�r�r�r�r)rrr�r��s�������3�J�"��"��,�,�,�I�	��	�9�	%�	%�B�	��	�4��B��B��2�	>�	>�	>�B�(�(�(�(�(�(�(�(�(�(�(�(�O�O�O�
F�F�F�F�F�F����
6�6�6�6�6rr�c��eZdZd�Zidddddddigd	f�d
ddddddigd	f�dd	dddddif�d
ddddiejgf�dddddiejgf�dddddiejgf�dddddiejgf�dd�dd�dd�dd�dddddddif�d d!ddddd"if�d#d$ddddd%if�d&d'dddddigd(f�d)d*dddd+digd,f�d-d.dddd+d/if�id0d1dddd+d2if�d3d4dddd5d5d6�ejgd7zf�d8d9d:d;d<d=d>igd?f�d@dAdBdCdDdEdFdGdH�gdIdJf�dKdLdBdCdDdEdFdGdMdN�gdLdOf�dPdQdBdCdDdRdSif�dTdUdBdCdDdRdVif�dWdXdBdCdDdRdYigdXf�dZd[�d\���dd]��d^d_d`dadbdc�ejgd7zdddef�dfdgdBdCdDdRdhigdif�djdkdBdCdDd`dligdmf�dndo�d\���dd]��dddddpdq�ejgdrdsf�dtdudddddigd	f�dvdwddddRdxigdyf�dzd{ddddRd|iejgd}zd~f�dd�ddddd�dq�ejgd}zd�d�f�d�d�d�d�d�dRd�iejgd}zd�f��d�d�d�d�dRd�igd�fd�ddddRd�iejgd�fd�ddddRd�iejgd}zd�fd�ddddRd�iejgd}zd�fd�ddddRd�iejgd�d�fd�ddddRd�igd�fd�ddddd�iejgd�d�fd�ddddd�iejgd�d�fd�ddddd�igd�d�fd�d�d�d�dRd�iejgd�fd�d�d�d�dRd�iejgd7zd�fd�d�d�d�dRd�iejgd}zd�fd�d�d�d�dRd�igd�d�fd��
�Z	d�S)��TestContentTypeHeaderc� �t|��}|dkr|dni}|dkr|dng}|dkr|dtur|dn|}	|rdnd}
|dkr|dn|
|	zdz}|�d|��}|�|j|��|�|j|��|�|j|��|�|j|��|�t��5d	|jd
<ddd��n#1swxYwY|�
|j|��|�||	��|�|�tj���|��dS)Nrrn�zContent-Type: rm�rvzContent-Type�xyz�abcr)ro�DITTOrLrS�content_type�maintype�subtype�paramsr_�	TypeErrorrwrirxrry)
rrzr�r�r�r*r|�parmdictrir{r}r~rs
             r�content_type_as_valuez+TestContentTypeHeader.content_type_as_value�s���
��I�I����c�)�4��7�7�r����c�)�4��7�7�r����c�F�d�1�g�U�&:�F�4��7�7���*0�8�&�&�b���a�C�<��a���V�g�%5��%<�����^�V�4�4��������6�6�6������X�.�.�.������G�,�,�,������8�,�,�,�
�
�
�y�
)�
)�	$�	$�#�A�H�U�O�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�����	�7�3�3�3�����G�$�$�$�������v�~��6�6��?�?�?�?�?s�D�D"�%D"�
RFC_2045_1z)text/plain; charset=us-ascii (Plain text)�
text/plain�text�plain�charsetzus-asciiztext/plain; charset="us-ascii"�
RFC_2045_2ztext/plain; charset=us-ascii�
RFC_2045_3�no_subtype_in_content_typeztext/�no_slash_in_content_typer^�junk_text_in_content_typez<crazy "stuff">� too_many_slashes_in_content_typezimage/jpeg/foo�unknown_content_type)�	bad/namesr��bad�names�mixed_case_content_type)z
ImAge/JPeg�
image/jpeg�image�jpeg�spaces_in_content_type)z  text  /  plain  r�r�r��cfws_in_content_type)z"(foo) text (bar)/(baz)plain(stuff)r�r�r��
charset_paramztext/plain; charset="utf-8"zutf-8�capitalized_charsetztext/plain; charset="US-ASCII"zUS-ASCII�unknown_charsetztext/plain; charset="fOo"�fOo�*capitalized_charset_param_name_and_commentz*text/plain; (interjection) Charset="utf-8"ztext/plain; Charset="utf-8"�unquoted_param_valueztext/plain; title=foo�titleztext/plain; title="foo"�param_value_with_tspecialsz!text/plain; title="(bar)foo blue"z
(bar)foo blue�"param_with_extra_quoted_whitespacez0text/plain; title="  a     loong  way 	 home   "z  a     loong  way 	 home   �
bad_paramszblarg; baz; boorm)�baz�boor��spaces_around_param_equalsz0Multipart/mixed; boundary = "CPIMSSMTPC06p5f3tG"zmultipart/mixed�	multipart�mixed�boundary�CPIMSSMTPC06p5f3tGz.Multipart/mixed; boundary="CPIMSSMTPC06p5f3tG"�spaces_around_semiszPimage/jpeg; name="wibble.JPG" ; x-mac-type="4A504547" ; x-mac-creator="474B4F4E"r�r�r�z
wibble.JPG�4A504547�474B4F4E)rJ�
x-mac-type�
x-mac-creatorzNimage/jpeg; name="wibble.JPG"; x-mac-type="4A504547"; x-mac-creator="474B4F4E"z^Content-Type: image/jpeg; name="wibble.JPG"; x-mac-type="4A504547";
 x-mac-creator="474B4F4E"
�lots_of_mime_paramszmimage/jpeg; name="wibble.JPG"; x-mac-type="4A504547"; x-mac-creator="474B4F4E"; x-extrastuff="make it longer"zmake it longer)rJr�r�zx-extrastuffz}Content-Type: image/jpeg; name="wibble.JPG"; x-mac-type="4A504547";
 x-mac-creator="474B4F4E"; x-extrastuff="make it longer"
�semis_inside_quotesz$image/jpeg; name="Jim&amp;&amp;Jill"rJzJim&amp;&amp;Jill�single_quotes_inside_quotesz!image/jpeg; name="Jim 'Bob' Jill"zJim 'Bob' Jill�double_quotes_inside_quotesz#image/jpeg; name="Jim \"Bob\" Jill"zJim "Bob" Jill�non_ascii_in_paramsufoo§/bar; b§r=two; baz=thr§ezlatin-1�surrogateescapeu
foo�/barufoo��bar�twouthr�e)ub�rr�u&foo�/bar; b�r="two"; baz="thr�e"uVContent-Type: =?unknown-8bit?q?foo=A7?=/bar; b�r="two";
 baz*=unknown-8bit''thr%A7e
�rfc2231_segmented_normal_valuesz(image/jpeg; name*0="abc"; name*1=".html"zabc.htmlzimage/jpeg; name="abc.html"�quotes_inside_rfc2231_valuez.image/jpeg; bar*0="baz\"foobar"; bar*1="\"baz"zbaz"foobar"bazz"image/jpeg; bar="baz\"foobar\"baz"�non_ascii_rfc2231_valueuGtext/plain; charset=us-ascii; title*=us-ascii'en'This%20is%20not%20f§nuThis is not f�n)r�r�u9text/plain; charset="us-ascii"; title="This is not f�n"z\Content-Type: text/plain; charset="us-ascii";
 title*=unknown-8bit''This%20is%20not%20f%A7n
�rfc2231_encoded_charsetz-text/plain; charset*=ansi-x3.4-1968''us-ascii� rfc2231_encoded_no_double_quotesz\text/plain;	name*0*=''This%20is%20;	name*1*=%2A%2A%2Afun%2A%2A%2A%20;	name*2="is it not.pdf"zThis is ***fun*** is it not.pdfz2text/plain; name="This is ***fun*** is it not.pdf"�"rfc2231_encoded_with_double_quoteszvtext/plain;	name*0*="us-ascii''This%20is%20even%20more%20";	name*1*="%2A%2A%2Afun%2A%2A%2A%20";	name*2="is it not.pdf"z)This is even more ***fun*** is it not.pdfr�z<text/plain; name="This is even more ***fun*** is it not.pdf"�)rfc2231_single_quote_inside_double_quotesz�text/plain; charset=us-ascii;	title*0*="us-ascii'en'This%20is%20really%20";	title*1*="%2A%2A%2Afun%2A%2A%2A%20";	title*2="isn't it!"z"This is really ***fun*** isn't it!zJtext/plain; charset="us-ascii"; title="This is really ***fun*** isn't it!"zZContent-Type: text/plain; charset="us-ascii";
 title="This is really ***fun*** isn't it!"
�3rfc2231_single_quote_in_value_with_charset_and_langzHapplication/x-foo;	name*0*="us-ascii'en-us'Frank's"; name*1*=" Document"zapplication/x-foo�applicationzx-foozFrank's Documentz*application/x-foo; name="Frank's Document"zFapplication/x-foo;	name*0="us-ascii'en-us'Frank's"; name*1=" Document"zus-ascii'en-us'Frank's Documentz9application/x-foo; name="us-ascii'en-us'Frank's Document"z/text/plain; NAME*0*=english_is_the_default.htmlzenglish_is_the_default.htmlz.text/plain; NAME="english_is_the_default.html"zjtext/plain;	name*0*="''This%20is%20even%20more%20";	name*1*="%2A%2A%2Afun%2A%2A%2A%20";	name*2="is it.pdf"z%This is even more ***fun*** is it.pdfz8text/plain; name="This is even more ***fun*** is it.pdf"zitext/plain;	name*0*="''This%20is%20even%20more%20";	name*1="%2A%2A%2Afun%2A%2A%2A%20";	name*2="is it.pdf"z3This is even more %2A%2A%2Afun%2A%2A%2A%20is it.pdfzFtext/plain; name="This is even more %2A%2A%2Afun%2A%2A%2A%20is it.pdf"zVContent-Type: text/plain;
 name="This is even more %2A%2A%2Afun%2A%2A%2A%20is it.pdf"
z1text/plain; name*0*=bogus'xx'ascii_is_the_default�ascii_is_the_defaultz'text/plain; name="ascii_is_the_default"z*text/plain; charset*=ascii''utf-8%F1%F2%F3uutf-8���u$text/plain; charset="utf-8���"z@Content-Type: text/plain; charset*=unknown-8bit''utf-8%F1%F2%F3
z*text/plain; charset*=ascii''utf-8%E2%80%9Duutf-8”utext/plain; charset="utf-8”"z@Content-Type: text/plain; charset*=unknown-8bit''utf-8%E2%80%9D
u-text/plain; charset*=utf-8”''utf-8%E2%80%9Dz9Content-Type: text/plain; charset*=utf-8''utf-8%E2%80%9D
zUapplication/x-foo;	name*0*="us-ascii'en-us'My";	name*1=" Document";	name*2=" For You"zMy Document For Youz-application/x-foo; name="My Document For You"zTapplication/x-foo;	name*0=us-ascii'en-us'My;	name*1*=" Document";	name*2*=" For You"zVapplication/x-foo;	name*0="us-ascii'en-us'My";	name*1*=" Document";	name*2*=" For You"z"us-ascii'en-us'My Document For Youz<application/x-foo; name="us-ascii'en-us'My Document For You"zrapplication/x-foo;	name="with spaceswith spaceswith spaceswith spaceswith spaceswith spaceswith spaceswith spaces"zXwith spaceswith spaceswith spaceswith spaceswith spaceswith spaceswith spaceswith spaceszrapplication/x-foo; name="with spaceswith spaceswith spaceswith spaceswith spaceswith spaceswith spaceswith spaces"z�Content-Type: application/x-foo;
 name*0*=us-ascii''with%20spaceswith%20spaceswith%20spaceswith%20spaceswith;
 name*1*=%20spaceswith%20spaceswith%20spaceswith%20spaces
)
�)rfc2231_single_quote_in_non_encoded_value�rfc2231_no_language_or_charset�rfc2231_encoded_no_charset�rfc2231_partly_encoded�rfc2231_partly_encoded_2�(rfc2231_unknown_charset_treated_as_ascii�0rfc2231_bad_character_in_charset_parameter_value�8rfc2231_utf8_in_supposedly_ascii_charset_parameter_value�6rfc2231_nonascii_in_charset_of_charset_parameter_value�'rfc2231_encoded_then_unencoded_segments�'rfc2231_unencoded_then_encoded_segments�.rfc2231_quoted_unencoded_then_encoded_segments�+rfc2231_folded_segments_correctly_formattedN)
r-r.r/r�r�InvalidHeaderDefect�encode�decode�UndecodableBytesDefect�content_type_paramsr)rrr�r��s�������@�@�@�.[�	�7����
�
�#��,�.�	[�	�*����
�
�#��,�.�[�,	�,����
�
�#�%�-[�@	%������
�
'�(�
'*�A[�P	#������
�
'�(�
%*�Q[�`	$������
�
'�(�
&*�a[�p	+������
�
'�(�
-*�q[�L	�!�M[�\	"�$�][�h	!�#�i[�t	�!�u[�H	�)����
�� �"�I[�V	�,����
�
�#� %�W[�d	�'����
��� �e[�r	5�8����
�� ��)�7+�s[�R	�#����
�e���%�!�S[�f	%�/����
�o�&�'(�g[�[�t	-�?����
�5�6�/8�u[�B	������r�"�"�
�
'�(��*�
,�C[�R	%�>����
�-�.��<�'�S[�f	�+����!�%�(�
*�
*�
�+�+� �g[�H	�J����!�%�(�-�
/�
/�
�J�J� �I[�p	�2����
�(�)� +�q[�~	&�1����
�%�&�((�[�L	&�2����
�%�&��2�(4�M[�^	��%�v�i�0�0���
�8I�2K�2K�����|�4�4�
�
*�+�A�-�4�
,�! �_[�J	*�6����
�Z� ��)�,+�K[�\	&�=����
�$�%��1�(3�][�n	"��#�V�I�.�.�v�v�j�5F�0H�0H����"�-C�D�D��+�
,�
H�
>�
$�o[�L		"�=����
�
�#��,�$.�M	[�`		+�+�
���
�6�7��@�-�a	[�|		-�+�
���
�@�A�
�
'�(��*�J�/�}	[�V
	4�(�
���"�-Q�R�R�
�
'�(��*�=�A�6�W
[�v
	>�N����
�'�(�
�
'�(��*�9�	@�w
[�[�NL����
�6�7��J�	6�
>����
�2�3�
�
'�(�<�+>�'�
���
�<�=�
�
'�(��*�F�'�'�
���
�<�=�
�
'�(��*�F�#�'�
���
�J�K�
�
'�(�K��%�$
@����
�+�,��5�57�
9����
�1�2�
�
*�+�;�
7�
=�
9����
�
�#�
�
*�+�,�
7�E�
<����
�
�#��,�
0�
C�&�
 ���
�*�+�
�
'�(�;�4�"'�
 ���
�*�+�
�
'�(��*�;�4�0'�
 ���
�9�:�
�
'�(��*�L�;�$3����
�_�%��?�
J�
8�Y[�[�[���rr�c�H�eZdZd�Zdddejgddfddejgfd�ZdS)	�TestContentTransferEncodingc���t|��}|dkr|dng}|dkr|dtur|dn|}|rdnd}|dkr|dn||zdz}|�d|��}	|�|	j|��|�|	j|��|�|	|��|�|	�tj	���|��dS)	NrrnzContent-Transfer-Encoding: rmr�rvzContent-Transfer-Encodingr)
ror�rLrS�cterwrirxrry)
rrzrr*r|rir{r}r~rs
          r�cte_as_valuez(TestContentTransferEncoding.cte_as_value&s��
��I�I����c�)�4��7�7�r����c�F�d�1�g�U�&:�F�4��7�7���7=�E�3�3�2���a�C�;��a���V�f�_�t�%;�����8�&�A�A��������$�$�$�����	�7�3�3�3�����G�$�$�$�������v�~��6�6��?�?�?�?�?r)�base64rrm�7bitzContent-Transfer-Encoding:
z7bit and a bunch more)�
RFC_2183_1�no_value�junk_after_cteN)r-r.r/rrr�r�
cte_paramsr)rrrr#sc������
@�
@�
@�"�

��
�
.�/��*��
$��
�
'�(�*���J�J�Jrrc��eZdZd�Zdddddd�gdd	fd
diejgd
dfd
diejgfddddiejgfddddiejgdzddfddddiejgddfd�ZdS)�TestContentDispositionc�<�t|��}|dkr|dni}|dkr|dng}|dkr|dtur|dn|}|rdnd}|dkr|dn||zdz}	|�d|��}
|�|
j|��|�|
j|��|�|
j|��|�|
|��|�|
�tj
�	��|	��dS)
Nrrnr�zContent-Disposition: rmr�rvzContent-Dispositionr)ror�rLrS�content_dispositionr�rwrirxrry)rrzr!r*r|r�rir{r}r~rs           r�content_disp_as_valuez,TestContentDisposition.content_disp_as_valueNs0��
��I�I����c�)�4��7�7�r����c�)�4��7�7�r����c�F�d�1�g�U�&:�F�4��7�7���17�?�-�-�R���a�C�;��a���V�f�_�t�%;�����2�F�;�;������.�0C�D�D�D������8�,�,�,�����	�7�3�3�3�����G�$�$�$�������v�~��6�6��?�?�?�?�?r)�inliner#zWattachment; filename=genome.jpeg;  modification-date="Wed, 12 Feb 1997 16:29:51 -0500";�
attachmentzgenome.jpegzWed, 12 Feb 1997 16:29:51 -0500)�filenamezmodification-datezWattachment; filename="genome.jpeg"; modification-date="Wed, 12 Feb 1997 16:29:51 -0500"znContent-Disposition: attachment; filename="genome.jpeg";
 modification-date="Wed, 12 Feb 1997 16:29:51 -0500"
rmNzContent-Disposition:
zab./kzab.zab./k; filename="foo"r%r^zaattachment; filename="=?UTF-8?Q?Schulbesuchsbest=C3=A4ttigung=2E?=               =?UTF-8?Q?pdf?="uSchulbesuchsbestättigung.pdfr�u4attachment; filename="Schulbesuchsbestättigung.pdf"zUContent-Disposition: attachment;
 filename*=utf-8''Schulbesuchsbest%C3%A4ttigung.pdf
z<attachment; filename="File =?utf-8?q?Name?= With Spaces.pdf"zFile Name With Spaces.pdfz0attachment; filename="File Name With Spaces.pdf"zFContent-Disposition: attachment; filename="File Name With Spaces.pdf"
)r�
RFC_2183_2r�
invalid_value�invalid_value_with_params�+invalid_parameter_value_with_fws_between_ew�'parameter_value_with_fws_between_tokens)r-r.r/r"rr�r�content_disp_paramsr)rrrrKs
������@�@�@�*�
F��&�"C�
E�
E��G�F��
���
�
.�/��$�
&�
���
�
'�(�	*�
$��
���
�
'�(�	&*�
.��
�8�9�
�
'�(��*�
C�G�	8�
K��
�4�5�
�
'�(�>�
V�
4�i<�<���rrc�@�eZdZd�Zdddddgfdddddgfdddddgfdddddgfdddddgfd	d	d	d
dgfdddddgfdddddgfd
d
dddejgfdddddejgfdddddejgfdddddejgfdddddejgfdddddejgfdddddejgfd�ZdS)�TestMIMEVersionHeaderc��|�d|��}|�||��|�|j|��|�|j|��|�|j|��|�|j|��|rd|z}|�|�tj	���d|zdz��dS)NzMIME-Versionrurz
MIME-Version:rv)
rLrS�version�major�minorrwrirxrry)rrzr{r/r0r1rirs        r�version_string_as_MIME_Versionz4TestMIMEVersionHeader.version_string_as_MIME_Version�s���
���^�V�4�4������G�$�$�$������G�,�,�,������%�(�(�(������%�(�(�(�����	�7�3�3�3��	"��6�\�F�������v�~��6�6�(�6�1�D�8�	:�	:�	:�	:�	:rz1.0rnrz1.0 (produced by MetaSend Vx.x)z(produced by MetaSend Vx.x) 1.0z1.(produced by MetaSend Vx.x)0z1.1z2.1r�z1 .0z  1.0  z	1.0 <abc>z	<abc> 1.0Nz1.<abc>0z1..0z2.xr^rm)r�r�r��
RFC_2045_4�1_1�2_1�
whitespace�#leading_trailing_whitespace_ignored�non_comment_garbage_after�non_comment_garbage_before�non_comment_garbage_inside�two_periods�2_xr^�missing)r-r.r/r2rrr��version_string_paramsr)rrr-r-�s�������:�:�:�.
���
�
��
�
.�-��
�
��
�
.�-��
�
��
�
-�,��
�
��
�
���
�
��
�
���
�
��
�
���
�
��
�
���
�
��
0�
���
�
�
�
'�(�
&*�
�����
�
'�(�
'*�
�����
�
'�(�
'*�
�����
�
'�(�
*�
�����
�
'�(�
*�
�����
�
'�(�
*�
�����
�
.�/�
1�}F
�F
���rr-c���eZdZdejgddddddfdgddddddfdgddddddfd	gd	dd
dddfdgd
dddddfdgddddddfdejgddddddfdejgdzddddddfdgddddddfd ejgd!zd"dd"d#ddfd$ejgd%zd&dd&d'ddfd(ejgd)dd)d*ddfd+gd,d-d.d/ddfd0gd1d2d.d/ddfd3ejejgd,d-d.d/ddfd4�Zd5�Zd6�Zd7�Z	d8�Z
d9�Zd:�Zd;�Z
d<�Zd=�Zd>�Zd?�Zd@�ZdA�ZdS)B�TestAddressHeader�<>rmNzzippy@pinhead.com�zippyzpinhead.comz%Zaphrod Beblebrux <zippy@pinhead.com>zZaphrod Beblebruxz)Zaphrod Beblebrux <"foo bar"@pinhead.com>z"foo bar"@pinhead.com�foo barz'"A \(Special\) Person" <person@dom.ain>z%"A (Special) Person" <person@dom.ain>zA (Special) Personzperson@dom.ain�personzdom.ainz."Arthur \\Backslash\\ Foobar" <person@dom.ain>zArthur \Backslash\ FoobarzJohn X. Doe <jxd@example.com>z"John X. Doe" <jxd@example.com>zJohn X. Doezjxd@example.com�jxd�example.comz""example" example"@example.comr�z"example example"@example.comzexample examplez!"\"example\" example"@example.comz"example" examplez#"\\"example\\" example"@example.comrWz#"\\example\\\\ example"@example.comz\example\\ examplezmerwok  wok  @example.comr�z"merwok wok"@example.comz
merwok wokzmerwok. wok .  wok@example.comzmerwok.wok.wok@example.comzmerwok.wok.wokz'=?utf-8?q?=C3=89ric?= <foo@example.com>uÉric <foo@example.com>r��foo@example.comr^z6The =?utf-8?q?=C3=89ric=2C?= Himself <foo@example.com>u&"The Éric, Himself" <foo@example.com>r�z)"=?utf-8?q?=C3=89ric?=" <foo@example.com>)�empty�address_only�name_and_address�quoted_local_part�quoted_parens_in_name�quoted_backslashes_in_name�
name_with_dot�quoted_strings_in_local_part�$escaped_quoted_strings_in_local_part�escaped_escapes_in_local_part�'spaces_in_unquoted_local_part_collapsed�(spaces_around_dots_in_local_part_removed�rfc2047_atom_is_decoded�!rfc2047_atom_in_phrase_is_decoded�(rfc2047_atom_in_quoted_string_is_decodedc	���|�d|��}	|�|	|��|�|	j|��|	j}
|�t|
��|��|�t
|	j��d��|�|
gt|	jdj	����|�|
gt|	j	����|�|
j
|��|�|
j|��|�|
j|��|�|
j
|��dS)N�senderrnr)rLrSrwri�addressrRro�groups�list�	addresses�display_name�	addr_spec�username�domain)rrzrir{r]r^r_r`�commentr�as           r�example_as_addressz$TestAddressHeader.example_as_address�s7�����X�v�.�.������G�$�$�$�����	�7�3�3�3�
�I������Q����)�)�)�����Q�X����*�*�*����!��d�1�8�A�;�#8�9�9�:�:�:����!��d�1�;�/�/�0�0�0�������6�6�6������i�0�0�0������X�.�.�.������6�*�*�*�*�*rc	��d�|��}|rd�|��nd}	|�d|��}
|�|
|	��|�|
j|��|�|
jdj|
j��|�t|
j��d��|�t|
j��d��|
jd}|�t|��|��|�|j	|��|�|j
|��|�|j|��|�|j|��dS)Nzfoo: {};�foo:;�torrn)
�formatrLrSrwrirZr\rorRr]r^r_r`)rrzrir{r]r^r_r`ra�gdecodedrrbs            r�example_as_groupz"TestAddressHeader.example_as_group�sa���"�"�6�*�*��18�E�:�$�$�W�-�-�-�g�����T�6�*�*������H�%�%�%�����	�7�3�3�3������!��.���<�<�<�����Q�X����*�*�*�����Q�[�)�)�1�-�-�-�
�K��N������Q����)�)�)�������6�6�6������i�0�0�0������X�.�.�.������6�*�*�*�*�*rc���d}|�d|��}|�||��|�t|j��d��|�t|j��d��td��D]9}|�|j|jd|j|���:|�t
|jd��d��|�t
|jd��d��|�t
|jd��d	��|�|jdjd
��dS)NzTFred <dinsdale@python.org>, foo@example.com, "Harry W. Hastings" <hasty@example.com>rfr�rzFred <dinsdale@python.org>rnrGr�z'"Harry W. Hastings" <hasty@example.com>zHarry W. Hastings)rLrSrorZr\�rangerRr])rrKr�is    r�test_simple_address_listz*TestAddressHeader.test_simple_address_lists[��>�����T�5�)�)������E�"�"�"�����Q�X����*�*�*�����Q�[�)�)�1�-�-�-��q���	G�	G�A����Q�X�a�[�2�1�5�q�{�1�~�F�F�F�F�����Q�[��^�,�,�.J�K�K�K�����Q�[��^�,�,�.?�@�@�@�����Q�[��^�,�,�5�	7�	7�	7������Q��4��	!�	!�	!�	!�	!rc�2�t|j�����}dd�d�|dd�D����zdzdzd�d�|dd�D����zdzd�d	�|dd�D����z}d
d�d�|dd�D����zdzdzd�d�|dd�D����zd
zd�d�|dd�D����z}|�d|��}|�|�d��|�d����|�||��|�t|j��dt|��zdz
��|�|jdj	d��|�|jdj	d��|�|jdj	d��|�t|j
��t|����td��D]r}|�|j|dzj	��|�t|j|dzj
d��||d���stddt|��zdz
��D]o}|�|j|j	��|�t|j|j
d��||dz
d���ptt|����D]n}|�t|j
|��||d��|�|j
|j||d���odS)Nz dummy list:;, another: (empty);,z, c��g|]
}|d��S�rr)��.0�xs  r�
<listcomp>z?TestAddressHeader.test_complex_address_list.<locals>.<listcomp>���7�7�7�Q�A�a�D�7�7�7r�z"A \"list\"": c��g|]
}|d��Srpr)rqs  rrtz?TestAddressHeader.test_complex_address_list.<locals>.<listcomp>���;�;�;��q��t�;�;�;r�z;,c��g|]
}|d��Srpr)rqs  rrtz?TestAddressHeader.test_complex_address_list.<locals>.<listcomp>rurzdummy list:;, another:;, c��g|]
}|d��S�r�r)rqs  rrtz?TestAddressHeader.test_complex_address_list.<locals>.<listcomp>rurc��g|]
}|d��Sr|r)rqs  rrtz?TestAddressHeader.test_complex_address_list.<locals>.<listcomp>rxrz;, c��g|]
}|d��Sr|r)rqs  rrtz?TestAddressHeader.test_complex_address_list.<locals>.<listcomp>rurrf�,rXrz
dummy listrn�anotherzA "list"r�)r[�example_params�values�joinrLrS�splitrorZr]r\rkr�rRr^)r�examplesrz�expectedrrls      r�test_complex_address_listz+TestAddressHeader.test_complex_address_lists�����+�2�2�4�4�5�5��4����7�7�(�2�A�2�,�7�7�7�8�8�9�;?�@�"�#��I�I�;�;�X�a��c�]�;�;�;�<�<�=�@D�D����7�7�(�1�2�2�,�7�7�7�8�8�	9��0����7�7�(�2�A�2�,�7�7�7�8�8�9�;?�@�"�#��I�I�;�;�X�a��c�]�;�;�;�<�<�=�@E�E����7�7�(�1�2�2�,�7�7�7�8�8�	9��
���T�6�*�*�����������x�~�~�c�':�':�;�;�;�����H�%�%�%�����Q�X����C��M�M�(9�A�(=�>�>�>������!��1�<�@�@�@������!��1�9�=�=�=������!��1�:�>�>�>�����Q�[�)�)�3�x�=�=�9�9�9��q���	N�	N�A����a�h�q��s�m�8�9�9�9����S���!�A�#��!8��!;�<�<�h�q�k�!�n�M�M�M�M��q�!�c�(�m�m�+�a�/�0�0�	N�	N�A����a�h�q�k�6�7�7�7����S���!��!6�q�!9�:�:�H�Q�q�S�M�!�<L�M�M�M�M��s�8�}�}�%�%�	G�	G�A����S���Q��0�0�(�1�+�a�.�A�A�A����Q�[��^�5�x��{�1�~�F�F�F�F�	G�	Grc��|�dd��}|�t��5d|_ddd��dS#1swxYwYdS�NrXzabc@xyz.comr^)rLr_r`rYrTs  r�test_address_read_onlyz(TestAddressHeader.test_address_read_only3s������X�}�5�5��
�
�
�~�
.�
.�	�	��A�I�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	��A�A
�
A
c��|�dd��}|�t��5d|_ddd��dS#1swxYwYdSr�)rLr_r`r\rTs  r�test_addresses_read_onlyz*TestAddressHeader.test_addresses_read_only8s������X�}�5�5��
�
�
�~�
.�
.�	 �	 ��A�K�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 r�c��|�dd��}|�t��5d|_ddd��dS#1swxYwYdSr�)rLr_r`rZrTs  r�test_groups_read_onlyz'TestAddressHeader.test_groups_read_only=s������X�}�5�5��
�
�
�~�
.�
.�	�	��A�H�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r�c���d}|�d|��}|�|jt��|�|jdt��dS�Nzme <who@example.com>rfr)rLrr\rpr
�rrzrs   r�test_addresses_typesz&TestAddressHeader.test_addresses_typesBsV��'�����T�6�*�*�����a�k�5�1�1�1����a�k�!�n�g�6�6�6�6�6rc���d}|�d|��}|�|jt��|�|jdt��dSr�)rLrrZrprr�s   r�test_groups_typesz#TestAddressHeader.test_groups_typesHsV��'�����T�6�*�*�����a�h��.�.�.����a�h�q�k�5�1�1�1�1�1rc�|�|�dtddd����}|�|d��dS)Nrf�mer^rFzme <foo@example.com>�rLr
rSrTs  r�test_set_from_Addressz'TestAddressHeader.test_set_from_AddressNs@�����T�7�4��
�#F�#F�G�G������2�3�3�3�3�3rc	��|�dtddd��tddd��g��}|�|d��dS)Nrfr�r^rF�your�z+me <foo@example.com>, you <bar@example.com>r�rTs  r�test_set_from_Address_listz,TestAddressHeader.test_set_from_Address_listRs[�����T�G�D�%��$G�$G�$+�E�5�-�$H�$H�$J�
K�
K������I�J�J�J�J�Jrc
��|�dtddd��tdtddd��td	d
d��g��tdd
d��g��}|�|d��|�|�t
j�d������d��dS)Nrfr�r^rF�bing�fiz�z�b.com�zif�f�c.comr�r�zPme <foo@example.com>, bing: fiz <z@b.com>, zif <f@c.com>;, you <bar@example.com>�(��max_line_lengthrzWto: me <foo@example.com>,
 bing: fiz <z@b.com>, zif <f@c.com>;,
 you <bar@example.com>
)rLr
rrSrxrry�clonerTs  r�$test_set_from_Address_and_Group_listz6TestAddressHeader.test_set_from_Address_and_Group_listWs������T�G�D�%��$G�$G�$)�&�7�5�#�w�3O�3O�3:�5�#�w�3O�3O�3Q�%R�%R�$+�E�5�-�$H�$H�$J�
K�
K��	
����D�	E�	E�	E�������v�~�';�';�B�';�'O�'O��P�P�3�	4�	4�	4�	4�	4rc��|�dtdtddd��tddd��g��g��}|�|d	��dS)
Nrfr�r�r�r�r�r�r�z#bing: fiz <z@b.com>, zif <f@c.com>;)rLrr
rSrTs  r�test_set_from_Group_listz*TestAddressHeader.test_set_from_Group_listcsq�����T�E�&�7�5�#�w�3O�3O�3:�5�#�w�3O�3O�3Q�%R�%R�$S�
T�
T������A�B�B�B�B�Br)r-r.r/rr�ObsoleteHeaderDefectr�rcrirmr�r�r�r�r�r�r�r�r�r�r)rrr@r@<s��������(�
)�
�
�
�
�
�
�
�!�
�
 �
�
 �
�
�
�
�5�
�
4�
 �
 �
�
�
�
�9�
�
8�
 �
$�
�
�
�
�8�
�
4�
!�
�
�
�
�
�?�
�
>�
)�
�
�
�
�
�-��)�
*�
.�
�
�
�
�
�
�/��(�
)�!�
+�
,�
�
,�
�
�
�
�2�
�
1�
�
1�
!�
��
�4��(�
)�!�
+�
3�
�
3�
"�
��
�)��(�
)�!�
+�
'�
�
'�
�
�
�
�.��)�
*�
)�
�
)�
�
�
�
�7��%������
�F��4� �����
�9�
�
'��&�
(�%������
�_Y
�Y
�N�~
+�
+�
+�"+�+�+�"!�!�!� !G�!G�!G�F���
 � � �
���
7�7�7�2�2�2�4�4�4�K�K�K�

4�
4�
4�C�C�C�C�Crr@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#S)$�TestAddressAndGroupc��|�t��5t||d��ddd��dS#1swxYwYdS)Nr^)r_r`ra)r�objrbs   rrcz!TestAddressAndGroup._test_attr_roks���
�
�
�~�
.�
.�	&�	&��C��u�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&�
�:�>�>c�P�|�tddd��d��dS)Nr^r�r�r]�rcr
rfs r�test_address_display_name_roz0TestAddressAndGroup.test_address_display_name_roos*�����7�5�%��7�7��H�H�H�H�Hrc�P�|�tddd��d��dS)Nr^r�r�r_r�rfs r�test_address_username_roz,TestAddressAndGroup.test_address_username_rors*�����7�5�%��7�7��D�D�D�D�Drc�P�|�tddd��d��dS)Nr^r�r�r`r�rfs r�test_address_domain_roz*TestAddressAndGroup.test_address_domain_rous*�����7�5�%��7�7��B�B�B�B�Brc�L�|�td��d��dS)Nr^r]�rcrrfs r�test_group_display_name_roz.TestAddressAndGroup.test_group_display_name_roxs$�����5��<�<��8�8�8�8�8rc�L�|�td��d��dS)Nr^r\r�rfs r�test_group_addresses_roz+TestAddressAndGroup.test_group_addresses_ro{s$�����5��<�<��5�5�5�5�5rc�F�tddd��}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)Nr^r�r��bar@baz�
foo <bar@baz>�r
rSr]r_r`r^rR�rrbs  r�!test_address_from_username_domainz5TestAddressAndGroup.test_address_from_username_domain~s����E�5�%�(�(��������/�/�/������U�+�+�+������5�)�)�)������i�0�0�0�����Q����1�1�1�1�1rc�F�tdd���}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)Nr^r��r^r�r�r�r�r�s  r�test_address_from_addr_specz/TestAddressAndGroup.test_address_from_addr_spec�s����E�Y�/�/�/��������/�/�/������U�+�+�+������5�)�)�)������i�0�0�0�����Q����1�1�1�1�1rc�D�td���}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)Nr�r�rmr�r�r�r�s  r�!test_address_with_no_display_namez5TestAddressAndGroup.test_address_with_no_display_name�s����i�(�(�(��������,�,�,������U�+�+�+������5�)�)�)������i�0�0�0�����Q����+�+�+�+�+rc�@�t��}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)NrmrAr�r�s  r�test_null_addressz%TestAddressAndGroup.test_null_address�s����I�I��������,�,�,������R�(�(�(������2�&�&�&������d�+�+�+�����Q����&�&�&�&�&rc�D�td���}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)N�buzz�r`rmz@buzzr�r�s  r�test_domain_onlyz$TestAddressAndGroup.test_domain_only�s����6�"�"�"��������,�,�,������R�(�(�(������6�*�*�*������g�.�.�.�����Q����)�)�)�)�)rc�D�td���}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)Nr��r_rmr�r�s  r�test_username_onlyz&TestAddressAndGroup.test_username_only�s����V�$�$�$��������,�,�,������V�,�,�,������2�&�&�&������f�-�-�-�����Q����(�(�(�(�(rc�B�td��}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)Nr�rmrAzbuzz <>r�r�s  r�test_display_name_onlyz*TestAddressAndGroup.test_display_name_only�s����F�O�O��������0�0�0������R�(�(�(������2�&�&�&������d�+�+�+�����Q����+�+�+�+�+rc�F�tddd��}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)NzSara J.zbad namerFz"bad name"@example.comz""Sara J." <"bad name"@example.com>r�r�s  r�test_quotingz TestAddressAndGroup.test_quoting�s���
�I�z�=�9�9��������3�3�3������Z�0�0�0������=�1�1�1������&>�?�?�?�����Q���!E�F�F�F�F�Frc�F�tddd��}|�|jd��|�|jd��|�|jd��|�|jd��|�t
|��d��dS)Nr��wokuexàmple.comuwok@exàmple.comuÉric <wok@exàmple.com>r�r�s  r�	test_il8nzTestAddressAndGroup.test_il8n�s����G�U�N�3�3��������1�1�1������U�+�+�+������>�2�2�2������&8�9�9�9�����Q���!;�<�<�<�<�<rc�V�td���td���td���td���td���td���td	�
��td�
��td�
��td
���td���td���f}|D]o}|�|���5|�td��5t	di|��ddd��n#1swxYwYddd��n#1swxYwY�pdS)Nzfoo
)r]zfoo
zfoo
zexample.com
r�zexample.com
z
example.com
zwok
r�zwok
zwok
zwok@example.com
r�zwok@example.com
zwok@example.com
)�kwargszinvalid argumentsr))�dict�subTest�assertRaisesRegex�
ValueErrorr
)r�casesr�s   r�$test_crlf_in_constructor_args_raisesz8TestAddressAndGroup.test_crlf_in_constructor_args_raises�s����g�&�&�&��g�&�&�&��i�(�(�(���(�(�(���(�(�(��)�*�*�*��'�"�"�"��'�"�"�"��)�$�$�$��.�/�/�/��.�/�/�/��0�1�1�1�

���	"�	"�F����V��,�,�
"�
"�d�.D�.D�Z�Qd�.e�.e�
"�
"��!�!�&�!�!�!�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"����
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"����
"�
"�
"�
"��	"�	"s6�D�-
D�:D�D
�
D�
D
�D�D!	�$D!	c��|�t��5tdd���ddd��dS#1swxYwYdS)Nr^uwők@example.comr��r_r�r
rfs r�+test_non_ascii_username_in_addr_spec_raisesz?TestAddressAndGroup.test_non_ascii_username_in_addr_spec_raises�s���
�
�
�z�
*�
*�	9�	9��E�%7�8�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	9�	9r�c��|�t��5tddd���ddd��dS#1swxYwYdS)Nr^r�r�)r_r^�r_r�r
rfs r�*test_address_addr_spec_and_username_raisesz>TestAddressAndGroup.test_address_addr_spec_and_username_raises�s���
�
�
�y�
)�
)�	A�	A��E�F�i�@�@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�	A�	A�
�;�?�?c��|�t��5tddd���ddd��dS#1swxYwYdS)Nr^r�r�)r`r^r�rfs r�(test_address_addr_spec_and_domain_raisesz<TestAddressAndGroup.test_address_addr_spec_and_domain_raises�s���
�
�
�y�
)�
)�	?�	?��E�&�I�>�>�>�>�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�	?�	?r�c��|�t��5tdddd���ddd��dS#1swxYwYdS)Nr^�bongr�r�)r_r`r^r�rfs r�5test_address_addr_spec_and_username_and_domain_raiseszITestAddressAndGroup.test_address_addr_spec_and_username_and_domain_raises�s���
�
�
�y�
)�
)�	P�	P��E�F�6�Y�O�O�O�O�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P����	P�	P�	P�	P�	P�	Ps�<�A�Ac��|�t��5tdd���ddd��dS#1swxYwYdS)Nr^zbad name@example.comr�r�rfs r�'test_space_in_addr_spec_username_raisesz;TestAddressAndGroup.test_space_in_addr_spec_username_raises�s���
�
�
�z�
*�
*�	=�	=��E�%;�<�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=r�c��|�t��5tdd���ddd��dS#1swxYwYdS)Nr^zname@ex[]ample.comr�r�rfs r�test_bad_addr_sepc_raisesz-TestAddressAndGroup.test_bad_addr_sepc_raises�s���
�
�
�z�
*�
*�	;�	;��E�%9�:�:�:�:�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;�	;�	;r�c���td��}|�|jd��|�|jt	����|�t|��d��dS)Nr^re�rrSr]r\rprR�r�gs  r�test_empty_groupz$TestAddressAndGroup.test_empty_group�sc���%�L�L��������/�/�/������e�g�g�.�.�.�����Q����)�)�)�)�)rc���tdg���}|�|jd��|�|jt	����|�t|��d��dS)Nr^�r\rer�r�s  r�test_empty_group_listz)TestAddressAndGroup.test_empty_group_listsj���%�2�&�&�&��������/�/�/������e�g�g�.�.�.�����Q����)�)�)�)�)rc���t��}|�|j��|�|jt����|�t
|��d��dS)NzNone:;)rr�r]rSr\rprRr�s  r�test_null_groupz#TestAddressAndGroup.test_null_groups_���G�G�����!�.�)�)�)������e�g�g�.�.�.�����Q����*�*�*�*�*rc�6�tddd��tddd��g}td|��}|�|jd��|�|jt|����|�t
|��d��dS)N�b�crbr^zfoo: b <b@c>, a <b@c>;)r
rrSr]r\rprR�r�addrsr�s   r�test_group_with_addressesz-TestAddressAndGroup.test_group_with_addressess�����c�3�'�'���c�#�)>�)>�?���%�����������/�/�/������e�E�l�l�3�3�3�����Q���!9�:�:�:�:�:rc�4�tddd��tddd��g}t|���}|�|j��|�|jt
|����|�t|��d��dS)Nr�r�rbr�zNone: b <b@c>, a <b@c>;�r
rr�r]rSr\rprRr�s   r�)test_group_with_addresses_no_display_namez=TestAddressAndGroup.test_group_with_addresses_no_display_names�����c�3�'�'���c�#�)>�)>�?���E�"�"�"�����!�.�)�)�)������e�E�l�l�3�3�3�����Q���!:�;�;�;�;�;rc��tddd��g}t|���}|�|j��|�|jt
|����|�t|��d��dS)Nr�r�r�zb <b@c>rr�s   r�+test_group_with_one_address_no_display_namez?TestAddressAndGroup.test_group_with_one_address_no_display_names|����c�3�'�'�(���E�"�"�"�����!�.�)�)�)������e�E�l�l�3�3�3�����Q����+�+�+�+�+rc���td��}|�|jd��|�|jt	����|�t|��d��dS)Nzfoo.barz"foo.bar":;r�r�s  r�test_display_name_quotingz-TestAddressAndGroup.test_display_name_quoting!se���)����������3�3�3������e�g�g�.�.�.�����Q����/�/�/�/�/rc���td��}|�|jd��|�|jt	����|�t|��d��dS)NrC�	foo bar:;r�r�s  r�#test_display_name_blanks_not_quotedz7TestAddressAndGroup.test_display_name_blanks_not_quoted'se���)����������3�3�3������e�g�g�.�.�.�����Q����-�-�-�-�-rc���tddd��}ttj���}||d<|�|dd��|�|dj|f��dS)Nr^r�rFr�Torfzfoo <bar@example.com>)r
rrryrSr\)rrbr�s   r�$test_set_message_header_from_addressz8TestAddressAndGroup.test_set_message_header_from_address-sn���E�5�-�0�0���6�>�*�*�*����$������4��"9�:�:�:�����4��*�Q�D�1�1�1�1�1rc���td��}ttj���}||d<|�|dd��|�|dj|j��dS)NrCrrrfr	)rrrryrSr\)rr�r�s   r�"test_set_message_header_from_groupz6TestAddressAndGroup.test_set_message_header_from_group4si���)�����6�>�*�*�*����$������4��+�.�.�.�����4��*�A�K�8�8�8�8�8rc���tddd��}|�tddd��|��|�tddd��|��|�tddd��|��|�tddd��|��|�|t	��k��|�|tk��dS)Nr^r�rFr�)r
rS�assertNotEqual�assertFalse�object�
assertTruerr�s  r�test_address_comparisonz+TestAddressAndGroup.test_address_comparison;s����E�5�-�0�0��������}�=�=�q�A�A�A����G�E�5�-�@�@�!�D�D�D����G�E�5�-�@�@�!�D�D�D����G�E�5�%�8�8�!�<�<�<�����f�h�h��'�'�'�����Y��'�'�'�'�'rc��tddd��}td|g��}|�td|f��|��|�td|g��|��|�tdg��|��|�|t��k��|�|tk��dS)Nr^r�rFrCr�)r
rrSrrrrr)rrbr�s   r�test_group_comparisonz)TestAddressAndGroup.test_group_comparisonDs����E�5�-�0�0���)�a�S�!�!������y�1�$�/�/��3�3�3����E�%�!��-�-�q�1�1�1����E�)�R�0�0�!�4�4�4�����f�h�h��'�'�'�����Y��'�'�'�'�'rN)%r-r.r/rcr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr
r
rrrr)rrr�r�is$������&�&�&�I�I�I�E�E�E�C�C�C�9�9�9�6�6�6�2�2�2�2�2�2�,�,�,�'�'�'�*�*�*�)�)�)�,�,�,�G�G�G�=�=�=�"�"�"�&9�9�9�A�A�A�?�?�?�P�P�P�=�=�=�;�;�;�*�*�*�*�*�*�+�+�+�;�;�;�<�<�<�,�,�,�0�0�0�.�.�.�2�2�2�9�9�9�(�(�(�(�(�(�(�(rr�c�b�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�ZdS)�TestFoldingc���	dD]a\}}|�dt|d�����}|�|�tj���d|z���bdS)N)	)zFoo Bar, Francez"Foo Bar, France")zFoo Bar (France)z"Foo Bar (France)")uFoo Bar, Españaz"Foo =?utf-8?q?Bar=2C_Espa=C3=B1a?=)uFoo Bar (España)z Foo Bar =?utf-8?b?KEVzcGHDsWEp?=)uFoo, Bar Españaz"=?utf-8?q?Foo=2C_Bar_Espa=C3=B1a?=)uFoo, Bar [España]z(=?utf-8?q?Foo=2C_Bar_=5BEspa=C3=B1a=5D?=)uFoo Bär, Francez"Foo =?utf-8?q?B=C3=A4r=2C?= France)uFoo Bär <France>z%Foo =?utf-8?q?B=C3=A4r_=3CFrance=3E?=)urLôrem ipsum dôlôr sit amet, cônsectetuer adipiscing. Suspendisse pôtenti. Aliquam nibh. Suspendisse pôtenti.z�=?utf-8?q?L=C3=B4rem_ipsum_d=C3=B4l=C3=B4r_sit_amet=2C_c=C3=B4nsectetuer?=
 =?utf-8?q?adipiscing=2E_Suspendisse_p=C3=B4tenti=2E_Aliquam_nibh=2E?=
 Suspendisse =?utf-8?q?p=C3=B4tenti=2E?=rza@b.comr�rzTo: %s <a@b.com>
)rLr
rSrxrry)rrJ�resultrs    r�test_address_display_namesz&TestFolding.test_address_display_namesPs���?��	C�	C�L�D�&�$� � ��w�t�y�'I�'I�'I�J�J�A����Q�V�V�6�>�V�:�:�$8�6�$A�
C�
C�
C�
C�'	C�	Crc��|�dd��}|�|�tj���d��dS)Nr=rQrzsubject: this is a test
�rLrSrxrryrTs  r�test_short_unstructuredz#TestFolding.test_short_unstructuredhsO�����Y�(8�9�9��������v�~��6�6�4�	6�	6�	6�	6�	6rc��|�dd��}|�|�tj���d��dS)Nr zhThis is a long header line that will need to be folded into two lines and will demonstrate basic foldingrzsSubject: This is a long header line that will need to be folded into two lines
 and will demonstrate basic folding
rrTs  r�test_long_unstructuredz"TestFolding.test_long_unstructuredms_�����Y�)1�
2�
2��	
������v�~��6�6�@�	A�	A�	A�	A�	Arc���|�dd��}|�|�tj�d������t
jd����dS)Nr z1this is a short header that will be folded anywayr�r�rz�                Subject: this is a
                 short header that
                 will be folded
                 anyway
                �rLrSrxrryr��textwrap�dedentrTs  r�'test_unstructured_short_max_line_lengthz3TestFolding.test_unstructured_short_max_line_lengthvsx�����Y�))�
*�
*�����
�F�F�&�.�.�.�r�.�B�B�F�C�C��O��
�
�	�	�	�	�	rc��|�dd��}|�|�tj���d��dS)Nr rrzSubject: test
rrTs  r�"test_fold_unstructured_single_wordz.TestFolding.test_fold_unstructured_single_word�sD�����Y��/�/��������v�~��6�6�8I�J�J�J�J�Jrc��|�dd��}|�|�tj���d��dS)Nr ztest test testrzSubject: test test test
rrTs  r�test_fold_unstructured_shortz(TestFolding.test_fold_unstructured_short�sO�����Y�(8�9�9��������v�~��6�6�3�	5�	5�	5�	5�	5rc���|�dd��}|�|�tj�d������d��dS)Nr �5thisisaverylonglineconsistingofasinglewordthatwontfitr�r�rz�Subject: 
 =?utf-8?q?thisisa?=
 =?utf-8?q?verylon?=
 =?utf-8?q?glineco?=
 =?utf-8?q?nsistin?=
 =?utf-8?q?gofasin?=
 =?utf-8?q?gleword?=
 =?utf-8?q?thatwon?=
 =?utf-8?q?tfit?=
�rLrSrxrryr�rTs  r�)test_fold_unstructured_with_overlong_wordz5TestFolding.test_fold_unstructured_with_overlong_word�si�����Y�)$�
%�
%�����
�F�F�&�.�.�.�r�.�B�B�F�C�C�
"�	�	�	�	�	rc���|�dd��}|�|�tj�d������d��dS)Nr zXthisisaverylonglineconsistingofasinglewordthatwontfit plusanotherverylongwordthatwontfitr�r�raSubject: 
 =?utf-8?q?thisisa?=
 =?utf-8?q?verylon?=
 =?utf-8?q?glineco?=
 =?utf-8?q?nsistin?=
 =?utf-8?q?gofasin?=
 =?utf-8?q?gleword?=
 =?utf-8?q?thatwon?=
 =?utf-8?q?tfit_pl?=
 =?utf-8?q?usanoth?=
 =?utf-8?q?erveryl?=
 =?utf-8?q?ongword?=
 =?utf-8?q?thatwon?=
 =?utf-8?q?tfit?=
r-rTs  r�.test_fold_unstructured_with_two_overlong_wordsz:TestFolding.test_fold_unstructured_with_two_overlong_words�sl�����Y�)G�
H�
H�����
�F�F�&�.�.�.�r�.�B�B�F�C�C�

"�	�	�	�	�	rc���|�dd��}|�|�tj�d������d��dS)Nr � thislongwordislessthanmaxlinelen�#r�rz+Subject:
 thislongwordislessthanmaxlinelen
r-rTs  r�.test_fold_unstructured_with_slightly_long_wordz:TestFolding.test_fold_unstructured_with_slightly_long_word�sa�����Y�(J�K�K�����
�F�F�&�.�.�.�r�.�B�B�F�C�C�;�	=�	=�	=�	=�	=rc���|�dd��}|�|�tj�d������t
jd����dS)Nr z�This header is intended to demonstrate, in a fairly succinct way, that we now do not give a , special treatment in unstructured headers.�<r�rz�                Subject: This header is intended to demonstrate, in a fairly
                 succinct way, that we now do not give a , special treatment
                 in unstructured headers.
                 r#rTs  r�"test_fold_unstructured_with_commasz.TestFolding.test_fold_unstructured_with_commas�s}�����Y�)F�
G�
G��	
���
�F�F�&�.�.�.�r�.�B�B�F�C�C��O��
�
�	�	�	�	�	rc��|�dd��}|�|�tj���tjd����dS)Nrz�"Theodore H. Perfect" <yes@man.com>, "My address is very long because my name is long" <foo@bar.com>, "Only A. Friend" <no@yes.com>rz�            To: "Theodore H. Perfect" <yes@man.com>,
             "My address is very long because my name is long" <foo@bar.com>,
             "Only A. Friend" <no@yes.com>
             )rLrSrxrryr$r%rTs  r�test_fold_address_listz"TestFolding.test_fold_address_list�sh�����T�$,�
-�
-��	
������v�~��6�6���I�9�9�	�	�	�	�	rc��|�dd��}|�|�tj���d��dS)Nr�zSat, 2 Feb 2002 17:00:06 -0800rz&Date: Sat, 02 Feb 2002 17:00:06 -0800
rrTs  r�test_fold_date_headerz!TestFolding.test_fold_date_header�sT�����V�%E�F�F��������v�~��6�6�A�	C�	C�	C�	C�	Crc��|�dd��}|�|�tj���d��dS)NzX-Report-Abusez]<https://www.mailitapp.com/report_abuse.php?mid=xxx-xxx-xxxxxxxxxxxxxxxxxxxxxxxx==-xxx-xx-xx>rz�X-Report-Abuse: =?utf-8?q?=3Chttps=3A//www=2Emailitapp=2Ecom/report=5Fabuse?=
 =?utf-8?q?=2Ephp=3Fmid=3Dxxx-xxx-xxxxxxxxxxxxxxxxxxxxxxxx=3D=3D-xxx-xx-xx?=
 =?utf-8?q?=3E?=
rrTs  r�&test_fold_overlong_words_using_RFC2047z2TestFolding.test_fold_overlong_words_using_RFC2047�s^������
B�
C�
C��	
���
�F�F�&�.�F�)�)�
!�	"�	"�	"�	"�	"rc��|�dd��}|�|�tj�d������d��|�dd��}|�|�tj�d������d��|�dd	��}|�|�tj�d
������d��|�dd��}|�|�tj�d������d
��dS)Nz
Message-IDz+<somemessageidlongerthan@maxlinelength.com>r�r�rz8Message-ID: <somemessageidlongerthan@maxlinelength.com>
z1<somemessageidlongerthan@[127.0.0.0.0.0.0.0.0.1]>z>Message-ID: <somemessageidlongerthan@[127.0.0.0.0.0.0.0.0.1]>
u<ईमेल@wők.com>�u$Message-ID: <ईमेल@wők.com>
u"<ईमेलfromMessage@wők.com>u0Message-ID:
 <ईमेलfromMessage@wők.com>
r-rTs  r�$test_message_id_header_is_not_foldedz0TestFolding.test_message_id_header_is_not_folded�s�������9�
;�
;��	
���
�F�F�&�.�.�.�r�.�B�B�F�C�C�G�	I�	I�	I�

����?�
A�
A��	
���
�F�F�&�.�.�.�r�.�B�B�F�C�C�M�	O�	O�	O�

���\�+D�E�E�����
�F�F�&�.�.�.�r�.�B�B�F�C�C�3�	5�	5�	5�
���\�+O�P�P�����
�F�F�&�.�.�.�r�.�B�B�F�C�C�@�	B�	B�	B�	B�	BrN)r-r.r/rrr!r&r(r*r.r0r4r7r9r;r=r@r)rrrrNs�������C�C�C�06�6�6�
A�A�A�
�
�
�K�K�K�5�5�5�
��� ���.=�=�=�������C�C�C�
"�"�"�B�B�B�B�Brr�__main__)!r�r$�unittest�emailrr�
email.messager�test.test_emailrrr	�email.headerregistryr
r�test.supportrrr�rrHrNrsr�r�rrr-r@r�rr-�mainr)rr�<module>rIs���������������������������!�!�!�!�!�!�7�7�7�7�7�7�7�7� � � � � � �/�/�/�/�/�/�/�/�"�"�"�"�"�"�	�����7K�7K�7K�7K�7K��7K�7K�7K�t)�)�)�)�)�]�)�)�)�"0�"0�"0�"0�"0�^�"0�"0�"0�\�%�%�%�%�%�^�%�%���%�P�>6�>6�>6�>6�>6�^�>6�>6���>6�B�t�t�t�t�t�N�t�t���t�n�$�$�$�$�$�.�$�$���$�N�O�O�O�O�O�^�O�O���O�d�Z
�Z
�Z
�Z
�Z
�N�Z
�Z
���Z
�z�iC�iC�iC�iC�iC��iC�iC���iC�X	b(�b(�b(�b(�b(�-�b(�b(�b(�JnB�nB�nB�nB�nB�.�nB�nB�nB�`�z����H�M�O�O�O�O�O��r