o
    HXh)o                    @   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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 d0d1 d1e)ejZ*G d2d3 d3e)ejZ+d4Z,d5Z-G d6d7 d7ejZ.d8Z/e/0d9Z1i d:d;d<d=d>d=d?d@d>dAd?dBd?dCd?dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTZ2dUZ3G dVdW dWejZ4dXdY Z5e6dZkre7  dS dS )[    N)support)	os_helperc                   @   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 | | | q8d 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   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_mailbox.py_check_sample   s   
zTestBase._check_samplec                 C   s8   t j|rt| d S t j|rt| d S 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)dcdEdFZ*dGdH Z+dcdIdJZ,dKdL Z-dcdMdNZ.dOdP Z/dcdQdRZ0dSdT Z1dUdV Z2dWdX Z3dYdZ Z4d[d\ Z5d]d^ Z6d_d` Z7dadb Z8dS )dTestMailboxNzFrom: foo

%s
c                 C   s&   t j| _| | j | | j| _d S r   )r   TESTFN_pathr&   _factory_boxr   r   r   r   setUp6   s   zTestMailbox.setUpc                 C      | j   | | j d S r   )r4   closer&   r2   r5   r   r   r   tearDown;      
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jttdd	 W d    n1 sw   Y  | t| jd
 | | j|d | jd  dD ]}| | j||   qd S )Nr                     utf-8encoding   )r;   r<   r=   r>   r?   r@   )appendr4   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-1r;   )r4   rF   _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 )Nr;   rS   zZSubject: =?unknown-8bit?b?RmFsaW5hcHThciBo4Xpob3pzeuFsbO104XNzYWwuIE3hciByZW5kZWx06Ww/?=

)rT   
splitlinesr4   rF   rU   r   rP   )r   Zsubjr   r   r   r   &test_invalid_nonascii_header_as_stringc   s
   z2TestMailbox.test_invalid_nonascii_header_as_stringc                 C   sb   |  td | j| j W d    n1 sw   Y  | j  | t| jd |   d S Nz
ASCII-onlyr   )	assertRaisesRegex
ValueErrorr4   rF   rT   flushr   r   assertMailboxEmptyr5   r   r   r   &test_add_nonascii_string_header_raisesj   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 s'w   Y  | 
t| jd | j  |   d S )Nc                  _   s   t d)Nza fake error)	Exception)argskwr   r   r   raiserr   s   zETestMailbox.test_add_that_raises_leaves_mailbox_empty.<locals>.raiserZflattenu   From: Alphösor   )r   Zpatchr   	generatorZBytesGeneratorassertRaisesra   r4   rF   rI   r   r   r8   r_   )r   rd   r   r   r   )test_add_that_raises_leaves_mailbox_emptyq   s   
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

        Да, они летят.
        rA   c              	   C   s   | j | j}| | j || j | j |}| | | jdtj	
  W d    n1 s3w   Y  | | j |  d d S )N   
u   Да, они летят.
)r4   rF   _non_latin_bin_msgr   rV   get_filereadreplacer   lineseprU   r   r   r   fr   r   r   test_add_8bit_body   s   
zTestMailbox.test_add_8bit_bodyc                 C   sn   t d}|t |d | j|}W d    n1 s w   Y  | | j|	dt	d d S Nwb+r   rh   )
tempfileTemporaryFilewriterL   seekr4   rF   r   rV   splitr   ro   r   r   r   r   test_add_binary_file   s   

z TestMailbox.test_add_binary_filec                 C   sr   t d}|| j |d | j|}W d    n1 s!w   Y  | | j|	d| j	d d S rq   )
rs   rt   ru   ri   rv   r4   rF   r   rV   rw   rx   r   r   r   test_add_binary_nonascii_file   s   

z)TestMailbox.test_add_binary_nonascii_filec              	   C   s   t jddd-}|t |d | t | j|}W d    n1 s(w   Y  W d    n1 s7w   Y  | 	| j
|dtd d S )Nw+rA   rB   r   rh   )rs   rt   ru   rH   rv   rM   rN   r4   rF   r   rV   rw   rL   rx   r   r   r   test_add_text_file_warns   s   

z$TestMailbox.test_add_text_file_warnsc                 C   s`   |  t | jt| jd }W d    n1 sw   Y  | | j|| jd  d S )N0)	rM   rN   r4   rF   rJ   StringIOrG   r   rP   rW   r   r   r   test_add_StringIO_warns   s   z#TestMailbox.test_add_StringIO_warnsc              	   C   s   |  t( | td | jt| j W d    n1 s!w   Y  W d    n1 s0w   Y  | 	t
| jd | j  |   d S r[   )rM   rN   r\   r]   r4   rF   rJ   r~   rT   r   r   r8   r_   r5   r   r   r   !test_add_nonascii_StringIO_raises   s   
z-TestMailbox.test_add_nonascii_StringIO_raisesc                 C      |  | jj d S r   )_test_remove_or_delitemr4   remover5   r   r   r   test_remove      zTestMailbox.test_removec                 C   r   r   )r   r4   __delitem__r5   r   r   r   test_delitem   r   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   r;   r<   c                      
   j   S r   r4   r   key0r   r   r   <lambda>      
 z5TestMailbox._test_remove_or_delitem.<locals>.<lambda>c                          S r   r   r   )r   methodr   r   r          c                      r   r   r   r   )key2r   r   r   r      r   c                      r   r   r   r   )r   r   r   r   r      r   c                      r   r   r   r   )key1r   r   r   r      r   c                      r   r   r   r   )r   r   r   r   r      r   )r4   rF   rG   r   r   rf   KeyErrorrP   )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   r;   r<   c                      r   r   r   r   r   r   r   r      r   z*TestMailbox.test_discard.<locals>.<lambda>c                      r   r   r   r   r   r   r   r      r   )r4   rF   rG   r   r   discardrf   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
