HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/thread-self/root/usr/local/lib/python3.7/test/__pycache__/test_mailbox.cpython-37.pyc
B

��g�j�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlZddl
Z
ddlZddlZGdd�d�ZGdd�de�ZGdd�deej�ZGd	d
�d
eej�ZGdd�de�ZGd
d�de�ZGdd�deej�ZGdd�deej�ZGdd�deej�ZGdd�deej�ZGdd�d�ZGdd�dej�ZGdd�dej�ZGdd�deej�ZGdd �d eej�Z Gd!d"�d"�Z!Gd#d$�d$e!e�Z"Gd%d&�d&eej�Z#Gd'd(�d(eej�Z$Gd)d*�d*e!e�Z%Gd+d,�d,eej�Z&Gd-d.�d.e�Z'Gd/d0�d0e'ej�Z(Gd1d2�d2e'ej�Z)d3Z*d4Z+Gd5d6�d6ej�Z,d7Z-e-�.d8�Z/d9d:d:d;d<d=d>d?d@dAdBdCdDdEdFdGdH�Z0dIZ1GdJdK�dKej�Z2dLdM�Z3e4dNk�r�e3�dS)O�N)�supportc@s8eZdZejejejejejej	fZ
dd�Zdd�ZdS)�TestBasecCs�|�|tjj�|�|tj�x&t��D]\}}|�||�|��q(W|�	|�
��|�t|�
��tt��xLtt�D]@\}}|�
|�}|�|tjj�|�|tj�|�|�
�|�qvWdS)N)�assertIsInstance�email�message�Message�mailbox�_sample_headers�items�assertInZget_all�
assertTrue�is_multipart�assertEqual�len�get_payload�_sample_payloads�	enumerateZassertNotIsInstance)�self�msg�key�value�iZpayload�part�r�-/usr/local/lib/python3.7/test/test_mailbox.py�
_check_samples
zTestBase._check_samplecCs2tj�|�rt�|�ntj�|�r.t�|�dS)N)�os�path�isdirr�rmtree�exists�unlink)r�targetrrr�_delete_recursively&szTestBase._delete_recursivelyN)
�__name__�
__module__�__qualname__rr�MaildirMessage�mboxMessage�	MHMessage�BabylMessage�MMDFMessage�all_mailbox_typesrr#rrrrrs
rc@s�eZdZdZdZdZdd�Zdd�Zdd�Ze	�
d	�Zd
d�Zdd
�Z
dd�Zdd�Ze	�
d��d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zdcd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�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�Z8dS)h�TestMailboxNzFrom: foo

%s
cCs&tj|_|�|j�|�|j�|_dS)N)r�TESTFN�_pathr#�_factory�_box)rrrr�setUp5szTestMailbox.setUpcCs|j��|�|j�dS)N)r1�closer#r/)rrrr�tearDown:s
zTestMailbox.tearDownc
Cs�g}|�|j�|jd��|�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
����WdQRX|�t|j�d�|�|j�|d�|jd�x"d	D]}|�|j||��q^WdS)
Nr�������)r5r6r7r8r9r:)�appendr1�add�	_templaterrrr�_sample_messager�message_from_string�io�BytesIO�_bytes_sample_message�assertWarns�DeprecationWarning�
TextIOWrapper�
get_stringr)r�keysrrrr�test_add>s(

zTestMailbox.test_addu{            From: foo
            Subject: Falinaptár házhozszállítással. Már rendeltél?

            0
            cCsF|j�|j�d��}|�t|j�d�|�|j�|�|j�d��dS)Nzlatin-1r5)r1r=�
_nonascii_msg�encoderr�	get_bytes)rrrrr�"test_add_invalid_8bit_bytes_header\sz.TestMailbox.test_add_invalid_8bit_bytes_headercCs8|j��d}|j�|�d��}|�|j�|�d�dS)Nr5zlatin-1zZSubject: =?unknown-8bit?b?RmFsaW5hcHThciBo4Xpob3pzeuFsbO104XNzYWwuIE3hciByZW5kZWx06Ww/?=

)rJ�
splitlinesr1r=rKrrG)rZsubjrrrr�&test_invalid_nonascii_header_as_stringbsz2TestMailbox.test_invalid_nonascii_header_as_stringc	CsN|�td��|j�|j�WdQRX|j��|�t|j�d�|��dS)Nz
ASCII-onlyr)	�assertRaisesRegex�
ValueErrorr1r=rJ�flushrr�assertMailboxEmpty)rrrr�&test_add_nonascii_string_header_raisesis

z2TestMailbox.test_add_nonascii_string_header_raisesc	Csldd�}t�|tjjd|�|�t��|j�t�	d��WdQRX|�
t|j�d�|j��|�
�dS)Nc_std��dS)Nza fake error)�	Exception)�args�kwrrr�raiserqszETestMailbox.test_add_that_raises_leaves_mailbox_empty.<locals>.raiserZflattenuFrom: Alphösor)rZpatchr�	generatorZBytesGenerator�assertRaisesrUr1r=r@rrr3rS)rrXrrr�)test_add_that_raises_leaves_mailbox_emptyps
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

        Да, они летят.
        zutf-8c	Csv|j�|j�}|�|j�|�|j�|j�|��&}|�|��|j�dtj	�
���WdQRX|�|j|��d�dS)N�
uДа, они летят.
)r1r=�_non_latin_bin_msgrrL�get_file�read�replacer�lineseprKr)rr�frrr�test_add_8bit_body�s
zTestMailbox.test_add_8bit_bodyc	CsZt�d��&}|�t�|�d�|j�|�}WdQRX|�|j�|��	d�t�	d��dS)Nzwb+rr\)
�tempfile�
TemporaryFile�writerC�seekr1r=rrL�split)rrbrrrr�test_add_binary_file�s

z TestMailbox.test_add_binary_filec	Cs^t�d��(}|�|j�|�d�|j�|�}WdQRX|�|j�|��	d�|j�	d��dS)Nzwb+rr\)
rdrerfr]rgr1r=rrLrh)rrbrrrr�test_add_binary_nonascii_file�s
z)TestMailbox.test_add_binary_nonascii_filec
Cspt�d��<}|�t�|�d�|�t��|j�|�}WdQRXWdQRX|�	|j�
|��d�t�d��dS)Nzw+rr\)
rdrerfr?rgrDrEr1r=rrLrhrC)rrbrrrr�test_add_text_file_warns�s

 z$TestMailbox.test_add_text_file_warnsc	CsL|�t��|j�t�|jd��}WdQRX|�|j�|�|jd�dS)N�0)	rDrEr1r=rA�StringIOr>rrG)rrrrr�test_add_StringIO_warns�s"z#TestMailbox.test_add_StringIO_warnsc
