a
    #Rîh‰  ã                   @   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r€e  ¡  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   úK/opt/python-3.9.24/usr/lib/python3.9/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   s   | d S r   r   ©r   r   r   r   Ú
bar_getter!   s    zGTestContentManager.get_key_as_get_content_key_order.<locals>.bar_getterc                 S   s   | d S ©NúX-Foo-Headerr   r$   r   r   r   r   #   s    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   sP   t ƒ }|  ¡ }d|d< |  td¡ | |¡ W d   ƒ n1 sB0    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                   @   s   e Zd ZdS )úTestContentManager.BaseThingN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Ú	BaseThing7   s   r5   Ú.r0   c                   @   s   e Zd ZdS )úTestContentManager.ThingNr1   r   r   r   r   ÚThing:   s   r8   r7   r   r	   )r   r7   )r   r8   é   é   )é   r0   )é   r5   é   )é	   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   s    zATestContentManager.set_key_as_set_content_key.<locals>.foo_setterr   r   r'   )N)r   Úadd_set_handlerr   r8   Úset_contentr   Úget_payload)r   r   r    rJ   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-HeaderrG   ©r   rI   r   r   r   rJ   Z   s    zGTestContentManager.set_key_as_set_content_key_order.<locals>.foo_setterc                 S   s   d| d< d S )Nr   rP   r   rQ   r   r   r   Ú
bar_setter]   s    zGTestContentManager.set_key_as_set_content_key_order.<locals>.bar_setterrP   r   )	r   rK   r(   r)   r   r8   rL   r   rM   )	r   r   r    rJ   rR   r!   r*   r"   rN   r   r   r   Ú set_key_as_set_content_key_orderY   s    z3TestContentManager.set_key_as_set_content_key_orderc                 C   sT   t ƒ }|  ¡ }|  ¡ }|  t| j¡ | ||¡ W d   ƒ n1 sF0    Y  d S ©N)r   r   r8   r,   r-   Útestobject_full_pathrL   )r   r!   r"   rN   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   sP   t ƒ }|  ¡ }d|d< |  t¡ | |d¡ W d   ƒ n1 sB0    Y  d S )Nzmultipart/foor   Útest)r   r   ÚassertRaisesÚ	TypeErrorrL   r.   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   rW   ÚToÚabcc                  _   s   d S rT   r   )ÚargsÚkwr   r   r   Ú<lambda>   ó    zITestContentManager.test_set_content_calls_clear_content.<locals>.<lambda>Úxyz)Úcontent_manager)	r   rH   r   rK   r@   rL   ZassertIsNoner   rM   )r   r"   r!   r   r   r   Ú$test_set_content_calls_clear_contentx   s    
z7TestContentManager.test_set_content_calls_clear_contentN)r2   r3   r4   r   Údefaultr   Úmessager(   r#   r+   r/   r@   r5   Zbaseobject_full_pathr8   rU   Zset_key_paramsrO   rS   rV   rZ   rc   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_lengthrb   c                 C   s&   |   t d¡¡}|  t |¡d¡ d S )NúJ            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   s&   |   t d¡¡}|  t |¡d¡ d S )NzP            Content-Type: text/html

            <p>Basic text.</p>
            z<p>Basic text.</p>
rj   rn   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_msgrl   rm   Úencoder   r   r   rn   r   r   r   Útest_get_text_plain_latin1¥   s    üz-TestRawDataManager.test_get_text_plain_latin1c                 C   s&   |   t d¡¡}|  t |¡d¡ d S )Nz™            Content-Type: text/plain; charset="latin-1"
            Content-Transfer-Encoding: quoted-printable

            Bas=ECc t=EBxt.
            rr   rj   rn   r   r   r   Ú+test_get_text_plain_latin1_quoted_printable­   s    z>TestRawDataManager.test_get_text_plain_latin1_quoted_printablec                 C   s&   |   t d¡¡}|  t |¡d¡ d S )Nz‘            Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: base64

            QmFzw6xjIHTDq3h0Lgo=
            rr   rj   rn   r   r   r   Útest_get_text_plain_utf8_base64¶   s    z2TestRawDataManager.test_get_text_plain_utf8_base64c                 C   s&   |   t d¡¡}|  t |¡d¡ d S )NúŸ            Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: quoted-printable

            Bas=c3=acc t=c3=abxt=fd.
            u   BasÃ¬c tÃ«xtï¿½.
