a 8êdgK:ã@s†ddlZddlZddlZddlZddlZddlmZmZddlm Z ddl m Z ddl m Z ddlmZddlZddlZddlmZddlmZmZmZdd lmZmZdd lmZmZmZdd lm Z dd l!m"Z"dd l#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0ddlm1Z1ddlm2Z2ddlm3Z3ddlm4Z4ddlm5Z5ddlm6Z6ddl7m8Z8m9Z9ddl:m;Z;mZ>dZ?dZ@dZAGd d!„d!e<ƒZBGd"d#„d#ejCƒZDGd$d%„d%e<ƒZEGd&d'„d'ejCƒZFGd(d)„d)ejCƒZGGd*d+„d+ejCƒZHGd,d-„d-ejCƒZIGd.d/„d/ejCƒZJGd0d1„d1e<ƒZKGd2d3„d3e<ƒZLGd4d5„d5e<ƒZMGd6d7„d7e<ƒZNGd8d9„d9e<ƒZOGd:d;„d;e<ƒZPGdd?„d?e<ƒZRGd@dA„dAe<ƒZSGdBdC„dCe<ƒZTGdDdE„dEƒZUGdFdG„dGeUeOƒZVGdHdI„dIeUeOƒZWGdJdK„dKejCƒZXGdLdM„dMejCƒZYGdNdO„dOejCƒZZGdPdQ„dQe<ƒZ[GdRdS„dSe<ƒZ\GdTdU„dUe<ƒZ]e^dVkr‚e _¡dS)WéN)ÚStringIOÚBytesIO)Úchain©Úchoice)ÚThread)Úpatch)ÚCharset)ÚHeaderÚ decode_headerÚ make_header)ÚParserÚ HeaderParser)Ú GeneratorÚDecodedGeneratorÚBytesGenerator)ÚMessage)ÚMIMEApplication)Ú MIMEAudio)ÚMIMEText)Ú MIMEImage)ÚMIMEBase)Ú MIMEMessage)Ú MIMEMultipart)ÚMIMENonMultipart)Úutils©Úerrors)Úencoders)Ú iterators)Ú base64mime)Ú quoprimime)ÚunlinkÚ start_threads)ÚopenfileÚ TestEmailBase)Ú FeedParserÚBytesFeedParserÚ Úú c@s´eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dSdT„Z,dUdV„Z-dWdX„Z.dYdZ„Z/d[d\„Z0d]d^„Z1d_d`„Z2dadb„Z3dcdd„Z4dedf„Z5dgdh„Z6didj„Z7dkdl„Z8dmdn„Z9dodp„Z:dqdr„Z;dsdt„Zdydz„Z?d{d|„Z@d}d~„ZAdd€„ZBdd‚„ZCdƒd„„ZDd…d†„ZEd‡dˆ„ZFd‰dŠ„ZGd‹dŒ„ZHddŽ„ZIdd„ZJd‘d’„ZKd“d”„ZLd•d–„ZMd—d˜„ZNd™dš„ZOd›dœ„ZPddž„ZQdŸd „ZRd¡d¢„ZSd£d¤„ZTd¥d¦„ZUd§d¨„ZVd©dª„ZWd«S)¬ÚTestMessageAPIcCs:|j}| d¡}|| d¡gd¢ƒ|| dd¡dƒdS)Nz msg_20.txtZcc)z ccc@zzz.orgz ddd@zzz.orgz eee@zzz.orgÚxxzn/a)Ú assertEqualÚ_msgobjÚget_all©ÚselfÚeqÚmsg©r4ú6/usr/local/lib/python3.9/test/test_email/test_email.pyÚ test_get_all6s zTestMessageAPI.test_get_allcCs|j}tƒ}|| ¡dƒtdƒ}| |¡||ddƒ|| ¡dƒ||ddƒ|| d¡dƒ||dd ƒ|| ¡jdƒ| d¡|| ¡dƒ||ddƒtƒ}d |d <d |d <d|d<| |¡||dd ƒ||ddƒ||ddƒdS)Nú iso-8859-1ú mime-versionz1.0ú text/plainú content-typez text/plain; charset="iso-8859-1"Úcharsetúcontent-transfer-encodingúquoted-printablez2.0z MIME-Versionz text/x-weirdú Content-Typezquinted-puntableúContent-Transfer-Encodingz"text/x-weird; charset="iso-8859-1")r-rÚ get_charsetr Ú set_charsetÚget_content_typeÚ get_paramÚ input_charset©r1r2r3r;r4r4r5Útest_getset_charset<s,   z"TestMessageAPI.test_getset_charsetcCs8|j}tƒ}| d¡|| ¡jdƒ||ddƒdS)Núus-asciir:útext/plain; charset="us-ascii")r-rrAr@rDr0r4r4r5Útest_set_charset_from_stringVs  z+TestMessageAPI.test_set_charset_from_stringcCs0tƒ}tdƒ}| d|¡| | ¡jd¡dS)Nr7zThis is a string payload)rr Ú set_payloadr-r@rD)r1r3r;r4r4r5Útest_set_payload_with_charset]s z,TestMessageAPI.test_set_payload_with_charsetcCsVd}tdƒ}tƒ}| ||¡| |dd¡| |jdd|¡| | ¡d¡dS)NóÐБВúutf-8r<Úbase64T©Údecodez 0JDQkdCS )r rrJr-Ú get_payload©r1Údatar;r3r4r4r5Ú+test_set_payload_with_8bit_data_and_charsetcs z:TestMessageAPI.test_set_payload_with_8bit_data_and_charsetcCsRd}tdƒ}d|_tƒ}| | d¡|¡| |dd¡| |jdd|¡dS©NrLrMr<Ú8bitTrO)r Ú body_encodingrrJrPr-rQrRr4r4r5Ú>test_set_payload_with_non_ascii_and_charset_body_encoding_nonelszMTestMessageAPI.test_set_payload_with_non_ascii_and_charset_body_encoding_nonecCsLd}tdƒ}d|_tƒ}| ||¡| |dd¡| |jdd|¡dSrU)r rWrrJr-rQrRr4r4r5Ú>test_set_payload_with_8bit_data_and_charset_body_encoding_noneus zMTestMessageAPI.test_set_payload_with_8bit_data_and_charset_body_encoding_nonecCs$tƒ}| g¡| | ¡g¡dS©N©rrJr-rQ©r1r3r4r4r5Útest_set_payload_to_list~s z'TestMessageAPI.test_set_payload_to_listcCs8tƒ}d|d<| d¡ttƒƒ}| td|j|¡dS)Númultipart/mixedr>zstring payloadz[Aa]ttach.*non-multipart)rrJrZassertRaisesRegexÚ TypeErrorÚattach)r1r3Zsub_msgr4r4r5Ú"test_attach_when_payload_is_stringƒs  ÿz1TestMessageAPI.test_attach_when_payload_is_stringcCsl|j}| d¡}| ¡}||gd¢ƒ| d¡}| d¡}||gd¢ƒ| d¡}| ¡}||gd¢ƒdS)Nz msg_08.txt)NrGr7ú iso-8859-2úkoi8-rz msg_09.txtÚdingbat)rdrGr7rdrcz msg_12.txt)NrGr7Nrbz iso-8859-3rGrc)r-r.Ú get_charsets)r1r2r3Úcharsetsr4r4r5Útest_get_charsets‹s    z TestMessageAPI.test_get_charsetscCsV|j}| d¡}dd„| ¡Dƒ}||ddgƒ| d¡}| d¡}|| ¡dƒdS)Nú msg_04.txtcSsg|] }| ¡‘qSr4©Ú get_filename©Ú.0Úpr4r4r5Ú  óz4TestMessageAPI.test_get_filename..úmsg.txtú msg_07.txtéúdingusfish.gif)r-r.rQrj)r1r2r3Ú filenamesÚsubpartr4r4r5Útest_get_filenameœs   z TestMessageAPI.test_get_filenamecCs4|j}| d¡}dd„| ¡Dƒ}||ddgƒdS)Nz msg_44.txtcSsg|] }| ¡‘qSr4rirkr4r4r5rn«rozHTestMessageAPI.test_get_filename_with_name_parameter..rp©r-r.rQ)r1r2r3rtr4r4r5Ú%test_get_filename_with_name_parameter§s z4TestMessageAPI.test_get_filename_with_name_parametercCs"|j}| d¡}|| ¡dƒdS)NrqÚBOUNDARY)r-r.Ú get_boundaryr0r4r4r5Útest_get_boundary®s z TestMessageAPI.test_get_boundarycCsž|j}| d¡}| d¡| ¡d\}}|| ¡dƒ||dƒ| d¡}| d¡| ¡d\}}|| ¡dƒ||dƒ| d¡}| tj|jd¡dS) Nú msg_01.txtryér:z3text/plain; charset="us-ascii"; boundary="BOUNDARY"rhz$multipart/mixed; boundary="BOUNDARY"ú msg_03.txt)r-r.Ú set_boundaryÚitemsÚlowerÚ assertRaisesrÚHeaderParseError)r1r2r3ÚheaderÚvaluer4r4r5Útest_set_boundary´s       ÿz TestMessageAPI.test_set_boundarycCsLtdƒ}| | ¡ddd¡| ¡| | ¡dddd…d¡dS)Nz form-datarrrzmultipart/form-dataé!z!multipart/form-data; boundary="==)rr-r€Ú as_stringr\r4r4r5Útest_make_boundaryÊs ÿz!TestMessageAPI.test_make_boundarycCsrtdƒ}| ¡}Wdƒn1s&0Ytƒ}| |¡}tƒ}t|ddƒ}| |d¡| | ¡|¡dS)Nú msg_46.txtTrF) r$ÚreadrÚparsestrrrÚflattenr-Úgetvalue©r1ÚfpZmsgdataÚparserr3ÚoutÚgenr4r4r5Útest_message_rfc822_onlyÕs &   z'TestMessageAPI.test_message_rfc822_onlycCsztdƒ}| ¡ d¡}Wdƒn1s,0Ytj ¡}| |¡}tƒ}tj  |¡}|  |¡|  |  ¡|¡dS)NrŠÚascii) r$r‹ÚencodeÚemailr‘ÚBytesHeaderParserZ parsebytesrÚ generatorrrr-rŽrr4r4r5Útest_byte_message_rfc822_onlyás ,    z,TestMessageAPI.test_byte_message_rfc822_onlycCsž|j}| d¡}||jdddƒ|| d¡jdddƒ|| d¡jdddƒ|| d¡jddd ƒ|| d ¡jddd ƒ|| d ¡jddd ƒdS)Nz msg_10.txtTrOrs This is a 7bit encoded message. rrs-¡This is a Quoted Printable encoded message! és!This is a Base64 encoded message.és"This is a Base64 encoded message. r}s/This has no Content-Transfer-Encoding: header. rwr0r4r4r5Útest_get_decoded_payloadìs$ ÿÿÿÿÿz'TestMessageAPI.test_get_decoded_payloadcCsZ|j}tƒ}| d¡dD]}||d<||jdddƒq| d¡||jdddƒdS) Nz$begin 666 - +:&5L;&\@=V]R;&0 end ©z x-uuencodeÚuuencodeZuuezx-uuer<TrOó hello worldÚfoosfoo)r-rrJrQ)r1r2r3Úcter4r4r5Útest_get_decoded_uu_payloads  z*TestMessageAPI.test_get_decoded_uu_payloadcCstƒ}| t|jd¡dS)Nrr)rr‚r_rQr\r4r4r5Ú*test_get_payload_n_raises_on_non_multipart sz9TestMessageAPI.test_get_payload_n_raises_on_non_multipartcCsj|j}| d¡}tdƒ}| ¡}Wdƒn1s60Ytƒ}t|ƒ}| |¡|| ¡|ƒdS)Nrqz msg_17.txt)r-r.r$r‹rrrrŽ)r1r2r3rÚtextÚsÚgr4r4r5Útest_decoded_generators  & z%TestMessageAPI.test_decoded_generatorcCsbtƒ}d|d<d|d<| d|¡| d|¡| d|¡| d|¡| d|¡| d|¡dS) NZMeÚFromZYouÚtoÚfromZFROMÚToZTO)rÚassertInr\r4r4r5Útest__contains__s     zTestMessageAPI.test__contains__cCs’| d¡}tdƒ}| ¡}Wdƒn1s00Y| |t|ƒ¡|jdd}| d¡}| |d d¡¡| |t   |dd…¡¡dS)Nr|T©Úunixfromr(rzFrom rr) r.r$r‹r-ÚstrrˆÚsplitÚ assertTrueÚ startswithÚNLÚjoin)r1r3rr¥ÚfullreprÚlinesr4r4r5Útest_as_string's  &  zTestMessageAPI.test_as_stringcCsT| d¡}|jjdd}|j|d}tƒ}t||d}| |¡| || ¡¡dS©Nr|ú ©Úlinesep©Úpolicy) r.r¿Úclonerˆrrrr-rŽ©r1r3Z newpolicyr·r¦r§r4r4r5Útest_as_string_policy1s    z$TestMessageAPI.test_as_string_policycCs<t d¡}| d¡}t d¡}t |¡}| | ¡|¡dS)Nuê MIME-Version: 1.0 Content-type: text/plain; charset="iso-8859-1" Test if non-ascii messages with no Content-Transfer-Encoding set can be as_string'd: Föö bär r7a% MIME-Version: 1.0 Content-type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Test if non-ascii messages with no Content-Transfer-Encoding set can be as_string'd: F=F6=F6 b=E4r )ÚtextwrapÚdedentr–r—Úmessage_from_bytesr-rˆ©r1ÚmÚsourceÚexpectedr3r4r4r5Ú#test_nonascii_as_string_without_cte:s    z2TestMessageAPI.test_nonascii_as_string_without_ctecCs>t d¡}| d¡}| dd¡}t |¡}| | ¡|¡dS)NuÀ MIME-Version: 1.0 Test if non-ascii messages with no Content-Type nor Content-Transfer-Encoding set can be as_string'd: Föö bär r7r•Úreplace)rÃrÄr–rPr—rÅr-rˆrÆr4r4r5Ú4test_nonascii_as_string_without_content_type_and_ctePs     zCTestMessageAPI.test_nonascii_as_string_without_content_type_and_ctecCs˜| d¡}tdƒ}| ¡ d¡}Wdƒn1s60Y| |t|ƒ¡|jdd}| d¡}| |d  d¡¡| |d  |dd…¡¡dS) Nr|r•Tr¯ó rsFrom rr) r.r$r‹r–r-ÚbytesÚas_bytesr²r³r´r¶)r1r3rrSr·r¸r4r4r5Ú test_as_bytes]s  ,  zTestMessageAPI.test_as_bytescCsT| d¡}|jjdd}|j|d}tƒ}t||d}| |¡| || ¡¡dSrº) r.r¿rÀrÏrrrr-rŽrÁr4r4r5Útest_as_bytes_policygs    z#TestMessageAPI.test_as_bytes_policycCs t d¡}| | d¡d¡dS)NzContent-Type: blarg; baz; boo Úbazr)©r—Úmessage_from_stringr-rCr\r4r4r5Útest_bad_paramqs zTestMessageAPI.test_bad_paramcCst d¡}| | ¡d¡dS©Nz From: foo ©r—rÔr-rjr\r4r4r5Útest_missing_filenameus z$TestMessageAPI.test_missing_filenamecCst d¡}| | ¡d¡dS)Nz%Content-Disposition: blarg; filename r)r×r\r4r4r5Útest_bogus_filenameysÿz"TestMessageAPI.test_bogus_filenamecCst d¡}| | ¡d¡dSrÖ©r—rÔr-rzr\r4r4r5Útest_missing_boundary~s z$TestMessageAPI.test_missing_boundarycCsx|j}t d¡}||jddgd¢ƒt d¡}||jddgd¢ƒ|| ¡dƒt d¡}||jddgd¢ƒdS)Nú&X-Header: foo=one; bar=two; baz=three úx-header©r„))r¡Úone)ÚbarÚtwo©rÒZthreez X-Header: foo; bar=one; baz=two ))r¡r))ràrß)rÒráú"X-Header: foo; bar="one"; baz=two )r-r—rÔÚ get_paramsr0r4r4r5Útest_get_params‚s(ÿ ÿÿ ÿÿ ÿzTestMessageAPI.test_get_paramscCs$tƒ}d|d<| | d¡d¡dS)Nz>Content-Type: Multipart/mixed; boundary = "CPIMSSMTPC06p5f3tG"r>ÚboundaryZCPIMSSMTPC06p5f3tG)rr-rCr\r4r4r5Útest_get_param_liberal“sz%TestMessageAPI.test_get_param_liberalcCs’|j}t d¡}||jddddƒ||jddddƒ|| d¡dƒt d¡}||jdddd ƒ||jdddd ƒ||jd dddƒdS) NrÜràrÝrÞráZquuzrãr¡r)rßrÒ©r-r—rÔrCr0r4r4r5Útest_get_param˜sÿÿzTestMessageAPI.test_get_paramcCs&| d¡}| | d¡ d¡d¡dS)Nz msg_22.txtrrÚnamez wibble.JPG)r.r-rQrCr\r4r4r5Ú'test_get_param_funky_continuation_linesªs z6TestMessageAPI.test_get_param_funky_continuation_linescCs6t d¡}| | d¡d¡| |jdddd¡dS)Nz4Content-Type: image/pjpeg; name="Jim&&Jill" rêzJim&&JillF©Úunquotez"Jim&&Jill"rÓr\r4r4r5Ú#test_get_param_with_semis_in_quotes¯sÿÿz2TestMessageAPI.test_get_param_with_semis_in_quotescCs<t d¡}| | d¡d¡t d¡}| | d¡d¡dS)Nz5Content-Type: foo; bar*0="baz\"foobar"; bar*1="\"baz"ràzbaz"foobar"bazrÓr\r4r4r5Útest_get_param_with_quotes·sÿÿz)TestMessageAPI.test_get_param_with_quotescCs>t d¡}| d|¡| d|¡| d|¡| d|¡dS)NzHeader: existsr„r ZHEADERZheaderx)r—rÔr­Z assertNotInr\r4r4r5Útest_field_containment¿s     z%TestMessageAPI.test_field_containmentcCs¨|j}tƒ}| dd¡|| d¡dƒ| dd¡|| d¡dƒ||jddddƒ|| ¡gd¢ƒ||jddgd ¢ƒ|jdd d d ||jdd d d ƒdS) Nr;ú iso-2022-jpÚ importanceú high valueFrìú "high value")©r9r))r;rñ)ròró)rõ)r;z "iso-2022-jp")ròrôz iso-9999-xxzX-JimmyrÞ)r-rÚ set_paramrCrär0r4r4r5Útest_set_paramÆs  zTestMessageAPI.test_set_paramcCsp|j}| d¡}|| ¡gd¢ƒ| d¡}| d¡|| ¡ddgƒ| d|¡|| ¡ddd|fgƒdS)Nú msg_05.txt)©úmultipart/reportr))ú report-typeúdelivery-status©ræú%D1690A7AC1.996856090/mail.example.comrûrùrý)r-r.rärCÚ del_paramrö)r1r2r3Zold_valr4r4r5Útest_del_param×s& ÿ  ÿÿ þÿzTestMessageAPI.test_del_paramcCs6tƒ}|jdddd| dd¡| |dd¡dS)NúContent-DispositionÚ attachmentúbud.gif©Úfilenamerúcontent-disposition©rÚ add_headerrÿr-r\r4r4r5Útest_del_param_on_other_headerès z-TestMessageAPI.test_del_param_on_other_headercCstƒ}| dd¡dS)Nrr)rrÿr\r4r4r5Ú$test_del_param_on_nonexistent_headerîsz3TestMessageAPI.test_del_param_on_nonexistent_headercCs@tƒ}|jdddd|d}|jddd| |d|¡dS)Nr>r9rM©r;ÚfoobarrÞr)r1r3Zexisting_headerr4r4r5Útest_del_nonexistent_paramós z)TestMessageAPI.test_del_nonexistent_paramcCsj|j}tƒ}| t|jd¡| d¡||ddƒ| dd¡||ddƒ| d¡||ddƒdS) Nr¥r9r:r;rGrHz text/htmlztext/html; charset="us-ascii")r-rr‚Ú ValueErrorÚset_typerör0r4r4r5Ú test_set_typeús   zTestMessageAPI.test_set_typecCs.tƒ}d|d<| dd¡| |dd¡dS)Nr9zX-Content-Typeúapplication/octet-streamzx-content-type)rrr-r\r4r4r5Útest_set_type_on_other_headers z,TestMessageAPI.test_set_type_on_other_headercCstƒ}| | ¡d¡dS)Nr9)rr-rBr\r4r4r5Útest_get_content_type_missing sz,TestMessageAPI.test_get_content_type_missingcCs$tƒ}| d¡| | ¡d¡dS)Númessage/rfc822)rÚset_default_typer-rBr\r4r4r5Ú/test_get_content_type_missing_with_default_types z>TestMessageAPI.test_get_content_type_missing_with_default_typecCs$| d¡}| | d¡ ¡d¡dS)Nú msg_30.txtrr©r.r-rQrBr\r4r4r5Ú+test_get_content_type_from_message_implicits ÿz:TestMessageAPI.test_get_content_type_from_message_implicitcCs$| d¡}| | d¡ ¡d¡dS)Nú msg_28.txtrrrr\r4r4r5Ú+test_get_content_type_from_message_explicits ÿz:TestMessageAPI.test_get_content_type_from_message_explicitcCs| d¡}| | ¡d¡dS)Nr~r9©r.r-rBr\r4r4r5Ú6test_get_content_type_from_message_text_plain_implicits zETestMessageAPI.test_get_content_type_from_message_text_plain_implicitcCs| d¡}| | ¡d¡dS)Nr|r9rr\r4r4r5Ú6test_get_content_type_from_message_text_plain_explicit"s zETestMessageAPI.test_get_content_type_from_message_text_plain_explicitcCstƒ}| | ¡d¡dS)Nr¥©rr-Úget_content_maintyper\r4r4r5Ú!test_get_content_maintype_missing&sz0TestMessageAPI.test_get_content_maintype_missingcCs$tƒ}| d¡| | ¡d¡dS)NrÚmessage)rrr-r r\r4r4r5Ú3test_get_content_maintype_missing_with_default_type*s zBTestMessageAPI.test_get_content_maintype_missing_with_default_typecCs$| d¡}| | d¡ ¡d¡dS)Nrrr"©r.r-rQr r\r4r4r5Ú/test_get_content_maintype_from_message_implicit/s z>TestMessageAPI.test_get_content_maintype_from_message_implicitcCs$| d¡}| | d¡ ¡d¡dS)Nrrr"r$r\r4r4r5Ú/test_get_content_maintype_from_message_explicit3s z>TestMessageAPI.test_get_content_maintype_from_message_explicitcCs| d¡}| | ¡d¡dS)Nr~r¥©r.r-r r\r4r4r5Ú:test_get_content_maintype_from_message_text_plain_implicit7s zITestMessageAPI.test_get_content_maintype_from_message_text_plain_implicitcCs| d¡}| | ¡d¡dS)Nr|r¥r'r\r4r4r5Ú:test_get_content_maintype_from_message_text_plain_explicit;s zITestMessageAPI.test_get_content_maintype_from_message_text_plain_explicitcCstƒ}| | ¡d¡dS)NÚplain©rr-Úget_content_subtyper\r4r4r5Ú test_get_content_subtype_missing?sz/TestMessageAPI.test_get_content_subtype_missingcCs$tƒ}| d¡| | ¡d¡dS)NrÚrfc822)rrr-r,r\r4r4r5Ú2test_get_content_subtype_missing_with_default_typeCs zATestMessageAPI.test_get_content_subtype_missing_with_default_typecCs$| d¡}| | d¡ ¡d¡dS)Nrrr.©r.r-rQr,r\r4r4r5Ú.test_get_content_subtype_from_message_implicitHs z=TestMessageAPI.test_get_content_subtype_from_message_implicitcCs$| d¡}| | d¡ ¡d¡dS)Nrrr.r0r\r4r4r5Ú.test_get_content_subtype_from_message_explicitLs z=TestMessageAPI.test_get_content_subtype_from_message_explicitcCs| d¡}| | ¡d¡dS)Nr~r*©r.r-r,r\r4r4r5Ú9test_get_content_subtype_from_message_text_plain_implicitPs zHTestMessageAPI.test_get_content_subtype_from_message_text_plain_implicitcCs| d¡}| | ¡d¡dS)Nr|r*r3r\r4r4r5Ú9test_get_content_subtype_from_message_text_plain_explicitTs zHTestMessageAPI.test_get_content_subtype_from_message_text_plain_explicitcCs"tƒ}d|d<| | ¡d¡dS)Núno-slash-in-this-stringr>r¥rr\r4r4r5Útest_get_content_maintype_errorXsz.TestMessageAPI.test_get_content_maintype_errorcCs"tƒ}d|d<| | ¡d¡dS)Nr6r>r*r+r\r4r4r5Útest_get_content_subtype_error]sz-TestMessageAPI.test_get_content_subtype_errorcCsÖ|j}tƒ}| dd¡| dd¡| dd¡|| ¡gd¢ƒ|| ¡gd¢ƒ| dd ¡|| ¡gd¢ƒ|| ¡gd ¢ƒ| dd ¡| dd ¡|| ¡gd ¢ƒ|| ¡gd¢ƒ| t|jdd¡dS)NÚFirstÚOneÚSecondÚTwoÚThirdÚThree)r9r;r=)r:r<r>ÚTwenty)r:r?r>ÚElevenú One Hundred)r9r;r=r9)rAr?r>r@ZFourthZMissing)r-rrÚkeysÚvaluesÚreplace_headerr‚ÚKeyErrorr0r4r4r5Útest_replace_headerbs      z"TestMessageAPI.test_replace_headercCsptƒ}| | ¡¡|jdddd| | ¡d¡| dd¡| | ¡d¡| dd¡| | ¡d¡dS)Nrrz random.avirÚinlineZInlinE)rÚ assertIsNoneZget_content_dispositionrr-rDr\r4r4r5Útest_get_content_dispositionssÿ  z+TestMessageAPI.test_get_content_dispositioncCsPd}tƒ}d|d<d|d<| |¡| |jddd¡| |jd tj¡dS) NzAwDp0P7//y6LwKEAcPa/6Q=9z audio/x-midir:rNr<TrOséÐþÿÿ.‹À¡pö¿ér)rrJr-rQÚassertIsInstanceÚdefectsrÚInvalidBase64CharactersDefect©r1Úxr3r4r4r5Útest_broken_base64_payloads ÿ ÿz)TestMessageAPI.test_broken_base64_payloadcCsBd}tƒ}d|d<d|d<| |¡| |jddt|dƒ¡dS) Nuthis is a bröken thing to dor9r:rVr<TrOzraw-unicode-escape)rrJr-rQrÎrMr4r4r5Útest_broken_unicode_payload‹s ÿz*TestMessageAPI.test_broken_unicode_payloadcCs>d d¡}tƒ}d|d<d|d<||_| |jdd|¡dS) Nu#this is a quéstionable thing to dorMútext/plain; charset="utf-8"r:rVr<TrO)r–rZ_payloadr-rQrMr4r4r5Útest_questionable_bytes_payload–s  z.TestMessageAPI.test_questionable_bytes_payloadcCs*tƒ}|jdddd| d|d¡dS)Nrrrrzattachment; filename="bud.gif"©rrr-r\r4r4r5Útest_ascii_add_header¡sÿÿz$TestMessageAPI.test_ascii_add_headercCs*tƒ}|jdddd| d|d¡dS)NrrõFußballer.pptrz/attachment; filename*=utf-8''Fu%C3%9Fballer.pptrSr\r4r4r5Útest_noascii_add_header¨sÿþz&TestMessageAPI.test_noascii_add_headercCs*tƒ}|jdddd| d|d¡dS)Nrr)r7r)rUrz1attachment; filename*=iso-8859-1''Fu%DFballer.pptrSr\r4r4r5Ú#test_nonascii_add_header_via_triple°sÿþz2TestMessageAPI.test_nonascii_add_header_via_triplecCs*tƒ}|jdddd| d|d¡dS)Nrrzwindows [filename].pptrz-attachment; filename="windows [filename].ppt"rSr\r4r4r5Ú#test_ascii_add_header_with_tspecial¸sÿþz2TestMessageAPI.test_ascii_add_header_with_tspecialcCs*tƒ}|jdddd| d|d¡dS)NrruFußballer [filename].pptrz@attachment; filename*=utf-8''Fu%C3%9Fballer%20%5Bfilename%5D.pptrSr\r4r4r5Ú&test_nonascii_add_header_with_tspecialÀsÿþz5TestMessageAPI.test_nonascii_add_header_with_tspecialcCsLdD]B}tƒ}d||d<d|d<| d¡| |jddd d |¡qdS) N©úlatin-1r•útext/plain; charset=%sr:r=r<sfoo=e6=96=87barTrOó fooæ–‡barú1get_payload returns wrong result with charset %s.r[©r1r;r3r4r4r5Útest_binary_quopri_payloadÈs   ýz)TestMessageAPI.test_binary_quopri_payloadcCsLdD]B}tƒ}d||d<d|d<| d¡| |jddd d |¡qdS) NrZr\r:rNr<s Zm9v5paHYmFyTrOr]r^r[r_r4r4r5Útest_binary_base64_payloadÓs   ýz)TestMessageAPI.test_binary_base64_payloadc Cs^dD]T}dD]J}tƒ}d||d<||d<| d¡| |jddd td ƒ ||¡¡q qdS) NrZržr\r:r<s begin 666 - )9F]OYI:'8F%R end TrOr])z!get_payload returns wrong result z"with charset {0} and encoding {1}.)rrJr-rQr±Úformat)r1r;Úencodingr3r4r4r5Útest_binary_uuencode_payloadÞs   þýz+TestMessageAPI.test_binary_uuencode_payloadcCs*tƒ}|jdddd| d|d¡dS)NrrG)Zfoo_barzinline; foo-barrSr\r4r4r5Ú$test_add_header_with_name_only_paramìsz3TestMessageAPI.test_add_header_with_name_only_paramcCs&tƒ}| dd¡| d|d¡dS)NzX-Statusr)rSr\r4r4r5Útest_add_header_with_no_valueñs z,TestMessageAPI.test_add_header_with_no_valuecCs&tƒ}tdƒ|d<| tj|j¡dS©Nzdummy X-Injected-Header: testZDummy)rr r‚rrƒrˆr\r4r4r5Ú(test_embedded_header_via_Header_rejectedøs z7TestMessageAPI.test_embedded_header_via_Header_rejectedcCs"tƒ}d|d<| tj|j¡dSrg)rr‚rrƒrˆr\r4r4r5Ú(test_embedded_header_via_string_rejectedýsz7TestMessageAPI.test_embedded_header_via_string_rejectedcCs*tdƒ}d|d<| t|ƒt d¡¡dS)Nzabc uÉ testÚSubjectzÍ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: =?utf-8?q?=C3=89_test?= abc ©rr-r±rÃrÄ©r1rÇr4r4r5Ú-test_unicode_header_defaults_to_utf8_encodingsz.éL) r$r‹r—ÚmimeÚimagerrQr²ÚassertLessEqualÚmax)r1rÚbindataZmimedZbase64edr¸r4r4r5Útest_EncodersEncode_base64s  & z'TestEncoders.test_EncodersEncode_base64cCs(|j}tƒ}| d¡||ddƒdS)NrGr<Ú7bit)r-rrAr0r4r4r5Útest_encode_empty_payload's z&TestEncoders.test_encode_empty_payloadcCsP|j}tdƒ}||ddƒtdƒ}||ddƒtddd}||ddƒdS) Nú hello worldr<r~uhello ø worldrNr7©Ú_charsetr=)r-rr0r4r4r5Útest_default_cte-s zTestEncoders.test_default_ctecCs8|j}tddd}||ddƒ|| ¡t d¡ƒdS)Nuæ–‡ úeuc-jprr<r~z¨ MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit $BJ8(B )r-rrˆrÃrÄr0r4r4r5Útest_encode7or8bit9s zTestEncoders.test_encode7or8bitcCs&tdddƒ}| t|ƒt d¡¡dS)Nuáö r¥z ISO-8859-1z° MIME-Version: 1.0 Content-Type: text/text; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable =E1=F6 rkr\r4r4r5Útest_qp_encode_latin1Hs z"TestEncoders.test_qp_encode_latin1cCs&tdddƒ}| t|ƒt d¡¡dS)Nuż r¥z ISO-8859-2z­ MIME-Version: 1.0 Content-Type: text/text; charset="iso-8859-2" Content-Transfer-Encoding: quoted-printable =BF rkr\r4r4r5Útest_qp_encode_non_latin1Rs z&TestEncoders.test_qp_encode_non_latin1N) rorprqr}rrƒr…r†r‡r4r4r4r5rrs    rrc@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Z dd?„Z"d@dA„Z#dBdC„Z$dDdE„Z%dFdG„Z&dHdI„Z'dJdK„Z(dLdM„Z)dNdO„Z*dS)PÚTestLongHeadersNcCs:|j}t d¡}tƒ}t|ƒ}| |¡|| ¡dƒdS)NzºSubject: bug demonstration 12345678911234567892123456789312345678941234567895123456789612345678971234567898112345678911234567892123456789112345678911234567892123456789 more text test )ÚndiffAssertEqualr—rÔrrrrŽ©r1r2r3Úsfpr§r4r4r5Útest_split_long_continuationcs   z,TestLongHeaders.test_split_long_continuationcCsF|j}d}t|dd}|| ¡dƒt| dd¡ƒ}|| ¡dƒdS)Nzªbug demonstration 12345678911234567892123456789312345678941234567895123456789612345678971234567898112345678911234567892123456789112345678911234567892123456789 more textú ©Úcontinuation_wsr*zªbug demonstration 12345678911234567892123456789312345678941234567895123456789612345678971234567898112345678911234567892123456789112345678911234567892123456789 more text)r‰r r–rË©r1r2ZhstrÚhr4r4r5Ú,test_another_long_almost_unsplittable_headerws  zNr4©rlÚir4r4r5Ú roz@TestLongHeaders.test_no_semis_header_splitter..é Ú ReferencesÚTestzFrom: test@dom.ain References: <0@dom.ain> <1@dom.ain> <2@dom.ain> <3@dom.ain> <4@dom.ain> <5@dom.ain> <6@dom.ain> <7@dom.ain> <8@dom.ain> <9@dom.ain> Test) r‰rÚSPACEr¶ÚrangerJrrrrŽrŠr4r4r5Útest_no_semis_header_splitterýs  z-TestLongHeaders.test_no_semis_header_splittercCs |j}tdƒ}|| ¡dƒdS)Nz‡Subject: the first part of this is short, but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itselfzˆSubject: the first part of this is short, but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itselfr¤r¥r4r4r5Ú"test_last_split_chunk_does_not_fit sz2TestLongHeaders.test_last_split_chunk_does_not_fitcCs |j}tdƒ}|| ¡dƒdS)Nz_, but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itselfz`, but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itselfr¤r¥r4r4r5Ú>test_splittable_leading_char_followed_by_overlong_unsplittableszNTestLongHeaders.test_splittable_leading_char_followed_by_overlong_unsplittablecCs |j}tdƒ}|| ¡dƒdS)Nza, , but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itselfzb, , but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itselfr¤r¥r4r4r5ÚGtest_multiple_splittable_leading_char_followed_by_overlong_unsplittableszWTestLongHeaders.test_multiple_splittable_leading_char_followed_by_overlong_unsplittablecCs |j}tdƒ}|| ¡dƒdS)NzTthis_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself;r¤r¥r4r4r5Ú1test_trailing_splittable_on_overlong_unsplittable(szATestLongHeaders.test_trailing_splittable_on_overlong_unsplittablecCs |j}tdƒ}|| ¡dƒdS)NzW; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself; zX; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself; r¤r¥r4r4r5ÚItest_trailing_splittable_on_overlong_unsplittable_with_leading_splittable/szYTestLongHeaders.test_trailing_splittable_on_overlong_unsplittable_with_leading_splittablecCs |j}tdƒ}|| ¡dƒdS)NzpThis is a long line that has two whitespaces in a row. This used to cause truncation of the header when foldedzqThis is a long line that has two whitespaces in a row. This used to cause truncation of the header when foldedr¤r¥r4r4r5Ú5test_long_header_with_multiple_sequential_split_chars8szETestLongHeaders.test_long_header_with_multiple_sequential_split_charscCs |j}tdƒ}|| ¡dƒdS)NúKthisverylongheaderhas;semicolons;and,commas,butthey;arenotlegal;fold,pointsr¤r¥r4r4r5Ú:test_splitter_split_on_punctuation_only_if_fws_with_header@szJTestLongHeaders.test_splitter_split_on_punctuation_only_if_fws_with_headercCs |j}tdƒ}|| ¡dƒdS)NzÂthis is a test where we need to have more than one line before; our final line that is just too big to fit;; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself;zÄthis is a test where we need to have more than one line before; our final line that is just too big to fit;; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself;r¤r¥r4r4r5ÚDtest_leading_splittable_in_the_middle_just_before_overlong_last_partGszTTestLongHeaders.test_leading_splittable_in_the_middle_just_before_overlong_last_partcCs |j}tdƒ}|| ¡dƒdS)NzTthis_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself r¤r¥r4r4r5Ú/test_overlong_last_part_followed_by_split_pointRsz?TestLongHeaders.test_overlong_last_part_followed_by_split_pointcCs |j}tdƒ}|| ¡dƒdS)Nz¨this_is_a__test_where_we_need_to_have_more_than_one_line_before_our_final_line_; ; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself; zªthis_is_a__test_where_we_need_to_have_more_than_one_line_before_our_final_line_; ; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself; r¤r¥r4r4r5Ú@test_multiline_with_overlong_parts_separated_by_two_split_pointsYszPTestLongHeaders.test_multiline_with_overlong_parts_separated_by_two_split_pointscCs |j}tdƒ}|| ¡dƒdS)Nz¦this is a test where we need to have more than one line before our final line; ; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself; z¨this is a test where we need to have more than one line before our final line; ; this_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself; r¤r¥r4r4r5Ú>test_multiline_with_overlong_last_part_followed_by_split_pointdszNTestLongHeaders.test_multiline_with_overlong_last_part_followed_by_split_pointcCs\|j}tƒ}d|d<t dgd¡|d<| d¡tƒ}t|ƒ}| |¡|| ¡dƒdS)Nr²r©z r¶r·r¸zÆFrom: test@dom.ain References: Test© r‰rr¹r¶rJrrrrŽrŠr4r4r5Ú%test_long_header_with_whitespace_runsos  z5TestLongHeaders.test_long_header_with_whitespace_runscCs`|j}tƒ}d|d<t dgd¡d|d<| d¡tƒ}t|ƒ}| |¡|| ¡dƒdS) Nr²r©z r¶z; abcr·r¸z·From: test@dom.ain References: ; abc TestrÈrŠr4r4r5Ú'test_long_run_with_semi_header_splitter€s  z7TestLongHeaders.test_long_run_with_semi_header_splittercCsP|j}tƒ}d|d<d|d<| d¡tƒ}t|ƒ}| |¡|| ¡dƒdS)Nr²r©rÂr·r¸zrFrom: test@dom.ain References: thisverylongheaderhas;semicolons;and,commas,butthey;arenotlegal;fold,points Test)r‰rrJrrrrŽrŠr4r4r5Ú.test_splitter_split_on_punctuation_only_if_fws‘s  z>TestLongHeaders.test_splitter_split_on_punctuation_only_if_fwscCs:|j}d}t|ƒ}|| ¡dƒtdƒ}|| ¡dƒdS)Nz\References: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz]References: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr¤rr4r4r5Útest_no_split_long_header£s z)TestLongHeaders.test_no_split_long_headercCs(|j}d}t|dd}|| ¡dƒdS)NaWfrom babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for ; Sat, 2 Feb 2002 17:00:06 -0800 (PST) from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for ; Sat, 2 Feb 2002 17:00:06 -0800 (PST) from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for ; Sat, 2 Feb 2002 17:00:06 -0800 (PST) rrŽa_from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for ; Sat, 2 Feb 2002 17:00:06 -0800 (PST) from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for ; Sat, 2 Feb 2002 17:00:06 -0800 (PST) from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for ; Sat, 2 Feb 2002 17:00:06 -0800 (PST)r¤rr4r4r5Ú"test_splitting_multiple_long_lines¯s z2TestLongHeaders.test_splitting_multiple_long_linescCs,|j}d}t|dddd}|| ¡dƒdS)NzÞfrom modemcable093.139-201-24.que.mc.videotron.ca ([24.201.139.93] helo=cthulhu.gerg.ca) by kronos.mems-exchange.org with esmtp (Exim 4.05) id 17k4h5-00034i-00 for test@mems-exchange.org; Wed, 28 Aug 2002 11:25:20 -0400éNZReceivedr)r™r—rzßfrom modemcable093.139-201-24.que.mc.videotron.ca ([24.201.139.93] helo=cthulhu.gerg.ca) by kronos.mems-exchange.org with esmtp (Exim 4.05) id 17k4h5-00034i-00 for test@mems-exchange.org; Wed, 28 Aug 2002 11:25:20 -0400r¤rr4r4r5Ú&test_splitting_first_line_only_is_longÅs ÿz6TestLongHeaders.test_splitting_first_line_only_is_longcCsf|j}tƒ}tdddd}| d¡||jdddƒ||d<||jdd d ƒ||jd d d ƒdS) NzBritische Regierung gibtr7rjr–u-grünes Licht für Offshore-Windkraftprojekterwr˜zl=?iso-8859-1?q?Britische_Regierung_gibt_gr=FCnes_Licht_f=FCr_Offs?= =?iso-8859-1?q?hore-Windkraftprojekte?=©Z maxheaderlenzwSubject: =?iso-8859-1?q?Britische_Regierung_gibt_gr=FCnes_Licht_f=FCr_Offs?= =?iso-8859-1?q?hore-Windkraftprojekte?= rzdSubject: =?iso-8859-1?q?Britische_Regierung_gibt_gr=FCnes_Licht_f=FCr_Offshore-Windkraftprojekte?= )r‰rr ršr–rˆ)r1r2r3r‘r4r4r5Útest_long_8bit_headerÕsÿ z%TestLongHeaders.test_long_8bit_headercCsV|j}tƒ}d}||d<||jdddƒtƒ}t|dd|d<||jdddƒdS)NuhBritische Regierung gibt grünes Licht für Offshore-Windkraftprojekte zReply-TorÎrÐzžReply-To: =?utf-8?q?Britische_Regierung_gibt_gr=C3=BCnes_Licht_f=C3=BCr_Offs?= =?utf-8?q?hore-Windkraftprojekte_=3Ca-very-long-address=40example=2Ecom=3E?= r–)r‰rrˆr )r1r2r3Z header_stringr4r4r5Ú test_long_8bit_header_no_charsetésÿ z0TestLongHeaders.test_long_8bit_header_no_charsetcCs.|j}d}tƒ}||d<||jdddƒdS)NzÂ"Someone Test #A" ,, "Someone Test #B" , "Someone Test #C" , "Someone Test #D" r¬rÎrÐzËTo: "Someone Test #A" ,, "Someone Test #B" , "Someone Test #C" , "Someone Test #D" )r‰rrˆ)r1r2rªr3r4r4r5Útest_long_to_headerþs z#TestLongHeaders.test_long_to_headercCs2|j}d}t|ƒ}| d¡||jdddƒdS)NzIThis is an example of string which has almost the limit of header length.zAdd another line.rwr˜z\This is an example of string which has almost the limit of header length. Add another line.©r‰r ršr–©r1r2r¦r‘r4r4r5Útest_long_line_after_appends  z+TestLongHeaders.test_long_line_after_appendcCs.|j}d}t|ƒ}| d¡|| ¡dƒdS)NzThis is a shorter line.z!Add another sentence. (Surprise?)z9This is a shorter line. Add another sentence. (Surprise?)rÔrÕr4r4r5Útest_shorter_line_with_appends ÿz-TestLongHeaders.test_shorter_line_with_appendcCs2|j}d}d}t|d|d}||jdddƒdS)Nz!X-Very-Very-Very-Long-Header-Nameu­Die Mieter treten hier ein werden mit einem Foerderband komfortabel den Korridor entlang, an südlündischen Wandgemälden vorbei, gegen die rotierenden Klingen befördert. r7r–rwr˜a=?iso-8859-1?q?Die_Mieter_treten_hier_e?= =?iso-8859-1?q?in_werden_mit_einem_Foerderband_komfortabel_den_Korridor_e?= =?iso-8859-1?q?ntlang=2C_an_s=FCdl=FCndischen_Wandgem=E4lden_vorbei=2C_ge?= =?iso-8859-1?q?gen_die_rotierenden_Klingen_bef=F6rdert=2E_?=r¤)r1r2ÚfnZgsr‘r4r4r5Útest_long_field_name s z$TestLongHeaders.test_long_field_namecCs:d}tƒ}t|dd|d<||d<| |jddd¡dS) Nz‰from FOO.TLD (vizworld.acl.foo.tld [123.452.678.9]) by hrothgar.la.mastaler.com (tmda-ofmipd) with ESMTP; Wed, 05 Mar 2003 18:10:18 -0700rrŽú Received-1ú Received-2rÎrÐa1Received-1: from FOO.TLD (vizworld.acl.foo.tld [123.452.678.9]) by hrothgar.la.mastaler.com (tmda-ofmipd) with ESMTP; Wed, 05 Mar 2003 18:10:18 -0700 Received-2: from FOO.TLD (vizworld.acl.foo.tld [123.452.678.9]) by hrothgar.la.mastaler.com (tmda-ofmipd) with ESMTP; Wed, 05 Mar 2003 18:10:18 -0700 ©rr r‰rˆ©r1r‘r3r4r4r5Útest_long_received_header/s z)TestLongHeaders.test_long_received_headercCs<d}tƒ}t|ddd|d<||d<| |jddd¡dS) Nz<15975.17901.207240.414604@sgigritzmann1.mathematik.tu-muenchen.de> (David Bremner's message of "Thu, 6 Mar 2003 13:58:21 +0100")rÚrr§rÛrÎrÐa#Received-1: <15975.17901.207240.414604@sgigritzmann1.mathematik.tu-muenchen.de> (David Bremner's message of "Thu, 6 Mar 2003 13:58:21 +0100") Received-2: <15975.17901.207240.414604@sgigritzmann1.mathematik.tu-muenchen.de> (David Bremner's message of "Thu, 6 Mar 2003 13:58:21 +0100") rÜrÝr4r4r5Útest_string_headerinst_eqAsÿ z)TestLongHeaders.test_string_headerinst_eqcCsJ|j}tƒ}d}||d<t|dd|d<d||d<||jddd ƒdS) Nz’iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEUAAAAkHiJeRUIcGBi9 locQDQ4zJykFBAXJfWDjAAACYUlEQVR4nF2TQY/jIAyFc6lydlG5x8Nyp1Y69wj1PN2I5gzpzFace-1zFace-2r–r*zFace-3rÎrÐaØFace-1: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEUAAAAkHiJeRUIcGBi9 locQDQ4zJykFBAXJfWDjAAACYUlEQVR4nF2TQY/jIAyFc6lydlG5x8Nyp1Y69wj1PN2I5gzp Face-2: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEUAAAAkHiJeRUIcGBi9 locQDQ4zJykFBAXJfWDjAAACYUlEQVR4nF2TQY/jIAyFc6lydlG5x8Nyp1Y69wj1PN2I5gzp Face-3: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEUAAAAkHiJeRUIcGBi9 locQDQ4zJykFBAXJfWDjAAACYUlEQVR4nF2TQY/jIAyFc6lydlG5x8Nyp1Y69wj1PN2I5gzp ©r‰rr rˆ)r1r2r3Útr4r4r5Ú-test_long_unbreakable_lines_with_continuationTs z=TestLongHeaders.test_long_unbreakable_lines_with_continuationcCs*|j}d}t |¡}||jdddƒdS)Nz‰Received: from siimage.com ([172.25.1.3]) by zima.siliconimage.com with Microsoft SMTPSVC(5.0.2195.4905); Wed, 16 Oct 2002 07:41:11 -0700rÎrÐzŒReceived: from siimage.com ([172.25.1.3]) by zima.siliconimage.com with Microsoft SMTPSVC(5.0.2195.4905); Wed, 16 Oct 2002 07:41:11 -0700 )r‰r—rÔrˆ©r1r2rÇr3r4r4r5Ú"test_another_long_multiline_headerls z2TestLongHeaders.test_another_long_multiline_headercCs>|j}d}tƒ}||d<t|dd|d<||jdddƒdS)Nz¦List-Unsubscribe: , ÚListr–rÎrÐa_List: List-Unsubscribe: , List: List-Unsubscribe: , rà)r1r2r‘r3r4r4r5Ú%test_long_lines_with_different_headerys z5TestLongHeaders.test_long_lines_with_different_headercCs6tt d¡ddd}| | ¡dt d¡d¡dS)Nz¼ We're going to pretend this header is in a non-ascii character set to see if line wrapping with encoded words and embedded folding white space worksrMr¸)r;r—r(zü =?utf-8?q?We=27re_going_to_pretend_this_header_is_in_a_non-ascii_chara?= =?utf-8?q?cter_set?= =?utf-8?q?_to_see_if_line_wrapping_with_encoded_words_and_embedded?= =?utf-8?q?_folding_white_space_works?=)r rÃrÄr-r–r­r4r4r5Ú*test_long_rfc2047_header_with_embedded_fwsŒs ûüz:TestLongHeaders.test_long_rfc2047_header_with_embedded_fws)+rorprqÚmaxDiffrŒr’r r¦r¨r©r®r°r±r»r¼r½r¾r¿rÀrÁrÃrÄrÅrÆrÇrÉrÊrËrÌrÍrÏrÑrÒrÓrÖr×rÙrÞrßrârärærçr4r4r4r5rˆ_sP6              rˆc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚTestFromManglingcCs"tƒ|_d|jd<|j d¡dS)Nz aaa@bbb.orgr©z(From the desk of A.A.A.: Blah blah blah )rr3rJ©r1r4r4r5ÚsetUps zTestFromMangling.setUpcCs2tƒ}t|dd}| |j¡| | ¡d¡dS)NT©Z mangle_from_zFrom the desk of A.A.A.: Blah blah blah ©rrrr3r-rŽ©r1r¦r§r4r4r5Útest_mangled_from¥s  z"TestFromMangling.test_mangled_fromcCs2tƒ}t|dd}| |j¡| | ¡d¡dS)NFrìz;From: aaa@bbb.org From the desk of A.A.A.: Blah blah blah rírîr4r4r5Útest_dont_mangle_from°s  z&TestFromMangling.test_dont_mangle_fromcCsTtƒ}t|dd}t t d¡¡}| |¡| tdd„|  ¡  d¡Dƒƒd¡dS)NTrìa) From: foo@bar.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=XXX From somewhere unknown --XXX Content-Type: text/plain foo --XXX-- From somewhere unknowable cSsg|]}| d¡rd‘qS)z>From rr)r´rvr4r4r5rnÏs ÿzLTestFromMangling.test_mangle_from_in_preamble_and_epilog..r(r›) rrr—rÔrÃrÄrr-rurŽr²)r1r¦r§r3r4r4r5Ú'test_mangle_from_in_preamble_and_epilog»s  ÿz8TestFromMangling.test_mangle_from_in_preamble_and_epilogcCsRt d¡ d¡}t |d¡}tƒ}t|dd}| |¡| |  ¡|d¡dS)Nz§ Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: aaa@bbb.org rMs From Rölli Trìs >From Rölli ) rÃrÄr–r—rÅrrrr-rŽ)r1rÈr3Úbr§r4r4r5Ú test_mangled_from_with_bad_bytesÒs ú  z1TestFromMangling.test_mangled_from_with_bad_bytescCst d¡ d¡}t |¡}dS)Nu From: aperson@example.com Content-Type: multipart/mixed; boundary="1" Content-Transfer-Encoding: È rM)rÃrÄr–r—rÅ)r1rÈr3r4r4r5Ú$test_multipart_with_bad_bytes_in_cteàs üz5TestFromMangling.test_multipart_with_bad_bytes_in_cteN) rorprqrërïrðrñrórôr4r4r4r5réœs   réc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú TestMIMEAudiocCsDtddƒ}| ¡|_Wdƒn1s*0Yt|jƒ|_dS)Nú audiotest.aurt)r$r‹Ú _audiodatarÚ_au©r1rr4r4r5rëìs (zTestMIMEAudio.setUpcCs| |j ¡d¡dS)Nz audio/basic)r-rørBrêr4r4r5Útest_guess_minor_typeñsz#TestMIMEAudio.test_guess_minor_typecCs(|j ¡}| t t|dƒ¡|j¡dS©Nr•)rørQr-rNÚ decodebytesrÎr÷©r1Úpayloadr4r4r5Ú test_encodingôs ÿzTestMIMEAudio.test_encodingcCs t|jdƒ}| | ¡d¡dS)NÚfishz audio/fish)rr÷r-rB)r1Zaur4r4r5Útest_checkSetMinorùs z TestMIMEAudio.test_checkSetMinorcCs¾|j}|jjdddd||jddƒ||jjdddd gƒ||jjd dddƒg}||jjdddd ƒ| |jjd |dd |¡| |j d|¡|¡| |jjd|dd|¡dS)Nrrrörrz#attachment; filename="audiotest.au"rÞ©rr))rrörr)r¡©Zfailobjr„r )r-rørrärCÚassertIs©r1r2Úmissingr4r4r5Útest_add_headerýs4 ÿ ÿÿÿÿÿÿÿzTestMIMEAudio.test_add_headerN©rorprqrërúrÿrrr4r4r4r5rõës rõc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú TestMIMEImagecCsDtddƒ}| ¡|_Wdƒn1s*0Yt|jƒ|_dS)Nrsrt)r$r‹Ú_imgdatarÚ_imrùr4r4r5rës (zTestMIMEImage.setUpcCs| |j ¡d¡dS)Nz image/gif)r-r rBrêr4r4r5rúsz#TestMIMEImage.test_guess_minor_typecCs(|j ¡}| t t|dƒ¡|j¡dSrû)r rQr-rNrürÎr rýr4r4r5rÿs ÿzTestMIMEImage.test_encodingcCs t|jdƒ}| | ¡d¡dS)Nrz image/fish)rr r-rB)r1Zimr4r4r5r!s z TestMIMEImage.test_checkSetMinorcCs¾|j}|jjdddd||jddƒ||jjdddd gƒ||jjd dddƒg}||jjdddd ƒ| |jjd |dd |¡| |j d|¡|¡| |jjd|dd|¡dS)Nrrrsrrz%attachment; filename="dingusfish.gif"rÞr)rrsrr)r¡rr )r-r rrärCrrr4r4r5r%s4 ÿ ÿÿÿÿÿÿÿzTestMIMEImage.test_add_headerNrr4r4r4r5r s r c@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚTestMIMEApplicationcCs.|j}tdƒ}|| ¡dƒ||ddƒdS)Nóúûüýþÿrr<rN)r-rrBr0r4r4r5Ú test_headers<sz TestMIMEApplication.test_headerscCs:|j}d}t|ƒ}|| ¡ ¡dƒ||jdd|ƒdS)Nr z+vv8/f7/TrO)r-rrQÚstrip)r1r2Ú bytesdatar3r4r4r5Ú test_bodyBs zTestMIMEApplication.test_bodycCs¸d}t|tjd}| | ¡dt|ƒ¡| |jdd|¡| |dd¡tƒ}t|ƒ}| |¡|  ¡}t   |¡}| | ¡dt|ƒ¡| |jdd|¡| |dd¡dS)Nr ©Z_encoderõ�TrOr?rV) rrÚencode_7or8bitr-rQrurrrrŽr—rÅ©r1rr3r¦r§ZwireformÚmsg2r4r4r5Ú$test_binary_body_with_encode_7or8bitJs  z8TestMIMEApplication.test_binary_body_with_encode_7or8bitcCs˜d}t|tjd}| | ¡dt|ƒ¡| |jdd|¡tƒ}t|ƒ}| |¡|  ¡}t   |¡}| | ¡dt|ƒ¡| |jdd|¡dS)Nr rrTrO) rrÚ encode_noopr-rQrurrrrŽr—rÅrr4r4r5Ú!test_binary_body_with_encode_noop[s  z5TestMIMEApplication.test_binary_body_with_encode_noopcCshd}t|tjd}| |jdd|¡tƒ}t|ƒ}| |¡| ¡}t   |¡}| |jdd|¡dS)Ns úûüýþÿrTrO) rrrr-rQrrrrŽr—rÅrr4r4r5Ú0test_binary_body_with_unicode_linend_encode_noopls  zDTestMIMEApplication.test_binary_body_with_unicode_linend_encode_noopcCs¨d}t|tjd}| | ¡d¡| |jdd|¡| |dd¡tƒ}t|ƒ}| |¡| ¡}t   |¡}| | ¡d¡| |jdd|¡| |dd¡dS)Nsúûüýþÿ rz=FA=FB=FC=FD=FE=FF=20TrOr?r=) rrZ encode_quoprir-rQrrrrŽr—rÅrr4r4r5Ú#test_binary_body_with_encode_quoprixs  z7TestMIMEApplication.test_binary_body_with_encode_quopricCsˆd}t|tjd}| | ¡d¡| |jdd|¡tƒ}t|ƒ}| |¡| ¡}t   |¡}| | ¡d¡| |jdd|¡dS)Nr rz +vv8/f7/ TrO) rrZ encode_base64r-rQrrrrŽr—rÅrr4r4r5Ú#test_binary_body_with_encode_base64ˆs  z7TestMIMEApplication.test_binary_body_with_encode_base64N) rorprqrrrrrrrr4r4r4r5r ;s r c@sVeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e   d¡dd„ƒZ dS)Ú TestMIMETextcCstdƒ|_dS©Nú hello there)rÚ_msgrêr4r4r5rë˜szTestMIMEText.setUpcCs`|j}||j ¡dƒ||j d¡dƒg}| |j d|¡|¡| |jjd|dd|¡dS)Nr9r;rGr rÞ)r-r rBrCrrr4r4r5Ú test_types›sÿzTestMIMEText.test_typescCs&| |j ¡d¡| |j ¡¡dSr)r-r rQÚ assertFalseÚ is_multipartrêr4r4r5Ú test_payload¤szTestMIMEText.test_payloadcCsz|j}tddd}|| ¡jdƒ||ddƒtdƒ}d|_td|d}|| ¡jdƒ||ddƒ|| ¡dƒdS)NrrGrr:rHrMrQ)r-rr@rDr rWrQrEr4r4r5Ú test_charset¨s  zTestMIMEText.test_charsetcCs4|j}tddd}|| ¡jdƒ||ddƒdS)NrrGrr:rH)r-rr@rDr0r4r4r5Útest_7bit_inputµs zTestMIMEText.test_7bit_inputcCs>|j}tdƒ}|| ¡dƒ||ddƒ| d| ¡¡dS)NrrGr:rH)r-rr@r­rˆr0r4r4r5Útest_7bit_input_no_charset»s z'TestMIMEText.test_7bit_input_no_charsetcCsPd}|j}t|dd}|| ¡jdƒ||ddƒ||jdd| d¡ƒdS)NõкирилицаrMrr:rQTrO)r-rr@Úoutput_charsetrQr–)r1Úteststrr2r3r4r4r5Útest_utf8_inputÂs  zTestMIMEText.test_utf8_inputzBcan't fix because of backward compat in email5, will fix in email6cCsd}| tt|¡dS)Nr()r‚ÚUnicodeEncodeErrorr)r1r*r4r4r5Útest_utf8_input_no_charsetÊsz'TestMIMEText.test_utf8_input_no_charsetN) rorprqrër!r$r%r&r'r+ÚunittestÚskipr-r4r4r4r5r—s  rc@s¬eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)S)*Ú TestMultipartc Cs tddƒ}| ¡}Wdƒn1s(0Ytdddd}t|dd}|jd d dd td ƒ}| |¡| |¡d |d<d|d<d|d<d}t |¡}|ddkr²tj }ntj }|dkrÆd} nd} d| |df} t  dt |¡¡| |d<||_ ||_ ||_dS)NrsrtÚ multipartÚmixedry©rærs)rêrrrz$Hi there, This is the dingus fish. zBarry r©z)Dingus Lovers r¬zHere is your dingus fishrjgÊ4FÓcpÍAéÿÿÿÿrú-ú+z %s%04dé$z%a, %d %b %Y %H:%M:%SZDate)r$r‹rrrrr`ÚtimeÚ localtimeÚtimezoneÚaltzoneÚstrftimer r Ú_txt) r1rrSÚ containerryZintroÚnowZ timetupleZtzsecsÚsignZtzoffsetr4r4r5rëÔs> & ÿ    þþzTestMultipart.setUpcCs°|j}|j}|j}| | ¡¡|| ¡dƒ|t| ¡ƒdƒ|t|jdƒ| d¡}| d¡}|  ||j ¡|  ||j ¡|| ¡||gƒ|  | ¡¡|  | ¡¡dS)Nr^r›rrr) r-r‚r r³r#rBrurQÚ IndexErrorrr=r r")r1r2ÚraisesrÇZm0Zm1r4r4r5Útest_hierarchyøs  zTestMultipart.test_hierarchycCs$d}tƒ |¡}| || ¡¡dS)NzžContent-Type: multipart/mixed; boundary="BOUNDARY" MIME-Version: 1.0 Subject: A subject To: aperson@dom.ain From: bperson@dom.ain --BOUNDARY --BOUNDARY-- )r rŒr‰rˆ)r1r¥r3r4r4r5Útest_empty_multipart_idempotent s z-TestMultipart.test_empty_multipart_idempotentcCs@tddƒ}d|d<d|d<d|d<| d ¡| | ¡d ¡dS) Nr1r2ú A subjectrjúaperson@dom.ainr¬úbperson@dom.ainr©ryzœContent-Type: multipart/mixed; boundary="BOUNDARY" MIME-Version: 1.0 Subject: A subject To: aperson@dom.ain From: bperson@dom.ain --BOUNDARY --BOUNDARY-- )rrr‰rˆ©r1Úouterr4r4r5Ú/test_no_parts_in_a_multipart_with_none_epilogues   z=TestMultipart.test_no_parts_in_a_multipart_with_none_epiloguecCsLtddƒ}d|d<d|d<d|d<d |_d |_| d ¡| | ¡d ¡dS) Nr1r2rErjrFr¬rGr©r)ryzContent-Type: multipart/mixed; boundary="BOUNDARY" MIME-Version: 1.0 Subject: A subject To: aperson@dom.ain From: bperson@dom.ain --BOUNDARY --BOUNDARY-- )rÚpreambleÚepiloguerr‰rˆrHr4r4r5Ú0test_no_parts_in_a_multipart_with_empty_epilogue-s  z>TestMultipart.test_no_parts_in_a_multipart_with_empty_epiloguecCsV|j}tddƒ}d|d<d|d<d|d<| d ¡td ƒ}| |¡|| ¡d ƒdS) Nr1r2rErjrFr¬rGr©ryr€áContent-Type: multipart/mixed; boundary="BOUNDARY" MIME-Version: 1.0 Subject: A subject To: aperson@dom.ain From: bperson@dom.ain --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit hello world --BOUNDARY-- )r‰rrrr`rˆ©r1r2rIr3r4r4r5Útest_one_part_in_a_multipartBs   z*TestMultipart.test_one_part_in_a_multipartcCs\|j}tddƒ}d|d<d|d<d|d<d |_td ƒ}| |¡| d ¡|| ¡d ƒdS) Nr1r2rErjrFr¬rGr©r)r€ryaContent-Type: multipart/mixed; boundary="BOUNDARY" MIME-Version: 1.0 Subject: A subject To: aperson@dom.ain From: bperson@dom.ain --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit hello world --BOUNDARY-- ©r‰rrKrr`rrˆrOr4r4r5Ú1test_seq_parts_in_a_multipart_with_empty_preamble[s   z?TestMultipart.test_seq_parts_in_a_multipart_with_empty_preamblecCs\|j}tddƒ}d|d<d|d<d|d<d|_td ƒ}| |¡| d ¡|| ¡d ƒdS© Nr1r2rErjrFr¬rGr©r€ryrNrQrOr4r4r5Ú0test_seq_parts_in_a_multipart_with_none_preamblews   z>TestMultipart.test_seq_parts_in_a_multipart_with_none_preamblecCs\|j}tddƒ}d|d<d|d<d|d<d|_td ƒ}| |¡| d ¡|| ¡d ƒdSrS©r‰rrLrr`rrˆrOr4r4r5Ú0test_seq_parts_in_a_multipart_with_none_epilogue’s   z>TestMultipart.test_seq_parts_in_a_multipart_with_none_epiloguecCs\|j}tddƒ}d|d<d|d<d|d<d |_td ƒ}| |¡| d ¡|| ¡d ƒdS) Nr1r2rErjrFr¬rGr©r)r€ryrNrUrOr4r4r5Ú1test_seq_parts_in_a_multipart_with_empty_epilogue­s   z?TestMultipart.test_seq_parts_in_a_multipart_with_empty_epiloguecCs\|j}tddƒ}d|d<d|d<d|d<d |_td ƒ}| |¡| d ¡|| ¡d ƒdS) Nr1r2rErjrFr¬rGr©r(r€ryaContent-Type: multipart/mixed; boundary="BOUNDARY" MIME-Version: 1.0 Subject: A subject To: aperson@dom.ain From: bperson@dom.ain --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit hello world --BOUNDARY-- rUrOr4r4r5Ú.test_seq_parts_in_a_multipart_with_nl_epilogueÈs   z ----961284236552522269-- )r.r-rˆr\r4r4r5Útest_boundary_in_non_multiparts z,TestMultipart.test_boundary_in_non_multipartcCsB|j}t d¡}| | ¡¡|| ¡dƒ|t| ¡ƒdƒdS)NzžMIME-Version: 1.0 Content-Type: multipart/mixed; boundary=" XXXX" -- XXXX Content-Type: text/plain -- XXXX Content-Type: text/plain -- XXXX-- z XXXXr›)r-r—rÔr³r#rzrurQr0r4r4r5Ú test_boundary_with_leading_space*s  z.TestMultipart.test_boundary_with_leading_spacecCs&tƒ d¡}| | d¡ ¡d¡dS)NzòContent-Type: multipart/mixed; boundary="===============0012394164==" MIME-Version: 1.0 --===============0012394164== Content-Type: image/file1.jpg MIME-Version: 1.0 Content-Transfer-Encoding: base64 YXNkZg== --===============0012394164==--rzYXNkZg==)r rŒr-rQrlr4r4r5Ú&test_boundary_without_trailing_newline=s z4TestMultipart.test_boundary_without_trailing_newlinecCs tddƒ}| |jtjj¡dS)Nr1r2)rrr¿r—Úcompat32rlr4r4r5Útest_mimebase_default_policyKs z*TestMultipart.test_mimebase_default_policycCs(tddtjjd}| |jtjj¡dS)Nr1r2r¾)rr—r¿Údefaultrrlr4r4r5Útest_mimebase_custom_policyOsz)TestMultipart.test_mimebase_custom_policyN)rorprqrërCrDrJrMrPrRrTrVrWrXr\r]r`rarbrcrdrfrhr4r4r4r5r0Ós($ r0c@s~eZdZdd„Zdd„Zdd„Ze d¡Zdd „Z d d „Z d d „Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„ZdS)ÚTestNonConformantcCs>|j}| d¡}|| ¡dƒ|| ¡dƒ|| ¡dƒdS)Nz msg_14.txtr9r¥r*)r-r.rBr r,r0r4r4r5Útest_parse_missing_minor_typeVs  z/TestNonConformant.test_parse_missing_minor_typecCsN| d¡}| d¡}| t|dƒ¡| t|jƒd¡| |jdtj ¡dS)Nú msg_15.txtrrKrr) r.rQr³Úhasattrr-rurKrJrÚStartBoundaryNotFoundDefect)r1r3Úinnerr4r4r5Útest_same_boundary_inner_outer^s   ÿz0TestNonConformant.test_same_boundary_inner_outercCsX| d¡}| | ¡t¡| t|jƒd¡| |jdtj¡| |jdtj ¡dS)Nz msg_25.txtr›rrr) r.rJrQr±r-rurKrÚNoBoundaryInMultipartDefectÚ!MultipartInvariantViolationDefectr\r4r4r5Útest_multipart_no_boundaryhs  ÿ ÿz,TestNonConformant.test_multipart_no_boundarya^ Date: Wed, 14 Nov 2007 12:56:23 GMT From: foo@bar.invalid To: foo@bar.invalid Subject: Content-Transfer-Encoding: base64 and multipart MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3344438784458119861=="{} --===============3344438784458119861== Content-Type: text/plain Test message --===============3344438784458119861== Content-Type: application/octet-stream Content-Transfer-Encoding: base64 YWJj --===============3344438784458119861==-- cCs<| |j d¡¡}| t|jƒd¡| |jdtj¡dS)Nz" Content-Transfer-Encoding: base64rrr) Ú_str_msgÚ multipart_msgrbr-rurKrJrZ-InvalidMultipartContentTransferEncodingDefectr\r4r4r5Útest_multipart_invalid_cte‰s ÿ ÿz,TestNonConformant.test_multipart_invalid_ctecCs(| |j d¡¡}| t|jƒd¡dS)Nr)r©rsrtrbr-rurKr\r4r4r5Útest_multipart_no_cte_no_defect‘sz1TestNonConformant.test_multipart_no_cte_no_defectcCs8dD].}| |j d |¡¡¡}| t|jƒd¡qdS)N)r~rVZBINaryz Content-Transfer-Encoding: {}rrv)r1r¢r3r4r4r5Ú"test_multipart_valid_cte_no_defect–sÿÿz4TestNonConformant.test_multipart_valid_cte_no_defectcCs¦|j}|j}tƒ}d|d<|| ¡dƒ|| ¡dƒ|| ¡dƒ|d=d|d<|| ¡dƒ|| ¡dƒ|| ¡dƒtƒ}t|ƒ}| |¡||  ¡dƒdS)Nr¥r>r*r9r:r¡zContent-Type: foo ) r-r‰rr r,rBrrrrŽ)r1r2Úneqr3r¦r§r4r4r5Útest_invalid_content_typežs  z+TestNonConformant.test_invalid_content_typecCs"|j}| d¡}|| ¡dƒdS)Nú msg_31.txtzm--BOUNDARY Content-Type: text/plain message 1 --BOUNDARY Content-Type: text/plain message 2 --BOUNDARY-- )r‰r.rQr0r4r4r5Útest_no_start_boundary³s z(TestNonConformant.test_no_start_boundarycCs"|j}| d¡}|| ¡dƒdS)Nz msg_35.txtz‰From: aperson@dom.ain To: bperson@dom.ain Subject: here's something interesting counter to RFC 2822, there's no separating newline here )r‰r.rˆr0r4r4r5Útest_no_separating_blank_lineÄs z/TestNonConformant.test_no_separating_blank_linecCsX| d¡}| t|dƒ¡| t|jƒd¡| |jdtj¡| |jdtj ¡dS)Nz msg_41.txtrKr›rrr) r.r³rlr-rurKrJrrprqr\r4r4r5Útest_lying_multipartÐs  ÿ ÿz&TestNonConformant.test_lying_multipartcCsD| d¡}| d¡ d¡}| t|jƒd¡| |jdtj¡dS)Nz msg_42.txtrrr)r.rQr-rurKrJrrm)r1rIZbadr4r4r5Útest_missing_start_boundaryÚs   ÿz-TestNonConformant.test_missing_start_boundarycCsj|j}d}t |¡}|| ¡dgƒ|| ¡dƒ|t|jƒdƒ| |jtj g¡||jdj dƒdS)Nz Line 1 Subject: test bodyrjÚbodyrrrz Line 1 ) r-r—rÔrBrQrurKÚassertDefectsEqualrZ#FirstHeaderLineIsContinuationDefectÚlinerãr4r4r5Ú&test_first_line_is_continuation_headerês ÿz8TestNonConformant.test_first_line_is_continuation_headercCsB| d¡}| | ¡dg¡| | ¡d¡| |jtjg¡dS)Nz&Subject: test not a header To: abc b rjznot a header To: abc b )rsr-rBrQrrKrZ MissingHeaderBodySeparatorDefectr\r4r4r5Ú"test_missing_header_body_separatorös  ÿz4TestNonConformant.test_missing_header_body_separatorN)rorprqrjrorrrÃrÄrtrurwrxrzr|r}r~rrƒr„r4r4r4r5riTs     ric@sŒeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!S)"Ú TestRFC2047cCsN|j}d}t|ƒ}||gd¢ƒt|ƒ}|t|ƒdƒ| |jddd¡dS)NzVRe: =?mac-iceland?q?r=8Aksm=9Arg=8Cs?= baz foo bar =?mac-iceland?q?r=8Aksm=9Arg=8Cs?=))sRe: N©s rŠksmšrgŒsz mac-iceland)s baz foo bar Nr†u+Re: räksmörgÃ¥s baz foo bar räksmörgÃ¥srwr˜ziRe: =?mac-iceland?q?r=8Aksm=9Arg=8Cs?= baz foo bar =?mac-iceland?q?r=8Aksm?= =?mac-iceland?q?=9Arg=8Cs?=)r-r r r±r‰r–©r1r2r¦Údhr„r4r4r5Útest_rfc2047_multiline sÿz"TestRFC2047.test_rfc2047_multilinecCs:|j}d}t|ƒ}||ddgƒtt|ƒƒ}||dƒdS)Nz0=?ISO-8859-1?Q?Andr=E9?= Pirard )sAndrér7)s Pirard NuAndré Pirard ©r-r r±r r‡r4r4r5Útest_whitespace_keeper_unicode sÿ z*TestRFC2047.test_whitespace_keeper_unicodecCs:|j}d}t|ƒ}||gd¢ƒtt|ƒƒ}||dƒdS)NzWThe =?iso-8859-1?b?cXVpY2sgYnJvd24gZm94?= jumped over the =?iso-8859-1?b?bGF6eSBkb2c=?=))sThe N)squick brown foxr7)s jumped over the N)slazy dogr7z,The quick brown fox jumped over the lazy dogrŠ)r1r2r¦rˆÚhur4r4r5Ú test_whitespace_keeper_unicode_2 s  z,TestRFC2047.test_whitespace_keeper_unicode_2cCs d}t|ƒ}| |gd¢¡dS)Nz3Sm=?ISO-8859-1?B?9g==?=rg=?ISO-8859-1?B?5Q==?=sbord))sSmN©óör7)srgN©óår7)ssbordN©r r-©r1r¦rˆr4r4r5Útest_rfc2047_missing_whitespace' sz+TestRFC2047.test_rfc2047_missing_whitespacecCs d}t|ƒ}| |gd¢¡dS)Nz7Sm =?ISO-8859-1?B?9g==?= rg =?ISO-8859-1?B?5Q==?= sbord))sSm NrŽ)s rg Nr)s sbordNr’r“r4r4r5Útest_rfc2047_with_whitespace. sz(TestRFC2047.test_rfc2047_with_whitespacecCs<d}gd¢}|D]&\}}t||ƒ}| ||dfg¡qdS)Nz=?iso-8859-1?B?%s?=))zdm==óv)zdm=r–)Zdmr–)zdmk=óvi)Zdmkr—r7r’)r1r¦rSÚqÚarˆr4r4r5Útest_rfc2047_B_bad_padding5 s   z&TestRFC2047.test_rfc2047_B_bad_paddingcCsd}| t|ƒdg¡dS)Nz=?iso-8859-1?Q?andr=e9=zz?=)sandré=zzr7©r-r ©r1r¦r4r4r5Útest_rfc2047_Q_invalid_digits? s ÿz)TestRFC2047.test_rfc2047_Q_invalid_digitscCsd}| t|ƒgd¢¡dS)Nz(=?ISO-8859-1?Q?a?=))©ó(N©óar7©ó)Nr›rœr4r4r5Útest_rfc2047_rfc2047_1E s ÿz"TestRFC2047.test_rfc2047_rfc2047_1cCsd}| t|ƒgd¢¡dS)Nz(=?ISO-8859-1?Q?a?= b))ržr )s b)Nr›rœr4r4r5Útest_rfc2047_rfc2047_2K s ÿz"TestRFC2047.test_rfc2047_rfc2047_2cCsd}| t|ƒgd¢¡dS)Nz'(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)©rž)sabr7r¢r›rœr4r4r5Útest_rfc2047_rfc2047_3Q s ÿz"TestRFC2047.test_rfc2047_rfc2047_3cCsd}| t|ƒgd¢¡dS)Nz((=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)r¦r›rœr4r4r5Útest_rfc2047_rfc2047_4W s ÿz"TestRFC2047.test_rfc2047_rfc2047_4cCsd}| t|ƒgd¢¡dS)Nz,(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)r¦r›rœr4r4r5Útest_rfc2047_rfc2047_5a] s ÿz#TestRFC2047.test_rfc2047_rfc2047_5acCsd}| t|ƒgd¢¡dS)Nz+(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)r¦r›rœr4r4r5Útest_rfc2047_rfc2047_5bc s ÿz#TestRFC2047.test_rfc2047_rfc2047_5bcCsd}| t|ƒgd¢¡dS)Nz(=?ISO-8859-1?Q?a_b?=))rž)sa br7r¢r›rœr4r4r5Útest_rfc2047_rfc2047_6i s ÿz"TestRFC2047.test_rfc2047_rfc2047_6cCsPd}| t|ƒgd¢¡| tt|ƒƒ ¡| ¡¡| ttt|ƒƒƒd¡dS)Nz((=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=))ržr )s brbr¢z(a b))r-r r r–rr±rœr4r4r5Útest_rfc2047_rfc2047_7o s  ÿz"TestRFC2047.test_rfc2047_rfc2047_7cCsVd}| t|ƒddg¡| tt|ƒƒ ¡d | ¡¡¡| ttt|ƒƒƒd¡dS)Nz9=?windows-1252?q?=22M=FCller_T=22?= )s "Müller T"z windows-1252)sNr)u"Müller T" )r-r r r–r¶Ú splitlinesr±rœr4r4r5Útest_multiline_headerx s ÿÿ ÿÿz!TestRFC2047.test_multiline_headerN)rorprqr‰r‹rr”r•ršrr¤r¥r§r¨r©rªr«r¬r®r4r4r4r5r… s     r…c@sŒeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!S)"ÚTestMIMEMessagecCs6tdƒ}| ¡|_Wdƒn1s(0YdS)Nú msg_11.txt)r$r‹Z_textrùr4r4r5rë… s zTestMIMEMessage.setUpcCs| ttd¡dS)Nza plain string)r‚r_rrêr4r4r5Útest_type_error‰ szTestMIMEMessage.test_type_errorcCsv|j}d}tƒ}||d<t|ƒ}|| ¡dƒ| ¡}| |t¡|t|ƒdƒ|d}| ||¡||d|ƒdS)Nz A sub-messagerjrrrrÚsubject) r-rrrBrQrJÚlistrur)r1r2r²rÇÚrrþrur4r4r5Útest_valid_argumentŒ s  z#TestMIMEMessage.test_valid_argumentcCs:tƒ}d|d<tƒ}d|d<t|ƒ}| tj|j|¡dS)Nz subpart 1rjz subpart 2)rrr‚rZMultipartConversionErrorr`)r1rZrr´r4r4r5Útest_bad_multipartš s z"TestMIMEMessage.test_bad_multipartcCsTtƒ}d|d<| d¡t|ƒ}d|d<tƒ}t|ƒ}| |¡| | ¡d¡dS)NúAn enclosed messagerjú!Here is the body of the message. zThe enclosing messagezŽContent-Type: message/rfc822 MIME-Version: 1.0 Subject: The enclosing message Subject: An enclosed message Here is the body of the message. )rrJrrrrr-rŽ)r1rÇr´r¦r§r4r4r5Ú test_generate¢ s  zTestMIMEMessage.test_generatecCst|j}| d¡}|| ¡dƒ| ¡}| |t¡|t|ƒdƒ|d}| |t¡||ddƒ|| ¡dƒdS)Nr°rrrrr²r·r¸)r-r.rBrQrJr³rur)r1r2r3rþZsubmsgr4r4r5Útest_parse_message_rfc822¶ s   z)TestMIMEMessage.test_parse_message_rfc822cCs–|j}| d¡}|| ¡dƒ| | ¡¡|t| ¡ƒdƒ| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|t| ¡ƒd ƒ| d¡}| |t¡||d d ƒ||j d d ddƒ||j dd ddƒ| d¡}| |t¡||ddƒ||j ddddgƒ||j ddddƒ| d ¡}|| ¡dƒ| ¡}| |t ¡|t|ƒdƒ|d}| |t¡|| ¡dƒ||ddƒdS)Nú msg_16.txtrúrœrr9a¶This report relates to a message you sent with the following header fields: Message-id: <002001c144a6$8752e060$56104586@oxy.edu> Date: Sun, 23 Sep 2001 20:10:55 -0700 From: "Ian T. Henry" To: SoCal Raves Subject: [scr] yeah for Ians!! Your message cannot be delivered to the following recipients: Recipient address: jangel1@cougar.noc.ucla.edu Reason: recipient reached disk quota rrzmessage/delivery-statusr›zoriginal-envelope-idz"0GK500B4HD0888@cougar.noc.ucla.eduZdnsz reporting-mtarÞr)ZnsdÚactionZfailedzoriginal-recipient)r.r))zjangel1@cougar.noc.ucla.edur)r.zfinal-recipientrú message-idz(<002001c144a6$8752e060$56104586@oxy.edu>) r-r.rBr³r#rurQrJrrCrär³)r1r2r3ruZdsn1Zdsn2rþr[r4r4r5Útest_dsn sD        ÿ   ÿzTestMIMEMessage.test_dsnc Cs¾|j}tdƒ}| ¡}Wdƒn1s,0Ytƒ}d|d<d|d<d|d<d|_d |_td ƒ}td ƒ}|jd d dd| |¡| |¡t ƒ}t |ƒ}|  |¡||  ¡|ƒdS)Nú msg_21.txtrFr©rGr¬r¸rjú MIME messagezEnd of MIME message r:r<r>r^ryr3) r‰r$r‹rrKrLrrr`rrrrŽ) r1r2rr¥r3rZrr‹r§r4r4r5Ú test_epilogueû s$ &   zTestMIMEMessage.test_epiloguecCsv|j}tƒ}d|d<d|d<d|d<d|_d|_td ƒ}td ƒ}|jd d d d| |¡| |¡|| ¡dƒdS)NrFr©rGr¬r¸rjrÀr)r:r<r>r^ryr3adFrom: aperson@dom.ain To: bperson@dom.ain Subject: Test Content-Type: multipart/mixed; boundary="BOUNDARY" MIME message --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit One --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Two --BOUNDARY-- )r‰rrKrLrrr`rˆ)r1r2r3rZrr4r4r5Útest_no_nl_preamble s  z#TestMIMEMessage.test_no_nl_preamblecCsÔ|j}tdƒ}t |¡}Wdƒn1s.0Y| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒdS)Nrrrrrr9©r-r$r—Úmessage_from_filerQÚget_default_typerB©r1r2rr3Z container1Z container2Z container1aZ container2ar4r4r5Útest_default_type2 s (    z!TestMIMEMessage.test_default_typecCsÔ|j}tdƒ}t |¡}Wdƒn1s.0Y| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒdS)Nrrrrrr9rÃrÆr4r4r5Ú.test_default_type_with_explicit_container_typeC s (    z>TestMIMEMessage.test_default_type_with_explicit_container_typecCsü|j}|j}tddƒ}d|_tdƒ}tdƒ}t|ƒ}t|ƒ}| |¡| |¡|| ¡dƒ|| ¡dƒ|| ¡dƒ|| ¡dƒ||  d¡dƒ|d =|d =|d =|d =|| ¡dƒ|| ¡dƒ|| ¡dƒ|| ¡dƒ||  d¡d ƒdS) NÚdigestryr)ú message 1 ú message 2 rra Content-Type: multipart/digest; boundary="BOUNDARY" MIME-Version: 1.0 --BOUNDARY Content-Type: message/rfc822 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit message 1 --BOUNDARY Content-Type: message/rfc822 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit message 2 --BOUNDARY-- r:r8aBContent-Type: multipart/digest; boundary="BOUNDARY" MIME-Version: 1.0 --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit message 1 --BOUNDARY Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit message 2 --BOUNDARY-- ) r-r‰rrLrrr`rBrÅrˆ)r1r2ryr>Z subpart1aZ subpart2aZsubpart1Zsubpart2r4r4r5Útest_default_type_non_parsedT s0   z,TestMIMEMessage.test_default_type_non_parsedcCsZ|j}tdƒ}tdƒ}t||fd}|t| ¡ƒdƒ|| d¡|ƒ|| d¡|ƒdS)Nr))Z _subpartsr›rrr)r-rrrurQ)r1r2Ztext1Ztext2r3r4r4r5Ú$test_mime_attachments_in_constructorž sz4TestMIMEMessage.test_mime_attachments_in_constructorcCstƒ}| | ¡¡dSrZ)rr³r#r\r4r4r5Ú"test_default_multipart_constructor§ sz2TestMIMEMessage.test_default_multipart_constructorcCs0tƒ}d|d<d|d<| | d¡ddg¡dS)Núa@b.comr¬úc@d.comrª)rr-r/r\r4r4r5Útest_multipart_default_policy« sz-TestMIMEMessage.test_multipart_default_policycCs^ttjjd}d|d<| t¡}d|d<Wdƒn1s>0Y| t|jƒd¡dS)Nr¾rÏr¬rÐz.There may be at most 1 To headers in a message) rr—r¿rgr‚rr-r±Ú exception)r1r3Úcmr4r4r5Útest_multipart_custom_policy± s & ÿz,TestMIMEMessage.test_multipart_custom_policyN)rorprqrër±rµr¶r¹rºr¾rÁrÂrÇrÈrÌrÍrÎrÑrÔr4r4r4r5r¯„ s  9#J r¯c@sÒeZdZdZdd„Zd4dd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3S)5ÚTestIdempotentr(cCsBt|ƒ}| ¡}Wdƒn1s&0Yt |¡}||fSrZ©r$r‹r—rÔ©r1rrrSr3r4r4r5r. s & zTestIdempotent._msgobjFcCs8|j}tƒ}t|dd}|j||d||| ¡ƒdS)NrrÐr¯)r‰rrrrŽ)r1r3r¥r°r2r¦r§r4r4r5Ú _idempotentÈ s  zTestIdempotent._idempotentcCsˆ|j}| d¡\}}|| ¡dƒ|| ¡dƒ|| ¡dƒ|| ¡ddƒ|| d¡dƒ||jdƒ||jdƒ|  ||¡dS) Nr|r9r¥r*rr)r;rGr;rG) r-r.rBr r,rärCrKrLrØ©r1r2r3r¥r4r4r5Útest_parse_text_messageÏ s  z&TestIdempotent.test_parse_text_messagecCsP|j}| d¡\}}|| ¡dƒ|| ¡dƒ|| d¡dƒ| ||¡dS)Nr~r9r;)r-r.rBrärCrØrÙr4r4r5Útest_parse_untyped_messageÛ s z)TestIdempotent.test_parse_untyped_messagecCs| d¡\}}| ||¡dS)Nrh©r.rØ©r1r3r¥r4r4r5Útest_simple_multipartã sz$TestIdempotent.test_simple_multipartcCs| d¡\}}| ||¡dS)Nú msg_02.txtrÜrÝr4r4r5Útest_MIME_digestç szTestIdempotent.test_MIME_digestcCs| d¡\}}| ||¡dS)Nz msg_27.txtrÜrÝr4r4r5Útest_long_headerë szTestIdempotent.test_long_headercCs| d¡\}}| ||¡dS)NrrÜrÝr4r4r5Ú"test_MIME_digest_with_part_headersï sz1TestIdempotent.test_MIME_digest_with_part_headerscCs| d¡\}}| ||¡dS)Nú msg_06.txtrÜrÝr4r4r5Útest_mixed_with_imageó sz$TestIdempotent.test_mixed_with_imagecCs| d¡\}}| ||¡dS)NrørÜrÝr4r4r5Útest_multipart_report÷ sz$TestIdempotent.test_multipart_reportcCs| d¡\}}| ||¡dS)Nr»rÜrÝr4r4r5r¾û szTestIdempotent.test_dsncCs| d¡\}}| ||¡dS)Nr¿rÜrÝr4r4r5Útest_preamble_epilogueÿ sz%TestIdempotent.test_preamble_epiloguecCs| d¡\}}| ||¡dS)Nz msg_23.txtrÜrÝr4r4r5Útest_multipart_one_part sz&TestIdempotent.test_multipart_one_partcCs| d¡\}}| ||¡dS)Nz msg_24.txtrÜrÝr4r4r5Útest_multipart_no_parts sz&TestIdempotent.test_multipart_no_partscCs| d¡\}}| ||¡dS)Nr{rÜrÝr4r4r5r| sz%TestIdempotent.test_no_start_boundarycCs| d¡\}}| ||¡dS)Nú msg_32.txtrÜrÝr4r4r5Útest_rfc2231_charset sz#TestIdempotent.test_rfc2231_charsetcCs| d¡\}}| ||¡dS)Nz msg_33.txtrÜrÝr4r4r5Útest_more_rfc2231_parameters sz+TestIdempotent.test_more_rfc2231_parameterscCs| d¡\}}| ||¡dS)Nz msg_34.txtrÜrÝr4r4r5Ú%test_text_plain_in_a_multipart_digest sz4TestIdempotent.test_text_plain_in_a_multipart_digestcCs| d¡\}}| ||¡dS)Nz msg_12a.txtrÜrÝr4r4r5Útest_nested_multipart_mixeds sz+TestIdempotent.test_nested_multipart_mixedscCs| d¡\}}| ||¡dS)NrYrÜrÝr4r4r5Ú%test_message_external_body_idempotent sz4TestIdempotent.test_message_external_body_idempotentcCs"| d¡\}}|j||dddS)Nú msg_43.txtTr¯rÜrÝr4r4r5Útest_message_delivery_status# sz+TestIdempotent.test_message_delivery_statuscCs| d¡\}}| ||¡dS©Nú msg_45.txtrÜrÝr4r4r5Útest_message_signed_idempotent' sz-TestIdempotent.test_message_signed_idempotentc CsX|j}| d¡\}}|| ¡dƒi}| ¡D]\}}|||<q.||ddƒ||ddƒ||jd|jƒ||j|jƒ|t| ¡ƒdƒ| d ¡}|| ¡d ƒ|| ¡d |jƒ| d ¡}|| ¡d ƒ|| ¡d |jƒ| d ¡} ||  ¡dƒ|  | t ¡|  ¡} |  | t ¡|t| ƒd ƒ| d } |  | t ¡||  ¡d |jƒdS)Nrørúrûrürærþz$This is a MIME-encapsulated message.rœrr9zYadda yadda yaddarrr›r) r-r.rBrärKr½rLrurQrJrr³) r1r2r3r¥ÚparamsZpkZpvrZrZmsg3rþZmsg4r4r4r5Útest_content_type+ s4       z TestIdempotent.test_content_typecCsŠ|j}| d¡\}}|| ¡dƒ| ¡}| |t¡|t|ƒdƒ|d}| |t¡|| ¡dƒ| | ¡t¡|| ¡|j ƒdS)Nrãrrrrr9) r-r.rBrQrJr³rurr±r½)r1r2r3r¥rþrZr4r4r5Ú test_parserJ s  zTestIdempotent.test_parserN)F)rorprqr½r.rØrÚrÛrÞràrárârärår¾rærçrèr|rêrërìrírîrðrórõrör4r4r4r5rÕ¾ s2  rÕc@s¤eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dSdT„Z,dUdV„Z-dWdX„Z.dYdZ„Z/d[d\„Z0d]d^„Z1d_d`„Z2dadb„Z3dcdd„Z4dedf„Z5dgS)hÚTestMiscellaneouscCsjtdƒ}| ¡}Wdƒn1s&0Yt |¡}tƒ}t|dd}| |¡| || ¡¡dS©Nr|rrЩ r$r‹r—rÔrrrr-rŽ©r1rr¥r3r¦r§r4r4r5Útest_message_from_string^ s &   z*TestMiscellaneous.test_message_from_stringcCsttdƒX}| ¡}| d¡t |¡}tƒ}t|dd}| |¡| ||  ¡¡Wdƒn1sf0YdSrø) r$r‹Úseekr—rÄrrrr-rŽrúr4r4r5Útest_message_from_filei s     z(TestMiscellaneous.test_message_from_filecCs²tdƒ}| ¡}Wdƒn1s&0YGdd„dtƒ}t ||¡}| ||¡tdƒ}| ¡}Wdƒn1s~0Yt ||¡}| ¡D]}| ||¡qœdS)Nr|c@s eZdZdS)zHTestMiscellaneous.test_message_from_string_with_class..MyMessageN©rorprqr4r4r4r5Ú MyMessagez srÿrß)r$r‹rr—rÔrJÚwalk)r1rr¥rÿr3rur4r4r5Ú#test_message_from_string_with_classu s &   &  z5TestMiscellaneous.test_message_from_string_with_classcCs¢Gdd„dtƒ}tdƒ}t ||¡}Wdƒn1s:0Y| ||¡tdƒ}t ||¡}Wdƒn1sz0Y| ¡D]}| ||¡qŒdS)Nc@s eZdZdS)zFTestMiscellaneous.test_message_from_file_with_class..MyMessageNrþr4r4r4r5rÿˆ srÿr|rß)rr$r—rÄrJr)r1rÿrr3rur4r4r5Ú!test_message_from_file_with_class† s *  * z3TestMiscellaneous.test_message_from_file_with_classcCs,Gdd„dtƒ}| d|¡}| ||¡dS)NcseZdZ‡fdd„Z‡ZS)zSTestMiscellaneous.test_custom_message_does_not_require_arguments..MyMessagecstƒ ¡dSrZ)ÚsuperÚ__init__rê©Ú __class__r4r5r– sz\TestMiscellaneous.test_custom_message_does_not_require_arguments..MyMessage.__init__)rorprqrÚ __classcell__r4r4rr5rÿ• srÿzSubject: test test)rrsrJ)r1rÿr3r4r4r5Ú.test_custom_message_does_not_require_arguments” s z@TestMiscellaneous.test_custom_message_does_not_require_argumentscCs"tdƒ}| t|jƒgd¢¡dS)Nr—)r r;rrÚ feedparserr™r„rr"Zmessage_from_binary_filerÅrÄrÔrxr‘r!r)Ú __import__r-ÚsortedÚ__all__)r1Úmoduler4r4r5Ú test__all__› szTestMiscellaneous.test__all__cCs:t ¡}| t t |¡¡dd…t |¡dd…¡dS)Né)r8r-rÚ parsedateÚ formatdateÚgmtime©r1r?r4r4r5Útest_formatdate¥ sÿz!TestMiscellaneous.test_formatdatecCs>t ¡}| t tj|dd¡dd…t |¡dd…¡dS)NT©r9r)r8r-rrrr9rr4r4r5Útest_formatdate_localtimeª s þz+TestMiscellaneous.test_formatdate_localtimec CsVt ¡}| tj|ddt dt |¡¡¡| tj|dddt dt |¡¡¡dS)NFrz%a, %d %b %Y %H:%M:%S -0000T)r9Zusegmtz%a, %d %b %Y %H:%M:%S GMT)r8r-rrr<rrr4r4r5Útest_formatdate_usegmt° s þþz(TestMiscellaneous.test_formatdate_usegmtcCs„| t d¡¡| t d¡¡| t d¡¡| t d¡¡| t d¡¡| t d¡¡| t d¡¡| t d¡¡dS)Nr)Ú0zA Complete Waste of Time)rHrrÚ parsedate_tzrêr4r4r5Ú/test_parsedate_returns_None_for_invalid_stringsº szATestMiscellaneous.test_parsedate_returns_None_for_invalid_stringscCs| t d¡t d¡¡dS)NzWed,3 Apr 2002 14:58:26 +0800zWed, 3 Apr 2002 14:58:26 +0800)r-rrrêr4r4r5Útest_parsedate_compactÅ s ÿz(TestMiscellaneous.test_parsedate_compactcCs|j}|t d¡dƒdS)Nú25 Feb 2003 13:47:26 -0800) éÓr›éé é/érrrr4é€ÿÿ©r-rr©r1r2r4r4r5Útest_parsedate_no_dayofweekÊ s ÿz-TestMiscellaneous.test_parsedate_no_dayofweekcCs|j}|t d¡dƒdS)Nú5 Feb 2003 13:47:26 -0800© rr›érr r!rrrr4r"r#r$r4r4r5Ú#test_parsedate_compact_no_dayofweekÏ s ÿz5TestMiscellaneous.test_parsedate_compact_no_dayofweekcCs| t d¡d¡dS)NzWed, 3 Apr 2002 14:58:26+0800) éÒr}rœéé:r!rrrr4i€pr#rêr4r4r5Ú.test_parsedate_no_space_before_positive_offsetÔ s ÿz@TestMiscellaneous.test_parsedate_no_space_before_positive_offsetcCs| t d¡d¡dS)NzWed, 3 Apr 2002 14:58:26-0800) r*r}rœr+r,r!rrrr4r"r#rêr4r4r5Ú.test_parsedate_no_space_before_negative_offsetØ s ÿz@TestMiscellaneous.test_parsedate_no_space_before_negative_offsetcCs*|j}|t d¡dƒ|t d¡dƒdS)Nz5 Feb 2003 13.47.26 -0800r'z5 Feb 2003 13.47 -0800) rr›r(rr rrrrr4r"r#r$r4r4r5Ú%test_parsedate_accepts_time_with_dotsÞ s ÿ ÿz7TestMiscellaneous.test_parsedate_accepts_time_with_dotscCs¶|j}t d¡}tt |¡ƒ}|t |¡dd…|dd…ƒ|tt d|¡ƒdƒt d¡}tt |dd…¡ƒ}|t |¡dd…|dd…ƒ|tt d|dd…¡ƒdƒdS)Nr&rz%Yré ) r-rrÚintr8Úmktimer9r<r)r1r2Ztimetuprár4r4r5Ú+test_parsedate_acceptable_to_time_functionså s    z=TestMiscellaneous.test_parsedate_acceptable_to_time_functionscCs(| t d¡d¡| t d¡d¡dS)N) é²rrrrrrrr4r4r4rr) r4rrrrrrrr4r4r4iÒi.ûÿÿ)r-rZ mktime_tzrêr4r4r5Útest_mktime_tzð s  ÿ ÿz TestMiscellaneous.test_mktime_tzcCs4| t d¡t d¡¡| t d¡t d¡¡dS)aTest for parsing a date with a two-digit year. Parsing a date with a two-digit year should return the correct four-digit year. RFC822 allows two-digit years, but RFC2822 (which obsoletes RFC822) requires four-digit years. z25 Feb 03 13:47:26 -0800rz25 Feb 71 13:47:26 -0800z25 Feb 1971 13:47:26 -0800Nr#rêr4r4r5Útest_parsedate_y2kö s  ÿ ÿz$TestMiscellaneous.test_parsedate_y2kcCs.| t d¡d¡| t t d¡¡d¡dS)Nz<>©r)r)r)©r-rÚ parseaddrÚ formataddrrêr4r4r5Útest_parseaddr_empty sz&TestMiscellaneous.test_parseaddr_emptycCs:| t d¡d¡| t d¡d¡| t d¡d¡dS)Nza@b@cr7za@b.c@cza@172.17.0.1@c©r-rr9rêr4r4r5Útest_parseaddr_multiple_domains sþþþz1TestMiscellaneous.test_parseaddr_multiple_domainscCs| t d¡d¡dS)N)zA Silly Personúperson@dom.ainzA Silly Person ©r-rr:rêr4r4r5Útest_noquote_dump sþz#TestMiscellaneous.test_noquote_dumpcCsP| t d¡d¡| t d¡d¡d}d}| t t ||f¡¡||f¡dS)N)zA (Very) Silly Personr>z("A (Very) Silly Person" z*"A \(Very\) Silly Person" zA \(Special\) Personr>©r-rr:r9©r1r™ròr4r4r5Útest_escape_dump sþþz"TestMiscellaneous.test_escape_dumpcCs>| t d¡d¡d}d}| t t ||f¡¡||f¡dS)N)úArthur \Backslash\ Foobarr>z."Arthur \\Backslash\\ Foobar" rDr>rArBr4r4r5Útest_escape_backslashes% sþz)TestMiscellaneous.test_escape_backslashescCsBd}d}d}d}| t ||f¡|¡| t ||fd¡|¡dS)Nõ Häns Würstr>ú-=?utf-8?b?SMOkbnMgV8O8cnN0?= z0=?iso-8859-1?q?H=E4ns_W=FCrst?= r7r?)r1rêÚaddrÚ utf8_base64Z latin1_quoprir4r4r5Útest_quotes_unicode_names- sÿz+TestMiscellaneous.test_quotes_unicode_namescsld}d}d}d‰G‡fdd„dƒ}|ƒ}dˆ|f}| t ||f|¡|¡| t ||ftdƒ¡|¡dS) NrFr>rGZFOOBARcseZdZ‡fdd„ZdS)zKTestMiscellaneous.test_accepts_any_charset_like_object..CharsetMockcsˆSrZr4)r1Ústring©r r4r5Ú header_encode> szYTestMiscellaneous.test_accepts_any_charset_like_object..CharsetMock.header_encodeN)rorprqrMr4rLr4r5Ú CharsetMock= srNz%s <%s>rM)r-rr:r )r1rêrHrIrNZmockZ mock_expectedr4rLr5Ú$test_accepts_any_charset_like_object7 s ÿz6TestMiscellaneous.test_accepts_any_charset_like_objectcCs(d}d}tƒ}| ttj||f|¡dS)NrFr>)Úobjectr‚ÚAttributeErrorrr:)r1rêrHZ bad_charsetr4r4r5Ú-test_invalid_charset_like_object_raises_errorF s ÿz?TestMiscellaneous.test_invalid_charset_like_object_raises_errorcCs0d}| ttjd|f¡| ttjd|f¡dS)Nupersön@dom.inÚName)r‚Ú UnicodeErrorrr:)r1rHr4r4r5Ú!test_unicode_address_raises_errorO sz3TestMiscellaneous.test_unicode_address_raises_errorcCsVd}d}d\}}| t |¡||f¡| t |¡||f¡| t ||f¡|¡dS)NzJohn X. Doe z"John X. Doe" )z John X. Doezjxd@example.comr8)r1rNÚyr™ròr4r4r5Útest_name_with_dotU s z$TestMiscellaneous.test_name_with_dotcCs:|j}|t d¡dƒ|t d¡dƒ|t d¡dƒdS)Nú""example" example"@example.com)r)rXú!"\"example\" example"@example.com)r)rYú#"\\"example\\" example"@example.com)r)rZr<r$r4r4r5Ú2test_parseaddr_preserves_quoted_pairs_in_addresses^ s  ÿ ÿ ÿzDTestMiscellaneous.test_parseaddr_preserves_quoted_pairs_in_addressescCs^| dt d¡¡| dt d¡¡| dt d¡¡| dt d¡¡| dt d ¡¡dS) N)r)úmerwok wok@xample.comr\)r)úmerwok wok@xample.comr]z merwok wok @xample.com)r)úmerwok"wok" wok@xample.comr^)r)zmerwok.wok.wok@xample.comzmerwok. wok . wok@xample.comr<rêr4r4r5Ú-test_parseaddr_preserves_spaces_in_local_partp sÿÿÿÿÿz?TestMiscellaneous.test_parseaddr_preserves_spaces_in_local_partcCs0d}d}| t |¡|¡| t |¡|¡dS)N)z#'foo@example.com' (foo@example.com)úfoo@example.comz7"'foo@example.com' (foo@example.com)" r8)r1rHZaddrstrr4r4r5Ú6test_formataddr_does_not_quote_parens_in_quoted_string‚ szHTestMiscellaneous.test_formataddr_does_not_quote_parens_in_quoted_stringcCsd}| t |¡d¡dS)NzFoo Bar )zFoo Barr`r<)r1rNr4r4r5Útest_multiline_from_comment‹ sz-TestMiscellaneous.test_multiline_from_commentcCs| t d¡d¡dS)N)zA Silly; Personr>z""A Silly; Person" r?rêr4r4r5Útest_quote_dump‘ sþz!TestMiscellaneous.test_quote_dumpcCs¨|j}|j}tƒ}tƒ}||dƒ||dƒ||dƒ|d|ƒ|d|ƒ|d|ƒ||dƒ||dƒ||dƒ|d|ƒ|d|ƒ|d|ƒ|||ƒ|||ƒdS)NrGúUS-ASCIIzUs-AsCiIZusasciiZUSASCIIZUsAsCiI)r-ZassertNotEqualr )r1r2ÚneZcset1Zcset2r4r4r5Útest_charset_richcomparisons– s$             z.TestMiscellaneous.test_charset_richcomparisonscCs"|j}|t ddg¡ddgƒdS)Nzaperson@dom.ain (Al Person)zBud Person )z Al PersonrF)z Bud PersonrG©r-rZ getaddressesr$r4r4r5Útest_getaddressesª sÿÿþz#TestMiscellaneous.test_getaddressescCsL|j}|t dg¡dgƒ|t dg¡gd¢ƒ|t ddg¡ddgƒdS)Nzfoo: ;r7z []*-- =~$)r7r7)r)z*--z#"Jason R. Mastaler" )zJason R. Mastalerz jason@dom.ainrgr$r4r4r5Útest_getaddresses_nasty± sÿþÿþz)TestMiscellaneous.test_getaddresses_nastycCs(|j}t dg¡}||dddƒdS)z(Test proper handling of a nested commentz%User ((nested comment)) rrrú foo@bar.comNrg)r1r2Zaddrsr4r4r5Ú"test_getaddresses_embedded_comment» s z4TestMiscellaneous.test_getaddresses_embedded_commentcs~Gdd„dtƒ‰‡fdd„tdƒDƒ}t|ƒWdƒn1sD0Ytdd„|Dƒgƒ}| tt|ƒƒt|ƒ¡dS)Nc@seZdZdd„ZdS)zBTestMiscellaneous.test_make_msgid_collisions..MsgidsThreadcSsBg|_|jj}tj}tj}|ƒd}|ƒ|kr>||ddƒq$dS)Ng@útestdomain-string©Údomain)ÚmsgidsršrÚ make_msgidr8Ú monotonic)r1ršrpZclockZtfinr4r4r5ÚrunÄ s  zFTestMiscellaneous.test_make_msgid_collisions..MsgidsThread.runN)rorprqrrr4r4r4r5Ú MsgidsThreadà srscsg|] }ˆƒ‘qSr4r4r³©rsr4r5rnÎ roz@TestMiscellaneous.test_make_msgid_collisions..r(cSsg|] }|j‘qSr4)ro)rlrár4r4r5rnÑ ro)rrºr#Úsumr-ruÚset)r1ÚthreadsZall_idsr4rtr5Útest_make_msgid_collisionsÁ s   z,TestMiscellaneous.test_make_msgid_collisionscCs.|j}tƒ}|jdddd|| ¡dƒdS)Nrrzfoo\wacky"namer)r-rrrjr0r4r4r5Útest_utils_quote_unquoteÔ s ÿz*TestMiscellaneous.test_utils_quote_unquotecCstdƒ}| | ¡d¡dS)Nz not a charsetrN©r r-Úget_body_encoding©r1r;r4r4r5Ú)test_get_body_encoding_with_bogus_charsetÛ sz;TestMiscellaneous.test_get_body_encoding_with_bogus_charsetcCs|j}tƒ}d|d<||ddƒ| ¡}|t|ƒdƒ||ddƒt|dƒ}|| ¡dƒ|jd|d || ¡d ƒ||jd d dƒ||d dƒtƒ}d|d<| ¡}|t|ƒdƒ||ddƒt|dƒ}|| ¡tj ƒ|jd|d || ¡dƒ||d dƒdS)Nztext/plain; charset=UTF-8r>r:rrrrMrNr r úaGVsbG8gd29ybGQ= TrOr<ztext/plain; charset="US-ASCII"rGr€r~) r-rrerur r{rJrQrr)r1r2r3rfr;r4r4r5Ú-test_get_body_encoding_with_uppercase_charsetß s.  z?TestMiscellaneous.test_get_body_encoding_with_uppercase_charsetcCs(tdƒ}tdƒ}| | ¡| ¡¡dS)NrGrdrz)r1ZlcZucr4r4r5Útest_charsets_case_insensitiveù sz0TestMiscellaneous.test_charsets_case_insensitivecCs4|j}| d¡}tƒ}t ||¡|| ¡dƒdS)NrïaBmultipart/report text/plain message/delivery-status text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/plain text/rfc822-headers r^r_r4r4r5Ú1test_partial_falls_inside_message_delivery_statusþ s   zCTestMiscellaneous.test_partial_falls_inside_message_delivery_statuscCs"| tjjdddd…d¡dS)Nrlrmiíÿÿÿz@testdomain-string>©r-r—rrprêr4r4r5Útest_make_msgid_domain( sþz(TestMiscellaneous.test_make_msgid_domaincCs$| tjjddddd…d¡dS)Nz test-idstringrl)Zidstringrnißÿÿÿz!.test-idstring@testdomain-string>r‚rêr4r4r5Útest_make_msgid_idstring- sÿÿýz*TestMiscellaneous.test_make_msgid_idstringcCsTtdƒ8}d|_}| tj ¡ d|d¡¡Wdƒn1sF0YdS)Nzsocket.getfqdnzpythontest.example.comú@ú>)rZ return_valuer³r—rrpÚendswith)r1Z mock_getfqdnrnr4r4r5Útest_make_msgid_default_domain3 s    ÿÿz0TestMiscellaneous.test_make_msgid_default_domaincCsztddd}| ¡}Wdƒn1s*0Y| dd¡}t |¡}tƒ}tj |¡}| |¡|  |  ¡|¡dS)Nú msg_26.txtr(©Únewliner») r$r‹rËr—rÔrr™rrr-rŽ©r1ÚfZmsgtxtZ msgtxt_nlr3r¦r§r4r4r5Útest_Generator_linend: s&    z'TestMiscellaneous.test_Generator_linendcCs„tddd}| ¡}Wdƒn1s*0Y| dd¡}t |¡}tƒ}tj |¡}|j|dd|  |  ¡  d¡|¡dS)Nr‰r(rŠr»r¼r•) r$r‹rËr—rÔrr™rrr-rŽrPrŒr4r4r5Útest_BytesGenerator_linendE s&   z,TestMiscellaneous.test_BytesGenerator_linendcCsˆtddƒ}| ¡}Wdƒn1s(0Y| dd¡}| dd¡}t |¡}tƒ}tj |¡}|j|dd|  |  ¡|¡dS) Nr‰rtswith attachmentsfoöó rÍr»r¼) r$r‹rËr—rÅrr™rrr-rŽrŒr4r4r5Ú)test_BytesGenerator_linend_with_non_asciiP s &    z;TestMiscellaneous.test_BytesGenerator_linend_with_non_asciic CsFtddƒ}| ¡}Wdƒn1s(0Ytddƒ}| ¡}Wdƒn1sZ0Ytdft|fft|ffttƒfftdftdfg}|D]¨\}}|j |j dd*||Ž}|  |j t j j¡Wdƒn1sà0Y|j |j dd4||d t j jiŽ}|  |j t j j¡Wdƒq˜1s60Yq˜dS) Nrörtrs)r))r1r2re)Úclsr¿rgr¿)r$r‹rrrrrrrÚsubTestrorr¿r—rerg)r1rZ audiodatar|Úclassesr’Ú constructorrÇr4r4r5Ú!test_mime_classes_policy_argument\ s$ & & ú 0z3TestMiscellaneous.test_mime_classes_policy_argumentN)6rorprqrûrýrrrrrrrrrr%r)r-r.r/r3r5r6r;r=r@rCrErJrOrRrUrWr[r_rarbrcrfrhrirkrxryr}rr€rrƒr„rˆrŽrr‘r–r4r4r4r5r÷] sf             *   r÷c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú TestIteratorscCs´|j}|j}| d¡}t |¡}t|ƒ}|t|ƒdƒ|t |¡|  ¡ƒ| d¡}t |¡}t|ƒ}|t|ƒdƒt dƒ$}|t |¡|  ¡ƒWdƒn1s¦0YdS)Nr|rrßé+z msg_19.txt) r-r‰r.rZbody_line_iteratorr³ruÚ EMPTYSTRINGr¶rQr$r‹)r1r2ryr3Úitr¸rr4r4r5Útest_body_line_iteratort s     z%TestIterators.test_body_line_iteratorcCsb|j}| d¡}t |d¡}g}d}|D]}|d7}| | ¡¡q(||dƒ|t |¡dƒdS)Nrhr¥rrrr›z`a simple kind of mirror to reflect upon our own a simple kind of mirror to reflect upon our own ©r-r.rZtyped_subpart_iteratorršrQr™r¶©r1r2r3ršr¸Zsubpartsrur4r4r5Útest_typed_subpart_iterator… s   z)TestIterators.test_typed_subpart_iteratorcCsd|j}| d¡}t |dd¡}g}d}|D]}|d7}| | ¡¡q*||dƒ|t |¡dƒdS)Nr~r¥r*rrrz% Hi, Do you like this message? -Me rœrr4r4r5Ú(test_typed_subpart_iterator_default_type– s  z6TestIterators.test_typed_subpart_iterator_default_typec Cs°gd¢}ddlm}m}|ƒ}g}d}|D]N\}}| |¡||7}d} t|j|ƒD]} | | ¡| d7} qT| || ¡q*| t|ƒ|¡| d  dd„|Dƒ¡d  |¡¡dS) zÂFeedParser BufferedSubFile.push() assumed it received complete line endings. A CR ending one push() followed by a LF starting the next push() added an empty line. ))za r›)ròr)zc rr)r)r)zd rr)ze r)z frr)r»rrr©ÚBufferedSubFileÚ NeedMoreDatarrr)cSsg|] \}}|‘qSr4r4)rlÚilÚnr4r4r5rnÅ roz0TestIterators.test_pushCR_LF..N) Úemail.feedparserr¡r¢ÚpushÚiterÚreadlineršr-rur¶) r1Zimtr¡r¢ÚbsfZomÚntr£r¤Zn1Zolr4r4r5Útest_pushCR_LF© s     zTestIterators.test_pushCR_LFc s¢ddlm}m}d}d}d‰d ‡fdd„t|ƒDƒ¡d }| d ¡}|ƒ}g}tdt|ƒ|ƒD]0} || | |…} | | ¡| t |j |ƒ¡q`|  ||¡dS) Nrr i'r(zabcd r)c3s|]}tˆƒVqdSrZrr³©Úcharsr4r5rµÎ roz1TestIterators.test_push_random..r(T) r¥r¡r¢r¶rºr­rur¦Úextendr§r¨r-) r1r¡r¢r¤Ú chunksizer¦Útargetr©r¸r´Úchunkr4r¬r5Útest_push_randomÇ s   zTestIterators.test_push_randomN)rorprqr›ržrŸr«r²r4r4r4r5r—s s r—c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTestFeedParserscCs"tƒ}|D]}| |¡q | ¡SrZ)r&ÚfeedÚclose)r1Úchunksr r±r4r4r5ÚparseÜ s zTestFeedParsers.parsecCs.| d¡}| |dd¡| |dd¡dS)NzFirst: val : bad Second: valr9Úvalr;)r·r-r\r4r4r5Útest_empty_header_name_handledâ s z.TestFeedParsers.test_empty_header_name_handledcCsê| dg¡}| | ¡gd¢¡| dg¡}| | ¡gd¢¡| ddg¡}| | ¡ddg¡| dd g¡}| | ¡dd g¡| dd g¡}| | ¡dd g¡| d g¡}| | ¡d g¡| gd¢¡}| | ¡ddg¡dS)Nz a: b: c: d: )r™ròÚcÚdz a: b: c: d:za: búc: r™Zbcúa: zb: ròz b: u a:Â…b:
c: )r™u Â…b:
c:)r½ub:Â…r¼©r™r))ròuÂ…c:)r·r-rBr€rlr4r4r5Ú test_newlinesè s   zTestFeedParsers.test_newlinescCsd\}}| dgd|g|¡}| | ¡dg¡| | ¡d||¡| dgd|g|¡}| | ¡dg¡| | ¡d||¡| dgd|dg|¡}| | ¡dg¡| | ¡d|d|¡| ddgd|g|¡}| | ¡d d d||fg¡dS) N)ièi Nza:b rN)r™ròza:b õÂ…r½zb: r¾rò)r·r-r€rQ)r1ÚMÚNrÇr4r4r5Útest_long_linesú szTestFeedParsers.test_long_linesN)rorprqr·r¹r¿rÃr4r4r4r5r³Ú sr³c@s˜eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dZ dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„ZdS)$Ú TestParserscCs†|j}tdƒ}tƒ |¡}Wdƒn1s00Y||ddƒ||ddƒ|| ¡dƒ| | ¡¡| | ¡t ¡dS)Nrßr«úppp-request@zzz.orgrªú ppp@zzz.orgr^) r-r$rr·rBr"r#rJrQr±©r1r2rr3r4r4r5Útest_header_parser s *zTestParsers.test_header_parsercCs |j}tddƒ }tj ¡ |¡}Wdƒn1s60Y||ddƒ||ddƒ|| ¡dƒ| | ¡¡|  |  ¡t ¡|  |j dd t ¡dS) Nrßrtr«rÅrªrÆr^TrO) r-r$r—r‘r˜r·rBr"r#rJrQr±rÎrÇr4r4r5Útest_bytes_header_parsers .z$TestParsers.test_bytes_header_parsercCsJtddƒ,}tj ¡ |¡| |j¡Wdƒn1s<0YdS)Nrßrt)r$r—r‘Ú BytesParserr·r"Úclosedrùr4r4r5Ú%test_bytes_parser_does_not_close_file#s z1TestParsers.test_bytes_parser_does_not_close_filecCs`tddƒB}tjj}| tjj|tjjdj |¡|  |j ¡Wdƒn1sR0YdS)Nrkrtr¾) r$r—r‘rÊr‚rrmr¿Ústrictr·r"rË)r1rZ bytesParserr4r4r5Ú2test_bytes_parser_on_exception_does_not_close_file(s  þz>TestParsers.test_bytes_parser_on_exception_does_not_close_filecCsJtddƒ,}tj ¡ |¡| |j¡Wdƒn1s<0YdS)Nrßr´)r$r—r‘r r·r"rËrùr4r4r5Útest_parser_does_not_close_file0s z+TestParsers.test_parser_does_not_close_filecCs`tddƒB}tjj}| tjj|tjjdj |¡|  |j ¡Wdƒn1sR0YdS)Nrkr´r¾) r$r—r‘r r‚rrmr¿rÍr·r"rË)r1rr‘r4r4r5Ú,test_parser_on_exception_does_not_close_file5s   ÿz8TestParsers.test_parser_on_exception_does_not_close_filecCs>|j}t d¡}||ddƒ||ddƒ|| ¡dƒdS)Nz¤From: aperson@dom.ain To: bperson@dom.ain Subject: the next line has a space on it Date: Mon, 8 Apr 2002 15:09:19 -0400 Message-ID: spam Here's the message body r²ú!the next line has a space on it r½ÚspamúHere's the message body ©r-r—rÔrQr0r4r4r5Útest_whitespace_continuation<s  z(TestParsers.test_whitespace_continuationcCs>|j}t d¡}||ddƒ||ddƒ|| ¡dƒdS)Nz¤From: aperson@dom.ain To: bperson@dom.ain Date: Mon, 8 Apr 2002 15:09:19 -0400 Message-ID: spam Subject: the next line has a space on it Here's the message body r²rÑr½rÒrÓrÔr0r4r4r5Ú(test_whitespace_continuation_last_headerNs  z4TestParsers.test_whitespace_continuation_last_headercCs’|j}tddd}tƒ |¡}Wdƒn1s40Y|t| ¡ƒdƒ| d¡}|| ¡dƒ|| ¡dƒ| d¡}|| ¡d ƒdS) Nr‰r(rŠr›rr9z!Simple email with attachment. rrzapplication/riscos)r-r$r r·rurQrB)r1r2rr3Úpart1Úpart2r4r4r5Útest_crlf_separation`s*  z TestParsers.test_crlf_separationcCsntddd}| ¡}Wdƒn1s*0Yt |¡}tƒ}t|ƒ}|j|dd| | ¡|¡dS)Nr‰r(rŠr»r¼rùrúr4r4r5Útest_crlf_flattenks& zTestParsers.test_crlf_flattenNc Cs:|j}|j}tdƒ}t |¡}Wdƒn1s40Y|| ¡dƒ|t| ¡ƒdƒ| d¡}|| ¡dƒ|| ¡dƒ|t| ¡ƒdƒ| d¡}|| ¡dƒ|| ¡dƒ|| ¡dƒ| d¡}|| ¡dƒ|| ¡dƒ|t| ¡ƒdƒ| d¡}|| ¡dƒ|| ¡dƒ|| ¡dƒdS) Nrrrr›rrr9rÊrË) r-r‰r$r—rÄr#rurQrB) r1r2ryrr3r×Zpart1arØZpart2ar4r4r5Ú-test_multipart_digest_with_extra_mime_headersws, (    z9TestParsers.test_multipart_digest_with_extra_mime_headerscCs,gd¢}t t |¡¡}| |dd¡dS)N)z$From: Andrew Person From: foo From: bar !"#QUX;~: zoo bodyrœcss|] }|VqdSrZr4)rlZfieldr4r4r5rµ®roz9TestParsers.test_rfc2822_header_syntax..)z!"#QUX;~z>Fromr©r€)r-r—rÔrur rQrãr4r4r5Útest_rfc2822_header_syntax©s  z&TestParsers.test_rfc2822_header_syntaxcCs*|j}d}t |¡}|t| ¡ƒdƒdS)Nz<>From foo@example.com 11:25:53 From: bar !"#QUX;~: zoo bodyr)r-r—rÔrurBrãr4r4r5Ú(test_rfc2822_space_not_allowed_in_header±s z4TestParsers.test_rfc2822_space_not_allowed_in_headercCsD|j}d}t |¡}| ¡}| ¡||gd¢ƒ|| ¡dƒdS)Nz7A: first header B: second header CC: third header body)ÚAÚBZCCr€)r-r—rÔrBÚsortrQ)r1r2rÇr3Zheadersr4r4r5Ú!test_rfc2822_one_character_header·s z-TestParsers.test_rfc2822_one_character_headercCs,d}t |¡}| | d¡ ¡ d¡¡dS)Nz°From: foo@bar.com To: baz Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=BOUNDARY --BOUNDARY Content-Type: text/plain body ending with CRLF newline --BOUNDARY-- rr»)r—rÔr³rQr‡©r1rÇr3r4r4r5Útest_CRLFLF_at_end_of_partÀsÿ z&TestParsers.test_CRLFLF_at_end_of_part)rorprqrÈrÉrÌrÎrÏrÐrÕrÖrÙrÚrèrÛrÝrßràrárårçr4r4r4r5rÄ s$      rÄc@s‚eZdZe d¡Zdd„Zdd„Zdd„Zdd „Z d d „Z d d „Z dZ d  dd„e Dƒ¡d d¡Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Ze d*¡ d¡Zd+d,„Zd-d.„Ze d/¡Zd0d1„Zd2d3„Z d4d5„Z!e "d¡Z#d6ge#d7d8…<d  e#¡Z#d9d:„Z$e d;¡ d<¡Z%e d=¡Z&d>d?„Z'd@dA„Z(dBdC„Z)dDdE„Z*dFdG„Z+dHdI„Z,dJdK„Z-dLZ.dLS)MÚTest8BitBytesHandlingz½ From: foo@bar.com To: baz Mime-Version: 1.0 Content-Type: text/plain; charset={charset} Content-Transfer-Encoding: {cte} {bodyline} cCsP|jjdddd d¡}t |¡}| | ¡d¡| |jddd d¡¡dS)NrMrVõpöstal©r;r¢Zbodylineõpöstal TrO©Ú bodytest_msgrbr–r—rÅr-rQrær4r4r5Útest_known_8bit_CTEçsþþ ÿz)Test8BitBytesHandling.test_known_8bit_CTEcCsP|jjdddd d¡}t |¡}| | ¡d¡| |jddd  d¡¡dS) NZnotavalidcharsetrVrérêrMu p��stal TrOrërìrær4r4r5Útest_unknown_8bit_CTEðsþþ ÿz+Test8BitBytesHandling.test_unknown_8bit_CTEcCsP|jjdddd d¡}t |¡}| | ¡d¡| |jddd d¡¡dS) NrMr=õ p=C3=B6stálrêu p=C3=B6stál TrOõ pöstál rìrær4r4r5Útest_8bit_in_quopri_bodyùs þþ ÿz.Test8BitBytesHandling.test_8bit_in_quopri_bodycCsP|jjdddd d¡}t |¡}| | ¡d¡| |jddd  d¡¡dS) Nr•r=rðrêrMup=C3=B6st��l TrOrñrìrær4r4r5Ú.test_invalid_8bit_in_non_8bit_cte_uses_replace sþþ ÿzDTest8BitBytesHandling.test_invalid_8bit_in_non_8bit_cte_uses_replacecCsT|jjdddd d¡}t |¡}| |jddd d¡¡| |jdt j ¡dS) NrMrNu cMO2c3RhbAá=rêTrOrér) rírbr–r—rÅr-rQrJrKrrLrær4r4r5Útest_8bit_in_base64_bodysþþ ÿ ÿz.Test8BitBytesHandling.test_8bit_in_base64_bodycCs@|jjdddd d¡}t |¡}| |jddd d¡¡dS)NrMrŸu <,.Vz Yes, they are flying. rMcCs:t |j¡}| t| d¡ƒd¡| t|dƒd¡dS)Nrªõb��z)r—rÅÚheadertest_msgr-r±rÞr\r4r4r5Útest_get_8bit_header@s z*Test8BitBytesHandling.test_get_8bit_headercCs8t |j¡}| t|ƒt d¡jdd„|jDƒŽ¡dS)Nzä From: {} To: {} Subject: {} From: {} Yes, they are flying. cSsg|]\}}|d‘qS)rrr4)rlrørÉr4r4r5rnOrozATest8BitBytesHandling.test_print_8bit_headers..) r—rÅrúr-r±rÃrÄrbÚheadertest_headersr\r4r4r5Útest_print_8bit_headersEs   ÿùÿz-Test8BitBytesHandling.test_print_8bit_headerscCs.t |j¡}| dd„| ¡Dƒgd¢¡dS)NcSsg|] }t|ƒ‘qSr4©r±rvr4r4r5rnTrozGTest8BitBytesHandling.test_values_with_8bit_headers..)rjrùõ]Maintenant je vous pr��sente mon coll��gue, le pouf c��l��bre Jean de Baddieõ g��st)r—rÅrúÚassertListEqualrCr\r4r4r5Útest_values_with_8bit_headersRs ÿz3Test8BitBytesHandling.test_values_with_8bit_headerscCs.t |j¡}| dd„| ¡Dƒgd¢¡dS)NcSs g|]\}}t|ƒt|ƒf‘qSr4rþ)rlrNrVr4r4r5rn_rozFTest8BitBytesHandling.test_items_with_8bit_headers..)rö)r¬rù)rjrÿ)r©r)r—rÅrúrr€r\r4r4r5Útest_items_with_8bit_headers]s ÿz2Test8BitBytesHandling.test_items_with_8bit_headerscCs0t |j¡}| dd„| d¡Dƒddg¡dS)NcSsg|] }t|ƒ‘qSr4rþrvr4r4r5rnkrozHTest8BitBytesHandling.test_get_all_with_8bit_headers..r«rjr)r—rÅrúrr/r\r4r4r5Útest_get_all_with_8bit_headersis  ÿÿz4Test8BitBytesHandling.test_get_all_with_8bit_headerscCsJt t d¡ d¡¡}| | ¡d¡| | ¡d¡| | ¡d¡dS)NuA Content-Type: text/pl§in; charset=utf-8 r[u text/pl�inr¥upl�in) r—rÅrÃrÄr–r-rBr r,r\r4r4r5Útest_get_content_type_with_8bitos þz5Test8BitBytesHandling.test_get_content_type_with_8bitcCsXt d d¡¡}| |jddgd¢¡| |jdddd¡| |jdddd¡dS) Nu(X-Header: foo=§ne; b§r=two; baz=three r[rÝrÞ))r¡õ�ne)ub�rrárâZFoorub§r)r—rÅr–r-rärCr\r4r4r5Útest_get_params_with_8bitxsÿÿz/Test8BitBytesHandling.test_get_params_with_8bitcCs,t t d¡ d¡¡}| | d¡d¡dS)Nõn Content-Type: text/plain; charset=us-ascii; title*=us-ascii'en'This%20is%20not%20f§nr[Útitle)rGÚenuThis is not f�n)r—rÅrÃrÄr–r-rCr\r4r4r5Ú!test_get_rfc2231_params_with_8bit‚s ý ÿz7Test8BitBytesHandling.test_get_rfc2231_params_with_8bitcCs8t t d¡ d¡¡}| dd¡| | d¡d¡dS)Nrr[r Útest)r—rÅrÃrÄr–rör-rCr\r4r4r5Ú!test_set_rfc2231_params_with_8bitŠs ý z7Test8BitBytesHandling.test_set_rfc2231_params_with_8bitcCsFt t d¡ d¡¡}| d¡| | d¡d¡| | ¡d¡dS)Nrr[r r¥) r—rÅrÃrÄr–rÿr-rCr r\r4r4r5Ú!test_del_rfc2231_params_with_8bit’s ý z7Test8BitBytesHandling.test_del_rfc2231_params_with_8bitcCs>t t d¡ d¡¡}| | ¡d¡| |jddd¡dS)Nu† Content-Transfer-Encoding: b§se64 Content-Type: text/plain; charset=latin-1 payload r[zpayload TrOspayload )r—rÅrÃrÄr–r-rQr\r4r4r5Ú%test_get_payload_with_8bit_cte_header›s ûz;Test8BitBytesHandling.test_get_payload_with_8bit_cte_headeru0 From: foo@bar.com To: báz Subject: Maintenant je vous présente mon collègue, le pouf célèbre Jean de Baddie Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Да, они летÑÑ‚. cCs:t |j¡}tƒ}tj |¡ |¡| | ¡|j¡dSrZ) r—rÅÚnon_latin_bin_msgrr™rrr-rŽ©r1r3r’r4r4r5Útest_bytes_generator±s z*Test8BitBytesHandling.test_bytes_generatorcCs6tj ¡}tƒ}tj |¡ |¡| | ¡d¡dS)NrÍ) r—r"rrr™rrr-rŽrr4r4r5Ú&test_bytes_generator_handles_None_body·s z Subject: Aktuelles zu Japan, Klonfleisch und Smiley-System Message-ID: <76a486bee62b0d200f33dc2ca08220ad@localhost.localdomain> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_76a486bee62b0d200f33dc2ca08220ad" --b1_76a486bee62b0d200f33dc2ca08220ad Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Guten Tag, , mit großer Betroffenheit verfolgen auch wir im foodwatch-Team die Nachrichten aus Japan. --b1_76a486bee62b0d200f33dc2ca08220ad Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit foodwatch - Newsletter