Fr;   1
)r4   rF   rG   getr   r   assertIsNoneassertIsr8   r3   r2   )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                      
    j d S Nr   r   r   r5   r   r   r      r   z*TestMailbox.test_getitem.<locals>.<lambda>c                      r   r   r   r   r   r   r   r      r   )r4   rF   rG   r   r   rf   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   )r4   rF   rG   rH   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r4   rF   rG   rH   r   rV   rU   rL   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   
r4   rF   rG   rH   r   rP   rw   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 s$w   Y  | j |}| }W d    n1 s>w   Y  | |dt	j
d| jd  | |dt	j
dt d S )Nr   r   r   )r4   rF   rG   rH   rj   rk   r   decoderl   r   rm   )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   )r4   rF   rH   rj   r8   rn   r   r   r   !test_get_file_can_be_closed_twice"  s   z-TestMailbox.test_get_file_can_be_closed_twicec                 C      | j | jjddd d S NTFdo_keys	do_values)_check_iterationr4   iterkeysr5   r   r   r   test_iterkeys)     zTestMailbox.test_iterkeysc                 C   r   r   )r   r4   rQ   r5   r   r   r   	test_keys-  r   zTestMailbox.test_keysc                 C   r   NFTr   )r   r4   
itervaluesr5   r   r   r   test_itervalues1     
zTestMailbox.test_itervaluesc                 C   r   r   )r   r4   __iter__r5   r   r   r   	test_iter6  r   zTestMailbox.test_iterc                 C   r   r   )r   r4   valuesr5   r   r   r   test_values;  r   zTestMailbox.test_valuesc                 C      | j | jjddd d S NTr   )r   r4   	iteritemsr5   r   r   r   test_iteritems?  r   zTestMailbox.test_iteritemsc                 C   r   r   )r   r4   r   r5   r   r   r   
test_itemsD  r   zTestMailbox.test_itemsc                 C   s.  | D ]}|  d qg g }}t|D ]}|| j| j|  || j|  q|r5|s5t| }	n!|r?|s?t| }
ng g }	}
| D ]\}}|	| |
| qG|rl| t|t|	 | t	|t	|	 |rd}|
D ]}| |d d | 
t| | |d7 }qr| t|| d S d S )Nz	Not emptyr   r   r   r;   )ZfailrangerE   r4   rF   rG   listr   r   set
assertLessintr   )r   r   r   r   r   r   rQ   r   r   Zreturned_keysZreturned_valuesr   countr   r   r   r   H  s2   




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   r;   )assertNotInr4   rF   rG   r   r   r   r   r   r   test_containsc  s    zTestMailbox.test_containsc                 C   s   g }t |D ]"}| t| j| || j| j|  | t| j|d  qt |D ]"}| t| j||  | j||  | t| j|| d  q-d S )Nr;   )r   r   r   r4   rE   rF   rG   r   )r   r   rQ   r   r   r   r   test_lenv  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)r4   __setitem__r   r5   r   r   r         z+TestMailbox.test_set_item.<locals>.<lambda>c                      r   r   r   r   r5   r   r   r     r   r<   )
r4   rF   rG   r   rP   rH   r   rf   r   r   r   r   r5   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 q:d S )Nr   c                         j  S r   )r4   rP   r   r   r   r   r   r         z(TestMailbox.test_clear.<locals>.<lambda>)r   r4   rF   rG   r   r   rP   clearr   rf   r   )r   
iterationsrQ   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   r;   r   r<   z2
r   )	r4   rF   rG   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 ]'}j \ } |  | |  t	|
 |  qtjd |D ] t fdd qNd S )Nr   r   c                      r   r   r   r   r   r   r   r     r   z*TestMailbox.test_popitem.<locals>.<lambda>)r   rE   r4   rF   rG   popitemr   r   r   r   r   indexr   rf   r   )r   r   rQ   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   )r4   updaterG   r   r   r   r   r     s   
 
z)TestMailbox.test_update.<locals>.<lambda>)r4   rF   rG   r   rH   r   r   rP   r   rf   r   )r   r   r   r   r   r   test_update  sR   zTestMailbox.test_updatec                 C      |  | jjd d S NT)_test_flush_or_closer4   r^   r5   r   r   r   
test_flush     zTestMailbox.test_flushc                 C   sZ   | j | jd  | j | jd  | j   | j   | j   | j   | j   d S Nr   r;   )r4   rF   rG   r^   r   r5   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_pathr4   lockr   unlockr5   r   r   r   test_lock_unlock  s
   

zTestMailbox.test_lock_unlockc                 C   r   NF)r   r4   r8   r5   r   r   r   
test_close  r   zTestMailbox.test_closec                    s    fddt dD } j|d   j|d   j|d   j}|  |r0 j    j _ j } t|d |D ]} 	 j
|| qF|  d S )Nc                       g | ]} j | qS r   rG   .0r   r5   r   r   
<listcomp>	      z4TestMailbox._test_flush_or_close.<locals>.<listcomp>r=   r   r;   r<   )r   r4   rF   r8   r3   r2   rQ   r   r   r   rP   )r   r   Zshould_call_closecontentsZoldboxrQ   r   r   r5   r   r     s   