Csj|�t��2|�td��|j�t�|j��WdQRXWdQRX|�	t
|j�d�|j��|��dS)Nz
ASCII-onlyr)
rDrErPrQr1r=rArmrJrrr3rS)rrrr�!test_add_nonascii_StringIO_raises�s(
z-TestMailbox.test_add_nonascii_StringIO_raisescCs|�|jj�dS)N)�_test_remove_or_delitemr1�remove)rrrr�test_remove�szTestMailbox.test_removecCs|�|jj�dS)N)rpr1�__delitem__)rrrr�test_delitem�szTestMailbox.test_delitemcsd�j��jd���j��jd����t�j�d������t�j�d���t��fdd����t��fdd�����j����jd��j��jd����t�j�d������t�j�d���t��fdd����t��fdd�����j����jd������t�j�d���t��fd	d����t��fd
d��dS)Nrr5r6cs
�j�S)N)r1r)�key0rrr�<lambda>��z5TestMailbox._test_remove_or_delitem.<locals>.<lambda>cs���S)Nrr)ru�methodrrrv�rwcs
�j�S)N)r1r)�key2rrrrv�rwcs���S)Nrr)ryrxrrrv�rwcs
�j�S)N)r1r)�key1rrrrv�rwcs���S)Nrr)rzrxrrrv�rw)r1r=r>rrrZ�KeyErrorrG)rrxr)rurzryrxrrrp�s&z#TestMailbox._test_remove_or_delitem�
cs��j��jd���j��jd�}��t�j�d��j�����t�j�d���t��fdd���j�����t�j�d���t��fdd��dS)Nrr5r6cs
�j�S)N)r1r)rurrrrv�rwz*TestMailbox.test_discard.<locals>.<lambda>cs
�j�S)N)r1r)rurrrrv�rw)r1r=r>rr�discardrZr{)r�repetitionsrzr)rurr�test_discard�szTestMailbox.test_discardcCs�|j�|jd�}|j�|�}|�|dd�|�|��d�|�|j�d��|�|j�dd�d�|j��|�	|j
�|_|j�|jd�}|j�|�}|�|dd�|�|��d�dS)Nr�from�fooz0
Fr5z1
)r1r=r>�getrr�assertIsNone�assertIsr3r0r/)rrurrzrrr�test_get�s
zTestMailbox.test_getcsv�j��jd���j�}��|dd���|��d���t�fdd���j�����t��fdd��dS)Nrr�r�z0
cs
�jdS)Nr�)r1r)rrrrv�rwz*TestMailbox.test_getitem.<locals>.<lambda>cs
�j�S)N)r1r)rurrrrv�rw)r1r=r>rrrZr{r})rrr)rurr�test_getitem�s
zTestMailbox.test_getitemcCsn|j�|jd�}|j�t�}|j�|�}|�|tj�|�|dd�|�|�	�d�|�
|j�|��dS)Nrr�r�z0
)r1r=r>r?�get_messagerrrrrr)rrurz�msg0rrr�test_get_message�szTestMailbox.test_get_messagecCsV|j�|jd�}|j�t�}|�|j�|�|jd�d��|�|j�|�t�dS)Nr�ascii)r1r=r>r?rrLrKrC)rrurzrrr�test_get_bytess
zTestMailbox.test_get_bytescCs\|j�|jd�}|j�t�}|�|j�|�|jd�|�|j�|��d�t�d��dS)Nr�
)r1r=r>r?rrGrh)rrurzrrr�test_get_strings
zTestMailbox.test_get_stringc	Cs�|j�|jd�}|j�t�}|j�|��}|��}WdQRX|j�|��}|��}WdQRX|�|�d��t	j
d�|jd�|�|�d��t	j
d�t�dS)Nrr�r�)r1r=r>r?r^r_r�decoder`rra)rrurz�fileZdata0Zdata1rrr�
test_get_fileszTestMailbox.test_get_filecCs,|j�t�}|j�|�}|��|��dS)N)r1r=r?r^r3)rrrbrrr�!test_get_file_can_be_closed_twice!sz-TestMailbox.test_get_file_can_be_closed_twicecCs|j|jjddd�dS)NTF)�do_keys�	do_values)�_check_iterationr1�iterkeys)rrrr�
test_iterkeys(szTestMailbox.test_iterkeyscCs|j|jjddd�dS)NTF)r�r�)r�r1rH)rrrr�	test_keys,szTestMailbox.test_keyscCs|j|jjddd�dS)NFT)r�r�)r�r1�
itervalues)rrrr�test_itervalues0szTestMailbox.test_itervaluescCs|j|jjddd�dS)NFT)r�r�)r�r1�__iter__)rrrr�	test_iter5szTestMailbox.test_itercCs|j|jjddd�dS)NFT)r�r�)r�r1�values)rrrr�test_values:szTestMailbox.test_valuescCs|j|jjddd�dS)NT)r�r�)r�r1�	iteritems)rrrr�test_iteritems>szTestMailbox.test_iteritemscCs|j|jjddd�dS)NT)r�r�)r�r1r
)rrrr�
test_itemsCszTestMailbox.test_itemsc
Cs<x|�D]}|�d�qWgg}}x8t|�D],}|�|j�|j|��|�|j|�q.W|rr|srt|��}	nF|r�|s�t|��}
n2gg}	}
x&|�D]\}}|	�|�|
�|�q�W|r�|�t|�t|	��|�t	|�t	|	��|�r8d}x8|
D]0}|�|dd�|�
t|���|�|d7}q�W|�t|�|�dS)Nz	Not emptyrr�r�r5)
Zfail�ranger<r1r=r>�listrr�set�
assertLess�intr)
rrxr�r�r~rrHr�rZ
returned_keysZreturned_valuesr�countrrrr�Gs0



zTestMailbox._check_iterationcCs�|�d|j�|j�|jd�}|�||j�|�d|j�|j�|jd�}|�||j�|�||j�|�d|j�|j�|�|�||j�|�||j�|�d|j�|j�|�|�||j�|�||j�|�d|j�dS)Nr�rr5)�assertNotInr1r=r>rrq)rrurzrrr�
test_containsbs zTestMailbox.test_containscCs�g}xPt|�D]D}|�t|j�|�|�|j�|j|��|�t|j�|d�qWxPt|�D]D}|�t|j�||�|j�||�|�t|j�||d�q`WdS)Nr5)r�rrr1r<r=r>rq)rr~rHrrrr�test_lenuszTestMailbox.test_lencs^�j��jd�}���j�|��jd��j��jd�}���j�|��jd��jd�j|<���j�|��jd��jd�j|<���j�|��jd�t�j|<���j|��j|�j|<���j|��jd�j|<���j�|��jd����j|���t�fdd����t�fdd����t	�j�d�dS)	Nz
original 0z
original 1z	changed 0z	changed 1cs�j�dd�S)Nr��bar)r1�__setitem__r)rrrrv�rwz+TestMailbox.test_set_item.<locals>.<lambda>cs
�jdS)Nr�)r1r)rrrrv�rwr6)
r1r=r>rrGr?rrZr{r)rrurzr)rr�
test_set_item�s0
zTestMailbox.test_set_itemcs�g}x"t|�D]}�j��j|�qWx.t|�D]"\}����j����j|�q2W�j����t�j�d�x*t|�D]\}���	t
��fdd��q~WdS)Nrcs�j���S)N)r1rGr)rrrrrv�rwz(TestMailbox.test_clear.<locals>.<lambda>)r�r1r=r>rrrG�clearrrZr{)r�
iterationsrHrr)rrr�
test_clear�s
zTestMailbox.test_clearcCs|j�|jd�}|�||j�|j�|jd�}|�||j�|�|j�|���d�|�||j�|�||j�|j�|jd�}|�||j�|�|j�|���d�|�||j�|�||j�|�|j�|���d�|�||j�|�t|j�d�dS)Nrr5z0
r6z2
z1
)	r1r=r>rr�poprr�r)rrurzryrrr�test_pop�szTestMailbox.test_popcs�g}x(td�D]}|��j��j|��qWg}xZtd�D]N}�j��\�}���|����|�|�����t	|�
��|����q<W��t�j�d�x"|D]���
t��fdd��q�WdS)Nr|rcs
�j�S)N)r1r)rrrrrv�rwz*TestMailbox.test_popitem.<locals>.<lambda>)r�r<r1r=r>�popitemrr�rr�r�indexrrZr{)rr�rHr�seenrr)rrr�test_popitem�s

zTestMailbox.test_popitemcs��j��jd���j��jd�}�j��jd�}�j���jd|ti���t�j�d����j����jd����j�|��jd����j|��j�|�jdf|�jdf��jdfg���t�j�d����j����jd����j�|��jd����j�|��jd���	t
��fdd	����t�j�d����j����jd����j�|��jd����j�|��jd�dS)
Nz
original 0z
original 1z
original 2z	changed 0r7z	changed 2z	changed 1cs�j�dd��jdi�S)Nr�r�z	changed 0)r1�updater>r)rurrrrv�s
z)TestMailbox.test_update.<locals>.<lambda>)r1r=r>r�r?rrrGrrZr{)rrzryr)rurr�test_update�s<
zTestMailbox.test_updatecCs|�|jjd�dS)NT)�_test_flush_or_closer1rR)rrrr�
test_flush�szTestMailbox.test_flushcCsZ|j�|jd�|j�|jd�|j��|j��|j��|j��|j��dS)Nrr5)r1r=r>rRr�)rrrr�test_popitem_and_flush_twice�s



z(TestMailbox.test_popitem_and_flush_twicecCsZ|�tj�|����|j��|�tj�|����|j��|�tj�|����dS)N)	�assertFalserrr �_get_lock_pathr1�lockr�unlock)rrrr�test_lock_unlock�s


zTestMailbox.test_lock_unlockcCs|�|jjd�dS)NF)r�r1r3)rrrr�
test_closeszTestMailbox.test_closecs��fdd�td�D�}�j�|d��j�|d��j�|d��j}|�|r`�j�����j��_�j��}��t|�d�x |D]}��	�j�
|�|�q�W|��dS)Ncsg|]}�j|�qSr)r>)�.0r)rrr�
<listcomp>sz4TestMailbox._test_flush_or_close.<locals>.<listcomp>r7rr5r6)r�r1r=r3r0r/rHrrrrG)rrxZshould_call_close�contentsZoldboxrHrr)rrr�s


z TestMailbox._test_flush_or_closec	svxRt�t�tt�t�fD]8}t����j�|������	�t�
dtj�
���qWt�����t��fdd��dS)Nr\cs�j�d��S)N)r1�
_dump_messager)�outputrrrrv!rwz/TestMailbox.test_dump_message.<locals>.<lambda>)rr@r?rArBrCr1r�r�getvaluer`rrarKrZ�	TypeError)r�inputr)r�rr�test_dump_messages

