a
    ze@n                    @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlZd dlZd dlZd dlZG dd dZG dd deZG dd deejZG d	d
 d
eejZG dd deZG dd deZG dd deejZG dd deejZG dd deejZG dd deejZG dd dZG dd dejZG dd dejZG dd deejZG dd  d eejZ G d!d" d"Z!G d#d$ d$e!eZ"G d%d& d&eejZ#G d'd( d(eejZ$G d)d* d*e!eZ%G d+d, d,eejZ&G d-d. d.eZ'G d/d0 d0e'ejZ(G d1d2 d2e'ejZ)d3Z*d4Z+G d5d6 d6ejZ,d7Z-e-.d8Z/d9d:d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHZ0dIZ1G dJdK dKejZ2dLdM Z3e4dNkre5  dS )O    N)supportc                   @   s8   e Zd Zejejejejejej	fZ
dd Zdd ZdS )TestBasec                 C   s   |  |tjj |  |tj t D ]\}}| ||| q&| 	|
  | t| tt ttD ]@\}}||}|  |tjj | |tj | | | qpd S N)assertIsInstanceemailmessageMessagemailbox_sample_headersitemsassertInZget_all
assertTrueis_multipartassertEquallenget_payload_sample_payloads	enumerateZassertNotIsInstance)selfmsgkeyvalueipayloadpart r   '/usr/lib/python3.9/test/test_mailbox.py_check_sample   s    
zTestBase._check_samplec                 C   s2   t j|rt| nt j|r.t| d S r   )ospathisdirr   rmtreeexistsunlink)r   targetr   r   r   _delete_recursively&   s    zTestBase._delete_recursivelyN)__name__
__module____qualname__r	   r   MaildirMessagemboxMessage	MHMessageBabylMessageMMDFMessageall_mailbox_typesr   r%   r   r   r   r   r      s   r   c                   @   s  e Zd ZdZdZdZdd Zdd Zdd Ze	
d	Zd
d Zdd Zdd Zdd Ze	
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dcd'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)dddEdFZ*dGdH Z+dedIdJZ,dKdL Z-dfdMdNZ.dOdP Z/dgdQdRZ0dSdT Z1dUdV Z2dWdX Z3dYdZ Z4d[d\ Z5d]d^ Z6d_d` Z7dadb Z8dS )hTestMailboxNzFrom: foo

%s
c                 C   s&   t j| _| | j | | j| _d S r   )r   TESTFN_pathr%   _factory_boxr   r   r   r   setUp5   s    zTestMailbox.setUpc                 C   s   | j   | | j d S r   )r3   closer%   r1   r4   r   r   r   tearDown:   s    
zTestMailbox.tearDownc              
   C   s  g }| | j| jd  | t| jd | | jtt | t| jd | | jt	
t | t| jd | | jtt | t| jd | | jt | t| jd | | jt | t| jd | t. | | jttt W d    n1 s40    Y  | t| jd | | j|d | jd  d	D ]}| | j||   qrd S )
Nr                        )r8   r9   r:   r;   r<   r=   )appendr3   add	_templater   r   r	   r   _sample_messager   message_from_stringioBytesIO_bytes_sample_messageassertWarnsDeprecationWarningTextIOWrapper
get_stringr   )r   keysr   r   r   r   test_add>   s*    
&zTestMailbox.test_addu{               From: foo
            Subject: Falinaptár házhozszállítással. Már rendeltél?

            0
            c                 C   sF   | j | jd}| t| j d | | j || jd d S )Nlatin-1r8   )r3   r@   _nonascii_msgencoder   r   	get_bytesr   r   r   r   r   "test_add_invalid_8bit_bytes_header\   s
    
z.TestMailbox.test_add_invalid_8bit_bytes_headerc                 C   s8   | j  d }| j|d}| | j|d d S )Nr8   rM   zZSubject: =?unknown-8bit?b?RmFsaW5hcHThciBo4Xpob3pzeuFsbO104XNzYWwuIE3hciByZW5kZWx06Ww/?=

)rN   
splitlinesr3   r@   rO   r   rJ   )r   Zsubjr   r   r   r   &test_invalid_nonascii_header_as_stringb   s
    z2TestMailbox.test_invalid_nonascii_header_as_stringc                 C   sb   |  td | j| j W d    n1 s00    Y  | j  | t| jd |   d S Nz
ASCII-onlyr   )	assertRaisesRegex
ValueErrorr3   r@   rN   flushr   r   assertMailboxEmptyr4   r   r   r   &test_add_nonascii_string_header_raisesi   s
    ,
z2TestMailbox.test_add_nonascii_string_header_raisesc                 C   s   dd }t | tjjd| | t" | jt	d W d    n1 sN0    Y  | 
t| jd | j  |   d S )Nc                  _   s   t dd S )Nza fake error)	Exception)argskwr   r   r   raiserq   s    zETestMailbox.test_add_that_raises_leaves_mailbox_empty.<locals>.raiserZflattenu   From: Alphösor   )r   Zpatchr   	generatorZBytesGeneratorassertRaisesr[   r3   r@   rC   r   r   r6   rY   )r   r^   r   r   r   )test_add_that_raises_leaves_mailbox_emptyp   s    0
z5TestMailbox.test_add_that_raises_leaves_mailbox_emptyu0          From: foo@bar.com
        To: báz
        Subject: Maintenant je vous présente mon collègue, le pouf célèbre
        	Jean de Baddie
        Mime-Version: 1.0
        Content-Type: text/plain; charset="utf-8"
        Content-Transfer-Encoding: 8bit

        Да, они летят.
        zutf-8c              	   C   s   | j | j}| | j || j | j |0}| | | jdtj	
  W d    n1 sf0    Y  | | j |  d d S )N   
u   Да, они летят.
)r3   r@   _non_latin_bin_msgr   rP   get_filereadreplacer   lineseprO   r   r   r   fr   r   r   test_add_8bit_body   s    
"zTestMailbox.test_add_8bit_bodyc                 C   sn   t d0}|t |d | j|}W d    n1 s@0    Y  | | j|	dt	d d S Nwb+r   rb   )
tempfileTemporaryFilewriterF   seekr3   r@   r   rP   splitr   ri   r   r   r   r   test_add_binary_file   s    

*z TestMailbox.test_add_binary_filec                 C   sr   t d2}|| j |d | j|}W d    n1 sB0    Y  | | j|	d| j	d d S rk   )
rm   rn   ro   rc   rp   r3   r@   r   rP   rq   rr   r   r   r   test_add_binary_nonascii_file   s    
*
z)TestMailbox.test_add_binary_nonascii_filec              	   C   s   t dZ}|t |d | t | j|}W d    n1 sL0    Y  W d    n1 sj0    Y  | 	| j
|dtd d S )Nw+r   rb   )rm   rn   ro   rB   rp   rG   rH   r3   r@   r   rP   rq   rF   rr   r   r   r   test_add_text_file_warns   s    

Hz$TestMailbox.test_add_text_file_warnsc                 C   s`   |  t( | jt| jd }W d    n1 s80    Y  | | j|| jd  d S )N0)	rG   rH   r3   r@   rD   StringIOrA   r   rJ   rQ   r   r   r   test_add_StringIO_warns   s    6z#TestMailbox.test_add_StringIO_warnsc              	   C   s   |  tP | td$ | jt| j W d    n1 sB0    Y  W d    n1 s`0    Y  | 	t
| jd | j  |   d S rU   )rG   rH   rV   rW   r3   r@   rD   rx   rN   r   r   r6   rY   r4   r   r   r   !test_add_nonascii_StringIO_raises   s    P
z-TestMailbox.test_add_nonascii_StringIO_raisesc                 C   s   |  | jj d S r   )_test_remove_or_delitemr3   remover4   r   r   r   test_remove   s    zTestMailbox.test_removec                 C   s   |  | jj d S r   )r{   r3   __delitem__r4   r   r   r   test_delitem   s    zTestMailbox.test_delitemc                    sd  j jd  j jd tj d   tj d t fdd t fdd j jd  j jd tj d  tj d tfdd tfdd j jd   tj d tfd	d tfd
d d S )Nr   r8   r9   c                      s
   j   S r   r3   r   key0r   r   r   <lambda>       z5TestMailbox._test_remove_or_delitem.<locals>.<lambda>c                      s    S r   r   r   )r   methodr   r   r      r   c                      s
   j   S r   r   r   )key2r   r   r   r      r   c                      s    S r   r   r   )r   r   r   r   r      r   c                      s
   j   S r   r   r   )key1r   r   r   r      r   c                      s    S r   r   r   )r   r   r   r   r      r   )r3   r@   rA   r   r   r`   KeyErrorrJ   )r   r   r   )r   r   r   r   r   r   r{      s&    z#TestMailbox._test_remove_or_delitem
   c                    s   j jd  j jd }tj d j   tj d t fdd j   tj d t fdd d S )Nr   r8   r9   c                      s
   j   S r   r   r   r   r   r   r      r   z*TestMailbox.test_discard.<locals>.<lambda>c                      s
   j   S r   r   r   r   r   r   r      r   )r3   r@   rA   r   r   discardr`   r   )r   repetitionsr   r   r   r   test_discard   s    zTestMailbox.test_discardc                 C   s   | j | jd }| j |}| |d d | | d | | j d | | j ddd | j   | 	| j