z TestMailbox._test_flush_or_closec              	      sr   t ttttfD ]}t  j|   	 t
dtj  qt  t fdd d S )Nrh   c                      s   j d  S r   )r4   _dump_messager   outputr   r   r   r   "  r   z/TestMailbox.test_dump_message.<locals>.<lambda>)r   rI   rH   rJ   rK   rL   r4   r   r   getvaluerl   r   rm   rU   rf   	TypeError)r   inputr   r   r   test_dump_message  s   

zTestMailbox.test_dump_messagec                 C   s
   | j d S )Nz.lock)r2   r5   r   r   r   r   $  s   
zTestMailbox._get_lock_pathr   )9r'   r(   r)   ZmaxDiffr3   rG   r6   r9   rR   textwrapdedentrT   rX   rZ   r`   rg   rU   ri   rp   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   r0   /   sl    


	






"r0   c                   @      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                      
     dS N )rF   r   boxr   r   r   .  r   z;TestMailboxSuperclass.test_notimplemented.<locals>.<lambda>c                      r
  r  )r   r   r  r   r   r   /  r   c                      r
  r  )r   r   r  r   r   r   0  r   c                      r
  r  )r   r   r  r   r   r   1  r   c                      s     ddS r  )r   r   r  r   r   r   2  r   c                            S r   )r   r   r  r   r   r   3  r   c                      r  r   )rQ   r   r  r   r   r   4  r   c                             S r   )r   __next__r   r  r   r   r   5  r   c                      r  r   )r   r  r   r  r   r   r   6  r   c                      r  r   )r   r   r  r   r   r   7  r   c                      r  r   )r   r  r   r  r   r   r   8  r   c                      r  r   )r   r   r  r   r   r   9  r   c                      r
  r  )r   r   r  r   r   r   :  r   c                      r
  r  )__getitem__r   r  r   r   r   ;  r   c                      r
  r  )r   r   r  r   r   r   <  r   c                      r
  r  )rP   r   r  r   r   r   =  r   c                      r
  r  )rV   r   r  r   r   r   >  r   c                      r
  r  )rj   r   r  r   r   r   ?  r   c                      s   d v S r  r   r   r  r   r   r   @  r   c                      r
  r  )__contains__r   r  r   r   r   A  r   c                      r  r   )__len__r   r  r   r   r   B  r   c                      r  r   )r   r   r  r   r   r   C  r   c                      r
  r  )r   r   r  r   r   r   D  r   c                      r  r   )r   r   r  r   r   r   E  r   c                      r
  )N))r  r  )r   r   r  r   r   r   F  r   c                      r  r   )r^   r   r  r   r   r   G  r   c                      r  r   )r   r   r  r   r   r   H  r   c                      r  r   )r   r   r  r   r   r   I  r   c                      r  r   )r8   r   r  r   r   r   J  r   )r
   Mailboxrf   NotImplementedErrorr5   r   r  r   test_notimplemented+  s<   
z)TestMailboxSuperclass.test_notimplementedN)r'   r(   r)   r  r   r   r   r   r	  )      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d5d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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 )7TestMaildirNc                 C      t ||S r   )r
   Maildirr   r    factoryr   r   r   r   O  r   zTestMaildir.<lambda>c                 C   s.   t |  tjdkstjdkrd| j_d S d S )Nntcygwin!)r0   r6   r   namesysplatformr4   colonr5   r   r   r   r6   Q  s   
zTestMaildir.setUpc                 C   s"   |  ttj| jdg  d S Ntmp)r   r   listdirr    joinr2   r5   r   r   r   r_   V  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*   rG   
set_subdirset_infor4   rF   r   r   r    r#   r(  r2   r$  )r   r   r   r   r   r   test_add_MMY  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*   rG   r*  	set_flagsr4   rF   r   r   r   
get_subdir	get_flags)r   r   r   msg_returnedr   r   r   test_get_MMb  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PTr;   r  r   r<   z2,Sr=   Sz3
)r
   r*   rG   r/  r4   rF   r   r   r0  r1  r   r+  )r   r   r   r2  msg1msg2r   r   r   test_set_MMm  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    r9  r  )r
   r*   rG   r*  r/  r4   rF   r  r2   r$  r   r   )r   r   r   r9  r  r7  r   r   r   test_consistent_factory  s   



z#TestMaildir.test_consistent_factoryc                 C   sH   |    t| j| _|   | | j | j| jd d| _|   d S )Nr:  )r9   r
   r  r2   r4   _check_basicsr&   r3   r5   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&  r4  r)  )r9   r   mkdirr    normpathr(  r2   r
   r  r4   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   r4   r2   r   r    abspathr3   r(  statST_MODEr   S_ISDIR)r   r  rA  r    moder   r   r   r<    s   zTestMaildir._check_basicsc                 C   X   | j d | j d | j d | t| j  d | t| j  td d S Nonetwothreer=   )rJ  rK  rL  r4   
