[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')