o
    g                     @   s   d dl Z d dlmZmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZ eG dd deZeG dd	 d	eZed
krBe   dS dS )    N)TestEmailBaseparameterize)policy)EmailMessage)ContentManagerraw_data_managerc                   @   s   e Zd ZejZeZddddZdd Zdd Z	d	d
 Z
G dd deZe d d ZG dd deZe d d ZdefdefdddefdefdddefddddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*TestContentManager)   
text/plain)   text)    )Z	full_typeZmaintype_onlynull_keyc                 C   sN   d
dd}t  }||| |  }d|d< d|d< | |j|ddd	 d S )Nc                 S   s   | d }||fS NX-Bar-Header )msgfoobarr   r   Y/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_email/test_contentmanager.py
foo_getter   s   zATestContentManager.get_key_as_get_content_key.<locals>.foo_getterr
   Content-Typer   r   r   r   )r   r   N)r   add_get_handler_make_messageassertEqualget_content)selforderkeyr   cmmr   r   r   get_key_as_get_content_key   s   
z-TestContentManager.get_key_as_get_content_keyc                 C   s   dd }dd }t  }||| | j D ]\}}||kr$||| q|  }d|d< d|d< d	|d
< | ||d	 d S )Nc                 S      | d S r   r   r   r   r   r   
bar_getter!      zGTestContentManager.get_key_as_get_content_key_order.<locals>.bar_getterc                 S   r%   NX-Foo-Headerr   r&   r   r   r   r   #   r(   zGTestContentManager.get_key_as_get_content_key_order.<locals>.foo_getterr
   r   r   r   r   r*   )r   r   get_key_paramsvaluesr   r   r   )r   r    r!   r'   r   r"   
precedencer#   r   r   r    get_key_as_get_content_key_order    s   z3TestContentManager.get_key_as_get_content_key_orderc                 C   sR   t  }|  }d|d< | td || W d    d S 1 s"w   Y  d S )Nr
   r   )r   r   assertRaisesRegexKeyErrorr   r   r"   r#   r   r   r   :test_get_content_raises_if_unknown_mimetype_and_no_default0   s   "zMTestContentManager.test_get_content_raises_if_unknown_mimetype_and_no_defaultc                   @      e Zd ZdS )TestContentManager.BaseThingN__name__