| _ | j | jd }| j |}| |d d | | d d S )Nr   fromfoo0
Fr8   1
)r3   r@   rA   getr   r   assertIsNoneassertIsr6   r2   r1   )r   r   r   r   r   r   r   test_get   s    
zTestMailbox.test_getc                    sv   j jd  j   }|d d | d tfdd j   t fdd d S )Nr   r   r   r   c                      s
    j d S Nr   r   r   r4   r   r   r      r   z*TestMailbox.test_getitem.<locals>.<lambda>c                      s
   j   S r   r   r   r   r   r   r      r   )r3   r@   rA   r   r   r`   r   r   r   r   r   r   r   test_getitem   s    
zTestMailbox.test_getitemc                 C   sn   | j | jd }| j t}| j |}| |tj | |d d | |	 d | 
| j | d S )Nr   r   r   r   )r3   r@   rA   rB   get_messager   r	   r   r   r   r   )r   r   r   msg0r   r   r   test_get_message   s    zTestMailbox.test_get_messagec                 C   sV   | j | jd }| j t}| | j || jd d | | j |t d S )Nr   asciir3   r@   rA   rB   r   rP   rO   rF   r   r   r   r   r   r   test_get_bytes  s    zTestMailbox.test_get_bytesc                 C   s\   | j | jd }| j t}| | j || jd  | | j |dtd d S )Nr   
r3   r@   rA   rB   r   rJ   rq   r   r   r   r   test_get_string  s    zTestMailbox.test_get_stringc                 C   s   | j | jd }| j t}| j |}| }W d    n1 sH0    Y  | j |}| }W d    n1 s|0    Y  | |dt	j
d| jd  | |dt	j
dt d S )Nr   r   r   )r3   r@   rA   rB   rd   re   r   decoderf   r   rg   )r   r   r   fileZdata0Zdata1r   r   r   test_get_file  s    &&zTestMailbox.test_get_filec                 C   s,   | j t}| j |}|  |  d S r   )r3   r@   rB   rd   r6   rh   r   r   r   !test_get_file_can_be_closed_twice!  s    z-TestMailbox.test_get_file_can_be_closed_twicec                 C   s   | j | jjddd d S NTFdo_keys	do_values)_check_iterationr3   iterkeysr4   r   r   r   test_iterkeys(  s    zTestMailbox.test_iterkeysc                 C   s   | j | jjddd d S r   )r   r3   rK   r4   r   r   r   	test_keys,  s    zTestMailbox.test_keysc                 C   s   | j | jjddd d S NFTr   )r   r3   
itervaluesr4   r   r   r   test_itervalues0  s    zTestMailbox.test_itervaluesc                 C   s   | j | jjddd d S r   )r   r3   __iter__r4   r   r   r   	test_iter5  s    zTestMailbox.test_iterc                 C   s   | j | jjddd d S r   )r   r3   valuesr4   r   r   r   test_values:  s    zTestMailbox.test_valuesc                 C   s   | j | jjddd d S NTr   )r   r3   	iteritemsr4   r   r   r   test_iteritems>  s    zTestMailbox.test_iteritemsc                 C   s   | j | jjddd d S r   )r   r3   r   r4   r   r   r   
test_itemsC  s    zTestMailbox.test_itemsc                 C   s,  | D ]}|  d qg g  }}t|D ],}|| j| j|  || j|  q(|rj|sjt| }	nB|r~|s~t| }
n.g g  }	}
| D ]\}}|	| |
| q|r| t|t|	 | t	|t	|	 |r(d}|
D ]0}| |d d | 
t| | |d7 }q| t|| d S )Nz	Not emptyr   r   r   r8   )Zfailranger?   r3   r@   rA   listr   r   set
assertLessintr   )r   r   r   r   r   r   rK   r   r   Zreturned_keysZreturned_valuesr   countr   r   r   r   G  s0    




zTestMailbox._check_iterationc                 C   s   |  d| j | j| jd }| || j |  d| j | j| jd }| || j | || j |  d| j | j| |  || j | || j |  d| j | j| |  || j |  || j |  d| j d S )Nr   r   r8   )assertNotInr3   r@   rA   r   r|   r   r   r   r   test_containsb  s     zTestMailbox.test_containsc                 C   s   g }t |D ]D}| t| j| || j| j|  | t| j|d  qt |D ]D}| t| j||  | j||  | t| j|| d  qZd S )Nr8   )r   r   r   r3   r?   r@   rA   r|   )r   r   rK   r   r   r   r   test_lenu  s    zTestMailbox.test_lenc                    s^   j  jd }  j | jd   j  jd }  j | jd   jd  j |<   j | jd   jd  j |<   j | jd  t j |<   j |   j |  j |<   j |   jd  j |<   j | jd    j |   t fdd  t fdd  t	 j d d S )	N
original 0
original 1	changed 0	changed 1c                      s    j ddS )Nr   bar)r3   __setitem__r   r4   r   r   r     r   z+TestMailbox.test_set_item.<locals>.<lambda>c                      s
    j d S r   r   r   r4   r   r   r     r   r9   )
r3   r@   rA   r   rJ   rB   r   r`   r   r   r   r   r4   r   test_set_item  s<    

zTestMailbox.test_set_itemc                    s   g }t |D ]}jj|  qt|D ]"\} j j|  q,j  tjd t|D ]\} 	t
 fdd qtd S )Nr   c                      s   j  S r   )r3   rJ   r   r   r   r   r   r     r   z(TestMailbox.test_clear.<locals>.<lambda>)r   r3   r@   rA   r   r   rJ   clearr   r`   r   )r   
iterationsrK   r   r   r   r   
test_clear  s    
zTestMailbox.test_clearc                 C   s  | j | jd }| || j  | j | jd }| || j  | | j | d | || j  | || j  | j | jd }| || j  | | j | d | || j  | || j  | | j | d | || j  | t| j d d S )Nr   r8   r   r9   z2
r   )	r3   r@   rA   r   r   popr   r   r   r   r   r   r   r   r   r   test_pop  s    zTestMailbox.test_popc                    s   g }t dD ]}|jj|  qg }t dD ]N}j \ } |  | |  t	|
 |  q6tjd |D ] t fdd qd S )Nr   r   c                      s
   j   S r   r   r   r   r   r   r     r   z*TestMailbox.test_popitem.<locals>.<lambda>)r   r?   r3   r@   rA   popitemr   r   r   r   r   indexr   r`   r   )r   r   rK   r   seenr   r   r   r   test_popitem  s    
zTestMailbox.test_popitemc                    s  j jd  j jd }j jd }j  jd |ti tj d j  jd  j |jd  j |  j |jd f|jd f jd fg tj d j  jd  j |jd  j |jd  	t
 fdd	 tj d j  jd  j |jd  j |jd  d S )
Nr   r   z
original 2r   r:   z	changed 2r   c                      s   j dd jd iS )Nr   r   r   )r3   updaterA   r   r   r   r   r     s   

z)TestMailbox.test_update.<locals>.<lambda>)r3   r@   rA   r   rB   r   r   rJ   r   r`   r   )r   r   r   r   r   r   test_update  sR    zTestMailbox.test_updatec                 C   s   |  | jjd d S NT)_test_flush_or_closer3   rX   r4   r   r   r   
test_flush  s    zTestMailbox.test_flushc                 C   sZ   | j | jd  | j | jd  | j   | j   | j   | j   | j   d S Nr   r8   )r3   r@   rA   rX   r   r4   r   r   r   test_popitem_and_flush_twice  s    



z(TestMailbox.test_popitem_and_flush_twicec                 C   sZ   |  tj|   | j  | tj|   | j  |  tj|   d S r   )	assertFalser   r   r"   _get_lock_pathr3   lockr   unlockr4   r   r   r   test_lock_unlock  s
    

zTestMailbox.test_lock_unlockc                 C   s   |  | jjd d S NF)r   r3   r6   r4   r   r   r   
test_close  s    zTestMailbox.test_closec                    s    fddt dD } j|d   j|d   j|d   j}|  |r` j    j _ j } t|d |D ]} 	 j
|| q|  d S )Nc                    s   g | ]} j | qS r   rA   .0r   r4   r   r   
<listcomp>  r   z4TestMailbox._test_flush_or_close.<locals>.<listcomp>r:   r   r8   r9   )r   r3   r@   r6   r2   r1   rK   r   r   r   rJ   )r   r   Zshould_call_closecontentsZoldboxrK   r   r   r4   r   r     s    