zTestMailbox.test_dump_messagecCs
|jdS)Nz.lock)r/)rrrrr�#szTestMailbox._get_lock_path)r|)r|)r|)r|)r|)9r$r%r&ZmaxDiffr0r>r2r4rI�textwrap�dedentrJrMrOrTr[rKr]rcrirjrkrnrorrrtrprr�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�rrrrr-.sj

	







"r-c@seZdZdd�ZdS)�TestMailboxSuperclasscsRt�d��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fd	d��|�t�fd
d��|�t�fdd��|�t�fdd��|�t�fd
d��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��dS) Nrcs
��d�S)N�)r=r)�boxrrrv-rwz;TestMailboxSuperclass.test_notimplemented.<locals>.<lambda>cs
��d�S)Nr�)rqr)r�rrrv.rwcs
��d�S)Nr�)rsr)r�rrrv/rwcs
��d�S)Nr�)r}r)r�rrrv0rwcs��dd�S)Nr�)r�r)r�rrrv1rwcs���S)N)r�r)r�rrrv2rwcs���S)N)rHr)r�rrrv3rwcs�����S)N)r��__next__r)r�rrrv4rwcs�����S)N)r�r�r)r�rrrv5rwcs���S)N)r�r)r�rrrv6rwcs�����S)N)r�r�r)r�rrrv7rwcs���S)N)r
r)r�rrrv8rwcs
��d�S)Nr�)r�r)r�rrrv9rwcs
��d�S)Nr�)�__getitem__r)r�rrrv:rwcs
��d�S)Nr�)r�r)r�rrrv;rwcs
��d�S)Nr�)rGr)r�rrrv<rwcs
��d�S)Nr�)rLr)r�rrrv=rwcs
��d�S)Nr�)r^r)r�rrrv>rwcsd�kS)Nr�rr)r�rrrv?rwcs
��d�S)Nr�)�__contains__r)r�rrrv@rwcs���S)N)�__len__r)r�rrrvArwcs���S)N)r�r)r�rrrvBrwcs
��d�S)Nr�)r�r)r�rrrvCrwcs���S)N)r�r)r�rrrvDrwcs
��d�S)N))r�r�)r�r)r�rrrvErwcs���S)N)rRr)r�rrrvFrwcs���S)N)r�r)r�rrrvGrwcs���S)N)r�r)r�rrrvHrwcs���S)N)r3r)r�rrrvIrw)r�MailboxrZ�NotImplementedError)rr)r�r�test_notimplemented*s<
z)TestMailboxSuperclass.test_notimplementedN)r$r%r&r�rrrrr�(sr�c@seZdZd7dd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zd8dd�Zdd�Z
dd�Zdd�Zdd�Zd9dd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Ze�eed-�d.�e�eed/�d0�d1d2���Ze�eed-�d.�e�eed/�d0�d3d4���Zd5d6�ZdS):�TestMaildirNcCst�||�S)N)r�Maildir)rr�factoryrrrrvNrwzTestMaildir.<lambda>cCs*t�|�tjdkstjdkr&d|j_dS)N�nt�cygwin�!)r-r2r�name�sys�platformr1�colon)rrrrr2Ps
zTestMaildir.setUpcCs"|�t�tj�|jd��g�dS)N�tmp)rr�listdirr�joinr/)rrrrrSUszTestMaildir.assertMailboxEmptycCs`t�|jd�}|�d�|�d�|j�|�}|�tj	�
tj	�|jdd||jj
f���dS)Nr�curr�z%s%sfoo)rr'r>�
set_subdir�set_infor1r=rrrr r�r/r�)rrrrrr�test_add_MMXs

zTestMaildir.test_add_MMcCsnt�|jd�}|�d�|�d�|j�|�}|j�|�}|�|tj�|�	|�
�d�|�	|��d�dS)Nrr��RF�FR)rr'r>r��	set_flagsr1r=r�rr�
get_subdir�	get_flags)rrr�msg_returnedrrr�test_get_MMas

zTestMaildir.test_get_MMcCst�|jd�}|�d�|j�|�}|j�|�}|�|��d�|�|�	�d�t�|jd�}||j|<|j�|�}|�|��d�|�|�	�d�|�|�
�d�t�|jd�}|�d	�||j|<|jd
|j|<|j�|�}|�|��d�|�|�	�d�|�|�
�d�dS)
NrZTP�newZPTr5r�z1
r6z2,Sr7�Sz3
)rr'r>r�r1r=r�rr�r�rr�)rr�rr��msg1�msg2rrr�test_set_MMls(



zTestMaildir.test_set_MMcCsvt�|jd�}|�d�|�d�|j�|�}Gdd�dtj�}tj|j|d�}|jj	|_	|�
|�}|�||�dS)Nrr�r�c@seZdZdS)z8TestMaildir.test_consistent_factory.<locals>.FakeMessageN)r$r%r&rrrr�FakeMessage�sr�)r�)rr'r>r�r�r1r=r�r/r�r�r)rrrr�r�r�rrr�test_consistent_factory�s



z#TestMaildir.test_consistent_factorycCsH|��t�|j�|_|��|�|j�|j|jdd�|_|��dS)N)r�)r4rr�r/r1�
_check_basicsr#r0)rrrr�test_initialize_new�szTestMaildir.test_initialize_newc	CsN|��x*dD]"}t�tj�tj�|j|���qWt�|j�|_	|�
�dS)N)r�r�r�r�)r4r�mkdirr�normpathr�r/rr�r1r�)r�subdirrrr�test_initialize_existing�s

"z$TestMaildir.test_initialize_existingcCsr|�|jjtj�|j��|�|jj|�xBdD]:}tj�|j|�}t�|�tj	}|�
t�|�d|�q0WdS)N)r�r�r�r�zNot a directory: '%s')rr1r/rr�abspathr0r��stat�ST_MODEr�S_ISDIR)rr�r�r�moderrrr��s
zTestMaildir._check_basicscCsX|j�d�|j�d�|j�d�|�t|j���d�|�t|j���td��dS)N�one�two�threer7)rrr)r1�
add_folderrr�list_foldersr�)rrrr�test_list_folders�szTestMaildir.test_list_folderscCsv|j�d�|j�d�}|�|jd�|�tj�tj�	|j
d���|j�d�}|�|�|�
�d�|jd�dS)Nzfoo.barr�z.foo.barr)r1r�
get_folderr=r>rrrrr�r/rrGrH)r�folder0�folder1rrr�test_get_folder�szTestMaildir.test_get_foldercCs4|j�d�|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d	�|�|j��g�dS)
Nrrr6)rrr5)rr)rrr)r1rrrrr��
remove_folder)rrrr�test_add_and_remove_folders�s z'TestMaildir.test_add_and_remove_foldersc	Cs�tj�|jdd�}tj�|jdd�}t|d��}|�d�WdQRXt|d��}|�d�WdQRX|j��|�tj�	|��|�tj�	|��t�
|�}t�|t��dd|j
f�|j��|�tj�	|��|�tj�	|��dS)Nr�r�r��w�@i@�r6)rrr�r/�openrfr1Zcleanrr r��utime�time�st_mtimer�)rZfoo_pathZbar_pathrbZfoo_statrrr�
test_clean�s



zTestMaildir.test_cleanr|c

