a  ze@slddlZddlZddlZddlmZddlmZddlmZddlm Z m Z ddlm Z ddl m Z mZddlmZeZGd d d e ZGd d d e ZGd ddeZe GdddeZe GdddeZe GdddeZe GdddeZe GdddeZe GdddeZe GdddeZGddde ZGdd d eZed!krhe dS)"N)errorspolicy)Message) TestEmailBase parameterize)headerregistry)AddressGroup) ALWAYS_EQc@s`eZdZddZddZGdddZddZGd d d Zd d Zd dZ ddZ ddZ dS)TestHeaderRegistrycCs2t}|dd}||tj||tjdSNfoobartestrHeaderRegistryassertIsInstance BaseHeaderUnstructuredHeaderselffactoryhrW/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_email/test_headerregistry.py test_arbitrary_name_unstructureds z3TestHeaderRegistry.test_arbitrary_name_unstructuredcCs@t}|d|j|dd}||tj||tjdS)NSubjectr)rrZ assertNotInregistryrrUniqueUnstructuredHeaderrrrrtest_name_case_ignoreds  z)TestHeaderRegistry.test_name_case_ignoredc@seZdZddZdS)zTestHeaderRegistry.FooBasecOsdSNr)rargskwrrr__init__!sz#TestHeaderRegistry.FooBase.__init__N)__name__ __module__ __qualname__r#rrrrFooBase sr'cCs8tj|jd}|dd}|||j||tjdS)N)Z base_classrr)rrr'rrrrrr test_override_default_base_class$s z3TestHeaderRegistry.test_override_default_base_classc@seZdZejjZdS)zTestHeaderRegistry.FooDefaultN)r$r%r&rrparserrrr FooDefault*sr*cCs8tj|jd}|dd}||tj|||jdS)NZ default_classrr)rrr*rrrrrrtest_override_default_class-s z.TestHeaderRegistry.test_override_default_classcCs8tj|jd}|dd}||tj||tjdS)Nr+subjectr)rrr*rrrrrrr2test_override_default_class_only_overrides_default3s zETestHeaderRegistry.test_override_default_class_only_overrides_defaultcCs6tjdd}|dd}||tj||tjdS)NF)Zuse_default_mapr-rrrrrrtest_dont_use_default_map9s  z,TestHeaderRegistry.test_dont_use_default_mapcCsft}|dd}|dtj|dd}||tj||tj||tj||tjdSr )rrZ map_to_typerrrr)rrZh1Zh2rrrtest_map_to_type?s  z#TestHeaderRegistry.test_map_to_typeN) r$r%r&rrr'r(r*r,r.r/r0rrrrr sr c@seZdZeZddZdS)TestHeaderBasecCs |||Sr )r)rnamevaluerrr make_headerNszTestHeaderBase.make_headerN)r$r%r&rrrr4rrrrr1Jsr1c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)TestBaseHeaderFeaturescCs8|dd}||t||d|t|ddSNr-this is a test)r4rstr assertEqualrrrrrtest_strTs   zTestBaseHeaderFeatures.test_strcCs$|dd}||ddddS)Nr-r7is)r4r9r:rrr test_substrZs z"TestBaseHeaderFeatures.test_substrcCs|dd}||jddSr6)r4r9r2r:rrr test_has_name^s z$TestBaseHeaderFeatures.test_has_namecCsF|dd}|tt||dWdn1s80YdS)Nr-r7foo)r4 assertRaisesAttributeErrorsetattr)rattrrrrr _test_attr_robs  z$TestBaseHeaderFeatures._test_attr_rocCs|ddS)Nr2rFrrrrtest_name_read_onlygsz*TestBaseHeaderFeatures.test_name_read_onlycCs|ddS)NdefectsrGrHrrrtest_defects_read_onlyjsz-TestBaseHeaderFeatures.test_defects_read_onlycCs\|dd}|t|jd||jt|dd}|t|jd||jtdS)Nr-r7rdate)r4r9lenrJrtupler:rrrtest_defects_is_tuplems   z,TestBaseHeaderFeatures.test_defects_is_tupleN) r$r%r&r;r?r@rFrIrKrQrrrrr5Rsr5c@s2eZdZddZddgdfddgdfdd d Zd S) TestUnstructuredHeaderc Gst|}|dkr|dng}d|r&dnd}||dkr>|dn|d}|d|}|||||j|||jtjd|dS) NrzSubject: rMrN rr)rOr4r9assertDefectsEqualrJfoldrdefault) rsourcedecodedr!lrJheaderfoldedrrrrstring_as_values  z&TestUnstructuredHeader.string_as_valuez=?utf-8?q?this_is_a_test?=r7z!=?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?= HimselfThe Éric, Himself)Zrfc2047_simple_quopriZrfc2047_gb2312_base64Zrfc2047_simple_nonascii_quopriZ rfc2047_quopri_with_regular_textN)r$r%r&r]Z string_paramsrrrrrRsrRc @sveZdZdZejddZeeZejdddddd ed Z d d Z d dZ ddZ ddZ ddZddZddZdS)TestDateHeaderzSun, 23 Sep 2001 20:10:55 -0700i)Zhoursi  7)ZtzinfocCsR|d|j}|||j||j|j||j|j||jddSNrLr)r4 datestringr9datetimedt utcoffsetrJr:rrrtest_parse_dates zTestDateHeader.test_parse_datecCs>|d|j}|||j||j|j||jddSrf)r4rir9rgrhrJr:rrrtest_set_from_datetimesz%TestDateHeader.test_set_from_datetimecCs<|d|j}||tj||jd||jddS)NrLrNr)r4rgrrZUniqueDateHeaderr9 max_countrJr:rrrtest_date_header_propertiessz*TestDateHeader.test_date_header_propertiescCs<|d|j}||tj||jd||jddS)Nz resent-dater)r4rgrrZ DateHeaderr9rmrJr:rrr"test_resent_date_header_propertiessz1TestDateHeader.test_resent_date_header_propertiescCs6|dd}|t|jd||jdtjdS)NrLrMrNr)r4r9rOrJrrHeaderMissingRequiredValuer:rrrtest_no_value_is_defects z&TestDateHeader.test_no_value_is_defectcCsB|d|j}|td|_Wdn1s40YdS)NrLrA)r4rgrBrCrhr:rrrtest_datetime_read_onlys z&TestDateHeader.test_datetime_read_onlycCs@ttjd}|j|d<||d|j||dj|jdS)NrDate)rrrWrir9rgrh)rmrrr"test_set_date_header_from_datetimes  z1TestDateHeader.test_set_date_header_from_datetimeN)r$r%r&rgrhZ timedeltarjtimezoneZtzrirkrlrnrorqrrrurrrrr`s  r`c5@seZdZddZddddddigd fd dddddigd fd dddddifd dddiejgfd dddiejgfd dddiejgfddddiejgfddddddddddifddddddifddddddifddddddigdfdddddd igdfddddddifd ddddd!ifd"dddd#d#d$ejgd%fd&d'd(d)d*d+igd,fd-d.d/d0d1d2d3d4gd5d6fd7d.d/d0d1d2d3d8d9gd7d:fd;d.d/d0dd.d/d0dzimage/jpeg/foo) bad/namesrZbadnames)z ImAge/JPeg image/jpegimagejpeg)z text / plain rrr)z"(foo) text (bar)/(baz)plain(stuff)rrrztext/plain; charset="utf-8"zutf-8ztext/plain; charset="US-ASCII"zUS-ASCIIztext/plain; charset="fOo"ZfOoz*text/plain; (interjection) Charset="utf-8"ztext/plain; Charset="utf-8"ztext/plain; title=footitleztext/plain; title="foo"z!text/plain; title="(bar)foo blue"z (bar)foo bluez0text/plain; title=" a loong way home "z a loong way home zblarg; baz; boorM)bazZbooryz0Multipart/mixed; boundary = "CPIMSSMTPC06p5f3tG"zmultipart/mixedZ multipartZmixedboundaryZCPIMSSMTPC06p5f3tGz.Multipart/mixed; boundary="CPIMSSMTPC06p5f3tG"zPimage/jpeg; name="wibble.JPG" ; x-mac-type="4A504547" ; x-mac-creator="474B4F4E"rrrz wibble.JPGZ4A504547Z474B4F4E)r2 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" zmimage/jpeg; name="wibble.JPG"; x-mac-type="4A504547"; x-mac-creator="474B4F4E"; x-extrastuff="make it longer"zmake it longer)r2rrz x-extrastuffz}Content-Type: image/jpeg; name="wibble.JPG"; x-mac-type="4A504547"; x-mac-creator="474B4F4E"; x-extrastuff="make it longer" z$image/jpeg; name="Jim&&Jill"r2zJim&&Jillz!image/jpeg; name="Jim 'Bob' Jill"zJim 'Bob' Jillz#image/jpeg; name="Jim \"Bob\" Jill"zJim "Bob" Jillufoo§/bar; b§r=two; baz=thr§ezlatin-1surrogateescapeu foo�/barufoo�barZtwouthr�e)ub�rru&foo�/bar; b�r="two"; baz="thr�e"uVContent-Type: =?unknown-8bit?q?foo=A7?=/bar; br="two"; baz*=unknown-8bit''thr%A7e z(image/jpeg; name*0="abc"; name*1=".html"zabc.htmlzimage/jpeg; name="abc.html"z.image/jpeg; bar*0="baz\"foobar"; bar*1="\"baz"zbaz"foobar"bazz"image/jpeg; bar="baz\"foobar\"baz"uGtext/plain; charset=us-ascii; title*=us-ascii'en'This%20is%20not%20f§nuThis is not f�n)rru9text/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 z-text/plain; charset*=ansi-x3.4-1968''us-asciiz\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"zvtext/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.pdfrxzz 1.0Nz1.0z1..0z2.xrArM)rrrZ RFC_2045_4Z1_1Z2_1 whitespaceZ#leading_trailing_whitespace_ignoredZnon_comment_garbage_afterZnon_comment_garbage_beforeZnon_comment_garbage_insideZ two_periodsZ2_xrAmissing)r$r%r&rrrrpZversion_string_paramsrrrrrs              rc@seZdZdejgddddddfdgddddddfdgddddddfd gd dd d ddfd gd dddddfdgddddddfdejgddddddfdejgdddddddfdgddddddfd ejgd!d"dd"d#ddfd$ejgd%d&dd&d'ddfd(ejgd)dd)d*ddfd+gd,d-d.d/ddfd0gd1d2d.d/ddfd3ejejgd,d-d.d/ddfd4Zd5d6Zd7d8Zd9d:Z d;d<Z d=d>Z d?d@Z dAdBZ dCdDZdEdFZdGdHZdIdJZdKdLZdMdNZdS)OTestAddressHeader<>rMNzzippy@pinhead.comZzippyz pinhead.comz%Zaphrod Beblebrux zZaphrod Beblebruxz)Zaphrod Beblebrux <"foo bar"@pinhead.com>z"foo bar"@pinhead.comfoo barz'"A \(Special\) Person" z%"A (Special) Person" zA (Special) Personzperson@dom.ainZpersonzdom.ainz."Arthur \\Backslash\\ Foobar" zArthur \Backslash\ FoobarzJohn X. Doe z"John X. Doe" z John X. Doezjxd@example.comZjxd example.comz""example" example"@example.comryz"example example"@example.comzexample examplez!"\"example\" example"@example.comz"example" examplez#"\\"example\\" example"@example.comr<z#"\\example\\\\ example"@example.comz\example\\ examplezmerwok wok @example.comrxz"merwok wok"@example.comz merwok wokzmerwok. wok . wok@example.comzmerwok.wok.wok@example.comzmerwok.wok.wokz'=?utf-8?q?=C3=89ric?= uÉric r^foo@example.comrAz6The =?utf-8?q?=C3=89ric=2C?= Himself u&"The Éric, Himself" r_z)"=?utf-8?q?=C3=89ric?=" )emptyZ address_onlyZname_and_addressZquoted_local_partZquoted_parens_in_nameZquoted_backslashes_in_nameZ name_with_dotZquoted_strings_in_local_partZ$escaped_quoted_strings_in_local_partZescaped_escapes_in_local_partZ'spaces_in_unquoted_local_part_collapsedZ(spaces_around_dots_in_local_part_removedZrfc2047_atom_is_decodedZ!rfc2047_atom_in_phrase_is_decodedZ(rfc2047_atom_in_quoted_string_is_decodedc Cs|d|} || ||| j|| j} |t| ||t| jd|| gt| jdj || gt| j || j ||| j ||| j ||| j |dS)NsenderrNr)r4r9rUrJaddressr8rOgroupslist addresses display_name addr_specusernamedomain) rrXrJrYrrrrcommentrarrrexample_as_addresss  z$TestAddressHeader.example_as_addressc Csd|}|rd|nd} |d|} || | || j||| jdj| j|t| jd|t| jd| jd} |t| ||| j ||| j ||| j ||| j |dS)Nzfoo: {};foo:;torrN) formatr4r9rUrJrrrOr8rrrr) rrXrJrYrrrrrZgdecodedrrrrrexample_as_groups    z"TestAddressHeader.example_as_groupcCsd}|d|}||||t|jd|t|jdtdD]"}||j|jd|j|qH|t|jdd|t|jdd|t|jdd ||jdjd dS) NzTFred , foo@example.com, "Harry W. Hastings" rryrzFred rNrrxz'"Harry W. Hastings" zHarry W. Hastings)r4r9rOrrranger8r)rr3rirrrtest_simple_address_lists    z*TestAddressHeader.test_simple_address_listcCsnt|j}dddd|ddDddddd|ddDd dd d|ddD}d dd d|ddDdddd d|ddDdddd|ddD}|d|}||d|d||||t|jdt|d||jdj d||jdj d||jdj d|t|j t|t dD]D}| |j|dj |t |j|dj d||dq~t ddt|dD]@}| |j|j |t |j|j d||ddqt t|D]@}|t |j |||d||j |j||dq(dS)Nz dummy list:;, another: (empty);,z, cSsg|] }|dqSrr.0xrrr z?TestAddressHeader.test_complex_address_list..z"A \"list\"": cSsg|] }|dqSrrrrrrrrz;,cSsg|] }|dqSrrrrrrrrzdummy list:;, another:;, cSsg|] }|dqSrxrrrrrrrcSsg|] }|dqSrrrrrrrrz;, cSsg|] }|dqSrrrrrrrrr,r=rz dummy listrNZanotherzA "list"rx)rexample_paramsvaluesjoinr4r9splitrOrrrr assertIsNoner8r)rZexamplesrXZexpectedrrrrrtest_complex_address_listsX   ,,z+TestAddressHeader.test_complex_address_listcCs@|dd}|td|_Wdn1s20YdSNrz abc@xyz.comrA)r4rBrCrr:rrrtest_address_read_onlys  z(TestAddressHeader.test_address_read_onlycCs@|dd}|td|_Wdn1s20YdSr)r4rBrCrr:rrrtest_addresses_read_onlys  z*TestAddressHeader.test_addresses_read_onlycCs@|dd}|td|_Wdn1s20YdSr)r4rBrCrr:rrrtest_groups_read_only!s  z'TestAddressHeader.test_groups_read_onlycCs4d}|d|}||jt||jdtdSNzme rr)r4rrrPr rrXrrrrtest_addresses_types&s z&TestAddressHeader.test_addresses_typescCs4d}|d|}||jt||jdtdSr)r4rrrPr rrrrtest_groups_types,s z#TestAddressHeader.test_groups_typescCs$|dtddd}||ddS)NrmerArzme r4r r9r:rrrtest_set_from_Address2sz'TestAddressHeader.test_set_from_AddresscCs0|dtdddtdddg}||ddS)NrrrAryourz+me , you rr:rrrtest_set_from_Address_list6s z,TestAddressHeader.test_set_from_Address_listc Csj|dtdddtdtdddtd d d gtd d dg}||d||jtjjdddddS)NrrrArbingfizzb.comziffc.comrrzPme , bing: fiz , zif ;, you (Zmax_line_lengthrzWto: me , bing: fiz , zif ;, you )r4r r r9rVrrWcloner:rrr$test_set_from_Address_and_Group_list;s   z6TestAddressHeader.test_set_from_Address_and_Group_listc Cs8|dtdtdddtdddgg}||d dS) Nrrrrrrrrz#bing: fiz , zif ;)r4r r r9r:rrrtest_set_from_Group_listGs z*TestAddressHeader.test_set_from_Group_list)r$r%r&rrZObsoleteHeaderDefectrrrrrrrrrrrrrrrrrrr s2                  # rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dES)FTestAddressAndGroupcCs:|tt||dWdn1s,0YdS)NrA)rBrCrD)robjrErrrrFOs z!TestAddressAndGroup._test_attr_rocCs|tdddddS)NrArrrrFr rHrrrtest_address_display_name_roSsz0TestAddressAndGroup.test_address_display_name_rocCs|tdddddS)NrArrrrrHrrrtest_address_username_roVsz,TestAddressAndGroup.test_address_username_rocCs|tdddddS)NrArrrrrHrrrtest_address_domain_roYsz*TestAddressAndGroup.test_address_domain_rocCs|tdddS)NrArrFr rHrrrtest_group_display_name_ro\sz.TestAddressAndGroup.test_group_display_name_rocCs|tdddS)NrArrrHrrrtest_group_addresses_ro_sz+TestAddressAndGroup.test_group_addresses_rocCsXtddd}||jd||jd||jd||jd|t|ddS)NrArrbar@baz foo r r9rrrrr8rrrrr!test_address_from_username_domainbs  z5TestAddressAndGroup.test_address_from_username_domaincCsXtddd}||jd||jd||jd||jd|t|ddS)NrArrrrrrrrrrtest_address_from_addr_specjs  z/TestAddressAndGroup.test_address_from_addr_speccCsVtdd}||jd||jd||jd||jd|t|ddS)NrrrMrrrrrrr!test_address_with_no_display_namers  z5TestAddressAndGroup.test_address_with_no_display_namecCsRt}||jd||jd||jd||jd|t|ddS)NrMrrrrrrtest_null_addresszs z%TestAddressAndGroup.test_null_addresscCsVtdd}||jd||jd||jd||jd|t|ddS)NbuzzrrMz@buzzrrrrrtest_domain_onlys  z$TestAddressAndGroup.test_domain_onlycCsVtdd}||jd||jd||jd||jd|t|ddS)NrrrMrrrrrtest_username_onlys  z&TestAddressAndGroup.test_username_onlycCsTtd}||jd||jd||jd||jd|t|ddS)NrrMrzbuzz <>rrrrrtest_display_name_onlys z*TestAddressAndGroup.test_display_name_onlycCsXtddd}||jd||jd||jd||jd|t|ddS)NzSara J.zbad namerz"bad name"@example.comz""Sara J." <"bad name"@example.com>rrrrr test_quotings  z TestAddressAndGroup.test_quotingcCsXtddd}||jd||jd||jd||jd|t|ddS)Nr^Zwoku exàmple.comuwok@exàmple.comuÉric rrrrr test_il8ns  zTestAddressAndGroup.test_il8ncCstddtddtddtddtddtddtd d td d td d td dtddtddf }|D]j}|j|dJ|tdtfi|Wdn1s0YWdqh1s0YqhdS)Nzfoo )rzfoo zfoo z example.com rz example.com z example.com zwok rzwok zwok zwok@example.com rzwok@example.com zwok@example.com )kwargszinvalid arguments)dictZsubTestZassertRaisesRegex ValueErrorr )rZcasesrrrr$test_crlf_in_constructor_args_raisess z8TestAddressAndGroup.test_crlf_in_constructor_args_raisescCs:|ttdddWdn1s,0YdS)NrAuwők@example.comrrBr r rHrrr+test_non_ascii_username_in_addr_spec_raisess z?TestAddressAndGroup.test_non_ascii_username_in_addr_spec_raisescCs<|ttddddWdn1s.0YdS)NrArr)rrrBrr rHrrr*test_address_addr_spec_and_username_raisess z>TestAddressAndGroup.test_address_addr_spec_and_username_raisescCs<|ttddddWdn1s.0YdS)NrArr)rrr rHrrr(test_address_addr_spec_and_domain_raisess z|t tdddddWdn1s00YdS)NrAZbongrr)rrrr rHrrr5test_address_addr_spec_and_username_and_domain_raisess zITestAddressAndGroup.test_address_addr_spec_and_username_and_domain_raisescCs:|ttdddWdn1s,0YdS)NrAzbad name@example.comrr rHrrr'test_space_in_addr_spec_username_raisess z;TestAddressAndGroup.test_space_in_addr_spec_username_raisescCs:|ttdddWdn1s,0YdS)NrAzname@ex[]ample.comrr rHrrrtest_bad_addr_sepc_raisess z-TestAddressAndGroup.test_bad_addr_sepc_raisescCs:td}||jd||jt|t|ddS)NrArr r9rrrPr8rgrrrtest_empty_groupsz$TestAddressAndGroup.test_empty_groupcCs>tdgd}||jd||jt|t|ddS)NrArrrrrrrtest_empty_group_lists z)TestAddressAndGroup.test_empty_group_listcCs6t}||j||jt|t|ddS)NzNone:;)r rrr9rrPr8rrrrtest_null_groups z#TestAddressAndGroup.test_null_groupcCsVtdddtdddg}td|}||jd||jt||t|ddS)NbcrrAzfoo: b , a ;)r r r9rrrPr8rZaddrsrrrrtest_group_with_addressess  z-TestAddressAndGroup.test_group_with_addressescCsTtdddtdddg}t|d}||j||jt||t|ddS)NrrrrzNone: b , a ;r r rrr9rrPr8rrrr)test_group_with_addresses_no_display_names   z=TestAddressAndGroup.test_group_with_addresses_no_display_namecCsJtdddg}t|d}||j||jt||t|ddS)Nrrrzb rrrrr+test_group_with_one_address_no_display_names   z?TestAddressAndGroup.test_group_with_one_address_no_display_namecCs:td}||jd||jt|t|ddS)Nzfoo.barz "foo.bar":;rrrrrtest_display_name_quotingsz-TestAddressAndGroup.test_display_name_quotingcCs:td}||jd||jt|t|ddS)Nr foo bar:;rrrrr#test_display_name_blanks_not_quoted sz7TestAddressAndGroup.test_display_name_blanks_not_quotedcCsHtddd}ttjd}||d<||dd||dj|fdS)NrArrrTorzfoo )r rrrWr9r)rrrtrrr$test_set_message_header_from_addresss   z8TestAddressAndGroup.test_set_message_header_from_addresscCsDtd}ttjd}||d<||dd||dj|jdS)Nrrr$rr")r rrrWr9r)rrrtrrr"test_set_message_header_from_groups  z6TestAddressAndGroup.test_set_message_header_from_groupcCs~tddd}|tddd||tddd||tddd||tddd|||tk||tkdS)NrArrr)r r9assertNotEqual assertFalseobject assertTruer rrrrtest_address_comparisons z+TestAddressAndGroup.test_address_comparisoncCsttddd}td|g}|td|f||td|g||tdg|||tk||tkdS)NrArrrr)r r r9r'r(r)r*r )rrrrrrtest_group_comparison(s  z)TestAddressAndGroup.test_group_comparisonN)%r$r%r&rFrrrrrrrrrrrrrrr r rrrrrrrrrrr r!r#r%r&r+r,rrrrrMsD     rc@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS) TestFoldingcCs@dD]6\}}|dt|dd}||jtjdd|qdS)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 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.comrrzTo: %s )r4r r9rVrrW)rr2resultrrrrtest_address_display_names4s  z&TestFolding.test_address_display_namescCs&|dd}||jtjdddS)Nr-r7rzsubject: this is a test r4r9rVrrWr:rrrtest_short_unstructuredLs z#TestFolding.test_short_unstructuredcCs&|dd}||jtjdddS)NrzhThis 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 r0r:rrrtest_long_unstructuredQs z"TestFolding.test_long_unstructuredcCs4|dd}||jtjjdddtddS)Nrz1this is a short header that will be folded anywayrcrrz Subject: this is a short header that will be folded anyway r4r9rVrrWrtextwrapdedentr:rrr'test_unstructured_short_max_line_lengthZs  z3TestFolding.test_unstructured_short_max_line_lengthcCs&|dd}||jtjdddS)NrrrzSubject: test r0r:rrr"test_fold_unstructured_single_wordfs z.TestFolding.test_fold_unstructured_single_wordcCs&|dd}||jtjdddS)Nrztest test testrzSubject: test test test r0r:rrrtest_fold_unstructured_shortjs z(TestFolding.test_fold_unstructured_shortcCs.|dd}||jtjjdddddS)NrZ5thisisaverylonglineconsistingofasinglewordthatwontfitrcrrzSubject: =?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?= r4r9rVrrWrr:rrr)test_fold_unstructured_with_overlong_wordos  z5TestFolding.test_fold_unstructured_with_overlong_wordcCs.|dd}||jtjjdddddS)NrzXthisisaverylonglineconsistingofasinglewordthatwontfit plusanotherverylongwordthatwontfitrcrraSubject: =?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?= r9r:rrr.test_fold_unstructured_with_two_overlong_wordss  z:TestFolding.test_fold_unstructured_with_two_overlong_wordscCs.|dd}||jtjjdddddS)NrZ thislongwordislessthanmaxlinelen#rrz+Subject: thislongwordislessthanmaxlinelen r9r:rrr.test_fold_unstructured_with_slightly_long_words  z:TestFolding.test_fold_unstructured_with_slightly_long_wordcCs4|dd}||jtjjdddtddS)NrzThis header is intended to demonstrate, in a fairly succinct way, that we now do not give a , special treatment in unstructured headers.<rrz Subject: This header is intended to demonstrate, in a fairly succinct way, that we now do not give a , special treatment in unstructured headers. r3r:rrr"test_fold_unstructured_with_commass  z.TestFolding.test_fold_unstructured_with_commascCs,|dd}||jtjdtddS)Nr$z"Theodore H. Perfect" , "My address is very long because my name is long" , "Only A. Friend" rz To: "Theodore H. Perfect" , "My address is very long because my name is long" , "Only A. Friend" )r4r9rVrrWr4r5r:rrrtest_fold_address_lists z"TestFolding.test_fold_address_listcCs&|dd}||jtjdddS)NrszSat, 2 Feb 2002 17:00:06 -0800rz&Date: Sat, 02 Feb 2002 17:00:06 -0800 r0r:rrrtest_fold_date_headers z!TestFolding.test_fold_date_headercCs&|dd}||jtjdddS)NzX-Report-Abusez]rzX-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?= r0r:rrr&test_fold_overlong_words_using_RFC2047s z2TestFolding.test_fold_overlong_words_using_RFC2047cCs|dd}||jtjjdddd|dd}||jtjjdddd|dd }||jtjjd ddd |dd }||jtjjdddd dS)Nz Message-IDz+rcrrz8Message-ID: z1z>Message-ID: u<ईमेल@wők.com>u$Message-ID: <ईमेल@wők.com> u"<ईमेलfromMessage@wők.com>u0Message-ID: <ईमेलfromMessage@wők.com> r9r:rrr$test_message_id_header_is_not_foldeds4  z0TestFolding.test_message_id_header_is_not_foldedN)r$r%r&r/r1r2r6r7r8r:r;r=r?r@rArBrDrrrrr-2s     r-__main__)!rhr4ZunittestZemailrrZ email.messagerZtest.test_emailrrrZemail.headerregistryr r Z test.supportr r)r{r r1r5rRr`rwrrrrrr-r$mainrrrrsP     :.(1/'R.f1