add_folderr   r   list_foldersr   r5   r   r   r   test_list_folders     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   )r4   rN  
get_folderrF   rG   r   r   r    r!   r(  r2   r   rP   rQ   )r   folder0folder1r   r   r   test_get_folder  s   zTestMaildir.test_get_folderc                 C   4  | 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 
NrJ  rK  r<   )rJ  rK  r;   )rK  rL  )rK  rL  r   r4   rN  r   r   rO  r   Zremove_folderr5   r   r   r   test_add_and_remove_folders      z'TestMaildir.test_add_and_remove_foldersc                 C   s  t j| jdd}t j| jdd}t|ddd}|d W d    n1 s)w   Y  t|ddd}|d W d    n1 sEw   Y  | j  | t j	| | t j	| t 
|}t |t d d	 |jf | j  | t j	| | t j	| d S )
Nr&  r   r   wrA   rB   @i@ r<   )r   r    r(  r2   openru   r4   Zcleanr   r#   rD  utimetimest_mtimer   )r   Zfoo_pathZbar_pathro   Zfoo_statr   r   r   
test_clean  s$   


zTestMaildir.test_cleanr   c              
   C   s
  t  }d|v r|dd}d|v r|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r| 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 |  q't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'r;   z,Non-monotonic milliseconds: '%s' before '%s'r<   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gethostnamerl   r   getpidrecompiler   r4   Z_create_tmpr    rw   r!  r   rC  r(  r2   matchassertIsNotNonegroupsZassertGreaterEqualr   ru   rL   rv   rk   r8   r   r'  )r   r   hostnamepidpatternZprevious_groupsxZtmp_fileheadtailrj  rl  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   r;   r4  r<   )	r   r4   _tocrF   rG   _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   r;   )r4   rF   rG   r3   r2   r   rt  _skewfactorru  sortedrQ   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   r4   _lookupr   r5   r   r   r   :  r   z)TestMaildir.test_lookup.<locals>.<lambda>r   r4  c                      r   r   r{  r   r   r   r   r   B  r   )rf   r   r4   rF   rG   r   r|  r   r    r(  r   r2   rt  r^   r5   r   r   r   test_lookup8  s   
zTestMaildir.test_lookupc                 C   s   | j   | j   d S r   )r4   r   r   r5   r   r   r   r   E  s   
zTestMaildir.test_lock_unlockc                 C   sL   dd }| j | j|d}|d}| |j | |d}| |j | d S )Nc                 S      d S r   r   sr   r   r   dummy_factoryM     z.TestMaildir.test_folder.<locals>.dummy_factoryr:  rU  )r3   r2   rN  r   rS  )r   r  r  ZfolderZfolder1_aliasr   r   r   test_folderJ  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   r4   rF   r
   r	   rH   r   r?  r    r(  r2   )r   r   r   r   r   r   test_directory_in_folderV  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| w tj| j	| j
|}t|j}| |d@  d S )Nr   I   )r
   r*   rG   r   r  r4   rF   r    r(  r2   r|  rD  st_moder   )r   r   
