
    2hh                       S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S S	KJr  \" 5       r " S
 S\	5      r " S S\	5      r " S S\5      r\
 " S S\5      5       r\
 " S S\5      5       r\
 " S S\5      5       r\
 " S S\5      5       r\
 " S S\5      5       r\
 " S S\5      5       r\
 " S S\5      5       r " S S\	5      r " S  S!\5      r \!S":X  a  \RD                  " 5         gg)#    N)errorspolicy)Message)TestEmailBaseparameterize)headerregistry)AddressGroup)decode_header)	ALWAYS_EQc                   f    \ rS rSrS rS r " S S5      rS r " S S5      rS	 r	S
 r
S rS rSrg)TestHeaderRegistry   c                     [         R                  " 5       nU" SS5      nU R                  U[         R                  5        U R                  U[         R                  5        g Nfoobartestr	   HeaderRegistryassertIsInstance
BaseHeaderUnstructuredHeaderselffactoryhs      L/opt/python-3.13.8/usr/lib/python3.13/test/test_email/test_headerregistry.py test_arbitrary_name_unstructured3TestHeaderRegistry.test_arbitrary_name_unstructured   sH     //1Hf%a!:!:;a!B!BC    c                     [         R                  " 5       nU R                  SUR                  5        U" SS5      nU R	                  U[         R
                  5        U R	                  U[         R                  5        g )NSubjectr   )r	   r   assertNotInregistryr   r   UniqueUnstructuredHeaderr   s      r   test_name_case_ignored)TestHeaderRegistry.test_name_case_ignored   s^     //1G$4$45Iv&a!:!:;a!H!HIr!   c                       \ rS rSrS rSrg)TestHeaderRegistry.FooBase!   c                     g N )r   argskws      r   __init__#TestHeaderRegistry.FooBase.__init__"   s    r!   r.   N)__name__
__module____qualname____firstlineno__r1   __static_attributes__r.   r!   r   FooBaser*   !   s    	r!   r8   c                     [         R                  " U R                  S9nU" SS5      nU R                  X R                  5        U R                  U[         R                  5        g )N)
base_classr   r   )r	   r   r8   r   r   r   s      r    test_override_default_base_class3TestHeaderRegistry.test_override_default_base_class%   sJ     //4<<HHf%a.a!B!BCr!   c                   @    \ rS rSr\R
                  R                  rSrg)TestHeaderRegistry.FooDefault+   r.   N)r3   r4   r5   r6   r	   r   parser7   r.   r!   r   