Cst��}d|kr|�dd�}d|kr0|�dd�}t��}t�d�}d}�x�t|�D�]�}|j�	�}tj
�|j�\}}	|�
|tj
�tj
�|jd��d|�|�|	�}
|�|
d|	�|
��}|dk	�r�|�t|d	�t|d	�d
|d	|d	f�t|d	�t|d	�k�r<|�t|d�t|d�d|d|df�|�
t|d
�|d|d
|f�|�
t|d�t|d�dd|d|df�|�
|d|d|d|f�|}|�t�|�d	�|�
|��t�|��qRWtt�tj
�|jd���}|�
||d||f�dS)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�zFile in wrong location: '%s'zInvalid file name: '%s'rz'Non-monotonic seconds: '%s' before '%s'r5z,Non-monotonic milliseconds: '%s' before '%s'r6z(Process ID mismatch: '%s' should be '%s'r7z(Non-sequential counter: '%s' before '%s'r8z'Host name mismatch: '%s' should be '%s'z%Wrong file count: '%s' should be '%s')�socketZgethostnamer`r�getpid�re�compiler�r1Z_create_tmprrhr�rr�r�r/�match�assertIsNotNone�groupsZassertGreaterEqualr�rfrCrgr_r3rr�)
rr~Zhostname�pid�patternZprevious_groups�xZtmp_file�head�tailrrZ
file_countrrr�test_create_tmp�sV






zTestMaildir.test_create_tmpcCs|�|jji�|j�|jd�}|j�|jd�}|�|jji�|j��|�|jj|tj�d|�|tj�d|�i�|j�|jd�}|�|jj|tj�d|�|tj�d|�i�|j��|�|jj|tj�d|�|tj�d|�|tj�d|�i�dS)Nrr5r�r6)	rr1�_tocr=r>�_refreshrrr�)rrurzryrrr�test_refreshs

zTestMaildir.test_refreshcCsx|j�|jd�}|j�|jd�}|�|j�|_|�|jji�d|j_|j��|�t	|jj�
��t	||g��dS)Nrr5���)r1r=r>r0r/rr"�_skewfactorr#�sortedrH)rrurzrrr� test_refresh_after_safety_period$s
z,TestMaildir.test_refresh_after_safety_periodcs���t�fdd���j��jd�����j���tj�	d���t�
tj�	�jd������jj�tj�	d��i��j�
���t��fdd�����jji�dS)Ncs�j�d�S)Nr�)r1�_lookupr)rrrrv9rwz)TestMaildir.test_lookup.<locals>.<lambda>rr�cs�j���S)N)r1r)r)rurrrrvArw)rZr{r1r=r>rr)rrr�rqr/r"rR)rr)rurr�test_lookup7s
zTestMaildir.test_lookupcCs|j��|j��dS)N)r1r�r�)rrrrr�Ds
zTestMaildir.test_lock_unlockcCsLdd�}|j|j|d�}|�d�}|�|j|�|�d�}|�|j|�dS)NcSsdS)Nr)�srrr�
dummy_factoryLsz.TestMaildir.test_folder.<locals>.dummy_factory)r�r)r0r/rr�r)rr,r�ZfolderZ
folder1_aliasrrr�test_folderIs

zTestMaildir.test_foldercCsPx"td�D]}|j�t�t��q
Wt�tj�	|j
dd��x|jD]}qDWdS)Nr|r�z	stray-dir)r�r1r=rrr?rr�rr�r/)rrrrrr�test_directory_in_folderUs
z$TestMaildir.test_directory_in_folder�umaskztest needs os.umask()r�ztest needs os.stat()c	Csnt�|jd�}t�d�}z|j�|�}Wdt�|�Xtj�|j	|j�
|��}t�|�j}|�
|d@�dS)Nr�I)rr'r>rr/r1r=rr�r/r)r��st_moder�)rr�
orig_umaskrrr�rrr�test_file_permissionsbs
z!TestMaildir.test_file_permissionsc	CsZt�d�}z|j�d�}Wdt�|�Xtj�|jd�}t�|�}|j}|�	|d@�dS)Nr�	subfolderZ
maildirfolderr0)
rr/r1rrr�r/r�r1r�)rr2r4r�st�permsrrr�test_folder_file_permsps

z"TestMaildir.test_folder_file_permscs��j��x4dD],}t�tj��jj|�t��dfd�qWd�j_�jj	���fdd�}�j����
|��tj��jdd�}t�|�t�
|��j����|��dS)	N)r�r�r9r6r%cs�jj�k	S)N)r1r"r)�orig_tocrrr�	refreshed�sz*TestMaildir.test_reread.<locals>.refreshedr�z
stray-file)r1r#rrrr�r/rr&r"r�rZcreate_empty_filer!r)rr�r9�filenamer)r8rr�test_reread�s





zTestMaildir.test_reread)N)N)r|)r$r%r&r0r2rSr�r�r�r�r�r�r�rr	rrr!r$r(r*r�r-r.�unittest�
skipUnless�hasattrrr3r7r;rrrrr�Ls4
		
		

/


r�c@s eZdZdZdd�Zdd�ZdS)�_TestSingleFilez&Common tests for single-file mailboxescCsrt�|j�j}|j�|jd�|j��t�|j�j}|�||�|j�	�|�
|j�|_|�t|j�d�dS)Nrr5)rr�r/�st_inor1r=r>rRrr3r0r)rZinode_beforeZinode_afterrrr�test_add_doesnt_rewrite�s

z'_TestSingleFile.test_add_doesnt_rewritecCstt�|j�jdB}t�|j|�|j�|jd�|j�|jd�}|j�|�|j�	�|�
t�|j�j|�dS)Ni�rr5)rr�r/r1�chmodr1r=r>rqrRr)rr�rrrr�test_permissions_after_flush�s
z,_TestSingleFile.test_permissions_after_flushN)r$r%r&�__doc__rArCrrrrr?�sr?cs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
�ee
d�d�e
�eed�d�dd���Zdd�Z�ZS)�
_TestMboxMMDFcsHt���|j��|�|j�x"t�|jd�D]}t�|�q2WdS)Nz.*)	�superr4r1r3r#r/�globrr!)r�lock_remnant)�	__class__rrr4�s


z_TestMboxMMDF.tearDownc	Cs*t|j��}|�|��g�WdQRXdS)N)rr/r�	readlines)rrbrrrrS�sz _TestMboxMMDF.assertMailboxEmptycCs<|j�d�}|�|j|��d�|�|j|��d�dS)NzFrom foo@bar blah
From: foo

0
zfoo@bar blahz0
)r1r=r�get_fromr)rrrrr�test_add_from_string�sz"_TestMboxMMDF.test_add_from_stringcCs<|j�d�}|�|j|��d�|�|j|��d�dS)NsFrom foo@bar blah
From: foo

0
zfoo@bar blahz0
)r1r=rrKr)rrrrr�test_add_from_bytes�sz!_TestMboxMMDF.test_add_from_bytescCs.x(tjtjfD]}|d�}|j�|�}qWdS)NzFrom foo@bar blah
From: foo

0
)rr(r+r1r=)r�class_rrrrr�test_add_mbox_or_mmdf_message�sz+_TestMboxMMDF.test_add_mbox_or_mmdf_messagecs��fdd�td�D�}x|D]}�j�|�qW�j��tj��j�}���j��_��	t
�j�d�x&�j��D]}���j�
|�|�qtW�j����	|tj��j��dS)Ncsg|]}�j|�qSr)r>)r�r)rrrr��sz6_TestMboxMMDF.test_open_close_open.<locals>.<listcomp>r7)r�r1r=r3rr�getmtimer/r0rrr�rrG)rr�r�mtimerr)rr�test_open_close_open�s


z"_TestMboxMMDF.test_open_close_openc	Cs�|j�t�x"td�D]}|j�|j|�qW|j�t�|jj��|jj�d�|jj��}|j�	�t
|jd��}|�||���WdQRX|�
|j�|_dS)Nr7r�rb)r1r=r?r�r>�_filerRrgr_r3rr/rr0)rrr�rbrrr�test_add_and_close�s
z _TestMboxMMDF.test_add_and_close�forkzTest needs fork().�
socketpairzTest needs socketpair().c
Cs�t��\}}|�|j�|�|j�t��}|dkrnz,|j��|�d�|�	d�|j�
�Wdt�d�X|�	d�z|�t
j|jj�Wd|�d�t�|d�\}}X|j��|j�
�dS)Nr�cr5�p)rrWZ
addCleanupr3rrVr1r��sendZrecvr��_exitrZrZExternalClashError�waitpid)r�c�prZ
exited_pid�statusrrr�test_lock_conflict
s&





z _TestMboxMMDF.test_lock_conflictcCsnd}|j�|�}|j��|j��|�|j�|_|j��|j�|�}|j��|�|jj�|j��dS)NzSubject: sub

body
)	r1r=rRr3r0r/r�rZ_locked)rrrzryrrr�test_relock2s



z_TestMboxMMDF.test_relock)r$r%r&r4rSrLrMrOrRrUr<r=r>rrr`ra�
__classcell__rr)rIrrE�s$rEc@sReZdZddd�Ze�eed�d�e�eed�d�dd	���Zd
d�Z	dd
�Z
dS)�TestMboxNcCst�||�S)N)r�mbox)rrr�rrrrvDrwzTestMbox.<lambda>r/ztest needs os.umask()r�ztest needs os.stat()c	Cs~zLt�d�}|j��t�|j�tj|jdd�|_|j�d�|j��Wdt�|�Xt�	|j�}|j
}|�|d@�dS)N�?T)Zcreater�r0)rr/r1r3r!r/rrdr=r�r1r�)rZ	old_umaskr5r6rrr�test_file_permsFs