z TestMailbox._test_flush_or_closec              	      sr   t ttttfD ]8}t  j|   	 t
dtj  qt  t fdd d S )Nrb   c                      s   j d  S r   )r3   _dump_messager   outputr   r   r   r   !  r   z/TestMailbox.test_dump_message.<locals>.<lambda>)r   rC   rB   rD   rE   rF   r3   r   r   getvaluerf   r   rg   rO   r`   	TypeError)r   inputr   r   r   test_dump_message  s    

zTestMailbox.test_dump_messagec                 C   s
   | j d S )Nz.lock)r1   r4   r   r   r   r   #  s    zTestMailbox._get_lock_path)r   )r   )r   )r   )r   )9r&   r'   r(   ZmaxDiffr2   rA   r5   r7   rL   textwrapdedentrN   rR   rT   rZ   ra   rO   rc   rj   rs   rt   rv   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/   .   sj   



	






"r/   c                   @   s   e Zd Zdd ZdS )TestMailboxSuperclassc                    sR  t d | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fd	d | t fd
d | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd d S ) Nr   c                      s
     dS N )r@   r   boxr   r   r   -  r   z;TestMailboxSuperclass.test_notimplemented.<locals>.<lambda>c                      s
     dS r   )r|   r   r   r   r   r   .  r   c                      s
     dS r   )r~   r   r   r   r   r   /  r   c                      s
     dS r   )r   r   r   r   r   r   0  r   c                      s     ddS r   )r   r   r   r   r   r   1  r   c                      s      S r   )r   r   r   r   r   r   2  r   c                      s      S r   )rK   r   r   r   r   r   3  r   c                      s       S r   )r   __next__r   r   r   r   r   4  r   c                      s       S r   )r   r   r   r   r   r   r   5  r   c                      s      S r   )r   r   r   r   r   r   6  r   c                      s       S r   )r   r   r   r   r   r   r   7  r   c                      s      S r   )r   r   r   r   r   r   8  r   c                      s
     dS r   )r   r   r   r   r   r   9  r   c                      s
     dS r   )__getitem__r   r   r   r   r   :  r   c                      s
     dS r   )r   r   r   r   r   r   ;  r   c                      s
     dS r   )rJ   r   r   r   r   r   <  r   c                      s
     dS r   )rP   r   r   r   r   r   =  r   c                      s
     dS r   )rd   r   r   r   r   r   >  r   c                      s   d v S r   r   r   r   r   r   r   ?  r   c                      s
     dS r   )__contains__r   r   r   r   r   @  r   c                      s      S r   )__len__r   r   r   r   r   A  r   c                      s      S r   )r   r   r   r   r   r   B  r   c                      s
     dS r   )r   r   r   r   r   r   C  r   c                      s      S r   )r   r   r   r   r   r   D  r   c                      s
     dS )N))r   r   )r   r   r   r   r   r   E  r   c                      s      S r   )rX   r   r   r   r   r   F  r   c                      s      S r   )r   r   r   r   r   r   G  r   c                      s      S r   )r   r   r   r   r   r   H  r   c                      s      S r   )r6   r   r   r   r   r   I  r   )r	   Mailboxr`   NotImplementedErrorr4   r   r   r   test_notimplemented*  s<    
z)TestMailboxSuperclass.test_notimplementedN)r&   r'   r(   r   r   r   r   r   r   (  s   r   c                   @   s   e Zd Zd5d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d6ddZdd Zdd Zdd Zdd Zd7dd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zeeed-d.d/d0 Zeeed-d.d1d2 Zd3d4 ZdS )8TestMaildirNc                 C   s   t ||S r   )r	   Maildirr   r   factoryr   r   r   r   N  r   zTestMaildir.<lambda>c                 C   s*   t |  tjdkstjdkr&d| j_d S )Nntcygwin!)r/   r5   r   namesysplatformr3   colonr4   r   r   r   r5   P  s    
zTestMaildir.setUpc                 C   s"   |  ttj| jdg  d S Ntmp)r   r   listdirr   joinr1   r4   r   r   r   rY   U  s    zTestMaildir.assertMailboxEmptyc                 C   s`   t | jd }|d |d | j|}| tj	
tj	| jdd|| jjf  d S )Nr   curr   z%s%sfoo)r	   r)   rA   
set_subdirset_infor3   r@   r   r   r   r"   r
  r1   r  )r   r   r   r   r   r   test_add_MMX  s    


zTestMaildir.test_add_MMc                 C   sn   t | jd }|d |d | j|}| j|}| |t j | 	|
 d | 	| d d S )Nr   r  RFFR)r	   r)   rA   r  	set_flagsr3   r@   r   r   r   
get_subdir	get_flags)r   r   r   msg_returnedr   r   r   test_get_MMa  s    

zTestMaildir.test_get_MMc                 C   s  t | jd }|d | j|}| j|}| | d | |	 d t | jd }|| j|< | j|}| | d | |	 d | |
 d t | jd }|d	 || j|< | jd
 | j|< | j|}| | d | |	 d | |
 d d S )Nr   ZTPnewZPTr8   r   r   r9   z2,Sr:   Sz3
)r	   r)   rA   r  r3   r@   r   r   r  r  r   r  )r   r   r   r  msg1msg2r   r   r   test_set_MMl  s(    



zTestMaildir.test_set_MMc                 C   sv   t | jd }|d |d | j|}G dd dt j}t j| j|d}| jj	|_	|
|}| || d S )Nr   r  r  c                   @   s   e Zd ZdS )z8TestMaildir.test_consistent_factory.<locals>.FakeMessageN)r&   r'   r(   r   r   r   r   FakeMessage  s   r  r   )r	   r)   rA   r  r  r3   r@   r   r1   r  r   r   )r   r   r   r  r   r  r   r   r   test_consistent_factory  s    



z#TestMaildir.test_consistent_factoryc                 C   sH   |    t| j| _|   | | j | j| jd d| _|   d S )Nr  )r7   r	   r   r1   r3   _check_basicsr%   r2   r4   r   r   r   test_initialize_new  s    zTestMaildir.test_initialize_newc              	   C   sJ   |    dD ]"}ttjtj| j| qt| j| _	| 
  d S )Nr   r  r  r  )r7   r   mkdirr   normpathr
  r1   r	   r   r3   r  )r   subdirr   r   r   test_initialize_existing  s
     z$TestMaildir.test_initialize_existingc                 C   sn   |  | jjtj| j |  | jj| dD ]:}tj| j|}t|tj	 }| 
t|d|  q.d S )Nr   zNot a directory: '%s')r   r3   r1   r   r   abspathr2   r
  statST_MODEr   S_ISDIR)r   r   r#  r   moder   r   r   r    s    zTestMaildir._check_basicsc                 C   sX   | j d | j d | j d | t| j  d | t| j  td d S Nonetwothreer:   )r+  r,  r-  r3   
add_folderr   r   list_foldersr   r4   r   r   r   test_list_folders  s    zTestMaildir.test_list_foldersc                 C   sv   | j d | j d}|| jd  | tjtj	| j
d | j d}| || d | jd  d S )Nfoo.barr   z.foo.barr   )r3   r/  
get_folderr@   rA   r   r   r   r    r
  r1   r   rJ   rK   )r   folder0folder1r   r   r   test_get_folder  s    zTestMaildir.test_get_folderc                 C   s4  | j d | j d | t| j  d | t| j  td | j d | t| j  d | t| j  td | j d | t| j  d | t| j  td | j d | t| j  d | t| j  td | j d | t| j  d	 | | j  g  d S 
Nr+  r,  r9   )r+  r,  r8   )r,  r-  )r,  r-  r   r3   r/  r   r   r0  r   Zremove_folderr4   r   r   r   test_add_and_remove_folders  s     z'TestMaildir.test_add_and_remove_foldersc                 C   s  t j| jdd}t j| jdd}t|d}|d W d    n1 sN0    Y  t|d}|d W d    n1 s0    Y  | j  | t j	| | t j	| t 
|}t |t d d |jf | j  | t j	| | t j	| d S )Nr  r   r   w@i@ r9   )r   r   r
  r1   openro   r3   Zcleanr   r"   r&  utimetimest_mtimer   )r   Zfoo_pathZbar_pathri   Zfoo_statr   r   r   
test_clean  s     ((


zTestMaildir.test_cleanr   c              
   C   s  t  }d|v r|dd}d|v r0|dd}t }td}d }t|D ]}| j	 }tj
|j\}}	| |tj
tj
| jdd|  ||	}
| |
d|	  |
 }|d ur| t|d	 t|d	 d
|d	 |d	 f  t|d	 t|d	 kr8| t|d t|d d|d |d f  | t|d |d|d |f  | t|d t|d d d|d |d f  | |d |d|d |f  |}|t |d	 | | t |  qNtttj
| jd}| ||d||f  d S )N/z\057:z\072zF(?P<time>\d+)\.M(?P<M>\d{1,6})P(?P<P>\d+)Q(?P<Q>\d+)\.(?P<host>[^:/]*)r  zFile in wrong location: '%s'zInvalid file name: '%s'r   z'Non-monotonic seconds: '%s' before '%s'r8   z,Non-monotonic milliseconds: '%s' before '%s'r9   z(Process ID mismatch: '%s' should be '%s'r:   z(Non-sequential counter: '%s' before '%s'r;   z'Host name mismatch: '%s' should be '%s'z%Wrong file count: '%s' should be '%s')socketgethostnamerf   r   getpidrecompiler   r3   Z_create_tmpr   rq   r  r   r%  r
  r1   matchassertIsNotNonegroupsZassertGreaterEqualr   ro   rF   rp   re   r6   r   r	  )r   r   hostnamepidpatternZprevious_groupsxZtmp_fileheadtailrH  rJ  Z
file_countr   r   r   test_create_tmp  sr    








zTestMaildir.test_create_tmpc                 C   s   |  | jji  | j| jd }| j| jd }|  | jji  | j  |  | jj|tjd||tjd|i | j| jd }|  | jj|tjd||tjd|i | j  |  | jj|tjd||tjd||tjd|i d S )Nr   r8   r  r9   )	r   r3   _tocr@   rA   _refreshr   r   r
  r   r   r   r   test_refresh  s"    