__module____qualname__r   r   r   r   	BaseThing7       r9   .r4   c                   @   r3   )TestContentManager.ThingNr5   r   r   r   r   Thing:   r:   r=   r<   r   r	   )r   r<   )r   r=         )   r4   )   r9      )	   zbuiltins.str)
   str)   N)type	full_pathqualnamenameZ	base_typeZbase_full_pathZbase_qualname	base_nameZstr_typeZstr_full_pathZstr_namer   c                 C   s`   ddd}t  }||| |  }|  }|j||dd | |d d | | | d S )Nc                 S   s   || d< |  | d S r)   set_payload)r   objr   r   r   r   
foo_setterN      zATestContentManager.set_key_as_set_content_key.<locals>.foo_setterr   r   r*   r   )r   add_set_handlerr   r=   set_contentr   get_payload)r   r    r!   rO   r"   r#   msg_objr   r   r   set_key_as_set_content_keyM   s   
z-TestContentManager.set_key_as_set_content_keyc           	      C   s   dd }dd }t  }||| | j D ]\}}||kr$||| q|  }|  }||| | |d d | | | d S )Nc                 S   s   d| d< |  | d S )Nr   X-FooBar-HeaderrL   r   rN   r   r   r   rO   Z   rP   zGTestContentManager.set_key_as_set_content_key_order.<locals>.foo_setterc                 S   s   d| d< d S )Nr   rV   r   rW   r   r   r   
bar_setter]   s   zGTestContentManager.set_key_as_set_content_key_order.<locals>.bar_setterrV   r   )	r   rQ   r+   r,   r   r=   rR   r   rS   )	r   r    r!   rO   rX   r"   r-   r#   rT   r   r   r    set_key_as_set_content_key_orderY   s   z3TestContentManager.set_key_as_set_content_key_orderc                 C   sV   t  }|  }|  }| t| j ||| W d    d S 1 s$w   Y  d S r   )r   r   r=   r/   r0   testobject_full_pathrR   )r   r"   r#   rT   r   r   r   6test_set_content_raises_if_unknown_type_and_no_defaultj   s   "zITestContentManager.test_set_content_raises_if_unknown_type_and_no_defaultc                 C   sR   t  }|  }d|d< | t ||d W d    d S 1 s"w   Y  d S )Nzmultipart/foor   test)r   r   assertRaises	TypeErrorrR   r1   r   r   r   .test_set_content_raises_if_called_on_multipartq   s   "zATestContentManager.test_set_content_raises_if_called_on_multipartc                 C   s   |   }d|d< d|d< d|d< |d t }|tdd	  |jd
|d | |d  | |d  | |d d | |  d S )Nr   zContent-Fooz	text/htmlr   r\   Toabcc                  _   s   d S r   r   )argskwr   r   r   <lambda>   s    zITestContentManager.test_set_content_calls_clear_content.<locals>.<lambda>xyz)content_manager)	r   rM   r   rQ   rE   rR   ZassertIsNoner   rS   )r   r#   r"   r   r   r   $test_set_content_calls_clear_contentx   s   
z7TestContentManager.test_set_content_calls_clear_contentN)r6   r7   r8   r   defaultr   messager+   r$   r.   r2   rE   r9   Zbaseobject_full_pathr=   rZ   Zset_key_paramsrU   rY   r[   r_   rg   r   r   r   r   r   	   s@    r   c                   @   s  e Zd ZejjdedZeZdd Z	dd Z
dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Z d3d4 Z!d5d6 Z"d7d8 Z#d9d: Z$d;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 Z0dSdT Z1dUdV Z2dWdX Z3dYdZ Z4d[d\ Z5d]d^ Z6d_d` Z7dadb Z8dcdd Z9dedfdgdhe dife djfdkZ:dldm Z;dndo Z<dpdq Z=drds Z>dtdu Z?dvS )wTestRawDataManager<   )max_line_lengthrf   c                 C   &   |  td}| t|d d S )NJ            Content-Type: text/plain

            Basic text.
            zBasic text.
_str_msgtextwrapdedentr   r   r   r   r#   r   r   r   test_get_text_plain   s   z&TestRawDataManager.test_get_text_plainc                 C   rm   )NzP            Content-Type: text/html

            <p>Basic text.</p>
            z<p>Basic text.</p>
ro   rs   r   r   r   test_get_text_html   s   z%TestRawDataManager.test_get_text_htmlc                 C   s,   |  tdd}| t|d d S )Nu\               Content-Type: text/plain; charset=latin1

            Basìc tëxt.
            latin1   Basìc tëxt.
)Z
_bytes_msgrq   rr   encoder   r   r   rs   r   r   r   test_get_text_plain_latin1   s   z-TestRawDataManager.test_get_text_plain_latin1c                 C   rm   )Nz            Content-Type: text/plain; charset="latin-1"
            Content-Transfer-Encoding: quoted-printable

            Bas=ECc t=EBxt.
            rw   ro   rs   r   r   r   +test_get_text_plain_latin1_quoted_printable      z>TestRawDataManager.test_get_text_plain_latin1_quoted_printablec                 C   rm   )Nz            Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: base64

            QmFzw6xjIHTDq3h0Lgo=
            rw   ro   rs   r   r   r   test_get_text_plain_utf8_base64   r{   z2TestRawDataManager.test_get_text_plain_utf8_base64c                 C   rm   )N            Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: quoted-printable

            Bas=c3=acc t=c3=abxt=fd.
            u   Basìc tëxt�.