rj   rn   r   r   r   Ú-test_get_text_plain_bad_utf8_quoted_printable¿   s    z@TestRawDataManager.test_get_text_plain_bad_utf8_quoted_printablec                 C   s*   |   t d¡¡}|  tj|ddd¡ d S )Nrw   Úignore©Úerrorsrr   rj   rn   r   r   r   Ú;test_get_text_plain_bad_utf8_quoted_printable_ignore_errorsÈ   s    ÿzNTestRawDataManager.test_get_text_plain_bad_utf8_quoted_printable_ignore_errorsc                 C   s*   |   t d¡¡}|  tj|ddd¡ d S )Nu“               Content-Type: text/plain; charset="utf8"
            Content-Transfer-Encoding: base64

            QmFzw6xjIHTDq3h0LgoÃ¿=
            ry   rz   rr   rj   rn   r   r   r   Ú8test_get_text_plain_utf8_base64_recoverable_bad_CTE_dataÒ   s    ÿzKTestRawDataManager.test_get_text_plain_utf8_base64_recoverable_bad_CTE_datac                 C   sL   |   t d¡¡}|  t¡ tj|dd W d   ƒ n1 s>0    Y  d S )Nri   ry   r   ©rk   rl   rm   rX   rY   r   r   rn   r   r   r   Útest_get_text_invalid_keywordÜ   s    z0TestRawDataManager.test_get_text_invalid_keywordc              	   C   sn   t  d¡}d ¡ D ]V}| j|d6 |  | |d ¡¡}|  t |¡d¡ W d   ƒ q1 s^0    Y  qd S )Nzu            Content-Type: {}
            Content-Transfer-Encoding: base64

            Ym9ndXMgZGF0YQ==
            zaudio image video application)Úmaintypez/foos
   bogus data)	rl   rm   ÚsplitÚsubTestrk   Úformatr   r   r   )r   Útemplater€   r"   r   r   r   Útest_get_non_textå   s
    
z$TestRawDataManager.test_get_non_textc                 C   sL   |   t d¡¡}|  t¡ tj|dd W d   ƒ n1 s>0    Y  d S )Nz|            Content-Type: image/jpg
            Content-Transfer-Encoding: base64

            Ym9ndXMgZGF0YQ==
            ry   rz   r~   rn   r   r   r   Ú!test_get_non_text_invalid_keywordñ   s    z4TestRawDataManager.test_get_non_text_invalid_keywordc                 C   sH   |   t d¡¡}|  t¡ t |¡ W d   ƒ n1 s:0    Y  d S )Nzm            Content-Type: multipart/mixed; boundary="==="

            --===
            --===--
            )rk   rl   rm   rX   r-   r   r   rn   r   r   r   Útest_get_raises_on_multipartû   s    z/TestRawDataManager.test_get_raises_on_multipartc              	   C   sª   t  d¡}d ¡ D ]’}| j|dr |  | |¡¡}t |¡}|  || j	¡ |  
t |¡d¡ |  
|d d¡ |  
|d jd jd	¡ W d   ƒ q1 sš0    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   )rl   rm   r   r‚   rk   rƒ   r   r   ÚassertIsInstancere   r   Ú	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.
            r?   s
   To: foo@exrj   rn   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   s\   |   ¡ }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   rL   r   r@   rl   rm   rM   r•   r   ©r   r"   Úcontentr   r   r   Útest_set_text_plain%  s    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  s    z+TestRawDataManager.test_set_text_plain_nullc                 C   s`   |   ¡ }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?  s    z%TestRawDataManager.test_set_text_htmlc                 C   s`   |   ¡ }d}tj||dd |  t|ƒt d¡¡ |  |jdd d¡|¡ |  | 	¡ |¡ d S )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  s    z0TestRawDataManager.test_set_text_charset_latin_1c                 C   s\   |   ¡ }d}t ||¡ |  t|ƒt d¡¡ |  |jdd d¡|¡ |  | 	¡ |¡ d S )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   sb   |   ¡ }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   rL   r   Úbytesrl   rm   rs   rM   r•   r   r˜   r   r   r   Ú5test_set_text_short_line_minimal_non_ascii_heuristicsh  s    ûzHTestRawDataManager.test_set_text_short_line_minimal_non_ascii_heuristicsc                 C   sb   |   ¡ }d}t ||¡ |  t|ƒt d¡ d¡¡ |  |jdd 	d¡|¡ |  | 
