[Python-checkins] python/dist/src/Lib/test test_email.py,1.38,1.39
bwarsaw@users.sourceforge.net
bwarsaw@users.sourceforge.net
Mon, 08 Jul 2002 19:38:26 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv11982/test
Modified Files:
test_email.py
Log Message:
TestEmailBase.ndiffAssertEqual(): Python 2.1's difflib doesn't have an
ndiff function, so just alias it to assertEqual in that case.
Various: make sure all openfile()/read()'s are wrapped in
try/finally's so the file gets closed.
A bunch of new tests checking the corner cases for multipart/digest
and message/rfc822.
Index: test_email.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_email.py,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** test_email.py 29 Jun 2002 15:23:39 -0000 1.38
--- test_email.py 9 Jul 2002 02:38:24 -0000 1.39
***************
*** 24,27 ****
--- 24,28 ----
from email.MIMEBase import MIMEBase
from email.MIMEMessage import MIMEMessage
+ from email.MIMEMultipart import MIMEMultipart
from email import Utils
from email import Errors
***************
*** 52,62 ****
# Base test class
class TestEmailBase(unittest.TestCase):
! def ndiffAssertEqual(self, first, second):
! """Like failUnlessEqual except use ndiff to produce readable output."""
! if first <> second:
! diff = difflib.ndiff(first.splitlines(), second.splitlines())
! fp = StringIO()
! print >> fp, NL, NL.join(diff)
! raise self.failureException, fp.getvalue()
def _msgobj(self, filename):
--- 53,68 ----
# Base test class
class TestEmailBase(unittest.TestCase):
! if hasattr(difflib, 'ndiff'):
! # Python 2.2 and beyond
! def ndiffAssertEqual(self, first, second):
! """Like failUnlessEqual except use ndiff for readable output."""
! if first <> second:
! diff = difflib.ndiff(first.splitlines(), second.splitlines())
! fp = StringIO()
! print >> fp, NL, NL.join(diff)
! raise self.failureException, fp.getvalue()
! else:
! # Python 2.1
! ndiffAssertEqual = unittest.TestCase.assertEqual
def _msgobj(self, filename):
***************
*** 907,911 ****
def test_multipart_no_boundary(self):
fp = openfile(findfile('msg_25.txt'))
! self.assertRaises(Errors.BoundaryError, email.message_from_file, fp)
--- 913,921 ----
def test_multipart_no_boundary(self):
fp = openfile(findfile('msg_25.txt'))
! try:
! self.assertRaises(Errors.BoundaryError,
! email.message_from_file, fp)
! finally:
! fp.close()
***************
*** 949,954 ****
def setUp(self):
fp = openfile('msg_11.txt')
! self._text = fp.read()
! fp.close()
def test_type_error(self):
--- 959,966 ----
def setUp(self):
fp = openfile('msg_11.txt')
! try:
! self._text = fp.read()
! finally:
! fp.close()
def test_type_error(self):
***************
*** 1092,1095 ****
--- 1104,1221 ----
self.assertEqual(sfp.getvalue(), text)
+ def test_default_type(self):
+ eq = self.assertEqual
+ fp = openfile('msg_30.txt')
+ try:
+ msg = email.message_from_file(fp)
+ finally:
+ fp.close()
+ container1 = msg.get_payload(0)
+ eq(container1.get_default_type(), 'message/rfc822')
+ eq(container1.get_type(), None)
+ container2 = msg.get_payload(1)
+ eq(container2.get_default_type(), 'message/rfc822')
+ eq(container2.get_type(), None)
+ container1a = container1.get_payload(0)
+ eq(container1a.get_default_type(), 'text/plain')
+ eq(container1a.get_type(), 'text/plain')
+ container2a = container2.get_payload(0)
+ eq(container2a.get_default_type(), 'text/plain')
+ eq(container2a.get_type(), 'text/plain')
+
+ def test_default_type_with_explicit_container_type(self):
+ eq = self.assertEqual
+ fp = openfile('msg_28.txt')
+ try:
+ msg = email.message_from_file(fp)
+ finally:
+ fp.close()
+ container1 = msg.get_payload(0)
+ eq(container1.get_default_type(), 'message/rfc822')
+ eq(container1.get_type(), 'message/rfc822')
+ container2 = msg.get_payload(1)
+ eq(container2.get_default_type(), 'message/rfc822')
+ eq(container2.get_type(), 'message/rfc822')
+ container1a = container1.get_payload(0)
+ eq(container1a.get_default_type(), 'text/plain')
+ eq(container1a.get_type(), 'text/plain')
+ container2a = container2.get_payload(0)
+ eq(container2a.get_default_type(), 'text/plain')
+ eq(container2a.get_type(), 'text/plain')
+
+ def test_default_type_non_parsed(self):
+ eq = self.assertEqual
+ neq = self.ndiffAssertEqual
+ # Set up container
+ container = MIMEMultipart('digest', 'BOUNDARY')
+ container.epilogue = '\n'
+ # Set up subparts
+ subpart1a = MIMEText('message 1\n')
+ subpart2a = MIMEText('message 2\n')
+ subpart1 = MIMEMessage(subpart1a)
+ subpart2 = MIMEMessage(subpart2a)
+ container.attach(subpart1)
+ container.attach(subpart2)
+ eq(subpart1.get_type(), 'message/rfc822')
+ eq(subpart1.get_default_type(), 'message/rfc822')
+ eq(subpart2.get_type(), 'message/rfc822')
+ eq(subpart2.get_default_type(), 'message/rfc822')
+ neq(container.as_string(0), '''\
+ Content-Type: multipart/digest; boundary="BOUNDARY"
+ MIME-Version: 1.0
+
+ --BOUNDARY
+ Content-Type: message/rfc822
+ MIME-Version: 1.0
+
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+
+ message 1
+
+ --BOUNDARY
+ Content-Type: message/rfc822
+ MIME-Version: 1.0
+
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+
+ message 2
+
+ --BOUNDARY--
+ ''')
+ del subpart1['content-type']
+ del subpart1['mime-version']
+ del subpart2['content-type']
+ del subpart2['mime-version']
+ eq(subpart1.get_type(), None)
+ eq(subpart1.get_default_type(), 'message/rfc822')
+ eq(subpart2.get_type(), None)
+ eq(subpart2.get_default_type(), 'message/rfc822')
+ neq(container.as_string(0), '''\
+ Content-Type: multipart/digest; boundary="BOUNDARY"
+ MIME-Version: 1.0
+
+ --BOUNDARY
+
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+
+ message 1
+
+ --BOUNDARY
+
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+
+ message 2
+
+ --BOUNDARY--
+ ''')
+
***************
*** 1148,1154 ****
self._idempotent(msg, text)
! ## def test_MIME_digest_with_part_headers(self):
! ## msg, text = self._msgobj('msg_28.txt')
! ## self._idempotent(msg, text)
def test_mixed_with_image(self):
--- 1274,1280 ----
self._idempotent(msg, text)
! def test_MIME_digest_with_part_headers(self):
! msg, text = self._msgobj('msg_28.txt')
! self._idempotent(msg, text)
def test_mixed_with_image(self):
***************
*** 1401,1405 ****
lines = list(it)
eq(len(lines), 43)
! eq(EMPTYSTRING.join(lines), openfile('msg_19.txt').read())
def test_typed_subpart_iterator(self):
--- 1527,1535 ----
lines = list(it)
eq(len(lines), 43)
! fp = openfile('msg_19.txt')
! try:
! eq(EMPTYSTRING.join(lines), fp.read())
! finally:
! fp.close()
def test_typed_subpart_iterator(self):
***************
*** 1441,1451 ****
! class TestParsers(unittest.TestCase):
def test_header_parser(self):
eq = self.assertEqual
# Parse only the headers of a complex multipart MIME document
- p = HeaderParser()
fp = openfile('msg_02.txt')
! msg = p.parse(fp)
eq(msg['from'], 'ppp-request@zzz.org')
eq(msg['to'], 'ppp@zzz.org')
--- 1571,1583 ----
! class TestParsers(TestEmailBase):
def test_header_parser(self):
eq = self.assertEqual
# Parse only the headers of a complex multipart MIME document
fp = openfile('msg_02.txt')
! try:
! msg = HeaderParser().parse(fp)
! finally:
! fp.close()
eq(msg['from'], 'ppp-request@zzz.org')
eq(msg['to'], 'ppp@zzz.org')
***************
*** 1475,1480 ****
eq = self.assertEqual
fp = openfile('msg_26.txt')
! p = Parser()
! msg = p.parse(fp)
eq(len(msg.get_payload()), 2)
part1 = msg.get_payload(0)
--- 1607,1614 ----
eq = self.assertEqual
fp = openfile('msg_26.txt')
! try:
! msg = Parser().parse(fp)
! finally:
! fp.close()
eq(len(msg.get_payload()), 2)
part1 = msg.get_payload(0)
***************
*** 1484,1500 ****
eq(part2.get_type(), 'application/riscos')
! ## def test_multipart_digest_with_extra_mime_headers(self):
! ## eq = self.assertEqual
! ## fp = openfile('msg_28.txt')
! ## p = Parser()
! ## msg = p.parse(fp)
! ## self.failUnless(msg.is_multipart())
! ## eq(len(msg.get_payload()), 2)
! ## part1 = msg.get_payload(0)
! ## eq(part1.get_type(), 'text/plain')
! ## eq(part1.get_payload(), 'message 1')
! ## part2 = msg.get_payload(1)
! ## eq(part2.get_type(), 'text/plain')
! ## eq(part2.get_payload(), 'message 2')
--- 1618,1654 ----
eq(part2.get_type(), 'application/riscos')
! def test_multipart_digest_with_extra_mime_headers(self):
! eq = self.assertEqual
! neq = self.ndiffAssertEqual
! fp = openfile('msg_28.txt')
! try:
! msg = email.message_from_file(fp)
! finally:
! fp.close()
! # Structure is:
! # multipart/digest
! # message/rfc822
! # text/plain
! # message/rfc822
! # text/plain
! eq(msg.is_multipart(), 1)
! eq(len(msg.get_payload()), 2)
! part1 = msg.get_payload(0)
! eq(part1.get_type(), 'message/rfc822')
! eq(part1.is_multipart(), 1)
! eq(len(part1.get_payload()), 1)
! part1a = part1.get_payload(0)
! eq(part1a.is_multipart(), 0)
! eq(part1a.get_type(), 'text/plain')
! neq(part1a.get_payload(), 'message 1\n')
! # next message/rfc822
! part2 = msg.get_payload(1)
! eq(part2.get_type(), 'message/rfc822')
! eq(part2.is_multipart(), 1)
! eq(len(part2.get_payload()), 1)
! part2a = part2.get_payload(0)
! eq(part2a.is_multipart(), 0)
! eq(part2a.get_type(), 'text/plain')
! neq(part2a.get_payload(), 'message 2\n')