orig_umaskr   r    rG  r   r   r   test_file_permissionsc  s   
z!TestMaildir.test_file_permissionsc              	   C   sd   t d}z| jd}W t | nt | w t j|jd}t |}|j}| 	|d@  d S )Nr   	subfolderZmaildirfolderr  )
r   r  r4   rN  r    r(  r2   rD  r  r   )r   r  r  r    stpermsr   r   r   test_folder_file_permsp  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)  r4  r?   r<   rw  c                      s   j j uS r   )r4   rt  r   Zorig_tocr   r   r   	refreshed     z*TestMaildir.test_reread.<locals>.refreshedr)  z
stray-file)r4   ru  r   r_  r    r(  r2   r`  rx  rt  r   r   Zcreate_empty_filer$   r   )r   rA  r  filenamer   r  r   test_reread  s   




zTestMaildir.test_rereadr   r  )r'   r(   r)   r3   r6   r_   r,  r3  r8  r;  r=  rB  r<  rP  rV  rZ  rb  rs  rv  rz  r}  r   r  r  unittest
skipUnlesshasattrr   r  r  r  r   r   r   r   r  M  s6    
		
		

/

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   rD  r2   st_inor4   rF   rG   r^   r   r8   r3   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   r;   )r   rD  r2   r  chmodr4   rF   rG   r   r^   r   )r   rG  r   r   r   r   test_permissions_after_flush  s   
z,_TestSingleFile.test_permissions_after_flushN)r'   r(   r)   r  r  r   r   r   r   r    s    r  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                    J   t    | j  | | j tt| jd D ]}t	| qd S Nz.*
superr9   r4   r8   r&   r2   globescaper   r$   r   Zlock_remnant	__class__r   r   r9        

z_TestMboxMMDF.tearDownc                 C   B   t | jd}| | g  W d    d S 1 sw   Y  d S Nrbr^  r2   r   	readlinesr   ro   r   r   r   r_        "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   <   | j d}| | j |  d | | j |  d d S )NFrom foo@bar blah
From: foo

0
foo@bar blahr   r4   rF   r   get_fromr   rW   r   r   r   test_add_from_string     z"_TestMboxMMDF.test_add_from_stringc                 C   r  )Ns   From foo@bar blah
From: foo

0
r  r   r  rW   r   r   r   test_add_from_bytes   r  z!_TestMboxMMDF.test_add_from_bytesc                 C   s*   t jt jfD ]}|d}| j|}qd S )Nr  )r
   r+   r.   r4   rF   )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|| q7 j   	|tj j d S )Nc                    r   r   r   r   r5   r   r   r     r   z6_TestMboxMMDF.test_open_close_open.<locals>.<listcomp>r=   )r   r4   rF   r8   r   r    getmtimer2   r3   r   r   r   r   rP   )r   r   r   mtimer   r   r5   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 sMw   Y  | | j| _ d S )Nr=   r   r  )r4   rF   rH   r   rG   _filer^   rv   rk   r8   r^  r2   r   r3   )r   r   r   ro   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r<z| j  |d |	d | j
  W td ntd w |	d z| tj| jj W |d tj|dd n|d tj|dd w | j  | j
  d S )Nr      cr;      p)exitcode)re  r  Z
addCleanupr8   r   r  r4   r   sendrecvr   _exitrf   r
   ZExternalClashErrorr   Zwait_process)r   cprn  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
)	r4   rF   r^   r8   r3   r2   r   r   Z_locked)r   r   r   r   r   r   r   test_relockM  s   



z_TestMboxMMDF.test_relock)r'   r(   r)   r9   r_   r  r  r  r  r  r  r  r  r  r  r   re  r  r  __classcell__r   r   r  r   r    s    #r  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   r  r   )r
   mboxr  r   r   r   r   _  r   zTestMbox.<lambda>r  r  c              	   C   s   z+t d}| j  t | j tj| jdd| _| jd | j  W t | nt | w t 	| j}|j
}| |d@  d S )N?   T)Zcreater  r  )r   r  r4   r8   r$   r2   r
   r  rF   rD  r  r   )r   Z	old_umaskr  r  r   r   r   test_file_permsa  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_payloadr4   rF   r   r   r   )r   r   r   r   r   r   test_terminating_newlinet  s   

z!TestMbox.test_terminating_newlinec                 C   s   | j d t| jdd}| }| |dd  d W d    n1 s&w   Y  | j d t| jdd}| }| |dd  d W d    d S 1 sRw   Y  d S )NzFrom: foo

0rA   rB   rw  z0

zFrom: foo

0
)r4   rF   r^  r2   rk   r   )r   ro   datar   r   r   test_message_separator~  s   "zTestMbox.test_message_separatorr   )r'   r(   r)   r3   r  r  r  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   r  r   )r
   ZMMDFr  r   r   r   r     r   zTestMMDF.<lambda>r   )r'   r(   r)   r3   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   r  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'  r2   r5   r   r   r   r_     s   zTestMH.assertMailboxEmptyc                 C   rH  rI  rM  r5   r   r   r   rP    rQ  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   r~  r   r   r  r   r   r   r    r  z-TestMH.test_get_folder.<locals>.dummy_factoryrR  r   r   )r3   r2   r4   rN  rS  rF   rG   r   r   r    r!   r(  r   rP   rQ   r   )r   r  Z
new_folderrT  rU  r   r   r   rV    s   zTestMH.test_get_folderc                 C   rW  rX  rY  r5   r   r   r   rZ    r[  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   r;   )r   repliedr   r   r   r  flagged)r   r   r  r  )
r   r4   get_sequencesr
   r,   rG   add_sequencerF   set_sequencesr   r   r   r   r6  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,   rG   r  r4   rF   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,   rG   r4   rF   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   r;   r<   r=   r   unseenr  r  )r   r  r  r   r  )r   r  r   r  )r;   r<   r=   )r;   r<   r=   r>   r?   )r
   r,   rG   r  r4   rF   r   r  r   packrQ   r   r   )	r   r   r6  r7  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(  r2   r5   r   r   r   r        zTestMH._get_lock_pathr   )r'   r(   r)   r3   r_   rP  rV  rZ  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   r  r   )r
   ZBabylr  r   r   r   r     r   zTestBabyl.<lambda>c                 C   r  r  r  r  r   r   r   r_     r  zTestBabyl.assertMailboxEmptyc                    r  r  r  r  r  r   r   r9     r  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   r;   )r   answeredr   r   blahfiled)r   r   r  )r   r4   
get_labelsr
   r-   rG   	add_labelrF   
set_labelsr   r   r  r   r   r   test_labels&  s    


 zTestBabyl.test_labelsr   )r'   r(   r)   r3   r_   r9   r  r  r   r   r  r   r    s
    
r  c                   @      e Zd Zdd Zdd ZdS )FakeFileLikeObjectc                 C   
   d| _ d S r   closedr5   r   r   r   __init__;     
zFakeFileLikeObject.__init__c                 C   r  r   r  r5   r   r   r   r8   >  r  zFakeFileLikeObject.closeN)r'   r(   r)   r  r8   r   r   r   r   r  9  s    r  c                   @   r  )FakeMailBoxc                 C   s,   t j| ddd  dd tdD | _d S )Nr  c                 S   r~  r   r   )r   r   r   r   r   E  s    z&FakeMailBox.__init__.<locals>.<lambda>c                 S   s   g | ]}t  qS r   )r  r   r   r   r   r   F  s    z(FakeMailBox.__init__.<locals>.<listcomp>r   )r
   r  r  r   filesr5   r   r   r   r  D  s   zFakeMailBox.__init__c                 C   s
   | j | S r   )r  rW   r   r   r   rj   H  r  zFakeMailBox.get_fileN)r'   r(   r)   r  rj   r   r   r   r   r  B  s    r  c                   @   r  )TestFakeMailBoxc                 C   s`   t  }tdD ]}| |j| j qtdD ]}||  qtdD ]}| |j| j q"d S )Nr   )r  r   r   r  r  r   )r   r  r   r   r   r   test_closing_fdN  s   
zTestFakeMailBox.test_closing_fdN)r'   r(   r)   r  r   r   r   r   r  L  r  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   r1   r2   r5   r   r   r   r6   \  r  zTestMessage.setUpc                 C   s   |  | j d S r   )r&   r2   r5   r   r   r   r9   _  r  zTestMessage.tearDownc                 C   s,   t t}| |}| | | | d S r   )r   rI   rH   r3   _post_initialize_hookr   r   eMMr   r   r   r   test_initialize_with_eMMb  s   


z$TestMessage.test_initialize_with_eMMc                 C   s"   |  t}| | | | d S r   )r3   rH   r  r   r   r   r   r   test_initialize_with_stringi  s   

z'TestMessage.test_initialize_with_stringc                 C   sh   t | jddd"}|t |d | |}| | | | W d    d S 1 s-w   Y  d S )Nr{   rA   rB   r   )r^  r2   ru   rH   rv   r3   r  r   r   ro   r   r   r   r   test_initialize_with_fileo  s   