zTestMbox.test_file_permscCsHtj��}d|d<|�d�|j�|�}|j�|�}|�|��d�dS)Nzjohn@example.com�FromzNo newline at the endzNo newline at the end
)	rrrZset_payloadr1r=r�rr)rrrrrr�test_terminating_newlineZs

z!TestMbox.test_terminating_newlinec	Cs�|j�d�t|j��"}|��}|�|dd�d�WdQRX|j�d�t|j��"}|��}|�|dd�d�WdQRXdS)NzFrom: foo

0r%z0

z
From: foo

0
)r1r=rr/r_r)rrb�datarrr�test_message_separatordszTestMbox.test_message_separator)N)r$r%r&r0r<r=r>rrfrhrjrrrrrcBs


rcc@seZdZddd�ZdS)�TestMMDFNcCst�||�S)N)rZMMDF)rrr�rrrrvsrwzTestMMDF.<lambda>)N)r$r%r&r0rrrrrkqsrkc@s^eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�ZdS)�TestMHNcCst�||�S)N)rZMH)rrr�rrrrvxrwzTestMH.<lambda>cCs|�t�|j�dg�dS)Nz
.mh_sequences)rrr�r/)rrrrrSzszTestMH.assertMailboxEmptycCsX|j�d�|j�d�|j�d�|�t|j���d�|�t|j���td��dS)Nrrrr7)rrr)r1rrrrr�)rrrrr}szTestMH.test_list_folderscCs�dd�}|�|j|�|_|j�d�}|j�d�}|�|jd�|�tj	�
tj	�|jd���|j�d�}|�|�
|��d�|jd�|�|j|jj�|�|j|jj�dS)NcSsdS)Nr)r+rrrr,�sz-TestMH.test_get_folder.<locals>.dummy_factoryzfoo.barr�r)r0r/r1rrr=r>rrrrr�rrGrHr�)rr,Z
new_folderrrrrrr	�szTestMH.test_get_foldercCs4|j�d�|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d�|�t|j���td��|j�d�|�t|j���d	�|�|j��g�dS)
Nrrr6)rrr5)rr)rrr)r1rrrrr�r
)rrrrr�s z"TestMH.test_add_and_remove_folderscCs|�|j��i�t�|jd�}|�d�|j�|�}|�|j��d|gi�t�|jd�}|�dddg�|j�|�}|�|j��||g|g|gd��|�dg�||j|<|�|j��|g|g|g|gd��|j�	|�|�|j��d|gi�dS)	Nrr�r5r��replied)r�r�rm�flagged)r�r�rmrn)
rr1�
get_sequencesrr)r>�add_sequencer=�
set_sequencesrq)rr�rur�rzrrr�test_sequences�s"

zTestMH.test_sequencescCs6t�|jd�}|�d�|j�|�}|j�|�}dS)Nrr�)rr)r>rpr1r=r�)rr�ruZrefmsg0rrr�test_issue2625�s
zTestMH.test_issue2625cCs@t�|jd�}|j�|�}|j��|j�|�|j��dS)Nr)rr)r>r1r=r�rqr�)rr�rurrr�test_issue7627�s

zTestMH.test_issue7627c		Cs�t�|jd�}t�|jd�}t�|jd�}t�|jd�}|�ddg�|�dg�|�ddg�|�ddd	g�|j�|�}|j�|�}|j�|�}|j�|�}|�|j��||||g|g|g|g|gd
��|j�|�|�|j��|||g|g|g|gd��|j�	�|�|j�
�dddg�|}|d}|d}|�|j��dddgdgdgdgd��|j�|�}|j�|�}|j�|�}|j�|�}|j�|�|j�|�|j��|j�	�|j��|�|j��ddddd
gdgdgdgd��dS)Nrr5r6r7r��unseenrnr�rm)r�rurnr�rm)r�rur�rmr8r9)
rr)r>rqr1r=rrorq�packrHr�r�)	rr�r�r�Zmsg3rurzryZkey3rrr�	test_pack�sL



zTestMH.test_packcCstj�|jd�S)Nz.mh_sequences.lock)rrr�r/)rrrrr��szTestMH._get_lock_path)N)
r$r%r&r0rSrr	rrrrsrtrwr�rrrrrlvs
	,rlcs6eZdZd
dd�Zdd�Z�fdd�Zdd	�Z�ZS)�	TestBabylNcCst�||�S)N)rZBabyl)rrr�rrrrv�rwzTestBabyl.<lambda>c	Cs*t|j��}|�|��g�WdQRXdS)N)rr/rrJ)rrbrrrrSszTestBabyl.assertMailboxEmptycsHt���|j��|�|j�x"t�|jd�D]}t�|�q2WdS)Nz.*)	rFr4r1r3r#r/rGrr!)rrH)rIrrr4s


zTestBabyl.tearDowncCs�|�|j��g�t�|jd�}|�d�|j�|�}|�|j��dg�t�|jd�}|�dddg�|j�|�}|�t	|j���t	ddg��|�ddg�||j|<|�t	|j���t	dddg��|j�
|�|�t	|j���t	dg��dS)Nrr�r5r��answeredZblah�filed)rr1�
get_labelsrr*r>�	add_labelr=�
set_labelsr�rq)rr�rur�rzrrr�test_labelss

zTestBabyl.test_labels)N)r$r%r&r0rSr4r~rbrr)rIrrx�s
rxc@seZdZdd�Zdd�ZdS)�FakeFileLikeObjectcCs
d|_dS)NF)�closed)rrrr�__init__!szFakeFileLikeObject.__init__cCs
d|_dS)NT)r�)rrrrr3$szFakeFileLikeObject.closeN)r$r%r&r�r3rrrrrsrc@seZdZdd�Zdd�ZdS)�FakeMailBoxcCs,tj�|ddd��dd�td�D�|_dS)Nr�cSsdS)Nr)r�rrrrv+rwz&FakeMailBox.__init__.<locals>.<lambda>cSsg|]
}t��qSr)r)r�rrrrr�,sz(FakeMailBox.__init__.<locals>.<listcomp>r|)rr�r�r��files)rrrrr�*szFakeMailBox.__init__cCs
|j|S)N)r�)rrrrrr^.szFakeMailBox.get_fileN)r$r%r&r�r^rrrrr�(sr�c@seZdZdd�ZdS)�TestFakeMailBoxcCslt�}x"td�D]}|�|j|j�qWxtd�D]}||q4Wx"td�D]}|�|j|j�qNWdS)Nr|)r�r�r�r�r�r)rr�rrrr�test_closing_fd4szTestFakeMailBox.test_closing_fdN)r$r%r&r�rrrrr�2sr�c@sreZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�TestMessagecCstj|_dS)N)rr.r/)rrrrr2BszTestMessage.setUpcCs|�|j�dS)N)r#r/)rrrrr4EszTestMessage.tearDowncCs,t�t�}|�|�}|�|�|�|�dS)N)rr@r?r0�_post_initialize_hookr)r�eMMrrrr�test_initialize_with_eMMHs


z$TestMessage.test_initialize_with_eMMcCs"|�t�}|�|�|�|�dS)N)r0r?r�r)rrrrr�test_initialize_with_stringOs

z'TestMessage.test_initialize_with_stringc	CsNt|jd��8}|�t�|�d�|�|�}|�|�|�|�WdQRXdS)Nzw+r)rr/rfr?rgr0r�r)rrbrrrr�test_initialize_with_fileUs



z%TestMessage.test_initialize_with_filec	CsNt|jd��8}|�t�|�d�|�|�}|�|�|�|�WdQRXdS)Nzwb+r)rr/rfrCrgr0r�r)rrbrrrr� test_initialize_with_binary_file^s



z,TestMessage.test_initialize_with_binary_filecCsn|��}|�|�|�|tjj�|�|tj�|�||j�|�|��g�|�	|�
��|�|���dS)N)
r0r�rrrrrrrHr�r
r�r)rrrrr�test_initialize_with_nothinggs
z(TestMessage.test_initialize_with_nothingcs��t�fdd��dS)Ncs��t��S)N)r0�objectr)rrrrvtrwz9TestMessage.test_initialize_incorrectly.<locals>.<lambda>)rZr�)rr)rr�test_initialize_incorrectlyrsz'TestMessage.test_initialize_incorrectlycCs>t�t�}|�t�}x$|jD]}|�||jd�|��qWdS)Nz{} attribute does not exist)rr@r?r0�__dict__r�format)rr�r�attrrrr�test_all_eMM_attribues_existvs



