Skip to content

Commit b620218

Browse files
Moved test_mailgw to email module and make message comparison sharper to flag differences in headers with the same name.
1 parent 24c1ae3 commit b620218

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

test/test_mailgw.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
# TODO: test bcc
1313

14-
import unittest, tempfile, os, shutil, errno, imp, sys, difflib, rfc822, time
14+
import email
1515
import gpgmelib
16-
from email.parser import FeedParser
16+
import unittest, tempfile, os, shutil, errno, imp, sys, difflib, time
1717

1818

1919
try:
@@ -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

5554
class Tracker(object):
5655
def open(self, journaltag):
@@ -59,7 +58,8 @@ def open(self, journaltag):
5958
class 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

Comments
 (0)