ro   rs   r   r   r   -test_get_text_plain_bad_utf8_quoted_printable   r{   z@TestRawDataManager.test_get_text_plain_bad_utf8_quoted_printablec                 C   *   |  td}| tj|ddd d S )Nr}   ignoreerrorsrw   ro   rs   r   r   r   ;test_get_text_plain_bad_utf8_quoted_printable_ignore_errors      zNTestRawDataManager.test_get_text_plain_bad_utf8_quoted_printable_ignore_errorsc                 C   r   )Nu               Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: base64

            QmFzw6xjIHTDq3h0Lgoÿ=
            r   r   rw   ro   rs   r   r   r   8test_get_text_plain_utf8_base64_recoverable_bad_CTE_data   r   zKTestRawDataManager.test_get_text_plain_utf8_base64_recoverable_bad_CTE_datac                 C   N   |  td}| t tj|dd W d    d S 1 s w   Y  d S )Nrn   r   r   rp   rq   rr   r]   r^   r   r   rs   r   r   r   test_get_text_invalid_keyword   s   "z0TestRawDataManager.test_get_text_invalid_keywordc              	   C   sn   t d}d D ]+}| j|d | ||d }| t|d W d    q	1 s/w   Y  q	d S )Nzu            Content-Type: {}
            Content-Transfer-Encoding: base64

            Ym9ndXMgZGF0YQ==
            zaudio image video application)maintypez/foos
   bogus data)	rq   rr   splitsubTestrp   formatr   r   r   )r   templater   r#   r   r   r   test_get_non_text   s   
z$TestRawDataManager.test_get_non_textc                 C   r   )Nz|            Content-Type: image/jpg
            Content-Transfer-Encoding: base64

            Ym9ndXMgZGF0YQ==
            r   r   r   rs   r   r   r   !test_get_non_text_invalid_keyword   s   "z4TestRawDataManager.test_get_non_text_invalid_keywordc                 C   sJ   |  td}| t t| W d    d S 1 sw   Y  d S )Nzm            Content-Type: multipart/mixed; boundary="==="

            --===
            --===--
            )rp   rq   rr   r]   r0   r   r   rs   r   r   r   test_get_raises_on_multipart   s   "z/TestRawDataManager.test_get_raises_on_multipartc              	   C   s   t d}d D ]I}| j|d9 | ||}t|}| || j	 | 
t|d | 
|d d | 
|d jd jd	 W d    q	1 sMw   Y  q	d S )
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   )rq   rr   r   r   rp   r   r   r   assertIsInstanceri   r   Z	addressesusername)r   r   r   r#   Zsub_msgr   r   r   )test_get_message_rfc822_and_external_body  s   
	
z<TestRawDataManager.test_get_message_rfc822_and_external_bodyc                 C   s.   |  td}| t|d d d d S )Nz            Content-Type: message/partial

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

            The real body is in another message.
            rD   s
   To: foo@exro   rs   r   r   r   9test_get_message_non_rfc822_or_external_body_yields_bytes  s   	zLTestRawDataManager.test_get_message_non_rfc822_or_external_body_yields_bytesc                 C   \   |   }d}t|| | t|td | |jddd| | |	 | d S )NSimple message.
z            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 7bit

            Simple message.
            Tdecodeutf-8
r   r   rR   r   rE   rq   rr   rS   r   r   r   r#   contentr   r   r   test_set_text_plain%     z&TestRawDataManager.test_set_text_plainc                 C   s\   |   }d}t|| | t|td | |jdddd | |	 d d S )Nr   zp            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 7bit


            Tr   r   