z(TestMessage.test_all_eMM_attribues_existcCs*t�t�}|��}|�|�|�|�dS)N)rr@r?r0Z_become_messager)rr�rrrr�test_become_message~s

zTestMessage.test_become_messagecsL|���x|jD]}|������qWtj���|�t��fdd��dS)Ncs
����S)N)�_explain_tor)r�	other_msgrrrv�rwz-TestMessage.test_explain_to.<locals>.<lambda>)r0r,r�rrrrZr�)rrNr)rr�r�test_explain_to�s
zTestMessage.test_explain_tocCsdS)Nr)rrrrrr��sz!TestMessage._post_initialize_hookN)r$r%r&rrr0r2r4r�r�r�r�r�r�r�r�r�r�rrrrr�>s		
r�c@sBeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
S)�TestMaildirMessagecCs |�|jd�|�|jd�dS)Nr�r�)rZ_subdir�_info)rrrrrr��sz(TestMaildirMessage._post_initialize_hookcs�t�t��|����d���d�|����d���d�|����d�|�t�fdd��|����d���d�|����d�|���dS)Nr�r�cs
��d�S)Nr�)r�r)rrrrv�rwz0TestMaildirMessage.test_subdir.<locals>.<lambda>)	rr'r?rr�r�rZrQr)rr)rr�test_subdir�s



zTestMaildirMessage.test_subdircCs�t�t�}|�|��d�|�|��d�|�d�|�|��d�|�|��d�|�d�|�|��d�|�d�|�|��d�|�d�|�|��d	�|�|��d�|�	|�dS)
Nr�r��FZSDTPZDPSTZFTZDFPSTZTDRP�FS)
rr'r?rr�r�r��add_flag�remove_flagr)rrrrr�
test_flags�s




zTestMaildirMessage.test_flagscCsDt�t�}|�t|��t���d�|�d�|�|��d�dS)N�<g)	rr'r?r��abs�get_dater�set_dater)rrrrr�	test_date�s

zTestMaildirMessage.test_datecsVt�t��|����d���d�|����d�|�t�fdd��|���dS)Nr�z	1,foo=barcs
��d�S)N)r�r)rrrrv�rwz.TestMaildirMessage.test_info.<locals>.<lambda>)	rr'r?r�get_infor�rZr�r)rr)rr�	test_info�s

zTestMaildirMessage.test_infocCs�t�t�}|�|��d�|�d�|�|��d�|�|��d�|�d�|�|��d�|�|��d�|�d�|�|��d�|�|��d�|�	d�|�|��d�|�|��d�|�
|�dS)	Nr�ZSFr�z2,FSz1,ZRPT�Dz2,D)rr'r?rr�r�r�r�r�r�r)rrrrr�test_info_and_flags�s




z&TestMaildirMessage.test_info_and_flagsN)r$r%r&rr'r0r�r�r�r�r�r�rrrrr��s	r�c@s<eZdZejZdd�Zdd�Zdd�Zdd�Z	dd
d�Z
d	S)
�_TestMboxMMDFMessagecCs|�|�dS)N)�_check_from)rrrrrr��sz*_TestMboxMMDFMessage._post_initialize_hookcCs8t�t�}|�d�t�|�}|�|��d|���dS)NzFrom foo@bar blahzfoo@bar blah)rrr?Zset_unixfromr(rrK)rrrrr�test_initialize_with_unixfrom�s


z2_TestMboxMMDFMessage.test_initialize_with_unixfromcCsft�t�}|�|�|�d�|�|��d�|�dd�|�|d�|�dt���|�|d�dS)Nzfoo barzfoo@barTz	blah@temp)	rr(r?r��set_fromrrKrZ	localtime)rrrrr�	test_from�s


z_TestMboxMMDFMessage.test_fromcCs�t�t�}|�|��d�|�d�|�|��d�|�d�|�|��d�|�d�|�|��d�|�d�|�|��d�|�|�dS)	Nr�r�ZXODRZRODXZFAZRODFAXZFDXA�RO)	rr(r?rr�r�r�r�r)rrrrrr��s




z_TestMboxMMDFMessage.test_flagsNcCs*|dkrd}|�t�|d|����dS)Nz
MAILER-DAEMONz. \w{3} \w{3} [\d ]\d [\d ]\d:\d{2}:\d{2} \d{4})rrrrK)rrZsenderrrrr�s
z _TestMboxMMDFMessage._check_from)N)r$r%r&rZ_mboxMMDFMessager0r�r�r�r�r�rrrrr��sr�c@seZdZejZdS)�TestMboxMessageN)r$r%r&rr(r0rrrrr�sr�c@s"eZdZejZdd�Zdd�ZdS)�
TestMHMessagecCs|�|jg�dS)N)rZ
_sequences)rrrrrr�sz#TestMHMessage._post_initialize_hookcCs(t�t�}|�|��g�|�dg�|�|��dg�|�g�|�|��g�|�d�|�|��dg�|�d�|�|��ddg�|�d�|�|��ddg�|�d�|�|��dg�|�d�|�|��ddg�|�d�|�|��ddg�|�ddg�|�|��ddg�dS)N�foobarrurnrm)rr)r?rrorqrpZremove_sequence)rrrrrrrs(







zTestMHMessage.test_sequencesN)r$r%r&rr)r0r�rrrrrrr�sr�c@s*eZdZejZdd�Zdd�Zdd�ZdS)�TestBabylMessagecCs|�|jg�dS)N)rZ_labels)rrrrrr�6sz&TestBabylMessage._post_initialize_hookcCs(t�t�}|�|��g�|�dg�|�|��dg�|�g�|�|��g�|�d�|�|��dg�|�d�|�|��ddg�|�d�|�|��ddg�|�d�|�|��dg�|�d�|�|��ddg�|�d�|�|��ddg�|�ddg�|�|��ddg�dS)Nr�rz�resentrury)rr*r?rr{r}r|Zremove_label)rrrrrr~9s(







zTestBabylMessage.test_labelscCst�t�}|��}|�|��g�|�|���d|d<d|d<|�|����g�|�|�|��}|�|��ddg�|�|dd�|�|dd�|�|���|�	�|�|��ddg�|�|���|��}|�|��dddddg�x d	D]}|�||||�q�WdS)
Nz
FooBar 1.0z
User-AgentZBlahz
X-Whatever�Daterg�To�Subject)z
User-Agentr�rgr�r�)
rr*r?�get_visiblerrHr�rZset_visible�update_visible)rrZvisible�headerrrr�test_visiblePs*


