| 
									
										
										
										
											2006-04-22 02:06:03 +00:00
										 |  |  | # This set of tests exercises the backward-compatibility class | 
					
						
							|  |  |  | # in mailbox.py (the ones without write support). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import mailbox | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | from test import test_support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # cleanup earlier tests | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     os.unlink(test_support.TESTFN) | 
					
						
							|  |  |  | except os.error: | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FROM_ = "From some.body@dummy.domain  Sat Jul 24 13:43:35 2004\n" | 
					
						
							|  |  |  | DUMMY_MESSAGE = """\
 | 
					
						
							|  |  |  | From: some.body@dummy.domain | 
					
						
							|  |  |  | To: me@my.domain | 
					
						
							|  |  |  | Subject: Simple Test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is a dummy message. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MaildirTestCase(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         # create a new maildir mailbox to work with: | 
					
						
							|  |  |  |         self._dir = test_support.TESTFN | 
					
						
							|  |  |  |         os.mkdir(self._dir) | 
					
						
							|  |  |  |         os.mkdir(os.path.join(self._dir, "cur")) | 
					
						
							|  |  |  |         os.mkdir(os.path.join(self._dir, "tmp")) | 
					
						
							|  |  |  |         os.mkdir(os.path.join(self._dir, "new")) | 
					
						
							|  |  |  |         self._counter = 1 | 
					
						
							|  |  |  |         self._msgfiles = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         map(os.unlink, self._msgfiles) | 
					
						
							|  |  |  |         os.rmdir(os.path.join(self._dir, "cur")) | 
					
						
							|  |  |  |         os.rmdir(os.path.join(self._dir, "tmp")) | 
					
						
							|  |  |  |         os.rmdir(os.path.join(self._dir, "new")) | 
					
						
							|  |  |  |         os.rmdir(self._dir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def createMessage(self, dir, mbox=False): | 
					
						
							|  |  |  |         t = int(time.time() % 1000000) | 
					
						
							|  |  |  |         pid = self._counter | 
					
						
							|  |  |  |         self._counter += 1 | 
					
						
							|  |  |  |         filename = os.extsep.join((str(t), str(pid), "myhostname", "mydomain")) | 
					
						
							|  |  |  |         tmpname = os.path.join(self._dir, "tmp", filename) | 
					
						
							|  |  |  |         newname = os.path.join(self._dir, dir, filename) | 
					
						
							|  |  |  |         fp = open(tmpname, "w") | 
					
						
							|  |  |  |         self._msgfiles.append(tmpname) | 
					
						
							|  |  |  |         if mbox: | 
					
						
							|  |  |  |             fp.write(FROM_) | 
					
						
							|  |  |  |         fp.write(DUMMY_MESSAGE) | 
					
						
							|  |  |  |         fp.close() | 
					
						
							|  |  |  |         if hasattr(os, "link"): | 
					
						
							|  |  |  |             os.link(tmpname, newname) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             fp = open(newname, "w") | 
					
						
							|  |  |  |             fp.write(DUMMY_MESSAGE) | 
					
						
							|  |  |  |             fp.close() | 
					
						
							|  |  |  |         self._msgfiles.append(newname) | 
					
						
							|  |  |  |         return tmpname | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_empty_maildir(self): | 
					
						
							|  |  |  |         """Test an empty maildir mailbox""" | 
					
						
							|  |  |  |         # Test for regression on bug #117490: | 
					
						
							|  |  |  |         self.mbox = mailbox.Maildir(test_support.TESTFN) | 
					
						
							|  |  |  |         self.assert_(len(self.mbox) == 0) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_nonempty_maildir_cur(self): | 
					
						
							|  |  |  |         self.createMessage("cur") | 
					
						
							|  |  |  |         self.mbox = mailbox.Maildir(test_support.TESTFN) | 
					
						
							|  |  |  |         self.assert_(len(self.mbox) == 1) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is not None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_nonempty_maildir_new(self): | 
					
						
							|  |  |  |         self.createMessage("new") | 
					
						
							|  |  |  |         self.mbox = mailbox.Maildir(test_support.TESTFN) | 
					
						
							|  |  |  |         self.assert_(len(self.mbox) == 1) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is not None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_nonempty_maildir_both(self): | 
					
						
							|  |  |  |         self.createMessage("cur") | 
					
						
							|  |  |  |         self.createMessage("new") | 
					
						
							|  |  |  |         self.mbox = mailbox.Maildir(test_support.TESTFN) | 
					
						
							|  |  |  |         self.assert_(len(self.mbox) == 2) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is not None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is not None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  |         self.assert_(self.mbox.next() is None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_unix_mbox(self): | 
					
						
							|  |  |  |         ### should be better! | 
					
						
							|  |  |  |         import email.Parser | 
					
						
							|  |  |  |         fname = self.createMessage("cur", True) | 
					
						
							|  |  |  |         n = 0 | 
					
						
							|  |  |  |         for msg in mailbox.PortableUnixMailbox(open(fname), | 
					
						
							|  |  |  |                                                email.Parser.Parser().parse): | 
					
						
							|  |  |  |             n += 1 | 
					
						
							|  |  |  |             self.assertEqual(msg["subject"], "Simple Test") | 
					
						
							|  |  |  |             self.assertEqual(len(str(msg)), len(FROM_)+len(DUMMY_MESSAGE)) | 
					
						
							|  |  |  |         self.assertEqual(n, 1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-01-22 20:26:40 +00:00
										 |  |  | class MboxTestCase(unittest.TestCase): | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         # create a new maildir mailbox to work with: | 
					
						
							|  |  |  |         self._path = test_support.TESTFN | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         os.unlink(self._path) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     def test_from_regex (self): | 
					
						
							|  |  |  |         # Testing new regex from bug #1633678 | 
					
						
							|  |  |  |         f = open(self._path, 'w') | 
					
						
							|  |  |  |         f.write("""From fred@example.com Mon May 31 13:24:50 2004 +0200
 | 
					
						
							|  |  |  | Subject: message 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | body1 | 
					
						
							|  |  |  | From fred@example.com Mon May 31 13:24:50 2004 -0200 | 
					
						
							|  |  |  | Subject: message 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | body2 | 
					
						
							|  |  |  | From fred@example.com Mon May 31 13:24:50 2004 | 
					
						
							|  |  |  | Subject: message 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | body3 | 
					
						
							|  |  |  | From fred@example.com Mon May 31 13:24:50 2004 | 
					
						
							|  |  |  | Subject: message 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | body4 | 
					
						
							|  |  |  | """)
 | 
					
						
							|  |  |  |         f.close() | 
					
						
							|  |  |  |         box = mailbox.UnixMailbox(open(self._path, 'r')) | 
					
						
							|  |  |  |         self.assert_(len(list(iter(box))) == 4) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-22 02:06:03 +00:00
										 |  |  |     # XXX We still need more tests! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2007-01-22 20:26:40 +00:00
										 |  |  |     test_support.run_unittest(MaildirTestCase, MboxTestCase) | 
					
						
							| 
									
										
										
										
											2006-04-22 02:06:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     test_main() |