mit großer Betroffenheit verfolgen auch wir im foodwatch-Team die Nachrichten aus Japan.

--b1_76a486bee62b0d200f33dc2ca08220ad-- rM) rÃrÄr–r—rÅrr™rrr-rŽ)r1rÈr3r¦r§r4r4r5Útest_8bit_multipart)s %Û&   z)Test8BitBytesHandling.test_8bit_multipartcCsFtƒ}tdƒ|d<tƒ}tj |¡}|j|dd| | ¡d¡dS)NõžluÅ¥ouÄký kůňrjr»r¼s5Subject: =?utf-8?b?xb5sdcWlb3XEjWvDvSBrxa/FiA==?= ) rr rr—r™rrr-rŽ©r1rÇr¦r§r4r4r5Ú'test_bytes_generator_b_encoding_linesepWs  þz=Test8BitBytesHandling.test_bytes_generator_b_encoding_linesepcCsFtƒ}tdƒ|d<tƒ}tj |¡}|j|dd| | ¡d¡dS)Nr#rjr»r¼z5Subject: =?utf-8?b?xb5sdcWlb3XEjWvDvSBrxa/FiA==?= ) rr rr—r™rrr-rŽr$r4r4r5Ú!test_generator_b_encoding_linesepcs  þz7Test8BitBytesHandling.test_generator_b_encoding_linesepN)/rorprqrÃrÄrírîrïròrórôrõrür¶r–rúrûrýrrrrrr r rrrrrrrrrr²rrrrrr r!rÚr"r%r&rèr4r4r4r5rèÔsd      ÿÿ       ö    ÿ   ÷   .  rèc@s"eZdZdZdd„Zddd„ZdS)Ú BaseTestBytesGeneratorIdempotentNcCsTt|dƒ}| ¡}Wdƒn1s(0Y|j |j|¡}t |¡}||fS)Nrt)r$r‹Únormalize_linesep_regexÚsubÚblinesepr—rÅr×r4r4r5r.vs  & z(BaseTestBytesGeneratorIdempotent._msgobjFcCs<tƒ}tjj|dd}|j|||jd| || ¡¡dS)NrrÐ)r°r½)rr—r™rrr½r-rŽ)r1r3rSr°ròr§r4r4r5rØ}sz,BaseTestBytesGeneratorIdempotent._idempotent)F)rorprqrèr.rØr4r4r4r5r'rsr'c@seZdZdZdZe d¡ZdS)ÚTestBytesGeneratorIdempotentNLr(rÍs\r\nN©rorprqr½r*ÚreÚcompiler(r4r4r4r5r+„sr+c@seZdZdZdZe d¡ZdS)Ú TestBytesGeneratorIdempotentCRLFr»rs (?d}n<|dkrLd}n.|d krZd }n |d krhd }n|d krvd }nd}|t d|¡|ƒq,dS)NÚhelloóhellor)©Úeolérrœr}rér0é éérN)r-r Ú header_lengthruÚ body_encoderº)r1r2ÚsizeZbsizer4r4r5Útest_len“s ÿ zTestBase64.test_lencCs*|j}|t d¡dƒ|t d¡dƒdS)Nr)rozaGVsbG8=r2)r-r rPr$r4r4r5Ú test_decode szTestBase64.test_decodecCsd|j}|t d¡dƒ|t d¡dƒ|t d¡dƒ|tjdddd ƒ|tjddd d d ƒdS) Nror2z aGVsbG8= shello z aGVsbG8K sdxxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx é(r˜zŒeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg eHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg eHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg eHh4eCB4eHh4IA== r»©r™r4zeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg eHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg eHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg eHh4eCB4eHh4IA== )r-r r;r$r4r4r5Ú test_encode¥sÿzTestBase64.test_encodecCsZ|j}tj}||dƒdƒ||dƒdƒ||dƒdƒ||dddd ƒ||dƒdƒdS) Nr1z=?iso-8859-1?b?aGVsbG8=?=ú hello worldz!=?iso-8859-1?b?aGVsbG8NCndvcmxk?=ú hello worldz!=?iso-8859-1?b?aGVsbG8Kd29ybGQ=?=rbr z=?iso-8859-2?b?aGVsbG8=?=)r-r rM)r1r2Úher4r4r5Útest_header_encode»szTestBase64.test_header_encodeN)rorprqr=r>rArEr4r4r4r5r0’s r0c@s*eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zdˆdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd‰d&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z!d@dA„Z"dBdC„Z#dDdE„Z$dFdG„Z%dHdI„Z&dJdK„Z'dLdM„Z(dNdO„Z)dPdQ„Z*dRdS„Z+dTdU„Z,dŠdVdW„Z-dXdY„Z.dZd[„Z/d\d]„Z0d^d_„Z1d`da„Z2dbdc„Z3ddde„Z4dfdg„Z5dhdi„Z6djdk„Z7dldm„Z8dndo„Z9dpdq„Z:drds„Z;dtdu„Zdzd{„Z?d|d}„Z@d~d„ZAd€d„ZBd‚dƒ„ZCd„d…„ZDd†d‡„ZEd S)‹Ú TestQuopricsÄttttdƒtdƒdƒttdƒtdƒdƒttdƒtdƒdƒdd „d Dƒƒƒˆ_‡fd d „td ƒDƒˆ_tttdƒtdƒdƒƒˆ_ˆj tdƒ¡ˆj tdƒ¡‡fdd „td ƒDƒˆ_ dS)Nr™ÚzrrrâÚZrÚ9css|] }|VqdSrZr4©rlrºr4r4r5rµÏroz#TestQuopri.setUp..s!*+-/csg|]}|ˆjvr|‘qSr4)ÚhlitrJrêr4r5rnÒroz$TestQuopri.setUp..ér*ú~rú=csg|]}|ˆjvr|‘qSr4)ÚblitrJrêr4r5rnÛro) r³rrºÚordrKÚhnonrOršÚremoveÚbnonrêr4rêr5rëÈs üzTestQuopri.setUpcCsP|jD]}| t |¡dt|ƒ¡q|jD]}| t |¡dt|ƒ¡q,dS)Nz'Should not be header quopri encoded: %sz#Should be header quopri encoded: %s)rKr"r!Z header_checkÚchrrQr³©r1rºr4r4r5Útest_quopri_header_checkÞs   ÿ   ÿz#TestQuopri.test_quopri_header_checkcCsP|jD]}| t |¡dt|ƒ¡q|jD]}| t |¡dt|ƒ¡q,dS)Nz%Should not be body quopri encoded: %sz!Should be body quopri encoded: %s)rOr"r!Z body_checkrTrSr³rUr4r4r5Útest_quopri_body_checkæs   ÿ   ÿz!TestQuopri.test_quopri_body_checkcCsä|j}|t d¡dƒ|ttjdddƒt d¡dƒ|t d¡dƒ|ttjdddƒt d¡dƒ|jD]$}|t t|gƒ¡dd t|ƒƒqp|jD]2}|t d ƒkr®qœ|t t|gƒ¡d d t|ƒƒqœ|t d ¡dƒdS)Nr2r(Zxxxr r¶s h@e@l@l@o@r9rrzexpected length 1 for %rr*rœzexpected length 3 for %ró ) r-r!r:rurMrKrÎrTrQrP©r1r2rºr4r4r5Útest_header_quopri_lenîs0þÿþÿ  ÿ   ÿz!TestQuopri.test_header_quopri_lencCsN|j}|jD]}|t t|gƒ¡dƒq |jD]}|t t|gƒ¡dƒq.dS)Nrrrœ)r-rOr!Z body_lengthrÎrSrYr4r4r5Útest_body_quopri_lens   zTestQuopri.test_body_quopri_lencCs2tdƒD]$}t|ƒ}| t t |¡¡|¡qdS)NrL)rºrTr-r!ríÚquote)r1rNrºr4r4r5Útest_quote_unquote_idempotents z(TestQuopri.test_quote_unquote_idempotentNcCs0|durt |¡}n t ||¡}| ||¡dSrZ)r!rMr-)r1r„Zexpected_encoded_headerr;Úencoded_headerr4r4r5Ú_test_header_encodes  zTestQuopri._test_header_encodecCs| dd¡dS)Nror)©r_rêr4r4r5Útest_header_encode_nullsz"TestQuopri.test_header_encode_nullcCs| dd¡dS)Nr2z=?iso-8859-1?q?hello?=r`rêr4r4r5Útest_header_encode_one_wordsz&TestQuopri.test_header_encode_one_wordcCs| dd¡dS)Ns hello worldz=?iso-8859-1?q?hello=0Aworld?=r`rêr4r4r5Útest_header_encode_two_lines sÿz'TestQuopri.test_header_encode_two_linescCs| dd¡dS)Ns helloÇtherez=?iso-8859-1?q?hello=C7there?=r`rêr4r4r5Útest_header_encode_non_ascii$sÿz'TestQuopri.test_header_encode_non_asciicCs|jdddddS)Nr2z=?iso-8859-2?q?hello?=rbr r`rêr4r4r5Útest_header_encode_alt_charset(sÿz)TestQuopri.test_header_encode_alt_charsetcCst |¡}| ||¡dSrZ)r!Ú header_decoder-)r1r^Zexpected_decoded_headerZdecoded_headerr4r4r5Ú_test_header_decode,s zTestQuopri._test_header_decodecCs| dd¡dS©Nr)©rgrêr4r4r5Útest_header_decode_null0sz"TestQuopri.test_header_decode_nullcCs| dd¡dS©Nr1rirêr4r4r5Útest_header_decode_one_word3sz&TestQuopri.test_header_decode_one_wordcCs| dd¡dS)Nz hello=0AworldrCrirêr4r4r5Útest_header_decode_two_lines6sz'TestQuopri.test_header_decode_two_linescCs| dd¡dS)Nz hello=C7thereu helloÇthererirêr4r4r5Útest_header_decode_non_ascii9sz'TestQuopri.test_header_decode_non_asciicCs| t d¡d¡dS)Na=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30=30A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)r-r!rfrêr4r4r5Útest_header_decode_re_bug_18380<sz*TestQuopri.test_header_decode_re_bug_18380cCs2|durt |¡}ntj||d}| ||¡dS)Nr3)r!rPr-)r1ÚencodedZexpected_decodedr4Údecodedr4r4r5Ú _test_decode@s zTestQuopri._test_decodecCs| dd¡dSrh©rrrêr4r4r5Útest_decode_null_wordGsz TestQuopri.test_decode_null_wordcCs| dd¡dS)Nr»r(rsrêr4r4r5Útest_decode_null_line_null_wordJsz*TestQuopri.test_decode_null_line_null_wordcCs| dd¡dSrkrsrêr4r4r5Útest_decode_one_wordMszTestQuopri.test_decode_one_wordcCs|jdddddS)Nr1ÚXr3rsrêr4r4r5Útest_decode_one_word_eolPsz#TestQuopri.test_decode_one_word_eolcCs| dd¡dS©Núhello úhello rsrêr4r4r5Útest_decode_one_lineSszTestQuopri.test_decode_one_linecCs| dd¡dS©Nr{rsrêr4r4r5Útest_decode_one_line_lfVsz"TestQuopri.test_decode_one_line_lfcCs| dd¡dS)Nzhello r{rsrêr4r4r5Útest_decode_one_line_crYsz"TestQuopri.test_decode_one_line_crcCs|jdddddS)Nr{ÚhelloXrwr3rsrêr4r4r5Útest_decode_one_line_nl\sz"TestQuopri.test_decode_one_line_nlcCs|jdddddS)Nrzr€rwr3rsrêr4r4r5Útest_decode_one_line_crnl_sz$TestQuopri.test_decode_one_line_crnlcCs| dd¡dS)NrBrCrsrêr4r4r5Útest_decode_one_line_one_wordbsz(TestQuopri.test_decode_one_line_one_wordcCs|jdddddS)NrBZ helloXworldrwr3rsrêr4r4r5Ú!test_decode_one_line_one_word_eolesz,TestQuopri.test_decode_one_line_one_word_eolcCs| dd¡dS)Núhello world ú hello world rsrêr4r4r5Útest_decode_two_lineshsz TestQuopri.test_decode_two_linescCs|jdddddS)Nr…Z helloXworldXrwr3rsrêr4r4r5Útest_decode_two_lines_eolksz$TestQuopri.test_decode_two_lines_eolcCs| dd¡dS)NAèSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamSpamrsrêr4r4r5Útest_decode_one_long_linensz$TestQuopri.test_decode_one_long_linecCs| dd¡dS)Nr*r)rsrêr4r4r5Útest_decode_one_spaceqsz TestQuopri.test_decode_one_spacecCs| dd¡dS)Nz r)rsrêr4r4r5Útest_decode_multiple_spacestsz&TestQuopri.test_decode_multiple_spacescCs| dd¡dS)Nz hello r{rsrêr4r4r5Ú$test_decode_one_line_trailing_spaceswsz/TestQuopri.test_decode_one_line_trailing_spacescCs| dd¡dS)Nzhello world r†rsrêr4r4r5Ú%test_decode_two_lines_trailing_spaceszsz0TestQuopri.test_decode_two_lines_trailing_spacescCs| dd¡dS)Nz=22quoted=20words=22z"quoted words"rsrêr4r4r5Útest_decode_quoted_word}sz"TestQuopri.test_decode_quoted_wordcCs| dd¡dS)Nzab=CD=EFõabÃïrsrêr4r4r5Útest_decode_uppercase_quoting€sz(TestQuopri.test_decode_uppercase_quotingcCs| dd¡dS)Nzab=cd=efrrsrêr4r4r5Útest_decode_lowercase_quotingƒsz(TestQuopri.test_decode_lowercase_quotingcCs| dd¡dS)Nzsoft line= breakzsoft linebreakrsrêr4r4r5Útest_decode_soft_line_break†sz&TestQuopri.test_decode_soft_line_breakcCs| dd¡dS)NzA=1,B=A ==> A+B==2rsrêr4r4r5Útest_decode_false_quoting‰sz$TestQuopri.test_decode_false_quotingcCs€i}|durd}n||d<|dur(d}n||d<tj|fi|¤Ž}| ||¡|dks^|dkr|| ¡D]}| t|ƒ|¡qfdS)Nrwr™r(r4r»)r!r;r-r­rzru)r1r€Zexpected_encoded_bodyr™r4ÚkwargsZ encoded_bodyr‚r4r4r5Ú _test_encodeŒs  zTestQuopri._test_encodecCs| dd¡dSrh©r•rêr4r4r5Útest_encode_null szTestQuopri.test_encode_nullcCs| dd¡dS)Nz r–rêr4r4r5Útest_encode_null_lines£sz!TestQuopri.test_encode_null_linescCs| dd¡dSr}r–rêr4r4r5Útest_encode_one_line¦szTestQuopri.test_encode_one_linecCs| dd¡dSryr–rêr4r4r5Útest_encode_one_line_crlf©sz$TestQuopri.test_encode_one_line_crlfcCs|jdddddS)Nr{rzr»r3r–rêr4r4r5Útest_encode_one_line_eol¬sz#TestQuopri.test_encode_one_line_eolcCs |jd d¡ d¡ddddS)NuhelloÏ… rMÚlatin1z hello=CF=85 r»r3)r•r–rPrêr4r4r5Ú(test_encode_one_line_eol_after_non_ascii¯sÿz3TestQuopri.test_encode_one_line_eol_after_non_asciicCs| dd¡dS)Nr*z=20r–rêr4r4r5Útest_encode_one_space´sz TestQuopri.test_encode_one_spacecCs| dd¡dS)Nz z=20 r–rêr4r4r5Útest_encode_one_line_one_space·sz)TestQuopri.test_encode_one_line_one_spacecCs| dd¡dS)Nz z=20 =20 r–rêr4r4r5Útest_encode_two_lines_one_space¿sz*TestQuopri.test_encode_two_lines_one_spacecCs| dd¡dS)Nzhello z hello =20r–rêr4r4r5Ú$test_encode_one_word_trailing_spacesÂsz/TestQuopri.test_encode_one_word_trailing_spacescCs| dd¡dS)Nz hello z hello =20 r–rêr4r4r5Ú$test_encode_one_line_trailing_spacesÅsz/TestQuopri.test_encode_one_line_trailing_spacescCs| dd¡dS)Nzhello z hello =09r–rêr4r4r5Ú!test_encode_one_word_trailing_tabÈsz,TestQuopri.test_encode_one_word_trailing_tabcCs| dd¡dS)Nz hello z hello =09 r–rêr4r4r5Ú!test_encode_one_line_trailing_tabËsz,TestQuopri.test_encode_one_line_trailing_tabcCs|jdddddS)Nú abcd 1234z abcd = 1234rr˜r–rêr4r4r5Ú,test_encode_trailing_space_before_maxlinelenÎsz7TestQuopri.test_encode_trailing_space_before_maxlinelencCs|jdddddS)Nr¥zabcd= =20 1234r(r˜r–rêr4r4r5Ú(test_encode_trailing_space_at_maxlinelenÑsz3TestQuopri.test_encode_trailing_space_at_maxlinelencCs|jdddddS)Nr¥zabc= d=20 1234r}r˜r–rêr4r4r5Ú,test_encode_trailing_space_beyond_maxlinelenÔsz7TestQuopri.test_encode_trailing_space_beyond_maxlinelencCs| dd¡dS)Nz z=20 =20 =20 =20 =20 r–rêr4r4r5Útest_encode_whitespace_lines×sz'TestQuopri.test_encode_whitespace_linescCs| dd¡dS)Nza = bza =3D br–rêr4r4r5Útest_encode_quoted_equalsÚsz$TestQuopri.test_encode_quoted_equalscCs| dd¡dS)NZdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= xxxxxxxxxxxxxxxxxxxxxxxxxr–rêr4r4r5Útest_encode_one_long_stringÝsz&TestQuopri.test_encode_one_long_stringcCs| dd¡dS)Nzexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx zgxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= xxxxxxxxxxxxxxxxxxxxxxxxx r–rêr4r4r5Útest_encode_one_long_lineàsz$TestQuopri.test_encode_one_long_linecCs| dd¡dS)NzÉxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx zÍxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx r–rêr4r4r5Útest_encode_one_very_long_lineãsÿz)TestQuopri.test_encode_one_very_long_linecCs|jdddddS)Nz=====z=3D= =3D= =3D= =3D= =3Dr}r˜r–rêr4r4r5Útest_encode_shortest_maxlinelençsz*TestQuopri.test_encode_shortest_maxlinelencCs|jt|jdddddS)Nr)rœr˜)r‚rr•rêr4r4r5Ú test_encode_maxlinelen_too_smallêsz+TestQuopri.test_encode_maxlinelen_too_smallcCst|j}|t d¡dƒ|t d¡dƒ|t d¡dƒ|tjddddƒ|tjddd d d ƒ|t d ¡d ƒdS) Nr)r1rBrCúdxxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx r?r˜zjxxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx= xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxx= x xxxx xxxx xxxx xxxx=20r»r@zlxxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx= xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxx= x xxxx xxxx xxxx xxxx=20zone line two line)r-r!r;r$r4r4r5rAísÿ ýzTestQuopri.test_encode)N)N)NN)FrorprqrërVrWrZr[r]r_rarbrcrdrergrjrlrmrnrorrrtrurvrxr|r~rrr‚rƒr„r‡rˆr‰rŠr‹rŒrrŽrr‘r’r“r•r—r˜r™ršr›rržrŸr r¡r¢r£r¤r¦r§r¨r©rªr«r¬r­r®r¯rAr4r4r4r5rFÇs†   rFc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú TestCharsetcCs0ddlm}z |jd=Wnty*Yn0dS)Nrr Úfake)r—r;ZCHARSETSrE)r1Ú CharsetModuler4r4r5ÚtearDown s    zTestCharset.tearDowncCsN|j}tdƒ}|| d¡dƒd}| t|j|¡tdƒ}|| |¡dƒdS)NrGú Hello World!u¤¢¤¤¤¦¤¨¤ªrMz(=?utf-8?b?wqTCosKkwqTCpMKmwqTCqMKkwqo=?=)r-r rMr‚rT)r1r2rºr¦r4r4r5Útest_codec_encodeablesz!TestCharset.test_codec_encodeablecCs|j}tdƒ}|d| d¡ƒtdƒ}|d| d¡ƒtdƒ}|d| d¡ƒtd ƒ}d d lm}| d |jdd¡td ƒ}|d| d¡ƒdS) Nr7z hello w=F6rldu hello wörldrMr~r rGr€r„rr r²)r-r r;r—r;Z add_charsetZQP)r1r2rºr³r4r4r5Útest_body_encodes zTestCharset.test_body_encodecCs,tdƒ}| t|ƒd¡| tjtd¡dS)NrGuascÿii)r r-r±r‚rZ CharsetErrorr|r4r4r5Útest_unicode_charset_name;sz%TestCharset.test_unicode_charset_nameN)rorprqr´r¶r·r¸r4r4r4r5r± s r±c@sÔeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3S)4Ú TestHeadercCs8|j}tdƒ}|| ¡dƒ| d¡|| ¡dƒdS)Nrµz Goodbye World!zHello World! Goodbye World!©r‰r r–ršr¥r4r4r5Ú test_simpleDs  zTestHeader.test_simplecCs8|j}tdƒ}|| ¡dƒ| d¡|| ¡dƒdS)NrµzGoodbye World!zHello World! Goodbye World!rºr¥r4r4r5Útest_simple_surpriseKs  zTestHeader.test_simple_surprisecCsd}| t|ƒ|dfg¡dS)Nzno decoding neededr›r­r4r4r5Útest_header_needs_no_decodingRsz(TestHeader.test_header_needs_no_decodingcCs8tddd}|jdd d¡D]}| t|ƒd¡qdS)Na¶I am the very model of a modern Major-General; I've information vegetable, animal, and mineral; I know the kings of England, and I quote the fights historical from Marathon to Waterloo, in order categorical; I'm very well acquainted, too, with matters mathematical; I understand equations, both the simple and quadratical; about binomial theorem I'm teeming with a lot o' news, with many cheerful facts about the square of the hypotenuse.rwr˜r*)Z splitcharsz )r r–r²rzru)r1r‘Úlr4r4r5Ú test_longVs ÿzTestHeader.test_longc Csæ|j}tdƒ}tdƒ}tdƒ}d}d}d}t||ƒ}| ||¡| ||¡|jdd} || d ƒt| ƒ} |t| ƒd ƒ|| d |dfƒ|| d |dfƒ|| d | d¡dfƒt|ƒ} || d d¡ƒt t| ƒƒ} || |ƒdS)Nr7rbrMr“r”r•rwr˜a=?iso-8859-1?q?Die_Mieter_treten_hier_ein_werden_mit_einem_Foerderband_kom?= =?iso-8859-1?q?fortabel_den_Korridor_entlang=2C_an_s=FCdl=FCndischen_Wand?= =?iso-8859-1?q?gem=E4lden_vorbei=2C_gegen_die_rotierenden_Klingen_bef=F6r?= =?iso-8859-1?q?dert=2E_?= =?iso-8859-2?q?Finan=E8ni_metropole_se_hroutily?= =?iso-8859-2?q?_pod_tlakem_jejich_d=F9vtipu=2E=2E_?= =?utf-8?b?5q2j56K6?= =?utf-8?b?44Gr6KiA44GG44Go57+76Kiz44Gv44GV44KM44Gm44GE44G+44Gb44KT44CC?= =?utf-8?b?5LiA6YOo44Gv44OJ44Kk44OE6Kqe44Gn44GZ44GM44CB44GC44Go44Gv44Gn?= =?utf-8?b?44Gf44KJ44KB44Gn44GZ44CC5a6f6Zqb44Gr44Gv44CMV2VubiBpc3QgZGFz?= =?utf-8?b?IE51bnN0dWNrIGdpdCB1bmQgU2xvdGVybWV5ZXI/IEphISBCZWloZXJodW5k?= =?utf-8?b?IGRhcyBPZGVyIGRpZSBGbGlwcGVyd2FsZHQgZ2Vyc3B1dC7jgI3jgajoqIA=?= =?utf-8?b?44Gj44Gm44GE44G+44GZ44CC?=rœrrrr›sâDie Mieter treten hier ein werden mit einem Foerderband komfortabel den Korridor entlang, an südlündischen Wandgemälden vorbei, gegen die rotierenden Klingen befördert. FinanÄni metropole se hroutily pod tlakem jejich důvtipu.. 正確ã«è¨€ã†ã¨ç¿»è¨³ã¯ã•れã¦ã„ã¾ã›ã‚“。一部ã¯ãƒ‰ã‚¤ãƒ„語ã§ã™ãŒã€ã‚ã¨ã¯ã§ãŸã‚‰ã‚ã§ã™ã€‚実際ã«ã¯ã€ŒWenn ist das Nunstuck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput.ã€ã¨è¨€ã£ã¦ã„ã¾ã™ã€‚) r‰r r ršr–r rur±rPr ) r1r2r§r›rœrržrŸr‘ÚencrqZustrZnewhr4r4r5Útest_multilingual\s2     ðÿ zTestHeader.test_multilingualcCstƒ}| | ¡d¡dSrhr¬r­r4r4r5Útest_empty_header_encode›sz#TestHeader.test_empty_header_encodecCs4|j}tƒ}||dƒ| dtdƒ¡||dƒdS)Nr)r¡r7)r‰r ršr r¥r4r4r5Útest_header_ctor_default_argsŸs  z(TestHeader.test_header_ctor_default_argscCs„|j}d}t|ƒ}|| ¡dƒ|t|ƒ|ƒt|dd}|| ¡dƒ|t|ƒ|ƒt|ddd}|| ¡|ƒ|t|ƒ|ƒdS)Nz|A very long line that must get split to something other than at the 76th character boundary to test the non-default behaviorz}A very long line that must get split to something other than at the 76th character boundary to test the non-default behaviorrjr–z}A very long line that must get split to something other than at the 76th character boundary to test the non-default behaviori)r™r—)r‰r r–r±rr4r4r5Útest_explicit_maxlinelen¦s z#TestHeader.test_explicit_maxlinelencCsŠ|j}tddd}d}| |¡| ¡}||dƒ||ttt|ƒƒƒƒtddd}| d¡| ¡}||dƒ||ttt|ƒƒƒƒdS)Nr7r9©r;r™r°a=?iso-8859-1?q?xxx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_x?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?x_?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?xx?= =?iso-8859-1?q?_?=r?zÁ=?iso-8859-1?q?xxxx_xxxx_xxxx_xxxx_xxx?= =?iso-8859-1?q?x_xxxx_xxxx_xxxx_xxxx_?= =?iso-8859-1?q?xxxx_xxxx_xxxx_xxxx_xx?= =?iso-8859-1?q?xx_xxxx_xxxx_xxxx_xxxx?= =?iso-8859-1?q?_xxxx_xxxx_?=©r‰r ršr–r±r r ©r1r2r‘rNr¦r4r4r5Útest_quopri_splittable¹s   3   z!TestHeader.test_quopri_splittablecCsŠ|j}tddd}d}| |¡| ¡}||dƒ||ttt|ƒƒƒƒtddd}| |¡| ¡}||dƒ||ttt|ƒƒƒƒdS)Nrcr9rÅr°a„=?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IHh4?= =?koi8-r?b?eHgg?= =?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IHh4?= =?koi8-r?b?eHgg?= =?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IHh4?= =?koi8-r?b?eHgg?= =?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IHh4?= =?koi8-r?b?eHgg?= =?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IHh4?= =?koi8-r?b?eHgg?= =?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IHh4?= =?koi8-r?b?eHgg?= =?koi8-r?b?eHh4?= =?koi8-r?b?eCB4?= =?koi8-r?b?eHh4?= =?koi8-r?b?IA==?=r?zà=?koi8-r?b?eHh4eCB4eHh4IHh4eHggeHh4?= =?koi8-r?b?eCB4eHh4IHh4eHggeHh4eCB4?= =?koi8-r?b?eHh4IHh4eHggeHh4eCB4eHh4?= =?koi8-r?b?IHh4eHggeHh4eCB4eHh4IHh4?= =?koi8-r?b?eHggeHh4eCB4eHh4IHh4eHgg?= =?koi8-r?b?eHh4eCB4eHh4IA==?=rÆrÇr4r4r5Útest_base64_splittableþs   #   z!TestHeader.test_base64_splittablecCs8|j}d}t|ƒ}||dgƒt|ƒ}||| ¡ƒdS)Nr1)r1N©r-r r r–)r1r2r¦rNr‘r4r4r5Útest_us_ascii_header4s  zTestHeader.test_us_ascii_headercCs&|j}tƒ}| dd¡||dƒdS)Nr1r7)r-r ršr¥r4r4r5Útest_string_charset<s zTestHeader.test_string_charsetcCs:|j}tddƒ}|| ¡dƒtddƒ}|| ¡dƒdS)NrérMz=?utf-8?q?p=C3=B6stal?=u èŠåœ°æ™‚夫z=?utf-8?b?6I+K5Zyw5pmC5aSr?=©r-r r–r¥r4r4r5Útest_utf8_shortestKs   zTestHeader.test_utf8_shortestcCsr|j}|j}d}|tt|ƒtƒ}|t|j|ƒ| dd¡}|tt|ddƒ|ƒ|j|dd|t|ƒ|ƒdS)Nó0Ynwp4dUEbay Auction Semiar- No Charge – Earn BigrMrËr)r‚r-rTr ršrPr±)r1rBr2rNr‘Úer4r4r5Útest_bad_8bit_headerRs  zTestHeader.test_bad_8bit_headercCsNd}| dd¡}t|tjjd}| t|ƒd¡| tj |¡|dfg¡dS)NrÏr•Úsurrogateescaper õ2Ynwp4dUEbay Auction Semiar- No Charge � Earn Bigú unknown-8bit) rPr r—r;Ú UNKNOWN8BITr-r±r„r )r1rNrÐr‘r4r4r5Útest_escaped_8bit_header^s  ÿz#TestHeader.test_escaped_8bit_headercCsBd}t|tjjd}| t|ƒd¡| tj |¡|dfg¡dS©NrÏr rÓrÔ)r r—r;rÕr-r±r„r )r1rNr‘r4r4r5Ú&test_header_handles_binary_unknown8bitfs  ÿz1TestHeader.test_header_handles_binary_unknown8bitcCsVd}t|tjjd}tj tj |¡¡}| t|ƒd¡| tj |¡|dfg¡dSr×) r r—r;rÕr„r r r-r±)r1rNr‘Zh2r4r4r5Ú+test_make_header_handles_binary_unknown8bitms ÿz6TestHeader.test_make_header_handles_binary_unknown8bitcCs2tdƒ}tj |¡}| d¡| t|ƒd¡dS)Nr )r•Ztest2)r r—r„r ršr-r±)r1r‘r¶r4r4r5Ú0test_modify_returned_list_does_not_change_headerus  z;TestHeader.test_modify_returned_list_does_not_change_headercCsR|j}tƒ}| dd¡| d¡| ¡}||dƒtt|ƒƒ}|| ¡|ƒdS)Nr1r7Zworldz=?iso-8859-1?q?hello?= world)r-r ršr–r r )r1r2r‘r¦r4r4r5Ú test_encoded_adjacent_nonencoded{s    z+TestHeader.test_encoded_adjacent_nonencodedcCs:|j}d}t|ƒ}||gd¢ƒt|ƒ}|| ¡dƒdS)NzGSubject: =?koi8-r?b?8NLP18XSy8EgzsEgxsnOwczYztk=?= =?koi8-r?q?=CA?= zz.))s Subject: N)sðÒÏ×ÅÒËÁ ÎÁ ÆÉÎÁÌØÎÙÊrc)s zz.Nz6Subject: =?koi8-r?b?8NLP18XSy8EgzsEgxsnOwczYztnK?= zz.rÊ)r1r2r¦ÚpartsZhdrr4r4r5Útest_whitespace_keeper…sÿz!TestHeader.test_whitespace_keepercCs|j}d}|tjt|ƒdS)NzXSubject: =?EUC-KR?B?CSixpLDtKSC/7Liuvsax4iC6uLmwMcijIKHaILzSwd/H0SC8+LCjwLsgv7W/+Mj3I ?=)r‚rrƒr )r1rBr¦r4r4r5Útest_broken_base64_headerŽsz$TestHeader.test_broken_base64_headercCs tddd}| | ¡d¡dS)NrªÚ shift_jisr r«r¬r­r4r4r5Útest_shift_jis_charset“s z!TestHeader.test_shift_jis_charsetcCst d¡}| t|ƒd¡dS)Nz EmptyHeader:zEmptyHeader: )r—rÔr-r±r\r4r4r5Ú!test_flatten_header_with_no_value—s z,TestHeader.test_flatten_header_with_no_valuecCs"tƒ}d|d<| t|ƒd¡dS)Nz value with leading wsZ SomeHeaderz&SomeHeader: value with leading ws )rr-r±r\r4r4r5Ú)test_encode_preserves_leading_ws_on_valuežsz4TestHeader.test_encode_preserves_leading_ws_on_valuecCs| tdƒ ¡d¡dS)Nr*rÍrêr4r4r5Útest_whitespace_header£sz!TestHeader.test_whitespace_headerN)rorprqr»r¼r½r¿rÁrÂrÃrÄrÈrÉrËrÌrÎrÑrÖrØrÙrÚrÛrÝrÞràrárârãr4r4r4r5r¹Cs2?E6   r¹c@sôeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;S)<Ú TestRFC2231cCs8|j}| d¡}|| d¡dƒ||jddddƒdS)Nz msg_29.txtr ©rGr ú%This is even more ***fun*** isn't it!Frì)rGr z'"This is even more ***fun*** isn't it!")r-r.rCr0r4r4r5ré­s  ÿÿzTestRFC2231.test_get_paramcCs€|j}tƒ}|jdddd|| d¡dƒ|jddddd|| d¡dƒ| d ¡}|jddddd||jd d d ƒdS) Nr rærGr )rGr)rær ©r;Úlanguagerår|rÎrÐa"Return-Path: Delivered-To: bbb@zzz.org Received: by mail.zzz.org (Postfix, from userid 889) id 27CEAD38CC; Fri, 4 May 2001 14:05:44 -0400 (EDT) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: <15090.61304.110929.45684@aaa.zzz.org> From: bbb@ddd.com (John X. Doe) To: bbb@zzz.org Subject: This is a test message Date: Fri, 4 May 2001 14:05:44 -0400 Content-Type: text/plain; charset=us-ascii; title*=us-ascii'en'This%20is%20even%20more%20%2A%2A%2Afun%2A%2A%2A%20isn%27t%20it%21 Hi, Do you like this message? -Me )r‰rrörCr.rˆr0r4r4r5r÷µs&ÿ ÿÿ ÿ ÿzTestRFC2231.test_set_paramcCsftƒ}| dd¡| |dd¡|jdddd| |dd¡|jdd dd| |dd ¡dS) Nr r¡r:ztext/plain; title="foo"ràF)Zrequoteztext/plain; title=barz (bar)bellztext/plain; title="(bar)bell")rrör-r\r4r4r5Útest_set_param_requoteÚs z"TestRFC2231.test_set_param_requotecCsX|j}| d¡}|jddddd|jddddd|jdd d ||jd d d ƒdS)Nr|r¡ràrGr rçr rær>rÞrÎrÐa$Return-Path: Delivered-To: bbb@zzz.org Received: by mail.zzz.org (Postfix, from userid 889) id 27CEAD38CC; Fri, 4 May 2001 14:05:44 -0400 (EDT) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: <15090.61304.110929.45684@aaa.zzz.org> From: bbb@ddd.com (John X. Doe) To: bbb@zzz.org Subject: This is a test message Date: Fri, 4 May 2001 14:05:44 -0400 Content-Type: text/plain; charset="us-ascii"; title*=us-ascii'en'This%20is%20even%20more%20%2A%2A%2Afun%2A%2A%2A%20isn%27t%20it%21 Hi, Do you like this message? -Me )r‰r.rörÿrˆr0r4r4r5räs ÿzTestRFC2231.test_del_paramcCs"|j}| d¡}|| ¡dƒdS)NrérG)r-r.Úget_content_charsetr0r4r4r5Ú test_rfc2231_get_content_charsets z,TestRFC2231.test_rfc2231_get_content_charsetcCs8t d¡}t |¡}| | ¡d¡| || ¡¡dS)NzÈ Content-Disposition: inline; filename*0*=''This%20is%20even%20more%20; filename*1*=%2A%2A%2Afun%2A%2A%2A%20; filename*2="is it not.pdf" ú)This is even more ***fun*** is it not.pdf©rÃrÄr—rÔr-rjrˆrær4r4r5Útest_rfc2231_parse_rfc_quoting s    ÿz*TestRFC2231.test_rfc2231_parse_rfc_quotingcCs8t d¡}t |¡}| | ¡d¡| || ¡¡dS)NzÌ Content-Disposition: inline; filename*0*="''This%20is%20even%20more%20"; filename*1*="%2A%2A%2Afun%2A%2A%2A%20"; filename*2="is it not.pdf" rìrírær4r4r5Ú test_rfc2231_parse_extra_quotings    ÿz,TestRFC2231.test_rfc2231_parse_extra_quotingcCs4d}t |¡}| d¡}| |t¡| |d¡dS)NaContent-Transfer-Encoding: 8bit Content-Disposition: inline; filename="file____C__DOCUMENTS_20AND_20SETTINGS_FABIEN_LOCAL_20SETTINGS_TEMP_nsmail.htm" Content-Type: text/html; NAME*0=file____C__DOCUMENTS_20AND_20SETTINGS_FABIEN_LOCAL_20SETTINGS_TEM; NAME*1=P_nsmail.htm ÚNAMEzMfile____C__DOCUMENTS_20AND_20SETTINGS_FABIEN_LOCAL_20SETTINGS_TEMP_nsmail.htm©r—rÔrCZassertNotIsInstanceÚtupler-©r1rÇr3Zparamr4r4r5Ú#test_rfc2231_no_language_or_charset)s   þz/TestRFC2231.test_rfc2231_no_language_or_charsetcCs"d}t |¡}| | ¡d¡dS©NzContent-Disposition: inline; filename*0*="''This%20is%20even%20more%20"; filename*1*="%2A%2A%2Afun%2A%2A%2A%20"; filename*2="is it not.pdf" rìr×rær4r4r5Ú/test_rfc2231_no_language_or_charset_in_filename8s   ÿz;TestRFC2231.test_rfc2231_no_language_or_charset_in_filenamecCs"d}t |¡}| | ¡d¡dSrõr×rær4r4r5Ú7test_rfc2231_no_language_or_charset_in_filename_encodedEs   ÿzCTestRFC2231.test_rfc2231_no_language_or_charset_in_filename_encodedcCs"d}t |¡}| | ¡d¡dS)NzContent-Disposition: inline; filename*0="''This%20is%20even%20more%20"; filename*1*="%2A%2A%2Afun%2A%2A%2A%20"; filename*2="is it not.pdf" z1This%20is%20even%20more%20***fun*** is it not.pdfr×rær4r4r5Útest_rfc2231_partly_encodedSs  þz'TestRFC2231.test_rfc2231_partly_encodedcCs"d}t |¡}| | ¡d¡dS)NzŒContent-Disposition: inline; filename*0="This%20is%20even%20more%20"; filename*1="%2A%2A%2Afun%2A%2A%2A%20"; filename*2="is it not.pdf" z?This%20is%20even%20more%20%2A%2A%2Afun%2A%2A%2A%20is it not.pdfr×rær4r4r5Útest_rfc2231_partly_nonencoded`s  þz*TestRFC2231.test_rfc2231_partly_nonencodedcCs"d}t |¡}| | ¡d¡dS)Nz˜Content-Type: multipart/alternative; boundary*0*="''This%20is%20even%20more%20"; boundary*1*="%2A%2A%2Afun%2A%2A%2A%20"; boundary*2="is it not.pdf" rìrÚrær4r4r5Ú/test_rfc2231_no_language_or_charset_in_boundaryms   ÿz;TestRFC2231.test_rfc2231_no_language_or_charset_in_boundarycCs"d}t |¡}| | ¡d¡dS)NzˆContent-Type: text/plain; charset*0*="This%20is%20even%20more%20"; charset*1*="%2A%2A%2Afun%2A%2A%2A%20"; charset*2="is it not.pdf" z)this is even more ***fun*** is it not.pdf©r—rÔr-rêrær4r4r5Ú.test_rfc2231_no_language_or_charset_in_charsetys   ÿz:TestRFC2231.test_rfc2231_no_language_or_charset_in_charsetcCs"d}t |¡}| | ¡d¡dS)Nz—Content-Disposition: inline; filename*0*="bogus'xx'This%20is%20even%20more%20"; filename*1*="%2A%2A%2Afun%2A%2A%2A%20"; filename*2="is it not.pdf" rìr×rær4r4r5Ú%test_rfc2231_bad_encoding_in_filename‡s   ÿz1TestRFC2231.test_rfc2231_bad_encoding_in_filenamecCs"d}t |¡}| | ¡d¡dS)Nz:Content-Type: text/plain; charset*=bogus''utf-8%E2%80%9D rûrær4r4r5Ú$test_rfc2231_bad_encoding_in_charset“s z0TestRFC2231.test_rfc2231_bad_encoding_in_charsetcCs"d}t |¡}| | ¡d¡dS)Nz:Content-Type: text/plain; charset*=ascii''utf-8%E2%80%9D rûrær4r4r5Ú%test_rfc2231_bad_character_in_charsets z1TestRFC2231.test_rfc2231_bad_character_in_charsetcCs"d}t |¡}| | ¡d¡dS)Nz›Content-Disposition: inline; filename*0*="ascii'xx'This%20is%20even%20more%20"; filename*1*="%2A%2A%2Afun%2A%2A%2A%20"; filename*2*="is it not.pdf%E2" u,This is even more ***fun*** is it not.pdf�r×rær4r4r5Ú&test_rfc2231_bad_character_in_filename§s   ÿz2TestRFC2231.test_rfc2231_bad_character_in_filenamecCs"d}t |¡}| | ¡d¡dS)Nz^Content-Transfer-Encoding: 8bit Content-Disposition: inline; filename*=X-UNKNOWN''myfile.txt z myfile.txtr×rær4r4r5Útest_rfc2231_unknown_encoding³s z)TestRFC2231.test_rfc2231_unknown_encodingcCsF|j}d}t |¡}| d¡\}}}||dƒ||dƒ||dƒdS)NzJContent-Type: application/x-foo; name*0*="Frank's"; name*1*=" Document" rêúFrank's Documentrè©r1r2rÇr3r;rèr¦r4r4r5Ú-test_rfc2231_single_tick_in_filename_extended¼s   z9TestRFC2231.test_rfc2231_single_tick_in_filename_extendedcCs4d}t |¡}| d¡}| |t¡| |d¡dS)NzGContent-Type: application/x-foo; name*0="Frank's"; name*1=" Document" rêrrñrór4r4r5Ú$test_rfc2231_single_tick_in_filenameÊs    z0TestRFC2231.test_rfc2231_single_tick_in_filenamecCs"d}t |¡}| | ¡d¡dS)NzAContent-Disposition: inline; filename*0*="'This%20is%20broken"; z'This is brokenr×rær4r4r5Útest_rfc2231_missing_tickÔs  þz%TestRFC2231.test_rfc2231_missing_tickcCs"d}t |¡}| | ¡d¡dS)NzAContent-Disposition: inline; filename*0*="'This%20is%E2broken"; u'This is�brokenr×rær4r4r5Ú0test_rfc2231_missing_tick_with_encoded_non_asciiÞs  þz To: "xxx" Subject: ��� ���������� ����� ����� � ��������� �� ���� MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1251"; Content-Transfer-Encoding: 8bit �� ����� � ���� ������ ��� �������� )rÇ)r“r—rÔ)r1ÚmessagesrÇr3r4r4r5Ú+test_should_not_hang_on_invalid_ew_messages-s øz7TestRFC2231.test_should_not_hang_on_invalid_ew_messagesN) rorprqrér÷rérrërîrïrôrör÷rørùrúrürýrþrÿrrrrrrr r r r rrr4r4r4r5rä©s:% !              räc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú TestSignedcCsBt|ƒ"}| ¡}t |¡}Wdƒn1s00Y||fSrZrÖ)r1rrÚoriginalr3r4r4r5Ú _msg_and_objIs (zTestSigned._msg_and_objcCsLddl}| d|j|jB¡}| |¡ d¡}| |¡ d¡}| ||¡dS)Nrz^--([^\n]+)\n(.*?)\n--\1$r›)r-r.ÚSrÁÚsearchÚgroupr-)r1rÚresultr-ZrepartZinpartZoutpartr4r4r5Ú_signed_parts_eqOs zTestSigned._signed_parts_eqcCs&| d¡\}}| ¡}| ||¡dSrñ©rrˆr©r1rr3rr4r4r5Útest_long_headers_as_stringWsz&TestSigned.test_long_headers_as_stringcCs*| d¡\}}|jdd}| ||¡dS)Nròé<rÐrrr4r4r5Ú(test_long_headers_as_string_maxheaderlen\s z3TestSigned.test_long_headers_as_string_maxheaderlencCs:| d¡\}}tƒ}t|ƒ |¡| ¡}| ||¡dSrñ)rrrrrŽr)r1rr3rrr4r4r5Útest_long_headers_flattenas z$TestSigned.test_long_headers_flattenN)rorprqrrrrrr4r4r4r5rGs rÚ__main__)`r-r8rNr.rÃÚiorrÚ itertoolsrÚrandomrÚ threadingrZ unittest.mockrr—Z email.policyZ email.charsetr Z email.headerr r r Z email.parserr rZemail.generatorrrrZ email.messagerZemail.mime.applicationrZemail.mime.audiorZemail.mime.textrZemail.mime.imagerZemail.mime.baserZemail.mime.messagerZemail.mime.multipartrZemail.mime.nonmultipartrrrrrr r!Z test.supportr"r#Ztest.test_emailr$r%r&r'rµr™r¹r+ZTestCaserrrˆrérõr r rr0rir…r¯rÕr÷r—r³rÄrèr'r+r/r0rFr±r¹rärroÚmainr4r4r4r5ÚsÊ                    lCAO((\<0< g0K! ÿ ÿ5D:h!#