zTestMaildir.test_refreshc                 C   sx   | j | jd }| j | jd }| | j| _ | | j ji  d| j _| j   | t	| j j
 t	||g d S )Nr   r8   )r3   r@   rA   r2   r1   r   rR  _skewfactorrS  sortedrK   r   r   r   r    test_refresh_after_safety_period$  s    
z,TestMaildir.test_refresh_after_safety_periodc                    s    tfdd jjd  j tj	d  t
tj	jd  jj tj	d i j   t fdd jji  d S )Nc                      s    j dS r   r3   _lookupr   r4   r   r   r   9  r   z)TestMaildir.test_lookup.<locals>.<lambda>r   r  c                      s   j  S r   rY  r   r   r   r   r   A  r   )r`   r   r3   r@   rA   r   rZ  r   r   r
  r|   r1   rR  rX   r4   r   r   r   test_lookup7  s    
zTestMaildir.test_lookupc                 C   s   | j   | j   d S r   )r3   r   r   r4   r   r   r   r   D  s    
zTestMaildir.test_lock_unlockc                 C   sL   dd }| j | j|d}|d}| |j | |d}| |j | d S )Nc                 S   s   d S r   r   sr   r   r   dummy_factoryL  s    z.TestMaildir.test_folder.<locals>.dummy_factoryr  r5  )r2   r1   r/  r   r3  )r   r^  r   ZfolderZfolder1_aliasr   r   r   test_folderI  s    

zTestMaildir.test_folderc                 C   sH   t dD ]}| jtt qttj	| j
dd | jD ]}q>d S )Nr   r  z	stray-dir)r   r3   r@   r	   r   rB   r   r!  r   r
  r1   )r   r   r   r   r   r   test_directory_in_folderU  s
    
z$TestMaildir.test_directory_in_folderumasktest needs os.umask()c              	   C   sx   t | jd }td}z| j|}W t| nt| 0 tj| j	| j
|}t|j}| |d@  d S )Nr   I   )r	   r)   rA   r   ra  r3   r@   r   r
  r1   rZ  r&  st_moder   )r   r   
orig_umaskr   r   r)  r   r   r   test_file_permissionsb  s    
z!TestMaildir.test_file_permissionsc              	   C   sd   t d}z| jd}W t | nt | 0 t j|jd}t |}|j}| 	|d@  d S )Nr   	subfolderZmaildirfolderrc  )
r   ra  r3   r/  r   r
  r1   r&  rd  r   )r   re  rg  r   stpermsr   r   r   test_folder_file_permso  s    

z"TestMaildir.test_folder_file_permsc                    s   j   dD ],}ttjj j|t d fd  qdj _j j	  fdd}j   
|  tjjdd}t| t| j   |  d S )	N)r  r  r<   r9   rU  c                      s   j j uS r   )r3   rR  r   Zorig_tocr   r   r   	refreshed  s    z*TestMaildir.test_reread.<locals>.refreshedr  z
stray-file)r3   rS  r   r=  r   r
  r1   r>  rV  rR  r   r   Zcreate_empty_filer#   r   )r   r#  rl  filenamer   rk  r   test_reread~  s    




zTestMaildir.test_reread)N)N)r   )r&   r'   r(   r2   r5   rY   r  r  r  r  r  r$  r  r1  r6  r9  r@  rQ  rT  rX  r[  r   r_  r`  unittest
skipUnlesshasattrr   rf  rj  rn  r   r   r   r   r   L  s4   
		
		

/

r   c                   @   s   e Zd Zdd Zdd ZdS )_TestSingleFilec                 C   sr   t | jj}| j| jd  | j  t | jj}| || | j	  | 
| j| _| t| jd d S r   )r   r&  r1   st_inor3   r@   rA   rX   r   r6   r2   r   )r   Zinode_beforeZinode_afterr   r   r   test_add_doesnt_rewrite  s    

z'_TestSingleFile.test_add_doesnt_rewritec                 C   st   t | jjdB }t | j| | j| jd  | j| jd }| j| | j	  | 
t | jj| d S )Ni  r   r8   )r   r&  r1   rd  chmodr3   r@   rA   r|   rX   r   )r   r)  r   r   r   r   test_permissions_after_flush  s    
z,_TestSingleFile.test_permissions_after_flushN)r&   r'   r(   rt  rv  r   r   r   r   rr    s   rr  c                       s   e Zd Z f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eeeddeeedddd Zdd Z  ZS )_TestMboxMMDFc                    sJ   t    | j  | | j tt| jd D ]}t	| q6d S Nz.*
superr7   r3   r6   r%   r1   globescaper   r#   r   Zlock_remnant	__class__r   r   r7     s
    

z_TestMboxMMDF.tearDownc                 C   s>   t | j }| | g  W d    n1 s00    Y  d S r   r<  r1   r   	readlinesr   ri   r   r   r   rY     s    z _TestMboxMMDF.assertMailboxEmptyc                 C   s   d}| j || jd  }| j |t }| | j j|dd| jd d | | j j|ddt | | j j|dd|| jd  d | | j j|dd|dt  d S )NFrom foo@bar blah
r   FZfrom_r   Tr   r   Zunixfromr   r   r   r   r   test_get_bytes_from  s    z!_TestMboxMMDF.test_get_bytes_fromc                 C   s   d}| j || jd  }| j |t }| | j j|dd| jd  | | j j|dddtd | | j j|dd|| jd   | | j j|ddd|t d d S )Nr  r   Fr  r   Tr   r  r   r   r   test_get_string_from  s    z"_TestMboxMMDF.test_get_string_fromc                 C   s<   | j d}| | j |  d | | j |  d d S )NFrom foo@bar blah
From: foo

0
foo@bar blahr   r3   r@   r   get_fromr   rQ   r   r   r   test_add_from_string  s    z"_TestMboxMMDF.test_add_from_stringc                 C   s<   | j d}| | j |  d | | j |  d d S )Ns   From foo@bar blah
From: foo

0
r  r   r  rQ   r   r   r   test_add_from_bytes  s    z!_TestMboxMMDF.test_add_from_bytesc                 C   s*   t jt jfD ]}|d}| j|}qd S )Nr  )r	   r*   r-   r3   r@   )r   class_r   r   r   r   r   test_add_mbox_or_mmdf_message  s    z+_TestMboxMMDF.test_add_mbox_or_mmdf_messagec                    s    fddt dD }|D ]} j| q j  tj j}  j _ 	t
 jd  j D ]}  j|| qn j   	|tj j d S )Nc                    s   g | ]} j | qS r   r   r   r4   r   r   r     r   z6_TestMboxMMDF.test_open_close_open.<locals>.<listcomp>r:   )r   r3   r@   r6   r   r   getmtimer1   r2   r   r   r   r   rJ   )r   r   r   mtimer   r   r4   r   test_open_close_open  s    

z"_TestMboxMMDF.test_open_close_openc                 C   s   | j t tdD ]}| j | j|  q| j t | j j  | j jd | j j }| j 	  t
| jd }| ||  W d    n1 s0    Y  | | j| _ d S )Nr:   r   rb)r3   r@   rB   r   rA   _filerX   rp   re   r6   r<  r1   r   r2   )r   r   r   ri   r   r   r   test_add_and_close  s    
.z _TestMboxMMDF.test_add_and_closeforkzTest needs fork().
socketpairzTest needs socketpair().c              
   C   s   t  \}}| |j | |j t }|dkrxz6| j  |d |	d | j
  W td ntd 0 |	d z.| tj| jj W |d tj|dd n|d tj|dd 0 | j  | j
  d S )Nr      cr8      p)exitcode)rC  r  Z
addCleanupr6   r   r  r3   r   sendrecvr   _exitr`   r	   ZExternalClashErrorr   Zwait_process)r   cprL  r   r   r   test_lock_conflict'  s,    






z _TestMboxMMDF.test_lock_conflictc                 C   sn   d}| j |}| j   | j   | | j| _ | j   | j |}| j   | | j j | j   d S )NzSubject: sub

body
)	r3   r@   rX   r6   r2   r1   r   r   Z_locked)r   r   r   r   r   r   r   test_relockL  s    



z_TestMboxMMDF.test_relock)r&   r'   r(   r7   rY   r  r  r  r  r  r  r  ro  rp  rq  r   rC  r  r  __classcell__r   r   r~  r   rw    s   #rw  c                   @   s@   e Zd ZdddZeeedddd Zdd	 Z	d
d Z
dS )TestMboxNc                 C   s   t ||S r   )r	   mboxr   r   r   r   r   ^  r   zTestMbox.<lambda>ra  rb  c              	   C   s   zVt d}| j  t | j tj| jdd| _| jd | j  W t | nt | 0 t 	| j}|j
}| |d@  d S )N?   T)Zcreater   rc  )r   ra  r3   r6   r#   r1   r	   r  r@   r&  rd  r   )r   Z	old_umaskrh  ri  r   r   r   test_file_perms`  s    

zTestMbox.test_file_permsc                 C   sH   t j }d|d< |d | j|}| j|}| | d d S )Nzjohn@example.comFromzNo newline at the endzNo newline at the end
)	r   r   r   Zset_payloadr3   r@   r   r   r   )r   r   r   r   r   r   test_terminating_newlines  s    

z!TestMbox.test_terminating_newlinec                 C   s   | j d t| j,}| }| |dd  d W d    n1 sH0    Y  | j d t| j,}| }| |dd  d W d    n1 s0    Y  d S )NzFrom: foo

0rU  z0

zFrom: foo