"z%TestMessage.test_initialize_with_filec                 C   sd   t | jd"}|t |d | |}| | | | W d    d S 1 s+w   Y  d S )Nrr   r   )r^  r2   ru   rL   rv   r3   r  r   r   r   r   r    test_initialize_with_binary_filex  s   



"z,TestMessage.test_initialize_with_binary_filec                 C   sn   |   }| | | |tjj | |tj | || j  | | g  | 	|
  | |  d S r   )r3   r  r   r   r   r	   r
   r   rQ   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   )r3   objectr   r5   r   r   r     r   z9TestMessage.test_initialize_incorrectly.<locals>.<lambda>)rf   r  r5   r   r5   r   test_initialize_incorrectly  r   z'TestMessage.test_initialize_incorrectlyc                 C   s:   t t}| t}|jD ]}| ||jd| qd S )Nz{} attribute does not exist)r   rI   rH   r3   __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   rI   rH   r3   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>)r3   r/   r  r   r   r	   rf   r  )r   r  r   r  r   test_explain_to  s   

zTestMessage.test_explain_toc                 C   r~  r   r   r   r   r   r   r    s   z!TestMessage._post_initialize_hookN)r'   r(   r)   r
   r	   r3   r6   r9   r  r  r  r  r  r  r	  r
  r  r  r   r   r   r   r  X  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 )Nr4  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 )Nr4  r)  c                      r
  r%  )r*  r   r   r   r   r     r   z0TestMaildirMessage.test_subdir.<locals>.<lambda>)	r
   r*   rH   r   r0  r*  rf   r]   r   r5   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  r4  FZSDTPZDPSTZFTZDFPSTZTDRPFS)
r
   r*   rH   r   r1  r0  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*   rH   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*   rH   r   get_infor+  rf   r  r   r5   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*   rH   r   r  r/  r1  r+  r  r  r   r   r   r   r   test_info_and_flags  s   




z&TestMaildirMessage.test_info_and_flagsN)r'   r(   r)   r
   r*   r3   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	   rH   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+   rH   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+   rH   r   r1  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})rk  rh  rj  r  )r   r   Zsenderr   r   r   r"    s   
z _TestMboxMMDFMessage._check_fromr   )r'   r(   r)   r
   Z_mboxMMDFMessager3   r  r#  r'  r  r"  r   r   r   r   r!    s    r!  c                   @      e Zd ZejZdS )TestMboxMessageN)r'   r(   r)   r
   r+   r3   r   r   r   r   r*  (      
r*  c                   @   s"   e Zd ZejZdd Zdd ZdS )TestMHMessagec                 C      |  |jg  d S r   )r   Z
_sequencesr   r   r   r   r  1     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,   rH   r   r  r  r  Zremove_sequencer   r   r   r   r  4  (   







zTestMHMessage.test_sequencesN)r'   r(   r)   r
   r,   r3   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   r-  r   )r   Z_labelsr   r   r   r   r  P  r.  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-   rH   r   r  r  r  Zremove_labelr   r   r   r   r  S  r0  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 ]}| || ||  qyd S )Nz
FooBar 1.0
User-AgentZBlahz
X-Whatever)r3  Dater  ToSubject)
r
   r-   rH   get_visibler   rQ   r   r   Zset_visibleupdate_visible)r   r   Zvisibleheaderr   r   r   test_visiblej  s*   

zTestBabylMessage.test_visibleN)	r'   r(   r)   r
   r-   r3   r  r  r:  r   r   r   r   r1  L  s
    r1  c                   @   r)  )TestMMDFMessageN)r'   r(   r)   r
   r.   r3   r   r   r   r   r;    r+  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	   rH   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/   rH   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/   rL   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/   rf   r  r5   r   rA  r   test_x_to_invalid  s   
z'TestMessageConversion.test_x_to_invalidc                    s   dd | j D | j D ]2}| j D ], | u rq|t} |} fdd| D }|D ]}| ||jd|  q-qqd S )Nc                 S   s   i | ]}||t jqS r   )rH   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/   rH   r   r  r  )r   Zclass1sourcer%   Ztype_specificr  r   rE  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*   rH   r/  r*  r  r   r   r1  r0  )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 ]C}t t}|d |D ]%\}}|| ||}| | | | |	 dt
t
d  q|d | || d qd S )N))r  r  r  r  )Pr  )RA)r5  rN  )Tr  )rH  ZRDFAr  zMAILER-DAEMON %sr)  RODFA)r
   r+   r.   r*   rH   r  r/  r   r1  r  r`  asctimegmtimer*  )r   pairsr  rI  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 | | q'd S )Nr  r  r  r  rM  rN  r  r5  rP  rH  )r
   r*   rH   r/  r   r,   r  r   rI  rT  rU  rV  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 | | q(d S )Nr  r  r  rM  	forwardedrN  r  r5  rP  deletedrH  )r[  r  rZ  )r
   r*   rH   r/  r   r-   r  rX  r   r   r   test_maildir_to_babyl  s   


z+TestMessageConversion.test_maildir_to_babylc                 C   s   t jt jfD ]B}|t}|dtd d}|D ]\}}|| t |}| 	|
 | | 	| d q|d | 	t | d qd S )Nr$  r  ))rN  r5  )Or  )r  rP  rL  )rO  rN  )rQ  ZFRSTr]  r)  )r
   r+   r.   rH   r%  r`  rS  r/  r*   r   r1  r  r0  )r   r  msg_mboxMMDFrT  rU  rV  r   r   r   r   test_mboxmmdf_to_maildir  s   