zTestBabylMessage.test_visibleN)	r$r%r&rr*r0r�r~r�rrrrr�2sr�c@seZdZejZdS)�TestMMDFMessageN)r$r%r&rr+r0rrrrr�isr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�TestMessageConversioncCs0x*|jD] }t�t�}||�}|�|�qWdS)N)r,rrr?r)rrN�	msg_plainrrrr�test_plain_to_xps
z%TestMessageConversion.test_plain_to_xcCs0x*|jD] }|t�}t�|�}|�|�qWdS)N)r,r?rrr)rrNrr�rrr�test_x_to_plainws
z%TestMessageConversion.test_x_to_plaincCs&x |jD]}|t�}|�|�qWdS)N)r,rCr)rrNrrrr�test_x_from_bytes~sz'TestMessageConversion.test_x_from_bytescs(x"|jD]�|�t�fdd��qWdS)Ncs�d�S)NFrr)rNrrrv�rwz9TestMessageConversion.test_x_to_invalid.<locals>.<lambda>)r,rZr�)rr)rNr�test_x_to_invalid�sz'TestMessageConversion.test_x_to_invalidcs�dd�|jD��xv|jD]l}xf|jD]\�|�kr2q$|t�}�|�}��fdd��|D�}x$|D]}|�||jd�|���q`Wq$WqWdS)NcSsi|]}|t�j|�qSr)r?r�)r�rNrrr�
<dictcomp>�sz]TestMessageConversion.test_type_specific_attributes_removed_on_conversion.<locals>.<dictcomp>csg|]}|��kr|�qSrr)r��a)�class2�	referencerrr��sz]TestMessageConversion.test_type_specific_attributes_removed_on_conversion.<locals>.<listcomp>zwhile converting {} to {})r,r?r�r�r�)rZclass1�sourcer"Z
type_specificr�r)r�r�r�3test_type_specific_attributes_removed_on_conversion�s


zITestMessageConversion.test_type_specific_attributes_removed_on_conversioncCsnt�t�}|�d�|�d�|��}t�|�}|�|�|�|��d�|�|�	�d�|�|��|�dS)N�DFPRSTr�)
rr'r?r�r�r�rrr�r�)r�msg_maildirZdaterrrr�test_maildir_to_maildir�s




z-TestMessageConversion.test_maildir_to_maildircCs�d}x�tjtjfD]�}t�t�}|�d�xR|D]J\}}|�|�||�}|�|��|�|�|�	�dt
�t
�d���q0W|�
d�|�||���d�qWdS)N))r�r�)r�r�)�Pr�)�R�A)r�r�)�Tr�)r�ZRDFAgzMAILER-DAEMON %sr��RODFA)rr(r+r'r?r�r�rr�rKrZasctime�gmtimer�)r�pairsrNr��setting�resultrrrr�test_maildir_to_mboxmmdf�s



z.TestMessageConversion.test_maildir_to_mboxmmdfc	Cs�t�t�}ddgfdddgfddgfdddgfdgfd	dgfd
ddgff}x0|D](\}}|�|�|�t�|���|�qPWdS)Nr�rur�rnr�r�rmr�r�r�)rr'r?r�rr)ro)rr�r�r�r�rrr�test_maildir_to_mh�s

z(TestMessageConversion.test_maildir_to_mhc
Cs�t�t�}ddgfddgfdddgfdddgfdgfd	dd
gfdd
ddgff}x0|D](\}}|�|�|�t�|���|�qTWdS)Nr�rur�r��	forwardedr�ryr�r��deletedr�)rr'r?r�rr*r{)rr�r�r�r�rrr�test_maildir_to_babyl�s

z+TestMessageConversion.test_maildir_to_babylcCs�x�tjtjfD]�}|t�}|�dt�d��d}xD|D]<\}}|�|�t�|�}|�	|�
�|�|�	|��d�q6W|�d�|�	t�|���d�qWdS)Nzfoo@barg))r�r�)�Or�)r�r�)r�r�)r�r�)r�ZFRSTr�r�)
rr(r+r?r�rr�r�r'rr�r�r�)rrN�msg_mboxMMDFr�r�r�rrrr�test_mboxmmdf_to_maildir�s


z.TestMessageConversion.test_mboxmmdf_to_maildircCstxntjtjfD]^}|t�}|�d�|�d�x<tjtjfD],}||�}|�|��d�|�|��d�q<WqWdS)Nr�zfoo@bar)	rr(r+r?r�r�rr�rK)rrNr�Zclass2_r�rrr�test_mboxmmdf_to_mboxmmdf�s

z/TestMessageConversion.test_mboxmmdf_to_mboxmmdfc	Cs�x�tjtjfD]v}|t�}dgfddgfddgfdddgfdddgfd	ddgff}x0|D](\}}|�|�|�t�|���|�qXWqWdS)
Nr�r�rur�r�rnr�rmr�)rr(r+r?r�rr)ro)rrNr�r�r�r�rrr�test_mboxmmdf_to_mh�s


z)TestMessageConversion.test_mboxmmdf_to_mhc	Cs�x�tjtjfD]v}|t�}dgfddgfdddgfddgfdddgfd	ddgff}x0|D](\}}|�|�|�t�|���|�qXWqWdS)
Nr�r�rur�r�r�r�ryr�)rr(r+r?r�rr*r{)rrNrr�r�r�rrr�test_mboxmmdf_to_babyl�s

z,TestMessageConversion.test_mboxmmdf_to_babylcCs�d}xP|D]H\}}t�t�}|�|�|�t�|���|�|�t�|���d�q
Wt�t�}|�d�|�d�|�d�|�t�|���d�|�t�|���d�dS)N))rur�)rm�RS)rnr�r�rurmrnr�)rr)r?rprr'r�r�)rr�r�r�rrrr�test_mh_to_maildir�s





z(TestMessageConversion.test_mh_to_maildircCs�d}xN|D]F\}}t�t�}|�|�x(tjtjfD]}|�||���|�q4Wq
Wt�t�}|�d�|�d�|�d�x(tjtjfD]}|�||���d�q�WdS)N))rur�)rm�ROA)rnZROFrurmrnZOFA)rr)r?rpr(r+rr�)rr�r�r�rrNrrr�test_mh_to_mboxmmdfs





z)TestMessageConversion.test_mh_to_mboxmmdfcCsHt�t�}|�d�|�d�|�d�|�t�|���dddg�dS)Nrurmrn)rr)r?rprro)rrrrr�
test_mh_to_mhs



z#TestMessageConversion.test_mh_to_mhcCs�ddgfddgfdgff}x:|D]2\}}t�t�}|�|�|�t�|���|�q Wt�t�}|�d�|�d�|�d�|�t�|���ddg�dS)Nrurmryrn)rr)r?rprr*r{)rr�r�r�rrrr�test_mh_to_babyl&s






z&TestMessageConversion.test_mh_to_babylcCs�d}xP|D]H\}}t�t�}|�|�|�t�|���|�|�t�|���d�q
Wt�t�}xdD]}|�|�qfW|�t�|���d�|�t�|���d�dS)N))rur�)r�ZST)rzr�)ryr�)r��PS)�editedr�)r�r�r�)rur�rzryr�r�r�ZPRT)rr*r?r|rr'r�r�)rr�r�r�r�labelrrr�test_babyl_to_maildir5s



z+TestMessageConversion.test_babyl_to_maildircCs�d}xN|D]F\}}x<tjtjfD],}t�t�}|�|�|�||���|�q Wq
Wt�t�}xdD]}|�|�qdWx(tjtjfD]}|�||���d�q�WdS)N))rur�)r�ZROD)rzr�)ryr�)r�r�)r�r�)r�r�)rur�rzryr�r�r�ZODA)rr(r+r*r?r|rr�)rr�r�r�rNrr�rrr�test_babyl_to_mboxmmdfFs



z,TestMessageConversion.test_babyl_to_mboxmmdfcCs�ddgfdgfdgfddgfdgfdgfdgff}x:|D]2\}}t�t�}|�|�|�t�|���|�q8Wt�t�}xd	D]}|�|�q~W|�t�|���ddg�dS)
Nrur�rzryrmr�r�r�)rur�rzryr�r�r�)rr*r?r|rr)ro)rr�r�r�rr�rrr�test_babyl_to_mhWs




z&TestMessageConversion.test_babyl_to_mhc
Cs�t�t�}|��xdD]}|�|�qWt�|�}|�|��dddddddg�|�|����|�����x0|����D] }|�|��||��|�q|WdS)	N)rur�rzryr�r�r�rur�rzryr�r�r�)	rr*r?r�r|rr{r�rH)rrr�r�rrrr�test_babyl_to_babylgs


z)TestMessageConversion.test_babyl_to_babylN)r$r%r&r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�ns*
	r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestProxyFileBasecCs�|�d�|�|��d�|�d�|�|��d�|�d�|�|�d�d�|�d�|�|�d�d�|�d�|�|�d�d	�dS)
Nrsbarr5sarr6sba���i��r)rgrr_)r�proxyrrr�
_test_readys




zTestProxyFileBase._test_readcCs�tj��}|�d�|�|��d|�|�|��d|�|�|��d|�|�|��d�|�d�|�|��d|�|�ddttj��|�|��d|�|�ddttj��|�|�d�d	�|�|�d
�d|�dS)Nrsfoosbarsfredsbobr6�or:sfri����sed)rrarKrgr�readliner)rr�rarrr�_test_readline�s


z TestProxyFileBase._test_readlinecCs�tj��}|�d�|�|��d|d|d|dg�|�d�|�|�d�d|g�|�dt|��|�|�dt|��d|d|g�|�d�|�|�d	�|d|d|dg�dS)
Nrsfoosbarsfredsbobr6r7r8i�)rrarKrgrrJr)rr�rarrr�_test_readlines�s



z!TestProxyFileBase._test_readlinescCsztj��}|�d�t|�}|�t|�d|�|�t|�d|�|�t|�d|�|�t|�d�|�tt|�dS)Nrsfoosbarsfredsbob)	rrarKrg�iterr�nextrZ�
StopIteration)rr�ra�iteratorrrr�_test_iteration�s

z!TestProxyFileBase._test_iterationcCs�tj��}|�d�|�|��d�|�|�t|��|�|�dd�|�|�dt|��d|�|�dt|�d�|�|�d�d�|�dd�|�|��d|d|�|�d	�|�|���dS)
Nr7r6r5r�r%sbarrr��d)	rrarKrgr�tellr_rr�)rr�rarrr�_test_seek_and_tell�s


z%TestProxyFileBase._test_seek_and_tellcCs8|�|j�|��|�|j�|��|�|j�dS)N)r�r�r3r)rr�rrr�_test_close�s
zTestProxyFileBase._test_closeN)	r$r%r&r�r�r�r�r�r�rrrrr�ws
r�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�
TestProxyFilecCstj|_t|jd�|_dS)Nzwb+)rr.r/rrT)rrrrr2�szTestProxyFile.setUpcCs|j��|�|j�dS)N)rTr3r#r/)rrrrr4�s
zTestProxyFile.tearDowncCsx|j�d�|j��}t�|j�}|�|��|�|�|j��|�t�|jd�}|�|��d�|�|j��|�dS)Nsfoor)rTrfr�r�
_ProxyFiler)r�posZproxy0Zproxy1rrr�test_initialize�s
zTestProxyFile.test_initializecCs"|j�d�|�t�|j��dS)Nsbar)rTrfr�rr�)rrrr�	test_read�szTestProxyFile.test_readcCs8|j�tdtjtjtjfd��|�t�|j��dS)Nzfoo%sbar%sfred%sbobr�)rTrf�bytesrrar�rr�)rrrr�
test_readline�szTestProxyFile.test_readlinecCs8|j�tdtjtjtjfd��|�t�|j��dS)Nzfoo%sbar%sfred%sbobr�)rTrfrrrar�rr�)rrrr�test_readlines�szTestProxyFile.test_readlinescCs8|j�tdtjtjtjfd��|�t�|j��dS)Nzfoo%sbar%sfred%sbobr�)rTrfrrrar�rr�)rrrr�test_iteration�szTestProxyFile.test_iterationcCs4|j�tdtjtjfd��|�t�|j��dS)Nz
foo%sbar%sr�)rTrfrrrar�rr�)rrrr�test_seek_and_tell�sz TestProxyFile.test_seek_and_tellcCs4|j�tdtjtjfd��|�t�|j��dS)Nz
foo%sbar%sr�)rTrfrrrar�rr�)rrrrr��szTestProxyFile.test_closeN)r$r%r&r2r4rrrrrrr�rrrrr��sr�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestPartialFilecCstj|_t|jd�|_dS)Nzwb+)rr.r/rrT)rrrrr2�szTestPartialFile.setUpcCs|j��|�|j�dS)N)rTr3r#r/)rrrrr4s
zTestPartialFile.tearDowncCs\|j�tdtjdd��|j��}t�|jdd�}|�|��d�|�|j��|�dS)Nr�r�r�r6r9r)	rTrfrrrar�r�_PartialFiler)rrr�rrrrs

zTestPartialFile.test_initializecCs,|j�tdd��|�t�|jdd��dS)Nz	***bar***r�r7r:)rTrfrr�rr	)rrrrr
szTestPartialFile.test_readc
CsJ|j�tdtjtjtjfd��|�t�|jdddttj���dS)Nz!!!!!foo%sbar%sfred%sbob!!!!!r�r9�r7)	rTrfrrrar�rr	r)rrrrrs
zTestPartialFile.test_readlinec
CsJ|j�tdtjtjtjfd��|�t�|jdddttj���dS)Nzfoo%sbar%sfred%sbob?????r�r�
r7)	rTrfrrrar�rr	r)rrrrrs
zTestPartialFile.test_readlinesc
CsJ|j�tdtjtjtjfd��|�t�|jdddttj���dS)Nz____foo%sbar%sfred%sbob####r�r8�r7)	rTrfrrrar�rr	r)rrrrrs
zTestPartialFile.test_iterationc
CsF|j�tdtjtjfd��|�t�|jdddttj���dS)Nz(((foo%sbar%s$$$r�r7�	r6)	rTrfrrrar�rr	r)rrrrr#sz"TestPartialFile.test_seek_and_tellc
CsF|j�tdtjtjfd��|�t�|jdddttj���dS)Nz&foo%sbar%s^r�r5r:r7)	rTrfrrrar�rr	r)rrrrr�(szTestPartialFile.test_closeN)r$r%r&r2r4rrrrrrr�rrrrr�srz6From 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@sFeZdZdd�Zdd�Zddd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�MaildirTestCasecCs�tj|_tj�|j�r$t�|j�ntj�|j�r>t�|j�t�	|j�t�	tj�
|jd��t�	tj�
|jd��t�	tj�
|jd��d|_g|_dS)Nr�r�r�r5)
rr.�_dirrrrr�isfiler!r�r��_counter�	_msgfiles)rrrrr2;szMaildirTestCase.setUpcCsdtttj|j��t�tj�|j	d��t�tj�|j	d��t�tj�|j	d��t�|j	�dS)Nr�r�r�)
r��maprr!rr�rmdirrr�r)rrrrr4Is
zMaildirTestCase.tearDownFc	Cs�tt��d�}|j}|jd7_d�t|�t|�ddf�}tj�|jd|�}tj�|j||�}t|d��*}|j	�
|�|r�|�t�|�t
�WdQRXyt�||�Wn8ttfk
r�t|d��}|�t
�WdQRXYnX|j	�
|�|S)Ni@Br5�.Z
myhostnameZmydomainr�r)r�rrr��strrrrrrr<rf�FROM_�
DUMMY_MESSAGE�link�AttributeError�PermissionError)	r�dirrd�trr:ZtmpnameZnewname�fprrr�
createMessagePs$
zMaildirTestCase.createMessagecCs2t�tj�|_|�|j���|�|j���dS)zTest an empty maildir mailboxN)rr�rr.rdr�r�)rrrr�test_empty_maildirdsz"MaildirTestCase.test_empty_maildircCsL|�d�t�tj�|_|�|j���|�|j���|�|j���dS)Nr�)	rrr�rr.rdrr�r�)rrrr�test_nonempty_maildir_curns

z)MaildirTestCase.test_nonempty_maildir_curcCsL|�d�t�tj�|_|�|j���|�|j���|�|j���dS)Nr�)	rrr�rr.rdrr�r�)rrrr�test_nonempty_maildir_newvs

z)MaildirTestCase.test_nonempty_maildir_newcCsf|�d�|�d�t�tj�|_|�|j���|�|j���|�|j���|�|j���dS)Nr�r�)	rrr�rr.rdrr�r�)rrrr�test_nonempty_maildir_both~s

z*MaildirTestCase.test_nonempty_maildir_bothN)F)
r$r%r&r2r4rr r!r"r#rrrrr9s

raKReturn-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>zgkj+person@localhostz�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)z gkj@sundance.gregorykjohnson.comz�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)z�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)ztby andy.gregorykjohnson.com (Postfix, from userid 1000)
        id 490CD9DD17; Wed, 13 Jul 2005 17:23:11 -0400 (EDT)zWed, 13 Jul 2005 17:23:11 -0400z."Gregory K. Johnson" <gkj@gregorykjohnson.com>zgkj@gregorykjohnson.comzSample messagez1.0z,multipart/mixed; boundary="NMuMz9nt05w80d4+"ZinlinezMutt/1.5.9i)zReturn-Pathz
X-Original-TozDelivered-To�ReceivedzDelivered-Tor$r$r$r�rgr�r�zMime-VersionzContent-TypezContent-Dispositionz
User-Agent)z1This is a sample message.

--
Gregory K. Johnson
zRH4sICM2D1UIAA3RleHQAC8nILFYAokSFktSKEoW0zJxUPa7wzJIMhZLyfIWczLzUYj0uAHTs
3FYlAAAA
c@seZdZdd�ZdS)�MiscTestCasecCsddh}tj|t|d�dS)NraZfcntl)�	blacklist)rZcheck__all__r)rr&rrr�test__all__�szMiscTestCase.test__all__N)r$r%r&r'rrrrr%�sr%cCs>tttttttttt	t
ttt
ttttf}tj|�t��dS)N)r�r�rcrkrlrxr�r�r�r�r�r�r�r�rrr�r%rZrun_unittestZ
reap_children)Ztestsrrr�	test_main�s


r(�__main__)5rr�rr�rrZ
email.messagerrArdZtestrr<r�rrGrr-ZTestCaser�r�r?rErcrkrlrxrr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr?rKrCr	rr%r(r$rrrr�<module>s�}$_)p/"	
VJ07S15