0
)r3   r@   r<  r1   re   r   )r   ri   datar   r   r   test_message_separator}  s    2zTestMbox.test_message_separator)N)r&   r'   r(   r2   ro  rp  rq  r   r  r  r  r   r   r   r   r  \  s
   


r  c                   @   s   e Zd ZdddZdS )TestMMDFNc                 C   s   t ||S r   )r	   ZMMDFr   r   r   r   r     r   zTestMMDF.<lambda>)N)r&   r'   r(   r2   r   r   r   r   r    s   r  c                   @   s^   e Zd Zd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S )TestMHNc                 C   s   t ||S r   )r	   ZMHr   r   r   r   r     r   zTestMH.<lambda>c                 C   s   |  t| jdg d S )Nz.mh_sequences)r   r   r	  r1   r4   r   r   r   rY     s    zTestMH.assertMailboxEmptyc                 C   sX   | j d | j d | j d | t| j  d | t| j  td d S r*  r.  r4   r   r   r   r1    s    zTestMH.test_list_foldersc                 C   s   dd }|  | j|| _| jd}| jd}|| jd  | tj	
tj	| jd | jd}| || d | jd  | |j | jj  | |j | jj  d S )Nc                 S   s   d S r   r   r\  r   r   r   r^    s    z-TestMH.test_get_folder.<locals>.dummy_factoryr2  r   r   )r2   r1   r3   r/  r3  r@   rA   r   r   r   r    r
  r   rJ   rK   r   )r   r^  Z
new_folderr4  r5  r   r   r   r6    s    zTestMH.test_get_folderc                 C   s4  | j d | j d | t| j  d | t| j  td | j d | t| j  d | t| j  td | j d | t| j  d | t| j  td | j d | t| j  d | t| j  td | j d | t| j  d	 | | j  g  d S r7  r8  r4   r   r   r   r9    s     z"TestMH.test_add_and_remove_foldersc                 C   s   |  | j i  t| jd }|d | j|}|  | j d|gi t| jd }|g d | j|}|  | j ||g|g|gd |dg || j|< |  | j |g|g|g|gd | j	| |  | j d|gi d S )Nr   r   r8   )r   repliedr   r   r   r  flagged)r   r   r  r  )
r   r3   get_sequencesr	   r+   rA   add_sequencer@   set_sequencesr|   r   r   r   r  r   r   r   r   test_sequences  s(    

zTestMH.test_sequencesc                 C   s6   t | jd }|d | j|}| j|}d S )Nr   r   )r	   r+   rA   r  r3   r@   r   )r   r   r   Zrefmsg0r   r   r   test_issue2625  s    
zTestMH.test_issue2625c                 C   s@   t | jd }| j|}| j  | j| | j  d S )Nr   )r	   r+   rA   r3   r@   r   r|   r   )r   r   r   r   r   r   test_issue7627  s
    
zTestMH.test_issue7627c           	   	   C   s  t | jd }t | jd }t | jd }t | jd }|ddg |dg |ddg |g d | j|}| j|}| j|}| j|}| | j ||||g|g|g|g|gd	 | j| | | j |||g|g|g|gd
 | j	  | | j
 g d |}|d }|d }| | j g ddgdgdgd
 | j|}| j|}| j|}| j|}| j| | j| | j  | j	  | j  | | j g ddgdgdgd
 d S )Nr   r8   r9   r:   r   unseenr  r  )r   r  r  r   r  )r   r  r   r  )r8   r9   r:   )r8   r9   r:   r;   r<   )r	   r+   rA   r  r3   r@   r   r  r|   packrK   r   r   )	r   r   r  r  Zmsg3r   r   r   Zkey3r   r   r   	test_pack  sZ    



zTestMH.test_packc                 C   s   t j| jdS )Nz.mh_sequences.lock)r   r   r
  r1   r4   r   r   r   r     s    zTestMH._get_lock_path)N)r&   r'   r(   r2   rY   r1  r6  r9  r  r  r  r  r   r   r   r   r   r    s   
	,r  c                       s6   e Zd Zd
ddZdd Z fddZdd	 Z  ZS )	TestBabylNc                 C   s   t ||S r   )r	   ZBabylr   r   r   r   r     r   zTestBabyl.<lambda>c                 C   s>   t | j }| | g  W d    n1 s00    Y  d S r   r  r  r   r   r   rY     s    zTestBabyl.assertMailboxEmptyc                    sJ   t    | j  | | j tt| jd D ]}t	| q6d S rx  ry  r}  r~  r   r   r7     s
    

zTestBabyl.tearDownc                 C   s   |  | j g  t| jd }|d | j|}|  | j dg t| jd }|g d | j|}|  t	| j t	ddg |ddg || j|< |  t	| j t	g d | j
| |  t	| j t	dg d S )	Nr   r   r8   )r   answeredr   r   blahfiled)r   r   r  )r   r3   
get_labelsr	   r,   rA   	add_labelr@   
set_labelsr   r|   r  r   r   r   test_labels%  s     


zTestBabyl.test_labels)N)r&   r'   r(   r2   rY   r7   r  r  r   r   r~  r   r    s   
r  c                   @   s   e Zd Zdd Zdd ZdS )FakeFileLikeObjectc                 C   s
   d| _ d S r   closedr4   r   r   r   __init__:  s    zFakeFileLikeObject.__init__c                 C   s
   d| _ d S r   r  r4   r   r   r   r6   =  s    zFakeFileLikeObject.closeN)r&   r'   r(   r  r6   r   r   r   r   r  8  s   r  c                   @   s   e Zd Zdd Zdd ZdS )FakeMailBoxc                 C   s,   t j| ddd  dd tdD | _d S )Nr   c                 S   s   d S r   r   )r   r   r   r   r   D  r   z&FakeMailBox.__init__.<locals>.<lambda>c                 S   s   g | ]
}t  qS r   )r  r   r   r   r   r   E  r   z(FakeMailBox.__init__.<locals>.<listcomp>r   )r	   r   r  r   filesr4   r   r   r   r  C  s    zFakeMailBox.__init__c                 C   s
   | j | S r   )r  rQ   r   r   r   rd   G  s    zFakeMailBox.get_fileN)r&   r'   r(   r  rd   r   r   r   r   r  A  s   r  c                   @   s   e Zd Zdd ZdS )TestFakeMailBoxc                 C   s`   t  }tdD ]}| |j| j qtdD ]}||  q.tdD ]}| |j| j qDd S )Nr   )r  r   r   r  r  r   )r   r   r   r   r   r   test_closing_fdM  s    
zTestFakeMailBox.test_closing_fdN)r&   r'   r(   r  r   r   r   r   r  K  s   r  c                   @   sr   e Zd Zej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S )TestMessagec                 C   s   t j| _d S r   )r   r0   r1   r4   r   r   r   r5   [  s    zTestMessage.setUpc                 C   s   |  | j d S r   )r%   r1   r4   r   r   r   r7   ^  s    zTestMessage.tearDownc                 C   s,   t t}| |}| | | | d S r   )r   rC   rB   r2   _post_initialize_hookr   r   eMMr   r   r   r   test_initialize_with_eMMa  s    


z$TestMessage.test_initialize_with_eMMc                 C   s"   |  t}| | | | d S r   )r2   rB   r  r   r   r   r   r   test_initialize_with_stringh  s    

z'TestMessage.test_initialize_with_stringc                 C   sb   t | jdB}|t |d | |}| | | | W d    n1 sT0    Y  d S )Nru   r   )r<  r1   ro   rB   rp   r2   r  r   r   ri   r   r   r   r   test_initialize_with_filen  s    



z%TestMessage.test_initialize_with_filec                 C   sb   t | jdB}|t |d | |}| | | | W d    n1 sT0    Y  d S )Nrl   r   )r<  r1   ro   rF   rp   r2   r  r   r  r   r   r    test_initialize_with_binary_filew  s    



z,TestMessage.test_initialize_with_binary_filec                 C   sn   |   }| | | |tjj | |tj | || j  | | g  | 	|
  | |  d S r   )r2   r  r   r   r   r   r	   r   rK   r   r   r   r   r   r   r   r   test_initialize_with_nothing  s    
z(TestMessage.test_initialize_with_nothingc                    s     t fdd d S )Nc                      s     t S r   )r2   objectr   r4   r   r   r     r   z9TestMessage.test_initialize_incorrectly.<locals>.<lambda>)r`   r   r4   r   r4   r   test_initialize_incorrectly  s    z'TestMessage.test_initialize_incorrectlyc                 C   s:   t t}| t}|jD ]}| ||jd| qd S )Nz{} attribute does not exist)r   rC   rB   r2   __dict__r   format)r   r  r   attrr   r   r   test_all_eMM_attributes_exist  s    



z)TestMessage.test_all_eMM_attributes_existc                 C   s*   t t}|  }|| | | d S r   )r   rC   rB   r2   Z_become_messager   r  r   r   r   test_become_message  s    

zTestMessage.test_become_messagec                    sH   |    | jD ]}|   qtj | t fdd d S )Nc                      s
     S r   )_explain_tor   r   Z	other_msgr   r   r     r   z-TestMessage.test_explain_to.<locals>.<lambda>)r2   r.   r  r   r   r   r`   r   )r   r  r   r  r   test_explain_to  s    