z.TestMessageConversion.test_mboxmmdf_to_maildirc                 C   sl   t jt jfD ]-}|t}|d |d t jt jfD ]}||}| | d | | d qqd S )NrQ  r$  )	r
   r+   r.   rH   r/  r%  r   r1  r  )r   r  r^  Zclass2_r7  r   r   r   test_mboxmmdf_to_mboxmmdf  s   

z/TestMessageConversion.test_mboxmmdf_to_mboxmmdfc              	   C   s   t jt jfD ]9}|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 | | q*qd S )
NrN  r]  r  r  r  r  rO  r  rQ  )r
   r+   r.   rH   r/  r   r,   r  )r   r  r^  rT  rU  rV  r   r   r   test_mboxmmdf_to_mh   s   



z)TestMessageConversion.test_mboxmmdf_to_mhc              	   C   s   t jt jfD ]9}|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 | | q*qd S )
NrN  r]  r  r  r[  r  rO  r  rQ  )r
   r+   r.   rH   r/  r   r-   r  )r   r  r   rT  rU  rV  r   r   r   test_mboxmmdf_to_babyl  s   


z,TestMessageConversion.test_mboxmmdf_to_babylc                 C   s   d}|D ]$\}}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,   rH   r  r   r*   r1  r0  r   rT  rU  rV  r   r   r   r   test_mh_to_maildir  s   





z(TestMessageConversion.test_mh_to_maildirc                 C   s   d}|D ]!\}}t t}|| t jt jfD ]}| || | qqt t}|d |d |d t jt jfD ]}| || d q@d S )N)r  r]  )r  ROA)r  ZROFr  r  r  ZOFA)r
   r,   rH   r  r+   r.   r   r1  )r   rT  rU  rV  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,   rH   r  r   r  r   r   r   r   test_mh_to_mh7  s   



z#TestMessageConversion.test_mh_to_mhc                 C   s   ddgfddgfdg ff}|D ]\}}t t}|| | t | | qt t}|d |d |d | t | ddg d S )Nr  r  r  r  )r
   r,   rH   r  r   r-   r  re  r   r   r   test_mh_to_babyl@  s   





z&TestMessageConversion.test_mh_to_babylc                 C   s   d}|D ]$\}}t t}|| | t | | | t | d qt t}dD ]}|| q0| t | d | t | d d S )N)rc  )r[  ZST)r  r5  )r  rd  )rZ  PS)editedr5  )r2  rl  r)  r  r[  r  r  rZ  rm  r2  ZPRT)r
   r-   rH   r  r   r*   r1  r0  r   rT  rU  rV  r   labelr   r   r   test_babyl_to_maildirO  s   


z+TestMessageConversion.test_babyl_to_maildirc                 C   s   d}|D ]!\}}t jt jfD ]}t t}|| | || | qqt t}dD ]}|| q-t jt jfD ]}| || d q;d S )N)rg  )r[  ZROD)r  r(  )r  rh  )rZ  r(  )rm  r(  )r2  r(  rn  ZODA)r
   r+   r.   r-   rH   r  r   r1  )r   rT  rU  rV  r  r   rp  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 ]\}}t t}|| | t | | qt t}d	D ]}|| q<| t | ddg d S )
Nr  r[  r  r  r  rZ  rm  r2  rn  )r
   r-   rH   r  r   r,   r  ro  r   r   r   test_babyl_to_mhq  s   


z&TestMessageConversion.test_babyl_to_mhc                 C   s   t t}|  dD ]}|| qt |}| | g d | |  |   |  D ]}| | | | |  q6d S )Nrn  )	r
   r-   rH   r8  r  r   r  r7  rQ   )r   r   rp  r7  r   r   r   r   test_babyl_to_babyl  s   

z)TestMessageConversion.test_babyl_to_babylN)r'   r(   r)   r>  r?  r@  rB  rG  rK  rW  rY  r\  r_  r`  ra  rb  rf  ri  rj  rk  rq  rr  rs  rt  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      barr;   s   arr<   s   ba     r)rv   r   rk   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      foorv     fred   bobr<      or@   s   fris   ed)r   rm   rU   rv   r   readliner   r   r{  rm   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   r}  rv  r~  r  r<   r=   r>   rx  )r   rm   rU   rv   r   r  r   r  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   r}  rv  r~  r  )	r   rm   rU   rv   iterr   nextrf   StopIteration)r   r{  rm   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=   r<   r;   ry  rw  rv  r   r  d   )	r   rm   rU   rv   r   tellrk   r   r   r  r   r   r   _test_seek_and_tell  s   


z%TestProxyFileBase._test_seek_and_tellc                 C   s8   |  |j |  | |j |  | |j d S r   )r   r  r8   r   rz  r   r   r   _test_close  s
   zTestProxyFileBase._test_closeN)	r'   r(   r)   r|  r  r  r  r  r  r   r   r   r   ru    s    ru  c                   @   T   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      t j| _t| jd| _d S Nrr   r   r1   r2   r^  r  r5   r   r   r   r6        zTestProxyFile.setUpc                 C   r7   r   r  r8   r&   r2   r5   r   r   r   r9     r:   zTestProxyFile.tearDownc                 C   sx   | j d | j  }t| j }| | | | | j  | t| j d}| | d | | j  | d S )Nr}  r   )r  ru   r  r
   
_ProxyFiler   )r   posZproxy0Zproxy1r   r   r   test_initialize  s   
zTestProxyFile.test_initializec                 C   s"   | j d | t| j  d S )Nrv  )r  ru   r|  r
   r  r5   r   r   r   	test_read  s   zTestProxyFile.test_readc                 C   8   | j tdtjtjtjf d | t| j  d S Nzfoo%sbar%sfred%sbobr   )r  ru   bytesr   rm   r  r
   r  r5   r   r   r   test_readline     zTestProxyFile.test_readlinec                 C   r  r  )r  ru   r  r   rm   r  r
   r  r5   r   r   r   test_readlines  r  zTestProxyFile.test_readlinesc                 C   r  r  )r  ru   r  r   rm   r  r
   r  r5   r   r   r   test_iteration  r  zTestProxyFile.test_iterationc                 C   4   | j tdtjtjf d | t| j  d S Nz