FooDefaultr>   +   s    1177r!   rA   c                     [         R                  " U R                  S9nU" SS5      nU R                  U[         R                  5        U R                  X R                  5        g )Ndefault_classr   r   )r	   r   rA   r   r   r   s      r   test_override_default_class.TestHeaderRegistry.test_override_default_class.   sJ     //dooNHf%a!:!:;a1r!   c                     [         R                  " U R                  S9nU" SS5      nU R                  U[         R                  5        U R                  U[         R
                  5        g )NrC   subjectr   )r	   r   rA   r   r   r&   r   s      r   2test_override_default_class_only_overrides_defaultETestHeaderRegistry.test_override_default_class_only_overrides_default4   sN     //dooNIv&a!:!:;a!H!HIr!   c                     [         R                  " SS9nU" SS5      nU R                  U[         R                  5        U R                  U[         R                  5        g )NF)use_default_maprH   r   r   r   s      r   test_dont_use_default_map,TestHeaderRegistry.test_dont_use_default_map:   sJ     //FIv&a!:!:;a!B!BCr!   c                    [         R                  " 5       nU" SS5      nUR                  S[         R                  5        U" SS5      nU R	                  U[         R
                  5        U R	                  U[         R                  5        U R	                  U[         R
                  5        U R	                  U[         R                  5        g r   )r	   r   map_to_typer&   r   r   r   )r   r   h1h2s       r   test_map_to_type#TestHeaderRegistry.test_map_to_type@   s     //1Xv&Hn&M&MNXv&b.";";<b."C"CDb.";";<b."I"IJr!   r.   N)r3   r4   r5   r6   r   r'   r8   r;   rA   rE   rI   rM   rS   r7   r.   r!   r   r   r      s?    DJ D8 82JDKr!   r   c                   <    \ rS rSr\R
                  " 5       rS rSrg)TestHeaderBaseK   c                 $    U R                  X5      $ r-   )r   )r   namevalues      r   make_headerTestHeaderBase.make_headerO   s    ||D((r!   r.   N)	r3   r4   r5   r6   r	   r   r   r[   r7   r.   r!   r   rV   rV   K   s    ++-G)r!   rV   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestBaseHeaderFeaturesS   c                     U R                  SS5      nU R                  U[        5        U R                  US5        U R                  [        U5      S5        g NrH   this is a test)r[   r   strassertEqualr   r   s     r   test_strTestBaseHeaderFeatures.test_strU   sK    Y(89a%,-Q!12r!   c                 R    U R                  SS5      nU R                  USS S5        g )NrH   rb         is)r[   rd   re   s     r   test_substr"TestBaseHeaderFeatures.test_substr[   s+    Y(891Q&r!   c                 `    U R                  SS5      nU R                  UR                  S5        g ra   )r[   rd   rY   re   s     r   test_has_name$TestBaseHeaderFeatures.test_has_name_   s)    Y(89+r!   c                     U R                  SS5      nU R                  [        5         [        X!S5        S S S 5        g ! , (       d  f       g = f)NrH   rb   foo)r[   assertRaisesAttributeErrorsetattr)r   attrr   s      r   _test_attr_ro$TestBaseHeaderFeatures._test_attr_roc   s9    Y(89~.AU# /..s	   >
Ac                 &    U R                  S5        g )NrY   rw   r   s    r   test_name_read_only*TestBaseHeaderFeatures.test_name_read_onlyh   s    6"r!   c                 &    U R                  S5        g )Ndefectsrz   r{   s    r   test_defects_read_only-TestBaseHeaderFeatures.test_defects_read_onlyk   s    9%r!   c                 `   U R                  SS5      nU R                  [        UR                  5      S5        U R	                  UR                  [
        5        U R                  SS5      nU R                  [        UR                  5      S5        U R	                  UR                  [
        5        g )NrH   rb   r   date    )r[   rd   lenr   r   tuplere   s     r   test_defects_is_tuple,TestBaseHeaderFeatures.test_defects_is_tuplen   s    Y(89QYY+aii/VR(QYY+aii/r!   r.   N)r3   r4   r5   r6   rf   rl   ro   rw   r|   r   r   r7   r.   r!   r   r^   r^   S   s%    3',$
#&0r!   r^   c                   8    \ rS rSrS rSS/ S4SS/ S4SS	S
.rSrg)TestUnstructuredHeader   c                 L   [        U5      nUS:  a  US   O/ nSU(       a  SOS-   nXdS:  a  US   OU-   S-   nU R                  SU5      nU R                  X5        U R                  UR                  U5        U R                  UR                  [        R                  S9U5        g )	Nr   zSubject: r   r   
r#   r   )r   r[   rd   assertDefectsEqualr   foldr   default)	r   sourcedecodedr/   lr   headerfoldedr   s	            r   string_as_value&TestUnstructuredHeader.string_as_value   s     IqS$q'bfs"5c47v6=Y/$		73v~~6?r!   z=?utf-8?q?this_is_a_test?=rb   z!=?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_textr.   N)r3   r4   r5   r6   r   string_paramsr7   r.   r!   r   r   r      s?    @  )	" 086	"8+-"%Mr!   r   c            
           \ rS rSrSr\R                  " SS9r\R                  " \5      r	\R
                  " SSSSS	S
\	S9r
S rS rS rS rS rS rS rS rS rSrg)TestDateHeader   zSun, 23 Sep 2001 20:10:55 -0700i)hoursi  	         
   7   )tzinfoc                 ^   U R                  SU R                  5      nU R                  XR                  5        U R                  UR                  U R                  5        U R                  UR                  R                  5       U R
                  5        U R                  UR                  S5        g Nr   r.   )r[   
datestringrd   datetimedt	utcoffsetr   re   s     r   test_parse_dateTestDateHeader.test_parse_date   sw    VT__5OO,TWW---/@B'r!   c                     U R                  SU R                  5      nU R                  XR                  5        U R                  UR                  U R                  5        U R                  UR
                  S5        g r   )r[   r   rd   r   r   r   re   s     r   test_set_from_datetime%TestDateHeader.test_set_from_datetime   sV    VTWW-OO,TWW-B'r!   c                     U R                  SU R                  5      nU R                  U[        R                  5        U R                  UR                  S5        U R                  UR                  S5        g )Nr   r   r.   )r[   r   r   r	   UniqueDateHeaderrd   	max_countr   re   s     r   test_date_header_properties*TestDateHeader.test_date_header_properties   sV    VT__5a!@!@Aa(B'r!   c                     U R                  SU R                  5      nU R                  U[        R                  5        U R                  UR                  S 5        U R                  UR                  S5        g )Nzresent-dater.   )r[   r   r   r	   
DateHeaderrd   r   r   re   s     r   "test_resent_date_header_properties1TestDateHeader.test_resent_date_header_properties   sV    ]DOO<a!:!:;d+B'r!   c                     U R                  SS5      nU R                  [        UR                  5      S5        U R	                  UR                  S   [
        R                  5        g )Nr   r   r   r   )r[   rd   r   r   r   r   HeaderMissingRequiredValuere   s     r   test_no_value_is_defect&TestDateHeader.test_no_value_is_defect   sJ    VR(QYY+aiilF,M,MNr!   c                 (   SnU R                  SU5      nU R                  X!5        U R                  UR                  5        U R                  [	        UR
                  5      S5        U R                  UR
                  S   [        R                  5        g )NzNot a date headerr   r   r   	r[   rd   assertIsNoner   r   r   r   r   InvalidDateDefectr   sr   s      r   test_invalid_date_format'TestDateHeader.test_invalid_date_format   so    VQ'!**%QYY+aiilF,D,DEr!   c                 (   SnU R                  SU5      nU R                  X!5        U R                  UR                  5        U R                  [	        UR
                  5      S5        U R                  UR
                  S   [        R                  5        g )NzTue, 06 Jun 2017 27:39:33 +0600r   r   r   r   r   s      r   test_invalid_date_value&TestDateHeader.test_invalid_date_value   so    -VQ'!**%QYY+aiilF,D,DEr!   c                     U R                  SU R                  5      nU R                  [        5         SUl        S S S 5        g ! , (       d  f       g = f)Nr   rr   )r[   r   rs   rt   r   re   s     r   test_datetime_read_only&TestDateHeader.test_datetime_read_only   s9    VT__5~.AJ /..s   A
Ac                     [        [        R                  S9nU R                  US'   U R	                  US   U R
                  5        U R	                  US   R                  U R                  5        g )Nr   Date)r   r   r   r   rd   r   r   )r   ms     r   "test_set_date_header_from_datetime1TestDateHeader.test_set_date_header_from_datetime   sS    6>>*GG&	6DOO46++TWW5r!   r.   N)r3   r4   r5   r6   r   r   	timedeltar   timezonetzr   r   r   r   r   r   r   r   r   r   r7   r.   r!   r   r   r      su     3J"",I			9	%B			4BB2	>B((((O
FF
6r!   r   c                   T   \ rS rSrS r0 SSSSSSS	0/ S
4_SSSSSSS	0/ S
4_SS
SSSSS	04_SSSSS0 \R                  /4_SSSSS0 \R                  /4_SSSSS0 \R                  /4_SSSSS0 \R                  /4_SS_SS_SS_SS_SSSSSSS 04_S!S"SSSSS#04_S$S%SSSSS&04_S'S(SSSSS 0/ S)4_S*S+SSSS,S0/ S-4_S.S/SSSS,S004_0 S1S2SSSS,S304_S4S5SSSS6S6S7.\R                  /S8-  4_S9S:S;S<S=S>S?0/ S@4_SASBSCSDSESFSGSHSI./ SJSK4_SLSMSCSDSESFSGSHSNSO./ SMSP4_SQSRSCSDSESSST04_SUSVSCSDSESSSW04_SXSYSCSDSESSSZ0/ SY4_S[S\R                  S]5      R                  S	S^5      S_S`SaSbScSd.\R                  /S8-  SeSf4_SgShSCSDSESSSi0/ Sj4_SkSlSCSDSESaSm0/ Sn4_SoSpR                  S]5      R                  S	S^5      SSSS	SqSr.\R                  /SsSt4_SuSvSSSSS	0/ S
4_SwSxSSSSSSy0/ Sz4_S{S|SSSSSS}0\R                  /S~-  S4_SSSSSS	SSr.\R                  /S~-  SS4_SSSSSSSS0\R                  /S~-  S4_ESSSSSSS0/ S4SSSSSSS0\R                  /S4SSSSSSS0\R                  /S~-  S4SSSSSSS0\R                  /S~-  S4SSSSSSS0\R                  /SS4SSSSSSS0/ S4SSSSSS0\R                  /SS4SSSSSS0\R                  /SS4SSSSSS0/ SS4SSSSSSS0\R                  /S4SSSSSSS0\R                  /S8-  S4SSSSSSS0\R                  /S~-  S4SSSSSSS0/ SS4S.Er
Srg)TestContentTypeHeader   c                    [        U5      nUS:  a  US   O0 nUS:  a  US   O/ nUS:  a  US   [        La  US   OUn	U(       a  SOSn
US:  a  US   OX-   S-   nU R                  SU5      nU R                  UR                  U5        U R                  UR
                  U5        U R                  UR                  U5        U R                  UR                  U5        U R                  [        5         S	UR                  S
'   S S S 5        U R                  UR                  U5        U R                  X5        U R                  UR                  [        R                  S9U5        g ! , (       d  f       Ni= f)Nr   r      zContent-Type: r      r   zContent-Typexyzabcr   )r   DITTOr[   rd   content_typemaintypesubtypeparamsrs   	TypeErrorr   r   r   r   r   )r   r   r   r   r   r/   r   parmdictr   r   r   r   r   s                r   content_type_as_value+TestContentTypeHeader.content_type_as_value   s:    Ic47rc47rcd1gU&:47*0&baCaV%5%<^V46X.G,8,y)#AHHUO *		73$v~~6?	 *)s   3E&&
E4
RFC_2045_1z)text/plain; charset=us-ascii (Plain text)
text/plaintextplaincharsetzus-asciiztext/plain; charset="us-ascii"
RFC_2045_2ztext/plain; charset=us-ascii
RFC_2045_3no_subtype_in_content_typeztext/no_slash_in_content_typerr   junk_text_in_content_typez<crazy "stuff"> too_many_slashes_in_content_typezimage/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_paramztext/plain; charset="utf-8"zutf-8capitalized_charsetztext/plain; charset="US-ASCII"zUS-ASCIIunknown_charsetztext/plain; charset="fOo"fOo*capitalized_charset_param_name_and_commentz*text/plain; (interjection) Charset="utf-8"ztext/plain; Charset="utf-8"unquoted_param_valueztext/plain; title=footitleztext/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_paramszblarg; baz; boor   )bazboor   spaces_around_param_equalsz0Multipart/mixed; boundary = "CPIMSSMTPC06p5f3tG"zmultipart/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)rY   
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"zmake it longer)rY   r  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"rY   zJim&amp;&amp;Jillsingle_quotes_inside_quotesz!image/jpeg; name="Jim 'Bob' Jill"zJim 'Bob' Jilldouble_quotes_inside_quotesz#image/jpeg; name="Jim \"Bob\" Jill"zJim "Bob" Jillnon_ascii_in_paramsu   foo§/bar; b§r=two; baz=thr§ezlatin-1surrogateescapeu
   foo�/baru   foo�bartwou   thr�e)u   b�rr	  u&   foo�/bar; b�r="two"; baz="thr�e"uV   Content-Type: =?unknown-8bit?q?foo=A7?=/bar; br="two";
 baz*=unknown-8bit''thr%A7e
rfc2231_segmented_normal_valuesz(image/jpeg; name*0="abc"; name*1=".html"zabc.htmlzimage/jpeg; name="abc.html"quotes_inside_rfc2231_valuez.image/jpeg; bar*0="baz\"foobar"; bar*1="\"baz"zbaz"foobar"bazz"image/jpeg; bar="baz\"foobar\"baz"non_ascii_rfc2231_valueuG   text/plain; charset=us-ascii; title*=us-ascii'en'This%20is%20not%20f§nu   This is not f�n)r   r  u9   text/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"zThis 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_quotesztext/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"zapplication/x-fooapplicationzx-foozFrank's Documentz*application/x-foo; name="Frank's Document"zFapplication/x-foo;	name*0="us-ascii'en-us'Frank's"; name*1=" Document"zus-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.htmlzenglish_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%F3u   utf-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%9Du   utf-8”u   text/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"zMy 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"zContent-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_ascii0rfc2231_bad_character_in_charset_parameter_value8rfc2231_utf8_in_supposedly_ascii_charset_parameter_value6rfc2231_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_formattedr.   N)r3   r4   r5   r6   r   r   InvalidHeaderDefectencodedecodeUndecodableBytesDefectcontent_type_paramsr7   r.   r!   r   r   r      sw   @.[ 	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/8u[B 	r"''(*,C[R 	%>-.<'S[f 	+!%(* ++ g[H 	J!%(-/ JJ I[p 	2() +q[~ 	&1%&(([L 	&2%&2(4M[^ 	%vi0
8I2K|4**+A-4,! _[J 	*6Z ),+K[\ 	&=$%1(3][n 	"#VI.vvj5F0H"-CD++,H>$o[L	 	"=
#,$.M	[`	 	++ 67@-a	[|	 	-+ @A''(*J/}	[V
 	4( "-QR''(*=A6W
[v
 	>N'(''(*9	@w
[NL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[r!   r   c                   j    \ rS rSrS rSSS\R                  /SS4SS\R                  /4SS	/ 4S
.rSr	g)TestContentTransferEncodingi$  c                    [        U5      nUS:  a  US   O/ nUS:  a  US   [        La  US   OUnU(       a  SOSnUS:  a  US   OXq-   S-   nU R                  SU5      n	U R                  U	R                  U5        U R                  U	R                  U5        U R                  X5        U R                  U	R                  [        R                  S9U5        g )	Nr   r   zContent-Transfer-Encoding: r   r   r   zContent-Transfer-Encodingr   )
r   r   r[   rd   cter   r   r   r   r   )
r   r   r<  r/   r   r   r   r   r   r   s
             r   cte_as_value(TestContentTransferEncoding.cte_as_value'  s     Ic47rcd1gU&:477=32aCaV_t%;8&A$		73$v~~6?r!   )base64r?  r   7bitzContent-Transfer-Encoding:
z7bit and a bunch morezbase64 r?  )
RFC_2183_1no_valuejunk_after_cteextra_space_after_cter.   N)
r3   r4   r5   r6   r=  r   r   r4  
cte_paramsr7   r.   r!   r   r:  r:  $  s\    @"
 ../* $''(* "'Jr!   r:  c                       \ rS rSrS rSSSSSS./ S	S
4SS0 \R                  /SS4SS0 \R                  /4SSSS0\R                  /4SSSS0\R                  /S-  SS4SSSS0\R                  /SS4S.rSr	g)TestContentDispositioniQ  c                    [        U5      nUS:  a  US   O0 nUS:  a  US   O/ nUS:  a  US   [        La  US   OUnU(       a  SOSnUS:  a  US   OX-   S-   n	U R                  SU5      n
U R                  U
R                  U5        U R                  U
R
                  U5        U R                  U
R                  U5        U R                  X5        U R                  U
R                  [        R                  S	9U	5        g )
Nr   r   r   zContent-Disposition: r   r   r   zContent-Dispositionr   )r   r   r[   rd   content_dispositionr   r   r   r   r   r   )r   r   rI  r/   r   r   r   r   r   r   r   s              r   content_disp_as_value,TestContentDisposition.content_disp_as_valueT  s     Ic47rc47rcd1gU&:4717-RaCaV_t%;2F;..0CD8,		73$v~~6?r!   )inlinerL  zWattachment; filename=genome.jpeg;  modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
attachmentzgenome.jpegzWed, 12 Feb 1997 16:29:51 -0500)filenamezmodification-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"
r   NzContent-Disposition:
zab./kzab.zab./k; filename="foo"rN  rr   zaattachment; filename="=?UTF-8?Q?Schulbesuchsbest=C3=A4ttigung=2E?=               =?UTF-8?Q?pdf?="u   Schulbesuchsbestättigung.pdfr   u4   attachment; 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"zFile Name With Spaces.pdfz0attachment; filename="File Name With Spaces.pdf"zFContent-Disposition: attachment; filename="File Name With Spaces.pdf"
)rA  
RFC_2183_2rB  invalid_valueinvalid_value_with_params+invalid_parameter_value_with_fws_between_ew'parameter_value_with_fws_between_tokensr.   )
r3   r4   r5   r6   rJ  r   r   r4  content_disp_paramsr7   r.   r!   r   rG  rG  Q  s    @*
F&"CEGF ../$& ''(	* $''(	&*.89''(*CG	8 K45''(>V4i<r!   rG  c                      \ rS rSrS rSSSSS/ 4SSSSS/ 4SSSSS/ 4SSSSS/ 4S	S	S	SS/ 4S
S
S
SS/ 4SSSSS/ 4SSSSS/ 4SSSSS\R                  /4SSSSS\R                  /4SSSSS\R                  /4SSSSS\R                  /4SSSSS\R                  /4SSSSS\R                  /4SSSSS\R                  /4S.rSr	g)TestMIMEVersionHeaderi  c                    U R                  SU5      nU R                  Xr5        U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  U5        U(       a  SU-   nU R                  UR                  [        R                  S9SU-   S-   5        g )NzMIME-Versionr   r   zMIME-Version:r   )
r[   rd   versionmajorminorr   r   r   r   r   )r   r   r   rX  rY  rZ  r   r   s           r   version_string_as_MIME_Version4TestMIMEVersionHeader.version_string_as_MIME_Version  s     ^V4$G,%(%(		736\Fv~~6(61D8	:r!   z1.0r   r   z1.0 (produced by MetaSend Vx.x)z(produced by MetaSend Vx.x) 1.0z1.(produced by MetaSend Vx.x)0z1.1z2.1r   z1 .0z  1.0  z	1.0 <abc>z	<abc> 1.0Nz1.<abc>0z1..0z2.xrr   r   )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_xrr   missingr.   )
r3   r4   r5   r6   r[  r   r4  r   version_string_paramsr7   r.   r!   r   rV  rV    s   :.  .- .- -,    0 ''(&* ''('* ''('* ''(* ''(* ''(* ../1}F
r!   rV  c            
          \ rS rSr0 SS\R
                  /SSSSSS4_SS/ SSSSS	S4_S
S/ SSSSS	S4_SS/ SSSSS	S4_SS/ SSSSSS4_SS/ SSSSSS4_SS\R                  /SSSS S!S4_S"S#\R
                  /S$-  S%SS%S&S!S4_S'S(/ S(SS(S)S!S4_S*S+\R
                  /S,-  S-SS-S.S!S4_S/S0\R
                  /S1-  S2SS2S3S!S4_S4S5\R                  /S6SS6S7S!S4_S8S9/ S:S;S<S=S!S4_S>S?/ S@SAS<S=S!S4_SBSC\R
                  \R
                  /S:S;S<S=S!S4_SDSE\R                  /SFSGSS S!S4_SHSI\R
                  \R                  /SJSKSS S!S4_rSL rSM r	SN r
SO rSP rSQ rSR rSS rST rSU rSV rSW rSX rSYrg)ZTestAddressHeaderiB  empty<>r   Naddress_onlyzzippy@pinhead.comzippyzpinhead.comname_and_addressz%Zaphrod Beblebrux <zippy@pinhead.com>zZaphrod Beblebruxquoted_local_partz)Zaphrod Beblebrux <"foo bar"@pinhead.com>z"foo bar"@pinhead.comfoo barquoted_parens_in_namez'"A \(Special\) Person" <person@dom.ain>z%"A (Special) Person" <person@dom.ain>zA (Special) Personzperson@dom.ainpersonzdom.ainquoted_backslashes_in_namez."Arthur \\Backslash\\ Foobar" <person@dom.ain>zArthur \Backslash\ Foobarname_with_dotzJohn X. Doe <jxd@example.com>z"John X. Doe" <jxd@example.com>zJohn X. Doezjxd@example.comjxdexample.comquoted_strings_in_local_partz""example" example"@example.comr   z"example example"@example.comzexample example$escaped_quoted_strings_in_local_partz!"\"example\" example"@example.comz"example" exampleescaped_escapes_in_local_partz#"\\"example\\" example"@example.comri   z#"\\example\\\\ example"@example.comz\example\\ example'spaces_in_unquoted_local_part_collapsedzmerwok  wok  @example.comr   z"merwok wok"@example.comz
merwok wok(spaces_around_dots_in_local_part_removedzmerwok. wok .  wok@example.comzmerwok.wok.wok@example.comzmerwok.wok.wokrfc2047_atom_is_decodedz'=?utf-8?q?=C3=89ric?= <foo@example.com>u   Éric <foo@example.com>r   foo@example.comrr   !rfc2047_atom_in_phrase_is_decodedz6The =?utf-8?q?=C3=89ric=2C?= Himself <foo@example.com>u&   "The Éric, Himself" <foo@example.com>r   (rfc2047_atom_in_quoted_string_is_decodedz)"=?utf-8?q?=C3=89ric?=" <foo@example.com>"name_ending_with_dot_without_spacezJohn X.<jxd@example.com>z"John X." <jxd@example.com>zJohn X.name_starting_with_dotz. Doe <jxd@example.com>z". Doe" <jxd@example.com>z. Doec	                    U R                  SU5      n	U R                  X5        U R                  U	R                  U5        U	R                  n
U R                  [        U
5      U5        U R                  [        U	R                  5      S5        U R                  U
/[        U	R                  S   R                  5      5        U R                  U
/[        U	R                  5      5        U R                  U
R                  U5        U R                  U
R                  U5        U R                  U
R                  U5        U R                  U
R                  U5        g )Nsenderr   r   )r[   rd   r   r   addressrc   r   groupslist	addressesdisplay_name	addr_specusernamedomain)r   r   r   r   r  r  r  r  commentr   as              r   example_as_address$TestAddressHeader.example_as_address  s    Xv.$		73IIQ)QXX*!d188A;#8#89:!d1;;/06i0X.6*r!   c	                    SR                  U5      nU(       a  SR                  U5      OSn	U R                  SU5      n
U R                  X5        U R                  U
R                  U5        U R                  U
R
                  S   R                  U
R                  5        U R                  [        U
R
                  5      S5        U R                  [        U
R                  5      S5        U
R                  S   nU R                  [        U5      U5        U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  U5        g )Nzfoo: {};foo:;tor   r   )formatr[   rd   r   r   r  r  r   rc   r  r  r  r  )r   r   r   r   r  r  r  r  r  gdecodedr   r  s               r   example_as_group"TestAddressHeader.example_as_group	  s   ""6*18:$$W-gT6*%		73!..<QXX*Q[[)1-KKNQ)6i0X.6*r!   c                    SnU R                  SU5      nU R                  X!5        U R                  [        UR                  5      S5        U R                  [        UR                  5      S5        [        S5       H<  nU R                  UR                  U   R                  S   UR                  U   5        M>     U R                  [        UR                  S   5      S5        U R                  [        UR                  S   5      S5        U R                  [        UR                  S   5      S	5        U R                  UR                  S   R                  S
5        g )NzTFred <dinsdale@python.org>, foo@example.com, "Harry W. Hastings" <hasty@example.com>r  r   r   zFred <dinsdale@python.org>r   r~  r   z'"Harry W. Hastings" <hasty@example.com>zHarry W. Hastings)r[   rd   r   r  r  rangerc   r  )r   rZ   r   is       r   test_simple_address_list*TestAddressHeader.test_simple_address_list  s   >T5)"QXX*Q[[)1-qAQXXa[2215q{{1~F Q[[^,.JKQ[[^,.?@Q[[^,5	7Q44	!r!   c                    [        U R                  R                  5       5      nSSR                  US S  Vs/ s H  o"S   PM	     sn5      -   S-   S-   SR                  USS  Vs/ s H  o"S   PM	     sn5      -   S-   SR                  USS   Vs/ s H  o"S   PM	     sn5      -   nSSR                  US S  Vs/ s H  o"S	   PM	     sn5      -   S-   S-   SR                  USS  Vs/ s H  o"S	   PM	     sn5      -   S
-   SR                  USS   Vs/ s H  o"S	   PM	     sn5      -   nU R	                  SU5      nU R                  UR                  S5      UR                  S5      5        U R                  XT5        U R                  [        UR                  5      S[        U5      -   S-
  5        U R                  UR                  S   R                  S5        U R                  UR                  S   R                  S5        U R                  UR                  S   R                  S5        U R                  [        UR                  5      [        U5      5        [        S5       Hk  nU R                  UR                  US	-      R                  5        U R                  [        UR                  US	-      R                  S   5      X   S	   5        Mm     [        SS[        U5      -   S-
  5       Hh  nU R                  UR                  U   R                  5        U R                  [        UR                  U   R                  S   5      XS-
     S	   5        Mj     [        [        U5      5       H^  nU R                  [        UR                  U   5      X   S	   5        U R                  UR                  U   R                  X   S   5        M`     g s  snf s  snf s  snf s  snf s  snf s  snf )Nz dummy list:;, another: (empty);,z,    r   z"A \"list\"":    z;,zdummy list:;, another:;, r   z;, r  ,rj   z
dummy listr   anotherzA "list")r  example_paramsvaluesjoinr[   rd   splitr   r  r  r  r  r   rc   r  )r   examplesxr   expectedr   r  s          r   test_complex_address_list+TestAddressHeader.test_complex_address_list*  s}   ++22454(2A,7,QaD,789;?@"# IIXa];]t];<= @DD (12,7,QaD,78	9 0(2A,7,QaD,789;?@"# IIXa];]t];<= @EE (12,7,QaD,78	9 T6*x~~c':;%QXXCM(9A(=>!11<@!119=!11:>Q[[)3x=9qAahhqsm889S!A#!8!8!;<hk!nM  q!c(m+a/0Aahhqk667S!!6!6q!9:HqSM!<LM 1 s8}%ASQ0(+a.AQ[[^55x{1~F &9 8;7
 8;7s#   O
%O
O
:O!
(O&
O+
c                     U R                  SS5      nU R                  [        5         SUl        S S S 5        g ! , (       d  f       g = fNr  zabc@xyz.comrr   )r[   rs   rt   r  re   s     r   test_address_read_only(TestAddressHeader.test_address_read_onlyM  s5    X}5~.AI /..	   9
Ac                     U R                  SS5      nU R                  [        5         SUl        S S S 5        g ! , (       d  f       g = fr  )r[   rs   rt   r  re   s     r   test_addresses_read_only*TestAddressHeader.test_addresses_read_onlyR  s5    X}5~.AK /..r  c                     U R                  SS5      nU R                  [        5         SUl        S S S 5        g ! , (       d  f       g = fr  )r[   rs   rt   r  re   s     r   test_groups_read_only'TestAddressHeader.test_groups_read_onlyW  s5    X}5~.AH /..r  c                     SnU R                  SU5      nU R                  UR                  [        5        U R                  UR                  S   [        5        g Nzme <who@example.com>r  r   )r[   r   r  r   r
   r   r   r   s      r   test_addresses_types&TestAddressHeader.test_addresses_types\  sE    'T6*akk51akk!ng6r!   c                     SnU R                  SU5      nU R                  UR                  [        5        U R                  UR                  S   [        5        g r  )r[   r   r  r   r   r  s      r   test_groups_types#TestAddressHeader.test_groups_typesb  sE    'T6*ahh.ahhqk51r!   c                 b    U R                  S[        SSS5      5      nU R                  US5        g )Nr  merr   rw  zme <foo@example.com>r[   r
   rd   re   s     r   test_set_from_Address'TestAddressHeader.test_set_from_Addressh  s.    T74#FG23r!   c           	      |    U R                  S[        SSS5      [        SSS5      /5      nU R                  US5        g )Nr  r  rr   rw  your  z+me <foo@example.com>, you <bar@example.com>r  re   s     r   test_set_from_Address_list,TestAddressHeader.test_set_from_Address_listl  sC    TGD%$G$+E5-$H$J KIJr!   c                 6   U R                  S[        SSS5      [        S[        SSS5      [        S	S
S5      /5      [        SSS5      /5      nU R                  US5        U R                  UR	                  [
        R                  R                  SS9S9S5        g )Nr  r  rr   rw  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_lengthr   zWto: me <foo@example.com>,
 bing: fiz <z@b.com>, zif <f@c.com>;,
 you <bar@example.com>
)r[   r
   r   rd   r   r   r   clonere   s     r   $test_set_from_Address_and_Group_list6TestAddressHeader.test_set_from_Address_and_Group_listq  s    TGD%$G$)&75#w3O3:5#w3O3Q %R$+E5-$H$J K 	 D 	Ev~~';';B';'OP3	4r!   c                     U R                  S[        S[        SSS5      [        SSS5      /5      /5      nU R                  US	5        g )
Nr  r  r  r  r  r  r  r  z#bing: fiz <z@b.com>, zif <f@c.com>;)r[   r   r
   rd   re   s     r   test_set_from_Group_list*TestAddressHeader.test_set_from_Group_list}  sS    TE&75#w3O3:5#w3O3Q %R $S TABr!   r.   )r3   r4   r5   r6   r   r4  ObsoleteHeaderDefectr  r  r  r  r  r  r  r  r  r  r  r  r  r  r7   r.   r!   r   rj  rj  B  s   m
(()m
 	   m
, 	44  /m
@ 	88 $Cm
T 	 74!Wm
h 	%>>)km
| 	,))*.m
P 	'.(()!+,,Sm
d 	/111!gm
x 	(3(()!+33"{m
L 	2((()!+''Om
` 	3-))*))cm
t 	"6%wm
H 	,E4 Km
\ 	38''&&(%_m
r 	-'))**um
F 	!&((&*E*EF(Im
Nf+"+"! !GF
 

724K

4Cr!   rj  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$r&g%)&TestAddressAndGroupi  c                 z    U R                  [        5         [        XS5        S S S 5        g ! , (       d  f       g = f)Nrr   )rs   rt   ru   )r   objrv   s      r   rw   !TestAddressAndGroup._test_attr_ro  s&    ~.Cu% /..   ,
:c                 >    U R                  [        SSS5      S5        g )Nrr   r  r	  r  rw   r
   r{   s    r   test_address_display_name_ro0TestAddressAndGroup.test_address_display_name_ro  s    75%7Hr!   c                 >    U R                  [        SSS5      S5        g )Nrr   r  r	  r  r  r{   s    r   test_address_username_ro,TestAddressAndGroup.test_address_username_ro  s    75%7Dr!   c                 >    U R                  [        SSS5      S5        g )Nrr   r  r	  r  r  r{   s    r   test_address_domain_ro*TestAddressAndGroup.test_address_domain_ro  s    75%7Br!   c                 :    U R                  [        S5      S5        g )Nrr   r  rw   r   r{   s    r   test_group_display_name_ro.TestAddressAndGroup.test_group_display_name_ro  s    5<8r!   c                 :    U R                  [        S5      S5        g )Nrr   r  r  r{   s    r   test_group_addresses_ro+TestAddressAndGroup.test_group_addresses_ro  s    5<5r!   c                 4   [        SSS5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nrr   r  r	  bar@bazfoo <bar@baz>r
   rd   r  r  r  r  rc   r   r  s     r   !test_address_from_username_domain5TestAddressAndGroup.test_address_from_username_domain  st    E5%(/U+5)i0Q1r!   c                 .   [        SSS9nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nrr   r  r  r  r	  r  r  r  s     r   test_address_from_addr_spec/TestAddressAndGroup.test_address_from_addr_spec  sr    EY//U+5)i0Q1r!   c                 ,   [        SS9nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nr  r  r   r  r	  r  r  s     r   !test_address_with_no_display_name5TestAddressAndGroup.test_address_with_no_display_name  sp    i(,U+5)i0Q+r!   c                 .   [        5       nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nr   rl  r  r  s     r   test_null_address%TestAddressAndGroup.test_null_address  sm    I,R(2&d+Q&r!   c                 ,   [        SS9nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nbuzzr  r   z@buzzr  r  s     r   test_domain_only$TestAddressAndGroup.test_domain_only  sp    6",R(6*g.Q)r!   c                 ,   [        SS9nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nr  r  r   r  r  s     r   test_username_only&TestAddressAndGroup.test_username_only  sp    V$,V,2&f-Q(r!   c                 0   [        S5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nr  r   rl  zbuzz <>r  r  s     r   test_display_name_only*TestAddressAndGroup.test_display_name_only  so    FO0R(2&d+Q+r!   c                 4   [        SSS5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )NzSara J.zbad namerw  z"bad name"@example.comz""Sara J." <"bad name"@example.com>r  r  s     r   test_quoting TestAddressAndGroup.test_quoting  sx     Iz=93Z0=1&>?Q!EFr!   c                 4   [        SSS5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  [        U5      S5        g )Nr   woku   exàmple.comu   wok@exàmple.comu   Éric <wok@exàmple.com>r  r  s     r   	test_il8nTestAddressAndGroup.test_il8n  sv    GUN31U+>2&89Q!;<r!   c                    [        SS9[        SS9[        SS9[        SS9[        SS9[        SS9[        S	S
9[        SS
9[        SS
9[        SS9[        SS9[        SS94nU HE  nU R                  US9   U R                  [        S5         [	        S0 UD6  S S S 5        S S S 5        MG     g ! , (       d  f       N= f! , (       d  f       Mj  = f)Nzfoo)r  zfoo
zfoo
zexample.comr  zexample.com
zexample.com
zwokr  zwok
zwok
zwok@example.comr  zwok@example.com
zwok@example.com
)kwargszinvalid argumentsr.   )dictsubTestassertRaisesRegex
ValueErrorr
   )r   casesr  s      r   $test_crlf_in_constructor_args_raises8TestAddressAndGroup.test_crlf_in_constructor_args_raises  s    g&g&i((()*'"'")$././01
 FV,d.D.DZQd.e!&! /f,, .e.e,,s$   7C B/C /
B=9C  
C	c                 v    U R                  [        5         [        SSS9  S S S 5        g ! , (       d  f       g = f)Nrr   u   wők@example.comr  rs   r  r
   r{   s    r   +test_non_ascii_username_in_addr_spec_raises?TestAddressAndGroup.test_non_ascii_username_in_addr_spec_raises  s'    z*E%78 +**   *
8c                 x    U R                  [        5         [        SSSS9  S S S 5        g ! , (       d  f       g = f)Nrr   r  r  )r  r  rs   r   r
   r{   s    r   *test_address_addr_spec_and_username_raises>TestAddressAndGroup.test_address_addr_spec_and_username_raises   s(    y)EFi@ *))   +
9c                 x    U R                  [        5         [        SSSS9  S S S 5        g ! , (       d  f       g = f)Nrr   r  r  )r  r  r#  r{   s    r   (test_address_addr_spec_and_domain_raises<TestAddressAndGroup.test_address_addr_spec_and_domain_raises  s(    y)E&I> *))r&  c                 z    U R                  [        5         [        SSSSS9  S S S 5        g ! , (       d  f       g = f)Nrr   bongr  r  )r  r  r  r#  r{   s    r   5test_address_addr_spec_and_username_and_domain_raisesITestAddressAndGroup.test_address_addr_spec_and_username_and_domain_raises  s*    y)EF6YO *))r  c                 v    U R                  [        5         [        SSS9  S S S 5        g ! , (       d  f       g = f)Nrr   zbad name@example.comr  r  r{   s    r   'test_space_in_addr_spec_username_raises;TestAddressAndGroup.test_space_in_addr_spec_username_raises  s'    z*E%;< +**r!  c                 v    U R                  [        5         [        SSS9  S S S 5        g ! , (       d  f       g = f)Nrr   zname@ex[]ample.comr  r  r{   s    r   test_bad_addr_sepc_raises-TestAddressAndGroup.test_bad_addr_sepc_raises  s'    z*E%9: +**r!  c                     [        S5      nU R                  UR                  S5        U R                  UR                  [	        5       5        U R                  [        U5      S5        g )Nrr   r  r   rd   r  r  r   rc   r   gs     r   test_empty_group$TestAddressAndGroup.test_empty_group  sI    %L/eg.Q)r!   c                     [        S/ S9nU R                  UR                  S5        U R                  UR                  [	        5       5        U R                  [        U5      S5        g )Nrr   r  r  r5  r6  s     r   test_empty_group_list)TestAddressAndGroup.test_empty_group_list  sL    %2&/eg.Q)r!   c                     [        5       nU R                  UR                  5        U R                  UR                  [        5       5        U R                  [        U5      S5        g )NzNone:;)r   r   r  rd   r  r   rc   r6  s     r   test_null_group#TestAddressAndGroup.test_null_group   sE    G!..)eg.Q*r!   c                    [        SSS5      [        SSS5      /n[        SU5      nU R                  UR                  S5        U R                  UR                  [        U5      5        U R                  [        U5      S5        g )Nbcr  rr   zfoo: b <b@c>, a <b@c>;)r
   r   rd   r  r  r   rc   r   addrsr7  s      r   test_group_with_addresses-TestAddressAndGroup.test_group_with_addresses&  sk    c3'c#)>?%/eEl3Q!9:r!   c                     [        SSS5      [        SSS5      /n[        US9nU R                  UR                  5        U R	                  UR
                  [        U5      5        U R	                  [        U5      S5        g )NrB  rC  r  r;  zNone: b <b@c>, a <b@c>;r
   r   r   r  rd   r  r   rc   rD  s      r   )test_group_with_addresses_no_display_name=TestAddressAndGroup.test_group_with_addresses_no_display_name-  sg    c3'c#)>?E"!..)eEl3Q!:;r!   c                     [        SSS5      /n[        US9nU R                  UR                  5        U R	                  UR
                  [        U5      5        U R	                  [        U5      S5        g )NrB  rC  r;  zb <b@c>rI  rD  s      r   +test_group_with_one_address_no_display_name?TestAddressAndGroup.test_group_with_one_address_no_display_name4  s[    c3'(E"!..)eEl3Q+r!   c                     [        S5      nU R                  UR                  S5        U R                  UR                  [	        5       5        U R                  [        U5      S5        g )Nzfoo.barz"foo.bar":;r5  r6  s     r   test_display_name_quoting-TestAddressAndGroup.test_display_name_quoting;  sJ    )3eg.Q/r!   c                     [        S5      nU R                  UR                  S5        U R                  UR                  [	        5       5        U R                  [        U5      S5        g )Nrq  	foo bar:;r5  r6  s     r   #test_display_name_blanks_not_quoted7TestAddressAndGroup.test_display_name_blanks_not_quotedA  sJ    )3eg.Q-r!   c                     [        SSS5      n[        [        R                  S9nXS'   U R	                  US   S5        U R	                  US   R
                  U45        g )Nrr   r  rw  r   Tor  zfoo <bar@example.com>)r
   r   r   r   rd   r  )r   r  r   s      r   $test_set_message_header_from_address8TestAddressAndGroup.test_set_message_header_from_addressG  sV    E5-06>>*$4"9:4**QD1r!   c                     [        S5      n[        [        R                  S9nXS'   U R	                  US   S5        U R	                  US   R
                  UR
                  5        g )Nrq  r   rW  r  rS  )r   r   r   r   rd   r  )r   r7  r   s      r   "test_set_message_header_from_group6TestAddressAndGroup.test_set_message_header_from_groupN  sS    )6>>*$4+.4**AKK8r!   c                 n   [        SSS5      nU R                  [        SSS5      U5        U R                  [        SSS5      U5        U R                  [        SSS5      U5        U R                  [        SSS5      U5        U R                  U[	        5       :H  5        U R                  U[        :H  5        g )Nrr   r  rw  r	  )r
   rd   assertNotEqualassertFalseobject
assertTruer   r  s     r   test_address_comparison+TestAddressAndGroup.test_address_comparisonU  s    E5-0}=qAGE5-@!DGE5-@!DGE5%8!<fh'Y'r!   c                 L   [        SSS5      n[        SU/5      nU R                  [        SU45      U5        U R                  [        SU/5      U5        U R                  [        S/ 5      U5        U R	                  U[        5       :H  5        U R                  U[        :H  5        g )Nrr   r  rw  rq  r	  )r
   r   rd   r^  r_  r`  ra  r   )r   r  r7  s      r   test_group_comparison)TestAddressAndGroup.test_group_comparison^  s    E5-0)aS!y1$/3E%!-q1E)R0!4fh'Y'r!   r.   N)'r3   r4   r5   r6   rw   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r(  r,  r/  r2  r8  r<  r?  rF  rJ  rM  rP  rT  rX  r[  rb  re  r7   r.   r!   r   r  r    s    &IEC9622,'*),G="&9A?P=;**+;<,0.29((r!   r  c                   h    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)TestFoldingih  c           	          S HO  u  pU R                  S[        USS95      nU R                  UR                  [        R
                  S9SU-  5        MQ     g)z1Test the folding and encoding of address headers.)	)zFoo Bar, Francez"Foo Bar, France")zFoo Bar (France)z"Foo Bar (France)")u   Foo Bar, Españaz"Foo =?utf-8?q?Bar=2C_Espa=C3=B1a?=)u   Foo Bar (España)z Foo Bar =?utf-8?b?KEVzcGHDsWEp?=)u   Foo, Bar Españaz"=?utf-8?q?Foo=2C_Bar_Espa=C3=B1a?=)u   Foo, Bar [España]z(=?utf-8?q?Foo=2C_Bar_=5BEspa=C3=B1a=5D?=)u   Foo Bär, Francez"Foo =?utf-8?q?B=C3=A4r=2C?= France)u   Foo Bär <France>z%Foo =?utf-8?q?B=C3=A4r_=3CFrance=3E?=)ur   Lô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?=rW  za@b.comr  r   zTo: %s <a@b.com>
N)r[   r
   rd   r   r   r   )r   rY   resultr   s       r   test_address_display_names&TestFolding.test_address_display_namesj  sS    LD$   wty'IJAQVV6>>V:$86$AC'r!   c                     U R                  SS5      nU R                  UR                  [        R                  S9S5        g )NrH   rb   r   zsubject: this is a test
r[   rd   r   r   r   re   s     r   test_short_unstructured#TestFolding.test_short_unstructured  s7    Y(89v~~64	6r!   c                     U R                  SS5      nU R                  UR                  [        R                  S9S5        g )Nr#   zhThis is a long header line that will need to be folded into two lines and will demonstrate basic foldingr   zsSubject: This is a long header line that will need to be folded into two lines
 and will demonstrate basic folding
rn  re   s     r   test_long_unstructured"TestFolding.test_long_unstructured  sA    Y )1 2 	v~~6@	Ar!   c                     U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9[        R                  " S5      5        g )Nr#   z1this is a short header that will be folded anywayr   r  r   z                Subject: this is a
                 short header that
                 will be folded
                 anyway
                r[   rd   r   r   r   r  textwrapdedentre   s     r   'test_unstructured_short_max_line_length3TestFolding.test_unstructured_short_max_line_length  sX    Y )) *FF&....r.BFCOO  	r!   c                     U R                  SS5      nU R                  UR                  [        R                  S9S5        g )Nr#   r   r   zSubject: test
rn  re   s     r   "test_fold_unstructured_single_word.TestFolding.test_fold_unstructured_single_word  s4    Y/v~~68IJr!   c                     U R                  SS5      nU R                  UR                  [        R                  S9S5        g )Nr#   ztest test testr   zSubject: test test test
rn  re   s     r   test_fold_unstructured_short(TestFolding.test_fold_unstructured_short  s7    Y(89v~~63	5r!   c                     U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9S5        g )Nr#   5thisisaverylonglineconsistingofasinglewordthatwontfitr   r  r   zSubject: 
 =?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?=
r[   rd   r   r   r   r  re   s     r   )test_fold_unstructured_with_overlong_word5TestFolding.test_fold_unstructured_with_overlong_word  sL    Y )$ %FF&....r.BFC"	r!   c                     U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9S5        g )Nr#   zXthisisaverylonglineconsistingofasinglewordthatwontfit plusanotherverylongwordthatwontfitr   r  r   a  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_pl?=
 =?utf-8?q?usanoth?=
 =?utf-8?q?erveryl?=
 =?utf-8?q?ongword?=
 =?utf-8?q?thatwon?=
 =?utf-8?q?tfit?=
r  re   s     r   .test_fold_unstructured_with_two_overlong_words:TestFolding.test_fold_unstructured_with_two_overlong_words  sN    Y )G HFF&....r.BFC"	r!   c                     U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9S5        g )Nr#    thislongwordislessthanmaxlinelen#   r  r   z+Subject:
 thislongwordislessthanmaxlinelen
r  re   s     r   .test_fold_unstructured_with_slightly_long_word:TestFolding.test_fold_unstructured_with_slightly_long_word  sF    Y(JKFF&....r.BFC;	=r!   c                     U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9[        R                  " S5      5        g )Nr#   zThis header is intended to demonstrate, in a fairly succinct way, that we now do not give a , special treatment in unstructured headers.<   r  r   z                Subject: This header is intended to demonstrate, in a fairly
                 succinct way, that we now do not give a , special treatment
                 in unstructured headers.
                 ru  re   s     r   "test_fold_unstructured_with_commas.TestFolding.test_fold_unstructured_with_commas  s\    Y )F G 	FF&....r.BFCOO  	r!   c                     U R                  SS5      nU R                  UR                  [        R                  S9[
        R                  " S5      5        g )NrW  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>r   z            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>
             )r[   rd   r   r   r   rv  rw  re   s     r   test_fold_address_list"TestFolding.test_fold_address_list  sK    T $, - 	v~~6 I 9 	r!   c                     U R                  SS5      nU R                  UR                  [        R                  S9S5        g )Nr   zSat, 2 Feb 2002 17:00:06 -0800r   z&Date: Sat, 02 Feb 2002 17:00:06 -0800
rn  re   s     r   test_fold_date_header!TestFolding.test_fold_date_header  s8    V%EFv~~6A	Cr!   c                     U R                  SS5      nU R                  UR                  [        R                  S9S5        g )NzX-Report-Abusez]<https://www.mailitapp.com/report_abuse.php?mid=xxx-xxx-xxxxxxxxxxxxxxxxxxxxxxxx==-xxx-xx-xx>r   zX-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?=
rn  re   s     r   &test_fold_overlong_words_using_RFC20472TestFolding.test_fold_overlong_words_using_RFC2047  sC    BC 	FF&..F)!	"r!   c                 d   U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9S5        U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9S5        U R                  SS	5      nU R                  UR                  [        R                  R                  S
S9S9S5        U R                  SS5      nU R                  UR                  [        R                  R                  SS9S9S5        g )Nz
Message-IDz+<somemessageidlongerthan@maxlinelength.com>r   r  r   z8Message-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>u0   Message-ID:
 <ईमेलfromMessage@wők.com>
r  re   s     r   $test_message_id_header_is_not_folded0TestFolding.test_message_id_header_is_not_folded  s&   9; 	FF&....r.BFCG	I
 ?A 	FF&....r.BFCM	O
 \+DEFF&....r.BFC3	5 \+OPFF&....r.BFC@	Br!   r.   N)r3   r4   r5   r6   rk  ro  rr  rx  r{  r~  r  r  r  r  r  r  r  r  r7   r.   r!   r   rh  rh  h  sM    C06
A
K5
 .=C
"Br!   rh  __main__)#r   rv  unittestemailr   r   email.messager   test.test_emailr   r   r	   email.headerregistryr
   r   email.headerr   test.supportr   r`  r   r   rV   r^   r   r   r   r:  rG  rV  rj  r  rh  r3   mainr.   r!   r   <module>r     sb        ! 7   / & " 	7K 7Kt)] )"0^ "0\ %^ % %P >6^ >6 >6B tN t tn ). ) )X O^ O Od Z
N Z
 Z
z }C }C }C@
b(- b(JnB. nB` zMMO r!   