zTestMessage.test_explain_toc                 C   s   d S r   r   r   r   r   r   r    s    z!TestMessage._post_initialize_hookN)r&   r'   r(   r	   r   r2   r5   r7   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  W  s   		
r  c                   @   sB   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dd ZdS )TestMaildirMessagec                 C   s    |  |jd |  |jd d S )Nr  r   )r   Z_subdir_infor   r   r   r   r    s    z(TestMaildirMessage._post_initialize_hookc                    s   t t |   d  d |   d  d |   d | t fdd |   d  d |   d |   d S )Nr  r  c                      s
     dS r  )r  r   r   r   r   r     r   z0TestMaildirMessage.test_subdir.<locals>.<lambda>)	r	   r)   rB   r   r  r  r`   rW   r   r4   r   r  r   test_subdir  s    



zTestMaildirMessage.test_subdirc                 C   s   t t}| | d | | d |d | | d | | d |d | | d |d | | d |d | | d	 | | d | 	| d S )
Nr   r  FZSDTPZDPSTZFTZDFPSTZTDRPFS)
r	   r)   rB   r   r  r  r  add_flagremove_flagr   r   r   r   r   
test_flags  s    




zTestMaildirMessage.test_flagsc                 C   sD   t t}| t| t  d |d | | d d S )N<           )	r	   r)   rB   r   absget_dater>  set_dater   r   r   r   r   	test_date  s    

zTestMaildirMessage.test_datec                    sV   t t |   d  d |   d | t fdd |   d S )Nr   z	1,foo=barc                      s
     d S r   )r  r   r  r   r   r     r   z.TestMaildirMessage.test_info.<locals>.<lambda>)	r	   r)   rB   r   get_infor  r`   r   r   r4   r   r  r   	test_info  s    

zTestMaildirMessage.test_infoc                 C   s   t t}| | d |d | | d | | d |d | | d | | d |d | | d | | d |	d | | d | | d | 
| d S )	Nr   ZSFr  z2,FSz1,ZRPTDz2,D)r	   r)   rB   r   r  r  r  r  r  r  r   r   r   r   r   test_info_and_flags  s    




z&TestMaildirMessage.test_info_and_flagsN)r&   r'   r(   r	   r)   r2   r  r  r  r  r  r  r   r   r   r   r    s   	r  c                   @   s<   e Zd ZejZdd Zdd Zdd Zdd Z	dd
dZ
d	S )_TestMboxMMDFMessagec                 C   s   |  | d S r   )_check_fromr   r   r   r   r    s    z*_TestMboxMMDFMessage._post_initialize_hookc                 C   s8   t t}|d t |}| | d|  d S )NzFrom foo@bar blahr  )r	   r   rB   Zset_unixfromr*   r   r  r   r   r   r   test_initialize_with_unixfrom  s    


z2_TestMboxMMDFMessage.test_initialize_with_unixfromc                 C   sf   t t}| | |d | | d |dd | |d |dt  | |d d S )Nzfoo barfoo@barTz	blah@temp)	r	   r*   rB   r  set_fromr   r  r>  	localtimer   r   r   r   	test_from  s    


z_TestMboxMMDFMessage.test_fromc                 C   s   t t}| | d |d | | d |d | | d |d | | d |d | | d | | d S )	Nr   r  ZXODRZRODXZFAZRODFAXZFDXARO)	r	   r*   rB   r   r  r  r  r  r   r   r   r   r   r    s    




z_TestMboxMMDFMessage.test_flagsNc                 C   s*   |d u rd}|  t|d |  d S )NzMAILER-DAEMONz. \w{3} \w{3} [\d ]\d [\d ]\d:\d{2}:\d{2} \d{4})rI  rF  rH  r  )r   r   Zsenderr   r   r   r    s    z _TestMboxMMDFMessage._check_from)N)r&   r'   r(   r	   Z_mboxMMDFMessager2   r  r  r  r  r  r   r   r   r   r    s   r  c                   @   s   e Zd ZejZdS )TestMboxMessageN)r&   r'   r(   r	   r*   r2   r   r   r   r   r  '  s   r  c                   @   s"   e Zd ZejZdd Zdd ZdS )TestMHMessagec                 C   s   |  |jg  d S r   )r   Z
_sequencesr   r   r   r   r  0  s    z#TestMHMessage._post_initialize_hookc                 C   s(  t t}| | g  |dg | | dg |g  | | g  |d | | dg |d | | ddg |d | | ddg |d | | dg |d | | ddg |d | | ddg |ddg | | ddg d S )Nfoobarr  r  r  )r	   r+   rB   r   r  r  r  Zremove_sequencer   r   r   r   r  3  s(    







zTestMHMessage.test_sequencesN)r&   r'   r(   r	   r+   r2   r  r  r   r   r   r   r  ,  s   r  c                   @   s*   e Zd ZejZdd Zdd Zdd ZdS )TestBabylMessagec                 C   s   |  |jg  d S r   )r   Z_labelsr   r   r   r   r  O  s    z&TestBabylMessage._post_initialize_hookc                 C   s(  t t}| | g  |dg | | dg |g  | | g  |d | | dg |d | | ddg |d | | ddg |d | | dg |d | | ddg |d | | ddg |ddg | | ddg d S )Nr  r  resentr  r  )r	   r,   rB   r   r  r  r  Zremove_labelr   r   r   r   r  R  s(    







zTestBabylMessage.test_labelsc                 C   s  t t}| }| | g  | |  d|d< d|d< | |  g  || | }| | ddg | |d d | |d d | |  |	  | | ddg | |  | }| | g d dD ]}| || ||  qd S )Nz
FooBar 1.0
User-AgentZBlahz
X-Whatever)r  Dater  ToSubject)
r	   r,   rB   get_visibler   rK   r   r   Zset_visibleupdate_visible)r   r   Zvisibleheaderr   r   r   test_visiblei  s(    

zTestBabylMessage.test_visibleN)	r&   r'   r(   r	   r,   r2   r  r  r  r   r   r   r   r  K  s   r  c                   @   s   e Zd ZejZdS )TestMMDFMessageN)r&   r'   r(   r	   r-   r2   r   r   r   r   r    s   r  c                   @   s   e Z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+S ),TestMessageConversionc                 C   s,   | j D ] }tt}||}| | qd S r   )r.   r	   r   rB   r   )r   r  	msg_plainr   r   r   r   test_plain_to_x  s    

z%TestMessageConversion.test_plain_to_xc                 C   s,   | j D ] }|t}t|}| | qd S r   )r.   rB   r	   r   r   )r   r  r   r  r   r   r   test_x_to_plain  s    

z%TestMessageConversion.test_x_to_plainc                 C   s"   | j D ]}|t}| | qd S r   )r.   rF   r   )r   r  r   r   r   r   test_x_from_bytes  s    
z'TestMessageConversion.test_x_from_bytesc                    s$   | j D ] | t fdd qd S )Nc                      s    dS r   r   r   r  r   r   r     r   z9TestMessageConversion.test_x_to_invalid.<locals>.<lambda>)r.   r`   r   r4   r   r  r   test_x_to_invalid  s    
z'TestMessageConversion.test_x_to_invalidc                    s   dd | j D | j D ]d}| j D ]X | u r.q |t} |} fdd| D }|D ]}| ||jd|  qZq qd S )Nc                 S   s   i | ]}||t jqS r   )rB   r  )r   r  r   r   r   
<dictcomp>  s   z]TestMessageConversion.test_type_specific_attributes_removed_on_conversion.<locals>.<dictcomp>c                    s   g | ]}|  vr|qS r   r   )r   aZclass2Z	referencer   r   r     s   z]TestMessageConversion.test_type_specific_attributes_removed_on_conversion.<locals>.<listcomp>zwhile converting {} to {})r.   rB   r   r  r  )r   Zclass1sourcer$   Ztype_specificr  r   r  r   3test_type_specific_attributes_removed_on_conversion  s    



zITestMessageConversion.test_type_specific_attributes_removed_on_conversionc                 C   sn   t t}|d |d | }t |}| | | | d | |	 d | | | d S )NDFPRSTr  )
r	   r)   rB   r  r  r  r   r   r  r  )r   msg_maildirdater   r   r   r   test_maildir_to_maildir  s    




z-TestMessageConversion.test_maildir_to_maildirc                 C   s   d}t jt jfD ]}t t}|d |D ]J\}}|| ||}| | | | |	 dt
t
d  q,|d | || d qd S )N))r  r   r  r  )Pr   )RA)r  r  )Tr  )r  ZRDFAr  zMAILER-DAEMON %sr  RODFA)r	   r*   r-   r)   rB   r  r  r   r  r  r>  asctimegmtimer  )r   pairsr  r  settingresultr   r   r   r   test_maildir_to_mboxmmdf  s    



z.TestMessageConversion.test_maildir_to_mboxmmdfc              	   C   s|   t t}ddgfdddgfddgfdddgfdg fd	dgfd
ddgff}|D ](\}}|| | t | | qNd S )Nr  r  r  r  r  r  r  r  r  r  )r	   r)   rB   r  r   r+   r  r   r  r  r   r!  r   r   r   test_maildir_to_mh  s    

z(TestMessageConversion.test_maildir_to_mhc              	   C   s~   t t}ddgfddgfdddgfdddgfdg fd	dd
gfdg dff}|D ](\}}|| | t | | qPd S )Nr  r  r  r  	forwardedr  r  r  r  deletedr  )r&  r  r%  )r	   r)   rB   r  r   r,   r  r#  r   r   r   test_maildir_to_babyl  s    