r   r   r   r   r   test_set_text_plain_null2  r   z+TestRawDataManager.test_set_text_plain_nullc                 C   `   |   }d}tj||dd | t|td | |jddd| | |	 | d S )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   r   r   r   test_set_text_html?     z%TestRawDataManager.test_set_text_htmlc                 C   r   )Nr   latin-1charsetz            Content-Type: text/plain; charset="iso-8859-1"
            Content-Transfer-Encoding: 7bit

            Simple message.
            Tr   r   r   r   r   r   r   test_set_text_charset_latin_1L  r   z0TestRawDataManager.test_set_text_charset_latin_1c                 C   r   )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   r   r   r   (test_set_text_plain_long_line_heuristicsY  s   z;TestRawDataManager.test_set_text_plain_long_line_heuristicsc                 C   b   |   }d}t|| | t|tdd | |jdd	d| | |
 | d S )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   rR   r   bytesrq   rr   rx   rS   r   r   r   r   r   r   5test_set_text_short_line_minimal_non_ascii_heuristicsh     zHTestRawDataManager.test_set_text_short_line_minimal_non_ascii_heuristicsc                 C   r   )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   r   r   r   4test_set_text_long_line_minimal_non_ascii_heuristicsu  s   zGTestRawDataManager.test_set_text_long_line_minimal_non_ascii_heuristicsc                 C   r   )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   r   r   r   =test_set_text_11_lines_long_line_minimal_non_ascii_heuristics  s   zPTestRawDataManager.test_set_text_11_lines_long_line_minimal_non_ascii_heuristicsc                 C   r   )N   áàäéèęöő.
u               Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit

            áàäéèęöő.
            r   Tr   r   r   r   r   r   *test_set_text_maximal_non_ascii_heuristics  r   z=TestRawDataManager.test_set_text_maximal_non_ascii_heuristicsc                 C   r   )Nu   









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










            áàäéèęöő.
            r   Tr   r   r   r   r   r   3test_set_text_11_lines_maximal_non_ascii_heuristics  r   zFTestRawDataManager.test_set_text_11_lines_maximal_non_ascii_heuristicsc                 C   r   )Nu   áàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöőáàäéèęöő.
a              Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: base64

            w6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnD
            tsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOo
            xJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TD
            qcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOg
            w6TDqcOoxJnDtsWRLgo=
            r   Tr   r   r   r   r   r   4test_set_text_long_line_maximal_non_ascii_heuristics  s   	
zGTestRawDataManager.test_set_text_long_line_maximal_non_ascii_heuristicsc                 C   sb   |   }d}t|d | t|tdd | |jdd	d| | |
 | d S )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   r   r   r   =test_set_text_11_lines_long_line_maximal_non_ascii_heuristics  s   zPTestRawDataManager.test_set_text_11_lines_long_line_maximal_non_ascii_heuristicsc                 C   H   |   }| t tj|ddd W d    d S 1 sw   Y  d S )Nr   7bitcter   r]   UnicodeErrorr   rR   rs   r   r   r   ,test_set_text_non_ascii_with_cte_7bit_raises     "z?TestRawDataManager.test_set_text_non_ascii_with_cte_7bit_raisesc                 C   r   )Nr   asciir   r   rs   r   r   r   1test_set_text_non_ascii_with_charset_ascii_raises  r   zDTestRawDataManager.test_set_text_non_ascii_with_charset_ascii_raisesc                 C   sJ   |   }| t tj|dddd W d    d S 1 sw   Y  d S )Nr   r   r   )r   r   r   rs   r   r   r   >test_set_text_non_ascii_with_cte_7bit_and_charset_ascii_raises  s   "zQTestRawDataManager.test_set_text_non_ascii_with_cte_7bit_and_charset_ascii_raisesc                 C   s   |   }d|d< |   }d|d< d|d< d|d< |d t|| | t|td	 |d
}| || j	 | t|t| | |
 | j	 | t|
 t| d S )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   rR   r   r   rE   rq   rr   rS   r   ri   r   )r   r#   r   payloadr   r   r   test_set_message  s   

z#TestRawDataManager.test_set_messagec                 C   s   |   }d|d< |   }d|d< d|d< d|d< |d t|| | t|td	d
 | |j| j	j
dtd | | | j | t| t| d S )NzEscape reportr   r   r`   zvictim@monty.orgr   Z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   )Z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   rR   r   r   r   rq   rr   rx   Z	as_stringr   rl   r   r   ri   rE   r   r   r   r   4test_set_message_with_non_ascii_and_coercion_to_7bit  s    
zGTestRawDataManager.test_set_message_with_non_ascii_and_coercion_to_7bitc                 C   sV  |   }|   }d D ]N}d D ]G}| j||d6 | t}|j|||d W d    n1 s4w   Y  t|j}| || | || W d    q1 sTw   Y  qqd}d D ]G}| j||d6 | t}|j|||d W d    n1 sw   Y  t|j}| || | || W d    qa1 sw   Y  qad S )Nzquoted-printable base64r   )r   r   r   external-bodyz8bit binary)	r   r   r   r]   
ValueErrorrR   rE   	exceptionZassertIn)r   r#   r   r   r   Zarexcr   r   r   #test_set_message_invalid_cte_raises@  s0   