foo%sbar%sr   )r  ru   r  r   rm   r  r
   r  r5   r   r   r   test_seek_and_tell     z TestProxyFile.test_seek_and_tellc                 C   r  r  )r  ru   r  r   rm   r  r
   r  r5   r   r   r   r     r  zTestProxyFile.test_closeNr'   r(   r)   r6   r9   r  r  r  r  r  r  r   r   r   r   r   r    s    r  c                   @   r  )TestPartialFilec                 C   r  r  r  r5   r   r   r   r6     r  zTestPartialFile.setUpc                 C   r7   r   r  r5   r   r   r   r9     r:   zTestPartialFile.tearDownc                 C   s\   | j tdtj d d | j  }t| j dd}| | d | | j  | d S )Nr   r   r   r<   r?   r   )	r  ru   r  r   rm   r  r
   _PartialFiler   )r   r  r{  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  ru   r  r|  r
   r  r5   r   r   r   r  '  s   zTestPartialFile.test_readc              
   C   J   | 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  ru   r  r   rm   r  r
   r  r   r5   r   r   r   r  +     

zTestPartialFile.test_readlinec              
   C   r  )Nzfoo%sbar%sfred%sbob?????r   r      r=   )	r  ru   r  r   rm   r  r
   r  r   r5   r   r   r   r  1  r  zTestPartialFile.test_readlinesc              
   C   r  )Nz____foo%sbar%sfred%sbob####r   r>      r=   )	r  ru   r  r   rm   r  r
   r  r   r5   r   r   r   r  7  r  zTestPartialFile.test_iterationc              
   C   F   | 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=   	   r<   )	r  ru   r  r   rm   r  r
   r  r   r5   r   r   r   r  =     
z"TestPartialFile.test_seek_and_tellc              
   C   r  )Nz&foo%sbar%s^r   r;   r@   r=   )	r  ru   r  r   rm   r  r
   r  r   r5   r   r   r   r   B  r  zTestPartialFile.test_closeNr  r   r   r   r   r    s    r  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&  r4  r;   )r   r1   _dirr   r    r!   r"   isfiler$   r?  r(  _counter	_msgfilesr5   r   r   r   r6   U  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&  r4  )
r   mapr   r$   r  r   rmdirr    r(  r  r5   r   r   r   r9   c  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dd	}| j	
| |rF|t |t W d    n1 sUw   Y  zt|| W n% ttfy   t|d}|t W d    n1 sw   Y  Y nw | j	
| |S )
Ni@B r;   .Z
myhostnameZmydomainr&  r\  rA   rB   )r   r`  r  r(  strr   r    r  r^  r  rE   ru   FROM_DUMMY_MESSAGElinkAttributeErrorPermissionError)	r   dirr  trn  r  ZtmpnameZnewnamefpr   r   r   createMessagej  s,   
zMaildirTestCase.createMessagec                 C   s4   	 t tj| _| | j  | | j  d S r   )r
   r  r   r1   r  r   r  r5   r   r   r   test_empty_maildir~  s   z"MaildirTestCase.test_empty_maildirc                 C   L   |  d ttj| _| | j  | | j  | | j  d S )Nr)  	r  r
   r  r   r1   r  rk  r  r   r5   r   r   r   test_nonempty_maildir_cur  
   
z)MaildirTestCase.test_nonempty_maildir_curc                 C   r  )Nr4  r  r5   r   r   r   test_nonempty_maildir_new  r  z)MaildirTestCase.test_nonempty_maildir_newc                 C   sf   |  d |  d ttj| _| | j  | | j  | | j  | | j  d S )Nr)  r4  r  r5   r   r   r   test_nonempty_maildir_both  s   

z*MaildirTestCase.test_nonempty_maildir_bothN)F)
r'   r(   r)   r6   r9   r  r  r  r  r  r   r   r   r   r  S  s    

r  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Return-Pathz<gkj@gregorykjohnson.com>zX-Original-Tozgkj+person@localhostzDelivered-ToZReceivedzfrom 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)r4  zWed, 13 Jul 2005 17:23:11 -0400r  z."Gregory K. Johnson" <gkj@gregorykjohnson.com>r5  zgkj@gregorykjohnson.comr6  zSample messagezMime-Versionz1.0zContent-Typez,multipart/mixed; boundary="NMuMz9nt05w80d4+"zContent-DispositionZinliner3  zMutt/1.5.9i)z1This is a sample message.

--
Gregory K. Johnson
zRH4sICM2D1UIAA3RleHQAC8nILFYAokSFktSKEoW0zJxUPa7wzJIMhZLyfIWczLzUYj0uAHTs
3FYlAAAA
c                   @   r  )MiscTestCasec                 C   s   t j| tddhd d S )Nrm   fcntl)Znot_exported)r   Zcheck__all__r
   r5   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  r  r  __main__)8r   r"  r`  rD  re  r   Zemail.messagerh  rJ   rs   testr   Ztest.supportr   r  r  r
   r  r   r0   ZTestCaser	  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r*  r,  r1  r;  r<  ru  r  r  r  r  r  rH   rU   rL   r   r   r  r  r'   mainr   r   r   r   <module>   s       }$  ]) . "	
VJ07  S15R
/

