1111
1212# TODO: test bcc
1313
14- import unittest , tempfile , os , shutil , errno , imp , sys , difflib , rfc822 , time
14+ import email
1515import gpgmelib
16- from email . parser import FeedParser
16+ import unittest , tempfile , os , shutil , errno , imp , sys , difflib , time
1717
1818
1919try :
@@ -43,14 +43,13 @@ def expectedFailure(method):
4343 """
4444 return lambda x : 0
4545
46- class Message (rfc822 .Message ):
47- """String-based Message class with equivalence test."""
48- def __init__ (self , s ):
49- rfc822 .Message .__init__ (self , StringIO (s .strip ()))
5046
51- def __eq__ (self , other ):
52- return (self .dict == other .dict and
53- self .fp .read () == other .fp .read ())
47+ def get_body (message ):
48+ if not message .is_multipart ():
49+ return message .get_payload ()
50+
51+ return message .as_string ().split ('\n \n ' , 1 )[- 1 ]
52+
5453
5554class Tracker (object ):
5655 def open (self , journaltag ):
@@ -59,7 +58,8 @@ def open(self, journaltag):
5958class DiffHelper :
6059 def compareMessages (self , new , old ):
6160 """Compare messages for semantic equivalence."""
62- new , old = Message (new ), Message (old )
61+ new = email .message_from_string (new .strip ())
62+ old = email .message_from_string (old .strip ())
6363
6464 # all Roundup-generated messages have "Precedence: bulk"
6565 old ['Precedence' ] = 'bulk'
@@ -86,11 +86,14 @@ def compareMessages(self, new, old):
8686 oldmime = old .get (key , '' ).split ('=' ,1 )[- 1 ].strip ('"' )
8787 replace ['--' + newmime ] = '--' + oldmime
8888 replace ['--' + newmime + '--' ] = '--' + oldmime + '--'
89- elif new .get (key , '' ) != old .get (key , '' ):
90- res .append (' %s: %r != %r' % (key , old .get (key , '' ),
91- new .get (key , '' )))
92-
93- body_diff = self .compareStrings (new .fp .read (), old .fp .read (),
89+ elif new .get_all (key , '' ) != old .get_all (key , '' ):
90+ # check that all other headers are identical, including
91+ # headers that appear more than once.
92+ res .append (' %s: %r != %r' % (key , old .get_all (key , '' ),
93+ new .get_all (key , '' )))
94+
95+ # TODO replace the string comparision with a mimepart comparison
96+ body_diff = self .compareStrings (get_body (new ), get_body (old ),
9497 replace = replace )
9598 if body_diff :
9699 res .append ('' )
@@ -3504,7 +3507,7 @@ def testPGPEncryptedUnsignedMessageCheckBounce(self):
35043507 # trap_exc=1: we want a bounce message:
35053508 self ._handle_mail (self .encrypted_msg , trap_exc = 1 )
35063509 m = self ._get_mail ()
3507- fp = FeedParser ()
3510+ fp = email . parser . FeedParser ()
35083511 fp .feed (m )
35093512 parts = fp .close ().get_payload ()
35103513 self .assertEqual (len (parts ),2 )
@@ -3515,7 +3518,7 @@ def testPGPEncryptedUnsignedMessageCheckBounce(self):
35153518 res = ctx .op_decrypt (crypt , plain )
35163519 self .assertEqual (res , None )
35173520 plain .seek (0 ,0 )
3518- fp = FeedParser ()
3521+ fp = email . parser . FeedParser ()
35193522 fp .feed (plain .read ())
35203523 parts = fp .close ().get_payload ()
35213524 self .assertEqual (len (parts ),2 )
0 commit comments