
    2hh                         S SK r S SKJrJr  S SKrS SKJr  S SKJr  S SK	J
r
Jr  \ " S S\5      5       r\ " S S	\5      5       r\S
:X  a  \ R                  " 5         gg)    N)TestEmailBaseparameterize)policy)EmailMessage)ContentManagerraw_data_managerc                       \ rS rSr\R
                  r\rSSSS.rS r	S r
S r " S	 S
\5      r\ S-   S-   r " S S\5      r\ S-   S-   rS\4S\4SSS\4S\4SSS\4SSSS.rS rS rS rS  rS! rS"rg#)$TestContentManager	   )   
text/plain)   text)    )	full_typemaintype_onlynull_keyc                     S	S jn[        5       nUR                  X#5        U R                  5       nSUS'   SUS'   U R                  UR	                  USS9S5        g )
Nc                     U S   nX4$ NX-Bar-Header )msgfoobars      L/opt/python-3.13.8/usr/lib/python3.13/test/test_email/test_contentmanager.py
foo_getterATestContentManager.get_key_as_get_content_key.<locals>.foo_getter   s    n%C8O    r   Content-Typer   r   r   r   )r   r   N)r   add_get_handler_make_messageassertEqualget_content)selforderkeyr   cmms         r   get_key_as_get_content_key-TestContentManager.get_key_as_get_content_key   s^    	 
3+ (.!.u5~Fr    c                 <   S nS n[        5       nUR                  X$5        U R                  R                  5        H  u  pbXa:  d  M  UR                  X#5        M     U R	                  5       nSUS'   SUS'   SUS'   U R                  UR                  U5      S5        g )	Nc                     U S   $ r   r   r   s    r   
bar_getterGTestContentManager.get_key_as_get_content_key_order.<locals>.bar_getter!       ~&&r    c                     U S   $ NX-Foo-Headerr   r1   s    r   r   GTestContentManager.get_key_as_get_content_key_order.<locals>.foo_getter#   r4   r    r   r!   r   r   r   r7   )r   r$   get_key_paramsvaluesr%   r&   r'   )r(   r)   r*   r2   r   r+   
precedencer,   s           r    get_key_as_get_content_key_order3TestContentManager.get_key_as_get_content_key_order    s    	'	'
3+#2299;OJ!""33  <  (.!.!.*U4r    c                     [        5       nU R                  5       nSUS'   U R                  [        S5         UR	                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r!   )r   r%   assertRaisesRegexKeyErrorr'   r(   r+   r,   s      r   :test_get_content_raises_if_unknown_mimetype_and_no_defaultMTestContentManager.test_get_content_raises_if_unknown_mimetype_and_no_default0   sJ     (.##Hl;NN1 <;;s   A
Ac                       \ rS rSrSrg)TestContentManager.BaseThing7   r   N__name__
__module____qualname____firstlineno____static_attributes__r   r    r   	BaseThingrE   7       r    rM   .rE   c                       \ rS rSrSrg)TestContentManager.Thing:   r   NrG   r   r    r   ThingrQ   :   rN   r    rS   rQ   r   r   )r   rQ   )r   rS         )   rE   )   rM      )r   zbuiltins.str)
   str)   N)type	full_pathqualnamename	base_typebase_full_pathbase_qualname	base_namestr_typestr_full_pathstr_namer   c                    SS jn[        5       nUR                  X#5        U R                  5       nU R                  5       nUR	                  XVSS9  U R                  US   S5        U R                  UR                  5       U5        g )Nc                 .    X S'   U R                  U5        g r6   set_payload)r   objr   s      r   
foo_setterATestContentManager.set_key_as_set_content_key.<locals>.foo_setterN   s    "%OOC r    r   r"   r7   r#   )r   add_set_handlerr%   rS   set_contentr&   get_payload)r(   r)   r*   rl   r+   r,   msg_objs          r   set_key_as_set_content_key-TestContentManager.set_key_as_set_content_keyM   ss    	! 
3+ **,
qu->*E2'2r    c                    S nS n[        5       nUR                  X#5        U R                  R                  5        H  u  pbXa:  d  M  UR                  X$5        M     U R	                  5       nU R                  5       nUR                  Xx5        U R                  US   S5        U R                  UR                  5       U5        g )Nc                 0    SU S'   U R                  U5        g )Nr   X-FooBar-Headerri   r   rk   s     r   rl   GTestContentManager.set_key_as_set_content_key_order.<locals>.foo_setterZ   s    %*C!"OOC r    c                     SU S'   g )Nr   rv   r   rw   s     r   
bar_setterGTestContentManager.set_key_as_set_content_key_order.<locals>.bar_setter]   s    %*C!"r    rv   r   )	r   rn   r9   r:   r%   rS   ro   r&   rp   )	r(   r)   r*   rl   rz   r+   r;   r,   rq   s	            r    set_key_as_set_content_key_order3TestContentManager.set_key_as_set_content_key_orderY   s    	!	+
3+#2299;OJ!""33  <  **,
q",-u5'2r    c                     [        5       nU R                  5       nU R                  5       nU R                  [        U R
                  5         UR                  X#5        S S S 5        g ! , (       d  f       g = fr#   )r   r%   rS   r?   r@   testobject_full_pathro   )r(   r+   r,   rq   s       r   6test_set_content_raises_if_unknown_type_and_no_defaultITestContentManager.test_set_content_raises_if_unknown_type_and_no_defaultj   sR     **,##Hd.G.GHNN1& IHHs   A&&