z+TestMessageConversion.test_maildir_to_babylc                 C   s   t jt jfD ]}|t}|dtd d}|D ]<\}}|| t |}| 	|
 | | 	| d q2|d | 	t | d qd S )Nr  r  ))r  r  )Or   )r  r  r  )r  r  )r  ZFRSTr(  r  )r	   r*   r-   rB   r  r>  r  r  r)   r   r  r  r  )r   r  msg_mboxMMDFr  r   r!  r   r   r   r   test_mboxmmdf_to_maildir  s    


z.TestMessageConversion.test_mboxmmdf_to_maildirc                 C   sl   t jt jfD ]Z}|t}|d |d t jt jfD ],}||}| | d | | d q8qd S )Nr  r  )	r	   r*   r-   rB   r  r  r   r  r  )r   r  r)  Zclass2_r  r   r   r   test_mboxmmdf_to_mboxmmdf  s    

z/TestMessageConversion.test_mboxmmdf_to_mboxmmdfc              	   C   s   t jt jfD ]r}|t}dg fddgfddgfdddgfdddgfd	ddgff}|D ](\}}|| | t | | qTqd S )
Nr  r(  r  r  r  r  r  r  r  )r	   r*   r-   rB   r  r   r+   r  )r   r  r)  r  r   r!  r   r   r   test_mboxmmdf_to_mh  s    



z)TestMessageConversion.test_mboxmmdf_to_mhc              	   C   s   t jt jfD ]r}|t}dg fddgfdddgfddgfdddgfd	ddgff}|D ](\}}|| | t | | qTqd S )
Nr  r(  r  r  r&  r  r  r  r  )r	   r*   r-   rB   r  r   r,   r  )r   r  r   r  r   r!  r   r   r   test_mboxmmdf_to_babyl  s    


z,TestMessageConversion.test_mboxmmdf_to_babylc                 C   s   d}|D ]H\}}t t}|| | t | | | t | d qt t}|d |d |d | t | d | t | d d S )N)r  r   )r  RS)r  r  r  r  r  r  r  )r	   r+   rB   r  r   r)   r  r  r   r  r   r!  r   r   r   r   test_mh_to_maildir  s    





z(TestMessageConversion.test_mh_to_maildirc                 C   s   d}|D ]B\}}t t}|| t jt jfD ]}| || | q0qt t}|d |d |d t jt jfD ]}| || d qd S )N)r  r(  )r  ROA)r  ZROFr  r  r  ZOFA)r	   r+   rB   r  r*   r-   r   r  )r   r  r   r!  r   r  r   r   r   test_mh_to_mboxmmdf'  s    





z)TestMessageConversion.test_mh_to_mboxmmdfc                 C   sF   t t}|d |d |d | t | g d d S )Nr  r  r  )r  r  r  )r	   r+   rB   r  r   r  r   r   r   r   test_mh_to_mh6  s    



z#TestMessageConversion.test_mh_to_mhc                 C   s   ddgfddgfdg ff}|D ]2\}}t t}|| | t | | qt t}|d |d |d | t | ddg d S )Nr  r  r  r  )r	   r+   rB   r  r   r,   r  r0  r   r   r   test_mh_to_babyl?  s    





z&TestMessageConversion.test_mh_to_babylc                 C   s   d}|D ]H\}}t t}|| | t | | | t | d qt t}dD ]}|| q`| t | d | t | d d S )N)r.  )r&  ZST)r  r  )r  r/  )r%  PS)editedr  )r  r7  r  r  r&  r  r  r%  r8  r  ZPRT)r	   r,   rB   r  r   r)   r  r  r   r  r   r!  r   labelr   r   r   test_babyl_to_maildirN  s    


z+TestMessageConversion.test_babyl_to_maildirc                 C   s   d}|D ]B\}}t jt jfD ],}t t}|| | || | qqt t}dD ]}|| qZt jt jfD ]}| || d qvd S )N)r2  )r&  ZROD)r  r  )r  r3  )r%  r  )r8  r  )r  r  r9  ZODA)r	   r*   r-   r,   rB   r  r   r  )r   r  r   r!  r  r   r;  r   r   r   test_babyl_to_mboxmmdf_  s    


z,TestMessageConversion.test_babyl_to_mboxmmdfc                 C   s   ddgfdg fdg fddgfdg fdg fdg ff}|D ]2\}}t t}|| | t | | q6t t}d	D ]}|| qx| t | ddg d S )
Nr  r&  r  r  r  r%  r8  r  r9  )r	   r,   rB   r  r   r+   r  r:  r   r   r   test_babyl_to_mhp  s    


z&TestMessageConversion.test_babyl_to_mhc                 C   s   t t}|  dD ]}|| qt |}| | g d | |  |   |  D ] }| | | | |  qld S )Nr9  )	r	   r,   rB   r  r  r   r  r  rK   )r   r   r;  r  r   r   r   r   test_babyl_to_babyl  s    

z)TestMessageConversion.test_babyl_to_babylN)r&   r'   r(   r	  r
  r  r  r  r  r"  r$  r'  r*  r+  r,  r-  r1  r4  r5  r6  r<  r=  r>  r?  r   r   r   r   r    s*   	r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestProxyFileBasec                 C   s   | d | | d | d | | d | d | |dd | d | |dd | d | |dd	 d S )
Nr      barr8   s   arr9   s   ba     r)rp   r   re   r   proxyr   r   r   
_test_read  s    




zTestProxyFileBase._test_readc                 C   s   t j }|d | | d|  | | d|  | | d|  | | d |d | | d|  |ddtt j   | | d|  |ddtt j   | |dd	 | |d
d|  d S )Nr      foorA     fred   bobr9      or=   s   fris   ed)r   rg   rO   rp   r   readliner   r   rF  rg   r   r   r   _test_readline  s    


z TestProxyFileBase._test_readlinec                 C   s   t j }|d | | d| d| d| dg |d | |dd| g |dt|  | |dt| d| d| g |d | |d	|d| d| dg d S )
Nr   rH  rA  rI  rJ  r9   r:   r;   rC  )r   rg   rO   rp   r   r  r   rM  r   r   r   _test_readlines  s     



z!TestProxyFileBase._test_readlinesc                 C   sz   t j }|d t|}| t|d|  | t|d|  | t|d|  | t|d | tt| d S )Nr   rH  rA  rI  rJ  )	r   rg   rO   rp   iterr   nextr`   StopIteration)r   rF  rg   iteratorr   r   r   _test_iteration  s    

z!TestProxyFileBase._test_iterationc                 C   s   t j }|d | | d | |t|| |dd | |dt| d|  |dt| d | |dd |dd | | d| d |  |d	 | |  d S )
Nr:   r9   r8   rD  rU  rA  r   rK  d   )	r   rg   rO   rp   r   tellre   r   r   rM  r   r   r   _test_seek_and_tell  s    


z%TestProxyFileBase._test_seek_and_tellc                 C   s8   |  |j |  | |j |  | |j d S r   )r   r  r6   r   rE  r   r   r   _test_close  s
    zTestProxyFileBase._test_closeN)	r&   r'   r(   rG  rN  rO  rT  rW  rX  r   r   r   r   r@    s   r@  c                   @   sT   e Z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S )TestProxyFilec                 C   s   t j| _t| jd| _d S Nrl   r   r0   r1   r<  r  r4   r   r   r   r5     s    zTestProxyFile.setUpc                 C   s   | j   | | j d S r   r  r6   r%   r1   r4   r   r   r   r7     s    
zTestProxyFile.tearDownc                 C   sx   | j d | j  }t| j }| | | | | j  | t| j d}| | d | | j  | d S )NrH  r   )r  ro   rV  r	   
_ProxyFiler   )r   posZproxy0Zproxy1r   r   r   test_initialize  s    
zTestProxyFile.test_initializec                 C   s"   | j d | t| j  d S )NrA  )r  ro   rG  r	   r]  r4   r   r   r   	test_read  s    zTestProxyFile.test_readc                 C   s8   | j tdtjtjtjf d | t| j  d S Nzfoo%sbar%sfred%sbobr   )r  ro   bytesr   rg   rN  r	   r]  r4   r   r   r   test_readline  s    zTestProxyFile.test_readlinec                 C   s8   | j tdtjtjtjf d | t| j  d S ra  )r  ro   rb  r   rg   rO  r	   r]  r4   r   r   r   test_readlines  s    zTestProxyFile.test_readlinesc                 C   s8   | j tdtjtjtjf d | t| j  d S ra  )r  ro   rb  r   rg   rT  r	   r]  r4   r   r   r   test_iteration  s    zTestProxyFile.test_iterationc                 C   s4   | j tdtjtjf d | t| j  d S Nz
foo%sbar%sr   )r  ro   rb  r   rg   rW  r	   r]  r4   r   r   r   test_seek_and_tell  s    z TestProxyFile.test_seek_and_tellc                 C   s4   | j tdtjtjf d | t| j  d S rf  )r  ro   rb  r   rg   rX  r	   r]  r4   r   r   r   r     s    zTestProxyFile.test_closeNr&   r'   r(   r5   r7   r_  r`  rc  rd  re  rg  r   r   r   r   r   rY    s   rY  c                   @   sT   e Z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S )TestPartialFilec                 C   s   t j| _t| jd| _d S rZ  r[  r4   r   r   r   r5     s    zTestPartialFile.setUpc                 C   s   | j   | | j d S r   r\  r4   r   r   r   r7     s    
zTestPartialFile.tearDownc                 C   s\   | j tdtj d d | j  }t| j dd}| | d | | j  | d S )Nr   r   r   r9   r<   r   )	r  ro   rb  r   rg   rV  r	   _PartialFiler   )r   r^  rF  r   r   r   r_    s
    