¡ |¡ d S )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   sb   |   ¡ }d}t ||¡ |  t|ƒt d¡ d¡¡ |  |jdd 	d¡|¡ |  | 
¡ |¡ d S )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   sb   |   ¡ }d}t ||¡ |  t|ƒt d¡ d¡¡ |  |jdd 	d¡|¡ |  | 
¡ |¡ d S )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˜  s    ûz=TestRawDataManager.test_set_text_maximal_non_ascii_heuristicsc                 C   sb   |   ¡ }d}t ||¡ |  t|ƒt d¡ d¡¡ |  |jdd 	d¡|¡ |  | 
¡ |¡ d S )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¥  s    ûzFTestRawDataManager.test_set_text_11_lines_maximal_non_ascii_heuristicsc                 C   sb   |   ¡ }d}t ||¡ |  t|ƒt d¡ d¡¡ |  |jdd 	d¡|¡ |  | 
¡ |¡ d S )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   sF   |   ¡ }|  t¡  tj|ddd W d   ƒ n1 s80    Y  d S )Nr©   Ú7bit©Úcte©r   rX   ÚUnicodeErrorr   rL   rn   r   r   r   Ú,test_set_text_non_ascii_with_cte_7bit_raisesä  s    z?TestRawDataManager.test_set_text_non_ascii_with_cte_7bit_raisesc                 C   sF   |   ¡ }|  t¡  tj|ddd W d   ƒ n1 s80    Y  d S )Nr©   Úasciir    r±   rn   r   r   r   Ú1test_set_text_non_ascii_with_charset_ascii_raisesé  s    zDTestRawDataManager.test_set_text_non_ascii_with_charset_ascii_raisesc                 C   sH   |   ¡ }|  t¡" tj|dddd W d   ƒ n1 s:0    Y  d S )Nr©   r®   r´   )r°   r¡   r±   rn   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   rL   r   r   r@   rl   rm   rM   rŽ   re   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   rL   r   r   r¥   rl   rm   rs   Z	as_stringr   rh   rŽ   r   re   r@   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   sZ  |   ¡ }|   ¡ }d ¡ D ]œ}d ¡ D ]Ž}| j||dl |  t¡ }|j|||d W d   ƒ n1 sh0    Y  t|jƒ}|  ||¡ |  ||¡ W d   ƒ q$1 s¨0    Y  q$qd}d ¡ D ]’}| j||dn |  t¡ }|j|||d W d   ƒ n1 s0    Y  t|jƒ}|  ||¡ |  ||¡ W d   ƒ qÂ1 sJ0    Y  qÂd S )Nzquoted-printable base64rˆ   )r°   rŠ   r¯   úexternal-bodyz8bit binary)	r   r   r‚   rX   Ú
ValueErrorrL   r@   Ú	exceptionZassertIn)r   r"   r™   r°   rŠ   ÚarÚexcr   r   r   Ú#test_set_message_invalid_cte_raises@  s$    .
.0
z6TestRawDataManager.test_set_message_invalid_cte_raisesc              	   C   sš   dt dƒtdƒfD ]‚}| j|db |  ¡ }t ||dd¡ |  t|ƒt 	d¡¡ |  |j
dd|¡ |  | ¡ |¡ W d   ƒ q1 sŠ0    Y  qd S )Ns   bogus content)r™   ÚimageÚjpegz¡                    Content-Type: image/jpeg
                    Content-Transfer-Encoding: base64

                    Ym9ndXMgY29udGVudA==
                    Tr”   )Ú	bytearrayÚ
