o
    JXî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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   úM/opt/python-3.10.19/usr/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 )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   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   ƒ n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   ƒ n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   Ú	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   ƒ n1 sTw   Y  qqd}d ¡ D ]G}| j||d6 |  t¡}|j|||d W d   ƒ n1 sƒw   Y  t|jƒ}|  ||¡ |  ||¡ W d   ƒ n1 s£w   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“   ÚarÚexcr   r   r   Ú#test_set_message_invalid_cte_raises@  s4   ÿ
û€ÿÿ
û€ÿ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   ƒ n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 )
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   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   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   rÜ   )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   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$    }     @ÿ