z6TestRawDataManager.test_set_message_invalid_cte_raisesc              	   C   s   dt dtdfD ]A}| j|d1 |  }t||dd | t|t	d | |j
dd| | | | W d    q	1 sEw   Y  q	d S )Ns   bogus content)r   imagejpegz                    Content-Type: image/jpeg
                    Content-Transfer-Encoding: base64

                    Ym9ndXMgY29udGVudA==
                    Tr   )	bytearray
memoryviewr   r   r   rR   r   rE   rq   rr   rS   r   )r   r   r#   r   r   r   test_set_image_jpgT  s   z%TestRawDataManager.test_set_image_jpgc                 C   sb   |   }d}|j|dddd | t|tdd | |jdd	| | | | d S )
Nt   bgus	con
tent zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzZaudioZ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   rR   r   r   rq   rr   rx   rS   r   r   r   r   r   ,test_set_audio_aif_with_quoted_printable_cted  s   	z?TestRawDataManager.test_set_audio_aif_with_quoted_printable_ctec                 C   j   |   }d}|j|dddd | t|tddd d	  | |jd
d| | | | d S )Nr   ZvideoZmpegbinaryr   z~            Content-Type: video/mpeg
            Content-Transfer-Encoding: binary
            MIME-Version: 1.0

            r   s7   bgus	con
t
ent zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzs=   zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzTr   r   r   r   r   r   #test_set_video_mpeg_with_binary_ctez  s   	
z6TestRawDataManager.test_set_video_mpeg_with_binary_ctec                 C   r   )NsM   bgus	con
tent
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
applicationoctet-streamZ8bitr   z            Content-Type: application/octet-stream
            Content-Transfer-Encoding: 8bit
            MIME-Version: 1.0

            r   s   bgus	con
t
ent
s=   zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Tr   r   r   r   r   r   /test_set_application_octet_stream_with_8bit_cte  s   zBTestRawDataManager.test_set_application_octet_stream_with_8bit_ctec                 C   sV   |   }d}| jj}tj|||dd|dd|ddfd | t|td d S )	Nr   r`   r   r   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   rR   r   rE   rq   rr   r   r#   r   r   r   r   r   $test_set_headers_from_header_objects  s   z7TestRawDataManager.test_set_headers_from_header_objectsc                 C   s6   |   }d}tj||dd | t|td d S )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   rR   r   rE   rq   rr   r   r   r   r   test_set_headers_from_strings  s   z0TestRawDataManager.test_set_headers_from_stringsc                 C   sN   |   }d}| td tj||dd W d    d S 1 s w   Y  d S )Nr   r   )zContent-Type: foo/barr   )r   r/   r   r   rR   r   r   r   r   <test_set_headers_with_invalid_duplicate_string_header_raises  s
   "zOTestRawDataManager.test_set_headers_with_invalid_duplicate_string_header_raisesc                 C   s^   |   }d}| jj}| td tj|||ddfd W d    d S 1 s(w   Y  d S )Nr   r   z foo/barr   )r   r   r   r/   r   r   rR   r   r   r   r   <test_set_headers_with_invalid_duplicate_header_header_raises  s   
"zOTestRawDataManager.test_set_headers_with_invalid_duplicate_header_header_raisesc                 C   s\   |   }d}| td tj||dd t|d j W d    d S 1 s'w   Y  d S )Nr   a@fairly@@invalid@address)zTo: a@fairly@@invalid@addressr   r`   )r   r/   r   r   rR   printdefectsr   r   r   r   4test_set_headers_with_defective_string_header_raises  s   "zGTestRawDataManager.test_set_headers_with_defective_string_header_raisesc                 C   sl   |   }d}| jj}| td tj|||ddfd t|d j W d    d S 1 s/w   Y  d S )Nr   r   r`   r   )	r   r   r   r/   r   r   rR   r   r   r   r   r   r   4test_set_headers_with_defective_header_header_raises  s   "zGTestRawDataManager.test_set_headers_with_defective_header_header_raisesc                 C   *   |   }|jddd | |d d d S )Nr   inlinedispositionContent-Dispositionr   rR   r   rs   r   r   r   test_set_disposition_inline     z.TestRawDataManager.test_set_disposition_inlinec                 C   r   )Nr   Z
attachmentr   r   r   rs   r   r   r   test_set_disposition_attachment  r   z2TestRawDataManager.test_set_disposition_attachmentc                 C   s*   |   }|jddd | |d d d S )Nr   r   r   r   rs   r   r   r   test_set_disposition_foo  r   z+TestRawDataManager.test_set_disposition_fooc                 C   s*   |   }|jddd | |d d d S )Nr   bar.txtfilenamer   zattachment; filename="bar.txt"r   rs   r   r   r   test_set_filename  s
   