zTestPartialFile.test_initializec                 C   s,   | j tdd | t| j dd d S )Nz	***bar***r   r:   r=   )r  ro   rb  rG  r	   rj  r4   r   r   r   r`  &  s    zTestPartialFile.test_readc              
   C   sJ   | j tdtjtjtjf d | t| j dddttj   d S )Nz!!!!!foo%sbar%sfred%sbob!!!!!r   r<      r:   )	r  ro   rb  r   rg   rN  r	   rj  r   r4   r   r   r   rc  *  s    
zTestPartialFile.test_readlinec              
   C   sJ   | j tdtjtjtjf d | t| j dddttj   d S )Nzfoo%sbar%sfred%sbob?????r   r      r:   )	r  ro   rb  r   rg   rO  r	   rj  r   r4   r   r   r   rd  0  s    
zTestPartialFile.test_readlinesc              
   C   sJ   | j tdtjtjtjf d | t| j dddttj   d S )Nz____foo%sbar%sfred%sbob####r   r;      r:   )	r  ro   rb  r   rg   rT  r	   rj  r   r4   r   r   r   re  6  s    
zTestPartialFile.test_iterationc              
   C   sF   | j tdtjtjf d | t| j dddttj   d S )Nz(((foo%sbar%s$$$r   r:   	   r9   )	r  ro   rb  r   rg   rW  r	   rj  r   r4   r   r   r   rg  <  s    z"TestPartialFile.test_seek_and_tellc              
   C   sF   | j tdtjtjf d | t| j dddttj   d S )Nz&foo%sbar%s^r   r8   r=   r:   )	r  ro   rb  r   rg   rX  r	   rj  r   r4   r   r   r   r   A  s    zTestPartialFile.test_closeNrh  r   r   r   r   ri    s   ri  z6From some.body@dummy.domain  Sat Jul 24 13:43:35 2004
z]From: some.body@dummy.domain
To: me@my.domain
Subject: Simple Test

This is a dummy message.
c                   @   sF   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd Zdd Z	dS )MaildirTestCasec                 C   s   t j| _tj| jr$t | j ntj| jr>t | j t	| j t	tj
| jd t	tj
| jd t	tj
| jd d| _g | _d S )Nr  r  r  r8   )r   r0   _dirr   r   r    r!   isfiler#   r!  r
  _counter	_msgfilesr4   r   r   r   r5   T  s    zMaildirTestCase.setUpc                 C   sd   t ttj| j ttj| j	d ttj| j	d ttj| j	d t| j	 d S )Nr  r  r  )
r   mapr   r#   rs  r   rmdirr   r
  rp  r4   r   r   r   r7   b  s
    zMaildirTestCase.tearDownFc           	      C   s  t t d }| j}|  jd7  _dt|t|ddf}tj| jd|}tj| j||}t|d4}| j	
| |r|t |t W d    n1 s0    Y  zt|| W nL ttfy   t|d}|t W d    n1 s0    Y  Y n0 | j	
| |S )Ni@B r8   .Z
myhostnameZmydomainr  r:  )r   r>  rr  r
  strr   r   rp  r<  rs  r?   ro   FROM_DUMMY_MESSAGElinkAttributeErrorPermissionError)	r   dirr  trL  rm  ZtmpnameZnewnamefpr   r   r   createMessagei  s$    
(.zMaildirTestCase.createMessagec                 C   s2   t tj| _| | j  | | j  d S r   )r	   r   r   r0   r  r   rQ  r4   r   r   r   test_empty_maildir}  s    z"MaildirTestCase.test_empty_maildirc                 C   sL   |  d ttj| _| | j  | | j  | | j  d S )Nr  	r  r	   r   r   r0   r  rI  rQ  r   r4   r   r   r   test_nonempty_maildir_cur  s
    
z)MaildirTestCase.test_nonempty_maildir_curc                 C   sL   |  d ttj| _| | j  | | j  | | j  d S )Nr  r  r4   r   r   r   test_nonempty_maildir_new  s
    
z)MaildirTestCase.test_nonempty_maildir_newc                 C   sf   |  d |  d ttj| _| | j  | | j  | | j  | | j  d S )Nr  r  r  r4   r   r   r   test_nonempty_maildir_both  s    

z*MaildirTestCase.test_nonempty_maildir_bothN)F)
r&   r'   r(   r5   r7   r  r  r  r  r  r   r   r   r   ro  R  s   

ro  aK  Return-Path: <gkj@gregorykjohnson.com>
X-Original-To: gkj+person@localhost
Delivered-To: gkj+person@localhost
Received: from localhost (localhost [127.0.0.1])
        by andy.gregorykjohnson.com (Postfix) with ESMTP id 356ED9DD17
        for <gkj+person@localhost>; Wed, 13 Jul 2005 17:23:16 -0400 (EDT)
Delivered-To: gkj@sundance.gregorykjohnson.com
Received: from localhost [127.0.0.1]
        by localhost with POP3 (fetchmail-6.2.5)
        for gkj+person@localhost (single-drop); Wed, 13 Jul 2005 17:23:16 -0400 (EDT)
Received: from andy.gregorykjohnson.com (andy.gregorykjohnson.com [64.32.235.228])
        by sundance.gregorykjohnson.com (Postfix) with ESMTP id 5B056316746
        for <gkj@gregorykjohnson.com>; Wed, 13 Jul 2005 17:23:11 -0400 (EDT)
Received: by andy.gregorykjohnson.com (Postfix, from userid 1000)
        id 490CD9DD17; Wed, 13 Jul 2005 17:23:11 -0400 (EDT)
Date: Wed, 13 Jul 2005 17:23:11 -0400
From: "Gregory K. Johnson" <gkj@gregorykjohnson.com>
To: gkj@gregorykjohnson.com
Subject: Sample message
Message-ID: <20050713212311.GC4701@andy.gregorykjohnson.com>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="NMuMz9nt05w80d4+"
Content-Disposition: inline
User-Agent: Mutt/1.5.9i


--NMuMz9nt05w80d4+
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

This is a sample message.

--
Gregory K. Johnson

--NMuMz9nt05w80d4+
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="text.gz"
Content-Transfer-Encoding: base64

H4sICM2D1UIAA3RleHQAC8nILFYAokSFktSKEoW0zJxUPa7wzJIMhZLyfIWczLzUYj0uAHTs
3FYlAAAA

--NMuMz9nt05w80d4+--
r   z<gkj@gregorykjohnson.com>zgkj+person@localhostzfrom localhost (localhost [127.0.0.1])
        by andy.gregorykjohnson.com (Postfix) with ESMTP id 356ED9DD17
        for <gkj+person@localhost>; Wed, 13 Jul 2005 17:23:16 -0400 (EDT)z gkj@sundance.gregorykjohnson.comzfrom localhost [127.0.0.1]
        by localhost with POP3 (fetchmail-6.2.5)
        for gkj+person@localhost (single-drop); Wed, 13 Jul 2005 17:23:16 -0400 (EDT)zfrom andy.gregorykjohnson.com (andy.gregorykjohnson.com [64.32.235.228])
        by sundance.gregorykjohnson.com (Postfix) with ESMTP id 5B056316746
        for <gkj@gregorykjohnson.com>; Wed, 13 Jul 2005 17:23:11 -0400 (EDT)ztby andy.gregorykjohnson.com (Postfix, from userid 1000)
        id 490CD9DD17; Wed, 13 Jul 2005 17:23:11 -0400 (EDT)zWed, 13 Jul 2005 17:23:11 -0400z."Gregory K. Johnson" <gkj@gregorykjohnson.com>zgkj@gregorykjohnson.comzSample messagez1.0z,multipart/mixed; boundary="NMuMz9nt05w80d4+"ZinlinezMutt/1.5.9i)zReturn-PathzX-Original-ToDelivered-ToReceivedr  r  r  r  r  r  r   r  zMime-VersionzContent-TypezContent-Dispositionr  )z1This is a sample message.

--
Gregory K. Johnson
zRH4sICM2D1UIAA3RleHQAC8nILFYAokSFktSKEoW0zJxUPa7wzJIMhZLyfIWczLzUYj0uAHTs
3FYlAAAA
c                   @   s   e Zd Zdd ZdS )MiscTestCasec                 C   s   ddh}t j| t|d d S )Nrg   Zfcntl)	blacklist)r   Zcheck__all__r	   )r   r  r   r   r   test__all__  s    zMiscTestCase.test__all__N)r&   r'   r(   r  r   r   r   r   r    s   r  c                   C   s   t   d S r   )r   reap_childrenr   r   r   r   tearDownModule  s    r  __main__)6r   r  r>  r&  rC  r   Zemail.messagerF  rD   rm   testr   ro  r   r	   r{  r   r/   ZTestCaser   r   rr  rw  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r@  rY  ri  rx  ry  ro  rB   rO   rF   r
   r   r  r  r&   mainr   r   r   r   <module>   s      }$  ]) . "	
VJ07  S15R/