memoryviewr‚   r   r   rL   r   r@   rl   rm   rM   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 )
Nót   bÿgus	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   rL   r   r¥   rl   rm   rs   rM   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   sj   |   ¡ }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   bÿgus	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   sj   |   ¡ }d}|j|dddd |  t|ƒt d¡ d¡d d	 ¡ |  |jd
d|¡ |  | ¡ |¡ d S )NsM   bÿgus	con
tent
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Úapplicationúoctet-streamZ8bitr¯   zŠ            Content-Type: application/octet-stream
            Content-Transfer-Encoding: 8bit
            MIME-Version: 1.0

            r´   s   bÿgus	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   rL   r   r@   rl   rm   ©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   rL   r   r@   rl   rm   r˜   r   r   r   Útest_set_headers_from_strings®  s    z0TestRawDataManager.test_set_headers_from_stringsc                 C   sL   |   ¡ }d}|  td¡  tj||dd W d   ƒ n1 s>0    Y  d S )Nr“   r   )zContent-Type: foo/barrÐ   )r   r,   r¾   r   rL   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   ƒ n1 sN0    Y  d S )Nr“   r   z foo/barrÐ   )r   r   rÒ   r,   r¾   r   rL   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   sZ   |   ¡ }d}|  td¡. tj||dd t|d jƒ W d   ƒ n1 sL0    Y  d S )Nr“   úa@fairly@@invalid@address)zTo: a@fairly@@invalid@addressrÐ   r[   )r   r,   r¾   r   rL   ÚprintÚdefectsr˜   r   r   r   Ú4test_set_headers_with_defective_string_header_raisesÎ  s
    zGTestRawDataManager.test_set_headers_with_defective_string_header_raisesc                 C   sj   |   ¡ }d}| jj}|  td¡6 tj|||ddƒfd t|d jƒ W d   ƒ n1 s\0    Y  d S )Nr“   rØ   r[   rÐ   )	r   r   rÒ   r,   r¾   r   rL   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   s*   |   ¡ }|jddd |  |d d¡ d S )Nr   Úinline©ÚdispositionúContent-Disposition©r   rL   r   rn   r   r   r   Útest_set_disposition_inlineá  s    z.TestRawDataManager.test_set_disposition_inlinec                 C   s*   |   ¡ }|jddd |  |d d¡ d S )Nr   Z
attachmentrÞ   rà   rá   rn   r   r   r   Útest_set_disposition_attachmentæ  s    z2TestRawDataManager.test_set_disposition_attachmentc                 C   s*   |   ¡ }|jddd |  |d d¡ d S )Nr   rÞ   rà   rá   rn   r   r   r   Útest_set_disposition_fooë  s    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á   rn   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á   rn   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   rL   r   r¥   rl   rm   rs   rn   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   rL   r   r@   rl   rm   rn   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   rI   Úmimetyper"   r   r   r   Ú!content_object_as_header_receiver!  s    z4TestRawDataManager.content_object_as_header_receiverc                 C   s4   |   ¡ }|j|g|¢R ddiŽ |  |d d¡ d S )Nrß   rÝ   rà   rá   rî   r   r   r   Ú-content_object_as_disposition_inline_receiver)  s    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   rL   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   s4   |   ¡ }|j|g|¢R ddiŽ |  |d d¡ d S )NZcidZsome_random_stuffz
Content-IDrá   rî   r   r   r   Úcontent_object_as_cid_receiver5  s    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Ã¡rra   )r   r\   ró   r–   r¡   r   )r   rL   Ú
isinstancer@   r   ró   )r   rI   rï   r"   ró   r   r   r   Ú!content_object_as_params_receiver:  s    

z4TestRawDataManager.content_object_as_params_receiverN)@r2   r3   r4   r   rd   Zcloner   r   re   ro   rp   rt   ru   rv   rx   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   rf   ‡   s‚   	ÿ				

	

0		
ù
rf   Ú__main__)ZunittestZtest.test_emailr   r   rl   Zemailr   Zemail.messager   Zemail.contentmanagerr   r   r   rf   r2   Úmainr   r   r   r   Ú<module>   s    }     @