z$TestRawDataManager.test_set_filenamec                 C   s,   |   }|jdddd | |d d d S )Nr   r   r   r   r   r   zinline; filename="bar.txt"r   rs   r   r   r   (test_set_filename_and_disposition_inline  s   z;TestRawDataManager.test_set_filename_and_disposition_inlinec                 C   s6   |   }|jddd | t|tdd d S )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   rR   r   r   rq   rr   rx   rs   r   r   r   test_set_non_ascii_filename  s
   z.TestRawDataManager.test_set_non_ascii_filenamec                 C   s4   |   }|jddddd | t|td d S )Ns   ASCII-only message.
r   r   r   )r   r   r   z            Content-Type: application/octet-stream
            Content-Transfer-Encoding: 7bit
            MIME-Version: 1.0

            ASCII-only message.
            )r   rR   r   rE   rq   rr   rs   r   r   r   test_set_content_bytes_cte_7bit  s
   z2TestRawDataManager.test_set_content_bytes_cte_7bit)r   r   )r   )r   )   content)r   Zoctet_stream)r   )r   r   r   )r   )Z
text_plainZ	text_htmlZapplication_octet_streamZ
image_jpegZmessage_rfc822Zmessage_external_bodyc                 C   sD   |   }|j|g|R ddi | |d d | |d d d S )Nr   )zTo: foo@example.comzFrom: bar@simple.netr   r   r   zbar@simple.netr   r   rN   mimetyper#   r   r   r   !content_object_as_header_receiver!  s   z4TestRawDataManager.content_object_as_header_receiverc                 C   4   |   }|j|g|R ddi | |d d d S )Nr   r   r   r   r   r   r   r   -content_object_as_disposition_inline_receiver)     z@TestRawDataManager.content_object_as_disposition_inline_receiverc                 C   s\   |   }|j|g|R ddd | |d d | | d | |d jd d d S )Nr   u   bár.txtr   r   u   inline; filename="bár.txt"r   )r   rR   r   get_filenameparamsr   r   r   r   -content_object_as_non_ascii_filename_receiver.  s
   z@TestRawDataManager.content_object_as_non_ascii_filename_receiverc                 C   r  )NZcidZsome_random_stuffz
Content-IDr   r   r   r   r   content_object_as_cid_receiver5  r  z1TestRawDataManager.content_object_as_cid_receiverc                 C   sR   |   }ddd}|j|g|R d|i t|trd|d< | |d j| d S )Nu   bárre   )r   ra   r  r   r   r   )r   rR   
isinstancerE   r   r  )r   rN   r  r#   r  r   r   r   !content_object_as_params_receiver:  s   

z4TestRawDataManager.content_object_as_params_receiverN)@r6   r7   r8   r   rh   Zcloner   r   ri   rt   ru   ry   rz   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   r   r   r   r   r   r   r   Zcontent_object_paramsr  r  r  r	  r  r   r   r   r   rj      s    					

	

0		

rj   __main__)ZunittestZtest.test_emailr   r   rq   Zemailr   Zemail.messager   Zemail.contentmanagerr   r   r   rj   r6   mainr   r   r   r   <module>   s$    }     @