A4c                     [        5       nU R                  5       nSUS'   U R                  [        5         UR	                  US5        S S S 5        g ! , (       d  f       g = f)Nzmultipart/foor!   test)r   r%   assertRaises	TypeErrorro   rA   s      r   .test_set_content_raises_if_called_on_multipartATestContentManager.test_set_content_raises_if_called_on_multipartq   sJ     +.y)NN1f% *))s   A
Ac                 ~   U R                  5       nSUS'   SUS'   SUS'   UR                  S5        [        5       nUR                  [        S 5        UR                  S	US
9  U R                  US   5        U R                  US   5        U R                  US   S5        U R                  UR                  5       5        g )Nr   zContent-Fooz	text/htmlr!   r   Toabcc                      g r#   r   )argskws     r   <lambda>ITestContentManager.test_set_content_calls_clear_content.<locals>.<lambda>   s    Dr    xyz)content_manager)	r%   rj   r   rn   rZ   ro   assertIsNoner&   rp   )r(   r,   r+   s      r   $test_set_content_calls_clear_content7TestContentManager.test_set_content_calls_clear_contentx   s      -'.$	e
3 89	eR0!M*+!N+,4&)!--/*r    r   N)rH   rI   rJ   rK   r   defaultr   messager9   r-   r<   rB   rZ   rM   baseobject_full_pathrS   r   set_key_paramsrr   r|   r   r   r   rL   r   r    r   r
   r
   	   s     ^^FG /($
N	G5 C #c>,JJ	 #c>,FF L!57=*,!57A.J1('
N
33"'&+r    r
   c                      \ rS rSr\R
                  R                  S\S9r\r	S r
S rS rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S  r&S! r'S" r(S# r)S$ r*S% r+S& r,S' r-S( r.S) r/S* r0S+ r1S, r2S- r3S. r4S/ r5S0 r6S1 r7S2 r8S3 r9S4 r:S5S6S7S8\	" 5       S94\	" 5       S:4S;.r;S< r<S= r=S> r>S? r?S@ r@S9rAgA)BTestRawDataManager   <   )max_line_lengthr   c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " U5      S5        g )NJ            Content-Type: text/plain

            Basic text.
            zBasic text.
_str_msgtextwrapdedentr&   r   r'   r(   r,   s     r   test_get_text_plain&TestRawDataManager.test_get_text_plain   s>    MM(// +  
 	)55a8/Jr    c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " U5      S5        g )NzP            Content-Type: text/html

            <p>Basic text.</p>
            z<p>Basic text.</p>
r   r   s     r   test_get_text_html%TestRawDataManager.test_get_text_html   sA    MM(// +  
 	)55a8/	1r    c                     U R                  [        R                  " S5      R                  S5      5      nU R	                  [
        R                  " U5      S5        g )Nu\               Content-Type: text/plain; charset=latin1

            Basìc tëxt.
            latin1   Basìc tëxt.
)
_bytes_msgr   r   encoder&   r   r'   r   s     r   test_get_text_plain_latin1-TestRawDataManager.test_get_text_plain_latin1   sK    OOHOO -  !	#
 	)55a8:KLr    c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " U5      S5        g )Nz            Content-Type: text/plain; charset="latin-1"
            Content-Transfer-Encoding: quoted-printable

            Bas=ECc t=EBxt.
            r   r   r   s     r   +test_get_text_plain_latin1_quoted_printable>TestRawDataManager.test_get_text_plain_latin1_quoted_printable   ?    MM(// +   	)55a8:KLr    c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " U5      S5        g )Nz            Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: base64

            QmFzw6xjIHTDq3h0Lgo=
            r   r   r   s     r   test_get_text_plain_utf8_base642TestRawDataManager.test_get_text_plain_utf8_base64   r   r    c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " U5      S5        g )N            Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: quoted-printable

            Bas=c3=acc t=c3=abxt=fd.
            u   Basìc tëxt�.
r   r   s     r   -test_get_text_plain_bad_utf8_quoted_printable@TestRawDataManager.test_get_text_plain_bad_utf8_quoted_printable   s?    MM(// +   	)55a8:NOr    c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " USS9S5        g )Nr   ignoreerrorsr   r   r   s     r   ;test_get_text_plain_bad_utf8_quoted_printable_ignore_errorsNTestRawDataManager.test_get_text_plain_bad_utf8_quoted_printable_ignore_errors   C    MM(// +   	)55aI*	,r    c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " USS9S5        g )Nu               Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: base64

            QmFzw6xjIHTDq3h0Lgoÿ=
            r   r   r   r   r   s     r   8test_get_text_plain_utf8_base64_recoverable_bad_CTE_dataKTestRawDataManager.test_get_text_plain_utf8_base64_recoverable_bad_CTE_data   r   r    c                     U R                  [        R                  " S5      5      nU R                  [        5         [
        R                  " USS9  S S S 5        g ! , (       d  f       g = f)Nr   r   r"   r   r   r   r   r   r   r'   r   s     r   test_get_text_invalid_keyword0TestRawDataManager.test_get_text_invalid_keyword   sL    MM(// +  
 y)((9 *))   A
A(c                 D   [         R                  " S5      nSR                  5        Hd  nU R                  US9   U R	                  UR                  US-   5      5      nU R                  [        R                  " U5      S5        S S S 5        Mf     g ! , (       d  f       Mx  = f)Nzu            Content-Type: {}
            Content-Transfer-Encoding: base64

            Ym9ndXMgZGF0YQ==
            zaudio image video application)maintypez/foos
   bogus data)	r   r   splitsubTestr   formatr&   r   r'   )r(   templater   r,   s       r   test_get_non_text$TestRawDataManager.test_get_non_text   s    ?? $  8==?Hx0MM(//(6/"BC  !1!=!=a!@-P 10 @00s   A
B
B	c                     U R                  [        R                  " S5      5      nU R                  [        5         [
        R                  " USS9  S S S 5        g ! , (       d  f       g = f)Nz|            Content-Type: image/jpg
            Content-Transfer-Encoding: base64

            Ym9ndXMgZGF0YQ==
            r   r   r   r   s     r   !test_get_non_text_invalid_keyword4TestRawDataManager.test_get_non_text_invalid_keyword   sL    MM(// +   y)((8< *))r   c                     U R                  [        R                  " S5      5      nU R                  [        5         [
        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nzm            Content-Type: multipart/mixed; boundary="==="

            --===
            --===--
            )r   r   r   r   r@   r   r'   r   s     r   test_get_raises_on_multipart/TestRawDataManager.test_get_raises_on_multipart   sJ    MM(// +   x(((+ )((s   A
A)c                 "   [         R                  " S5      nSR                  5        H  nU R                  US9   U R	                  UR                  U5      5      n[        R                  " U5      nU R                  X@R                  5        U R                  [        R                  " U5      S5        U R                  US   S5        U R                  US   R                  S   R                  S	5        S S S 5        M     g ! , (       d  f       M  = f)
Nz            Content-Type: message/{}

            To: foo@example.com
            From: bar@example.com
            Subject: example

            an example message
            rfc822 external-bodysubtypezan example message
tofoo@example.comfromr   r   )r   r   r   r   r   r   r   r'   assertIsInstancer   r&   	addressesusername)r(   r   r   r,   sub_msgs        r   )test_get_message_rfc822_and_external_body<TestRawDataManager.test_get_message_rfc822_and_external_body  s    ?? $  .335Gg.MM(//'":;*66q9%%g||<  !1!=!=g!F!79  0AB  !:!:1!=!F!FN /. 6..s   B9C??
D	c                     U R                  [        R                  " S5      5      nU R                  [        R
                  " U5      S5        g )Nz            Content-Type: message/partial

            To: foo@example.com
            From: bar@example.com
            Subject: example

            The real body is in another message.
            s
   To: foo@ex)r   r   r   assertStartsWithr   r'   r   s     r   9test_get_message_non_rfc822_or_external_body_yields_bytesLTestRawDataManager.test_get_message_non_rfc822_or_external_body_yields_bytes  s>    MM(// +   	.::1=}Mr    c                 N   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )NSimple message.
z            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 7bit

            Simple message.
            Tdecodeutf-8
r%   r   ro   r&   rZ   r   r   rp   r   r'   r(   r,   contents      r   test_set_text_plain&TestRawDataManager.test_set_text_plain%  s     %$$Q0Q 2 " 	 	d3::7CWM'2r    c                 N   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      5        U R                  UR                  SS9R                  S5      S5        U R                  UR                  5       S5        g )Nr   zp            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 7bit


            Tr   r   
r   r   s      r   test_set_text_plain_null+TestRawDataManager.test_set_text_plain_null2  s     $$Q0Q 2 " 	 	d3::7CTJ$/r    c                 L   U R                  5       nSn[        R                  " XSS9  U R                  [	        U5      [
        R                  " S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nz<p>Simple message.</p>
htmlr   z            Content-Type: text/html; charset="utf-8"
            Content-Transfer-Encoding: 7bit

            <p>Simple message.</p>
            Tr   r   r   r   s      r   test_set_text_html%TestRawDataManager.test_set_text_html?  s     ,$$Q@Q 2 " 	 	d3::7CWM'2r    c                 L   U R                  5       nSn[        R                  " XSS9  U R                  [	        U5      [
        R                  " S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nr   latin-1charsetz            Content-Type: text/plain; charset="iso-8859-1"
            Content-Transfer-Encoding: 7bit

            Simple message.
            Tr   r   r   r   s      r   test_set_text_charset_latin_10TestRawDataManager.test_set_text_charset_latin_1L  s     %$$QCQ 2 " 	 	d3::7CWM'2r    c                 N   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )NzTSimple but long message that is over 78 characters long to force transfer encoding.
z            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: quoted-printable

            Simple but long message that is over 78 characters long to =
            force transfer encoding.
            Tr   r   r   r   s      r   (test_set_text_plain_long_line_heuristics;TestRawDataManager.test_set_text_plain_long_line_heuristicsY  s     9$$Q0Q 2 " 	 	d3::7CWM'2r    c                 l   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nu7   et là il est monté sur moi et il commence à m'éto.
u               Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit

            et là il est monté sur moi et il commence à m'éto.
            r   Tr   r%   r   ro   r&   bytesr   r   r   rp   r   r'   r   s      r   5test_set_text_short_line_minimal_non_ascii_heuristicsHTestRawDataManager.test_set_text_short_line_minimal_non_ascii_heuristicsh  s     L$$Q0q8?? 4 $
 	" 	d3::7CWM'2r    c                 l   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nus   j'ai un problème de python. il est sorti de son vivarium.  et là il est monté sur moi et il commence à m'éto.
a*              Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: quoted-printable

            j'ai un probl=C3=A8me de python. il est sorti de son vivari=
            um.  et l=C3=A0 il est mont=C3=A9 sur moi et il commence =
            =C3=A0 m'=C3=A9to.
            r   Tr   r  r   s      r   4test_set_text_long_line_minimal_non_ascii_heuristicsGTestRawDataManager.test_set_text_long_line_minimal_non_ascii_heuristicsu  s     # 	$$Q0q8?? 4 $ 	" 	d3::7CWM'2r    c                 l   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nu}   









j'ai un problème de python. il est sorti de son vivarium.  et là il est monté sur moi et il commence à m'éto.
a@              Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: quoted-printable
            










            j'ai un probl=C3=A8me de python. il est sorti de son vivari=
            um.  et l=C3=A0 il est mont=C3=A9 sur moi et il commence =
            =C3=A0 m'=C3=A9to.
            r   Tr   r  r   s      r   =test_set_text_11_lines_long_line_minimal_non_ascii_heuristicsPTestRawDataManager.test_set_text_11_lines_long_line_minimal_non_ascii_heuristics  s     # 	$$Q0q8?? 4 $ 	" 	d3::7CWM'2r    c                 l   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )N   áàäéèęöő.
u               Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit

            áàäéèęöő.
            r   Tr   r  r   s      r   *test_set_text_maximal_non_ascii_heuristics=TestRawDataManager.test_set_text_maximal_non_ascii_heuristics  s     '$$Q0q8?? 4 $
 	" 	d3::7CWM'2r    c                 l   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nu   









áàäéèęöő.
u               Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit
            










            áàäéèęöő.
            r   Tr   r  r   s      r   3test_set_text_11_lines_maximal_non_ascii_heuristicsFTestRawDataManager.test_set_text_11_lines_maximal_non_ascii_heuristics  s     1$$Q0q8?? 4 $
 	" 	d3::7CWM'2r    c                 l   U R                  5       nSn[        R                  " X5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nu   áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő.
a              Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            w6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnD
            tsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOo
            xJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TD
            qcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOg
            w6TDqcOoxJnDtsWRLgo=
            r   Tr   r  r   s      r   4test_set_text_long_line_maximal_non_ascii_heuristicsGTestRawDataManager.test_set_text_long_line_maximal_non_ascii_heuristics  s     Y 	$$Q0q8?? 	4 	$ 		" 	d3::7CWM'2r    c                 n   U R                  5       nSn[        R                  " US5        U R                  [	        U5      [
        R                  " S5      R                  S5      5        U R                  UR                  SS9R                  S5      U5        U R                  UR                  5       U5        g )Nu   









áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő.
ak              Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: quoted-printable
            










            =C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=
            =A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=
            =C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=
            =A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=
            =C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=
            =91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=
            =C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=
            =A4=C3=A9=C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=
            =C3=A8=C4=99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=
            =99=C3=B6=C5=91=C3=A1=C3=A0=C3=A4=C3=A9=C3=A8=C4=99=C3=B6=
            =C5=91.
            r   Tr   r  r   s      r   =test_set_text_11_lines_long_line_maximal_non_ascii_heuristicsPTestRawDataManager.test_set_text_11_lines_long_line_maximal_non_ascii_heuristics  s      Y 	$$Q )n 	o 	q8?? 4 $ 	"  	d3::7CWM'2r    c                     U R                  5       nU R                  [        5         [        R                  " USSS9  S S S 5        g ! , (       d  f       g = f)Nr  7bitcter%   r   UnicodeErrorr   ro   r   s     r   ,test_set_text_non_ascii_with_cte_7bit_raises?TestRawDataManager.test_set_text_non_ascii_with_cte_7bit_raises  s=     |,((+@fM -,,   A
Ac                     U R                  5       nU R                  [        5         [        R                  " USSS9  S S S 5        g ! , (       d  f       g = f)Nr  asciir   r!  r   s     r   1test_set_text_non_ascii_with_charset_ascii_raisesDTestRawDataManager.test_set_text_non_ascii_with_charset_ascii_raises  s=     |,((+@'R -,,r%  c                     U R                  5       nU R                  [        5         [        R                  " USSSS9  S S S 5        g ! , (       d  f       g = f)Nr  r  r'  )r   r   r!  r   s     r   >test_set_text_non_ascii_with_cte_7bit_and_charset_ascii_raisesQTestRawDataManager.test_set_text_non_ascii_with_cte_7bit_and_charset_ascii_raises  s@     |,((+@fV]^ -,,s   A
Ac                 p   U R                  5       nSUS'   U R                  5       nSUS'   SUS'   SUS'   UR                  S5        [        R                  " X5        U R                  [	        U5      [
        R                  " S	5      5        UR                  S
5      nU R                  X0R                  5        U R                  [	        U5      [	        U5      5        U R                  UR                  5       U R                  5        U R                  [	        UR                  5       5      [	        U5      5        g )NzForwarded messageSubjectzpython@vivarium.orgr   police@monty.orgFromzget back in your boxzOr face the comfy chair.a              Subject: Forwarded message
            Content-Type: message/rfc822
            Content-Transfer-Encoding: 8bit

            To: python@vivarium.org
            From: police@monty.org
            Subject: get back in your box
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 7bit
            MIME-Version: 1.0

            Or face the comfy chair.
            r   )r%   ro   r   r&   rZ   r   r   rp   r   r   r'   )r(   r,   r   payloads       r   test_set_message#TestRawDataManager.test_set_message  s     *)$$&-,3	67$$Q0Q 2 " 	 --"g||4Ws7|4ammot||<Q]]_-s7|<r    c                 |   U R                  5       nSUS'   U R                  5       nSUS'   SUS'   SUS'   UR                  S5        [        R                  " X5        U R                  [	        U5      [
        R                  " S	5      R                  S
5      5        U R                  UR                  U R                  R                  S9[
        R                  " S5      5        U R                  UR                  5       U R                  5        U R                  [        UR                  5       5      [        U5      5        g )NzEscape reportr.  r/  r   zvictim@monty.orgr0  Helpu:   j'ai un problème de python. il est sorti de son vivarium.u              Subject: Escape report
            Content-Type: message/rfc822
            Content-Transfer-Encoding: 8bit

            To: police@monty.org
            From: victim@monty.org
            Subject: Help
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit
            MIME-Version: 1.0

            j'ai un problème de python. il est sorti de son vivarium.
            r   )maxheaderlena              Subject: Escape report
            Content-Type: message/rfc822
            Content-Transfer-Encoding: 8bit

            To: police@monty.org
            From: victim@monty.org
            Subject: Help
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64
            MIME-Version: 1.0

            aidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIHZpdmFyaXVt
            Lgo=
            )r%   ro   r   r&   r  r   r   r   	as_stringr   r   r   r'   r   rZ   r   s      r   4test_set_message_with_non_ascii_and_coercion_to_7bitGTestRawDataManager.test_set_message_with_non_ascii_and_coercion_to_7bit  s    &)$$&*,#	 ) 	*$$Q0q8?? 4 $ 	"& 	$++2M2MN! * 	  	ammot||<Q]]_-s7|<r    c           
      T   U R                  5       nU R                  5       nSR                  5        H  nSR                  5        H  nU R                  X4S9   U R                  [        5       nUR                  X$US9  S S S 5        [        WR                  5      nU R                  X65        U R                  XF5        S S S 5        M     M     SnSR                  5        H  nU R                  X4S9   U R                  [        5       nUR                  X$US9  S S S 5        [        WR                  5      nU R                  X65        U R                  XF5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       GM@  = f! , (       d  f       Nv= f! , (       d  f       M  = f)Nzquoted-printable base64r   )r   r   r  external-bodyz8bit binary)	r%   r   r   r   
ValueErrorro   rZ   	exceptionassertIn)r(   r,   r   r   r   arexcs          r   #test_set_message_invalid_cte_raises6TestRawDataManager.test_set_message_invalid_cte_raises@  sD    $$&,224C1779\\c\;**:6"gC@ 7bll+CMM#+MM'/ <; : 5 " &&(C#7&&z2bMM'M< 3",,'c'g+ 87 ) 76 <; 32 87sH   E4,E#	=?E40FF?F#
E1-E44
F
FF
F'	c                    S[        S5      [        S5      4 H  nU R                  US9   U R                  5       n[        R
                  " X!SS5        U R                  [        U5      [        R                  " S5      5        U R                  UR                  SS9U5        U R                  UR                  5       U5        S S S 5        M     g ! , (       d  f       M  = f)Ns   bogus content)r   imagejpegz                    Content-Type: image/jpeg
                    Content-Transfer-Encoding: base64

                    Ym9ndXMgY29udGVudA==
                    Tr   )	bytearray
memoryviewr   r%   r   ro   r&   rZ   r   r   rp   r'   )r(   r   r,   s      r   test_set_image_jpg%TestRawDataManager.test_set_image_jpgT  s    (!"23"#346G g.&&( ,,Q&I  Q : *    d!;WE  ': /.6 /.s   BC
C	c                 F   U R                  5       nSnUR                  USSSS9  U R                  [        U5      [        R
                  " S5      R                  S5      5        U R                  UR                  SS	9U5        U R                  UR                  5       U5        g )
Nt   bgus	con
tent zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaudioaifzquoted-printabler  a              Content-Type: audio/aif
            Content-Transfer-Encoding: quoted-printable
            MIME-Version: 1.0

            b=FFgus=09con=0At=0Dent=20zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=
            zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzr   Tr   	r%   ro   r&   r  r   r   r   rp   r'   r   s      r   ,test_set_audio_aif_with_quoted_printable_cte?TestRawDataManager.test_set_audio_aif_with_quoted_printable_cted  s      6	gw3EFq8?? 4C $D EKF9DU	W 	d3W='2r    c                 R   U R                  5       nSnUR                  USSSS9  U R                  [        U5      [        R
                  " S5      R                  S5      S-   S	-   5        U R                  UR                  S
S9U5        U R                  UR                  5       U5        g )NrK  videompegbinaryr  z~            Content-Type: video/mpeg
            Content-Transfer-Encoding: binary
            MIME-Version: 1.0

            r'  s7   bgus	con
t
ent zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzs=   zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzTr   rN  r   s      r   #test_set_video_mpeg_with_binary_cte6TestRawDataManager.test_set_video_mpeg_with_binary_ctez  s     6	gwH=q8?? 4 $
  M$M M	$M 		N 	d3W='2r    c                 R   U R                  5       nSnUR                  USSSS9  U R                  [        U5      [        R
                  " S5      R                  S5      S-   S	-   5        U R                  UR                  S
S9U5        U R                  UR                  5       U5        g )NsM   bgus	con
tent
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
applicationoctet-stream8bitr  z            Content-Type: application/octet-stream
            Content-Transfer-Encoding: 8bit
            MIME-Version: 1.0

            r'  s   bgus	con
t
ent
s=   zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Tr   rN  r   s      r   /test_set_application_octet_stream_with_8bit_cteBTestRawDataManager.test_set_application_octet_stream_with_8bit_cte  s      >	g}n&Iq8?? 4 $
 &$' N$N 	O 	d3W='2r    c           
         U R                  5       nSnU R                  R                  n[        R                  " XU" SS5      U" SS5      U" SS5      4S9  U R                  [        U5      [        R                  " S5      5        g )	Nr   r   r   r0  r.  zI'm talking to myself.headersz            Content-Type: text/plain; charset="utf-8"
            To: foo@example.com
            From: foo@example.com
            Subject: I'm talking to myself.
            Content-Transfer-Encoding: 7bit

            Simple message.
            )	r%   r   header_factoryr   ro   r&   rZ   r   r   r(   r,   r   r`  s       r   $test_set_headers_from_header_objects7TestRawDataManager.test_set_headers_from_header_objects  s     %33$$Q4!236#459&>?:A 	B 	Q 2 " 	r    c                     U R                  5       nSn[        R                  " XSS9  U R                  [	        U5      [
        R                  " S5      5        g )Nr   )zX-Foo-Header: foozX-Bar-Header: barr^  z            Content-Type: text/plain; charset="utf-8"
            X-Foo-Header: foo
            X-Bar-Header: bar
            Content-Transfer-Encoding: 7bit

            Simple message.
            )r%   r   ro   r&   rZ   r   r   r   s      r   test_set_headers_from_strings0TestRawDataManager.test_set_headers_from_strings  sP     %$$Q :" 	# 	Q 2 " 	r    c                     U R                  5       nSnU R                  [        S5         [        R                  " XSS9  S S S 5        g ! , (       d  f       g = f)Nr   r!   )zContent-Type: foo/barr^  )r%   r?   r<  r   ro   r   s      r   <test_set_headers_with_invalid_duplicate_string_header_raisesOTestRawDataManager.test_set_headers_with_invalid_duplicate_string_header_raises  sG     %##J?(( >*  @??s   A
Ac           	          U R                  5       nSnU R                  R                  nU R                  [        S5         [
        R                  " XU" SS5      4S9  S S S 5        g ! , (       d  f       g = f)Nr   r!   z foo/barr^  )r%   r   r`  r?   r<  r   ro   ra  s       r   <test_set_headers_with_invalid_duplicate_header_header_raisesOTestRawDataManager.test_set_headers_with_invalid_duplicate_header_header_raises  s`     %33##J?((~z:>=  @??s   A&&
A4c                     U R                  5       nSnU R                  [        S5         [        R                  " XSS9  [        US   R                  5        S S S 5        g ! , (       d  f       g = f)Nr   a@fairly@@invalid@address)zTo: a@fairly@@invalid@addressr^  r   )r%   r?   r<  r   ro   printdefectsr   s      r   4test_set_headers_with_defective_string_header_raisesGTestRawDataManager.test_set_headers_with_defective_string_header_raises  sZ     %##J0KL(( >2  !D'//"	 MLLs   .A  
A.c           	         U R                  5       nSnU R                  R                  nU R                  [        S5         [
        R                  " XU" SS5      4S9  [        US   R                  5        S S S 5        g ! , (       d  f       g = f)Nr   rn  r   r^  )	r%   r   r`  r?   r<  r   ro   ro  rp  ra  s       r   4test_set_headers_with_defective_header_header_raisesGTestRawDataManager.test_set_headers_with_defective_header_header_raises  su     %33##J0KL((t%@A>D  !D'//"	 MLLs   6A>>
Bc                 n    U R                  5       nUR                  SSS9  U R                  US   S5        g )Nr   inlinedispositionContent-Dispositionr%   ro   r&   r   s     r   test_set_disposition_inline.TestRawDataManager.test_set_disposition_inline  s6     	e2018<r    c                 n    U R                  5       nUR                  SSS9  U R                  US   S5        g )Nr   
attachmentrx  rz  r{  r   s     r   test_set_disposition_attachment2TestRawDataManager.test_set_disposition_attachment  s6     	e601<@r    c                 n    U R                  5       nUR                  SSS9  U R                  US   S5        g )Nr   rx  rz  r{  r   s     r   test_set_disposition_foo+TestRawDataManager.test_set_disposition_foo  s6     	e/0159r    c                 n    U R                  5       nUR                  SSS9  U R                  US   S5        g )Nr   bar.txtfilenamerz  zattachment; filename="bar.txt"r{  r   s     r   test_set_filename$TestRawDataManager.test_set_filename  s9     	ei0019	;r    c                 p    U R                  5       nUR                  SSSS9  U R                  US   S5        g )Nr   rw  r  ry  r  rz  zinline; filename="bar.txt"r{  r   s     r   (test_set_filename_and_disposition_inline;TestRawDataManager.test_set_filename_and_disposition_inline  s9     	eIF013OPr    c                     U R                  5       nUR                  SSS9  U R                  [        U5      [        R
                  " S5      R                  S5      5        g )Nr   u   ábárî.txtr  a              Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 7bit
            Content-Disposition: attachment;
             filename*=utf-8''%C3%A1b%C3%A1r%C3%AE.txt
            MIME-Version: 1.0

            foo
            r'  )r%   ro   r&   r  r   r   r   r   s     r   test_set_non_ascii_filename.TestRawDataManager.test_set_non_ascii_filename  sO     	en5q8?? 4 $ 	"r    c                     U R                  5       nUR                  SSSSS9  U R                  [        U5      [        R
                  " S5      5        g )Ns   ASCII-only message.
rX  rY  r  )r   r   r   z            Content-Type: application/octet-stream
            Content-Transfer-Encoding: 7bit
            MIME-Version: 1.0

            ASCII-only message.
            )r%   ro   r&   rZ   r   r   r   s     r   test_set_content_bytes_cte_7bit2TestRawDataManager.test_set_content_bytes_cte_7bit  sP     	."N 	 	HQ 2 " 	r    )r   r   )r   )r   )   content)rX  octet_stream)r  )rD  rE  r   )r;  )
text_plain	text_htmlapplication_octet_stream
image_jpegmessage_rfc822message_external_bodyc                     U R                  5       nUR                  " U/UQ7SS06  U R                  US   S5        U R                  US   S5        g )Nr_  )zTo: foo@example.comzFrom: bar@simple.netr   r   r   zbar@simple.netr{  r(   rk   mimetyper,   s       r   !content_object_as_header_receiver4TestRawDataManager.content_object_as_header_receiver!  s[     	c 	%H 	% /$ 	% 	4"346$45r    c                 z    U R                  5       nUR                  " U/UQ7SS06  U R                  US   S5        g )Nry  rw  rz  r{  r  s       r   -content_object_as_disposition_inline_receiver@TestRawDataManager.content_object_as_disposition_inline_receiver)  s<     	c;H;(;018<r    c                     U R                  5       nUR                  " U/UQ7SSS.6  U R                  US   S5        U R                  UR                  5       S5        U R                  US   R                  S   S5        g )Nrw  u   bár.txtr  rz  u   inline; filename="bár.txt"r  )r%   ro   r&   get_filenameparamsr  s       r   -content_object_as_non_ascii_filename_receiver@TestRawDataManager.content_object_as_non_ascii_filename_receiver.  sw     	cPHP(ZP013PQ):60188DjQr    c                 z    U R                  5       nUR                  " U/UQ7SS06  U R                  US   S5        g )Ncidsome_random_stuffz
Content-IDr{  r  s       r   content_object_as_cid_receiver1TestRawDataManager.content_object_as_cid_receiver5  s<     	c>H>*=><*=>r    c                     U R                  5       nSSS.nUR                  " U/UQ7SU06  [        U[        5      (       a  SUS'   U R	                  US   R
                  U5        g )Nu   bárr   )r   r   r  r   r   r!   )r%   ro   
isinstancerZ   r&   r  )r(   rk   r  r,   r  s        r   !content_object_as_params_receiver4TestRawDataManager.content_object_as_params_receiver:  sb     .	c4H4V4c3 'F9>*116:r    N)BrH   rI   rJ   rK   r   r   cloner   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+  r2  r8  rA  rH  rO  rU  r[  rb  re  rh  rk  rq  rt  r|  r  r  r  r  r  r  content_object_paramsr  r  r  r  r  rL   r   r    r   r   r      sr    ^^!!"2B " DFGK1MMMP,,:
Q=,O(
N3033333"3$333&3>N
S
_
=:.=`,(; 3,3"3"$##=
A
:;Q
"
 &+%F5"9b/"))-?!@
6=
R?
;r    r   __main__)unittesttest.test_emailr   r   r   emailr   email.messager   email.contentmanagerr   r   r
   r   rH   mainr   r    r   <module>r     sm     7   & A z+ z+ z+z x
; x
; x
;v zMMO r    