diff --git a/Lib/test/output/test_mailbox b/Lib/test/output/test_mailbox index eada229788c5..7b0e6be9017e 100644 --- a/Lib/test/output/test_mailbox +++ b/Lib/test/output/test_mailbox @@ -1,2 +1 @@ test_mailbox -newly created maildir contains 0 messages diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py index 1d1a06372057..98584593cf4c 100644 --- a/Lib/test/test_mailbox.py +++ b/Lib/test/test_mailbox.py @@ -1,34 +1,94 @@ import mailbox import os import test_support +import time +import unittest -# cleanup +# cleanup earlier tests try: os.unlink(test_support.TESTFN) except os.error: pass -# create a new maildir mailbox to work with: -curdir = os.path.join(test_support.TESTFN, "cur") -newdir = os.path.join(test_support.TESTFN, "new") -try: - os.mkdir(test_support.TESTFN) - os.mkdir(curdir) - os.mkdir(newdir) - # Test for regression on bug #117490: - # http://sourceforge.net/bugs/?func=detailbug&bug_id=117490&group_id=5470 - # Make sure the boxes attribute actually gets set. - mbox = mailbox.Maildir(test_support.TESTFN) - mbox.boxes - print "newly created maildir contains", len(mbox.boxes), "messages" +DUMMY_MESSAGE = """\ +From: some.body@dummy.domain +To: me@my.domain + +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): + t = int(time.time()) + pid = self._counter + self._counter += 1 + filename = "%s.%s.myhostname.mydomain" % (t, pid) + tmpname = os.path.join(self._dir, "tmp", filename) + newname = os.path.join(self._dir, dir, filename) + fp = open(tmpname, "w") + self._msgfiles.append(tmpname) + fp.write(DUMMY_MESSAGE) + fp.close() + os.link(tmpname, newname) + self._msgfiles.append(newname) + + def test_empty_maildir(self): + """Test an empty maildir mailbox""" + # Test for regression on bug #117490: + # Make sure the boxes attribute actually gets set. + self.mbox = mailbox.Maildir(test_support.TESTFN) + self.assert_(hasattr(self.mbox, "boxes")) + self.assert_(len(self.mbox.boxes) == 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.boxes) == 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.boxes) == 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.boxes) == 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) # XXX We still need more tests! -finally: - try: os.rmdir(newdir) - except os.error: pass - try: os.rmdir(curdir) - except os.error: pass - try: os.rmdir(test_support.TESTFN) - except os.error: pass + +test_support.run_unittest(MaildirTestCase)