Home | History | Annotate | Download | only in test
      1 # This set of tests exercises the backward-compatibility class

      2 # in mailbox.py (the ones without write support).

      3 
      4 import mailbox
      5 import os
      6 import time
      7 import unittest
      8 from test import test_support
      9 
     10 # cleanup earlier tests

     11 try:
     12     os.unlink(test_support.TESTFN)
     13 except os.error:
     14     pass
     15 
     16 FROM_ = "From some.body (at] dummy.domain  Sat Jul 24 13:43:35 2004\n"
     17 DUMMY_MESSAGE = """\
     18 From: some.body (at] dummy.domain
     19 To: me (at] my.domain
     20 Subject: Simple Test
     21 
     22 This is a dummy message.
     23 """
     24 
     25 class MaildirTestCase(unittest.TestCase):
     26 
     27     def setUp(self):
     28         # create a new maildir mailbox to work with:

     29         self._dir = test_support.TESTFN
     30         os.mkdir(self._dir)
     31         os.mkdir(os.path.join(self._dir, "cur"))
     32         os.mkdir(os.path.join(self._dir, "tmp"))
     33         os.mkdir(os.path.join(self._dir, "new"))
     34         self._counter = 1
     35         self._msgfiles = []
     36 
     37     def tearDown(self):
     38         map(os.unlink, self._msgfiles)
     39         os.rmdir(os.path.join(self._dir, "cur"))
     40         os.rmdir(os.path.join(self._dir, "tmp"))
     41         os.rmdir(os.path.join(self._dir, "new"))
     42         os.rmdir(self._dir)
     43 
     44     def createMessage(self, dir, mbox=False):
     45         t = int(time.time() % 1000000)
     46         pid = self._counter
     47         self._counter += 1
     48         filename = os.extsep.join((str(t), str(pid), "myhostname", "mydomain"))
     49         tmpname = os.path.join(self._dir, "tmp", filename)
     50         newname = os.path.join(self._dir, dir, filename)
     51         with open(tmpname, "w") as fp:
     52             self._msgfiles.append(tmpname)
     53             if mbox:
     54                 fp.write(FROM_)
     55             fp.write(DUMMY_MESSAGE)
     56         if hasattr(os, "link"):
     57             os.link(tmpname, newname)
     58         else:
     59             with open(newname, "w") as fp:
     60                 fp.write(DUMMY_MESSAGE)
     61         self._msgfiles.append(newname)
     62         return tmpname
     63 
     64     def test_empty_maildir(self):
     65         """Test an empty maildir mailbox"""
     66         # Test for regression on bug #117490:

     67         self.mbox = mailbox.Maildir(test_support.TESTFN)
     68         self.assertTrue(len(self.mbox) == 0)
     69         self.assertTrue(self.mbox.next() is None)
     70         self.assertTrue(self.mbox.next() is None)
     71 
     72     def test_nonempty_maildir_cur(self):
     73         self.createMessage("cur")
     74         self.mbox = mailbox.Maildir(test_support.TESTFN)
     75         self.assertTrue(len(self.mbox) == 1)
     76         self.assertTrue(self.mbox.next() is not None)
     77         self.assertTrue(self.mbox.next() is None)
     78         self.assertTrue(self.mbox.next() is None)
     79 
     80     def test_nonempty_maildir_new(self):
     81         self.createMessage("new")
     82         self.mbox = mailbox.Maildir(test_support.TESTFN)
     83         self.assertTrue(len(self.mbox) == 1)
     84         self.assertTrue(self.mbox.next() is not None)
     85         self.assertTrue(self.mbox.next() is None)
     86         self.assertTrue(self.mbox.next() is None)
     87 
     88     def test_nonempty_maildir_both(self):
     89         self.createMessage("cur")
     90         self.createMessage("new")
     91         self.mbox = mailbox.Maildir(test_support.TESTFN)
     92         self.assertTrue(len(self.mbox) == 2)
     93         self.assertTrue(self.mbox.next() is not None)
     94         self.assertTrue(self.mbox.next() is not None)
     95         self.assertTrue(self.mbox.next() is None)
     96         self.assertTrue(self.mbox.next() is None)
     97 
     98     def test_unix_mbox(self):
     99         ### should be better!

    100         import email.parser
    101         fname = self.createMessage("cur", True)
    102         n = 0
    103         with open(fname) as f:
    104             for msg in mailbox.PortableUnixMailbox(f,
    105                                                email.parser.Parser().parse):
    106                 n += 1
    107                 self.assertEqual(msg["subject"], "Simple Test")
    108                 self.assertEqual(len(str(msg)), len(FROM_)+len(DUMMY_MESSAGE))
    109         self.assertEqual(n, 1)
    110 
    111 class MboxTestCase(unittest.TestCase):
    112     def setUp(self):
    113         # create a new maildir mailbox to work with:

    114         self._path = test_support.TESTFN
    115 
    116     def tearDown(self):
    117         os.unlink(self._path)
    118 
    119     def test_from_regex (self):
    120         # Testing new regex from bug #1633678

    121         with open(self._path, 'w') as f:
    122             f.write("""From fred (at] example.com Mon May 31 13:24:50 2004 +0200
    123 Subject: message 1
    124 
    125 body1
    126 From fred (at] example.com Mon May 31 13:24:50 2004 -0200
    127 Subject: message 2
    128 
    129 body2
    130 From fred (at] example.com Mon May 31 13:24:50 2004
    131 Subject: message 3
    132 
    133 body3
    134 From fred (at] example.com Mon May 31 13:24:50 2004
    135 Subject: message 4
    136 
    137 body4
    138 """)
    139         with open(self._path, 'r') as f:
    140             box = mailbox.UnixMailbox(f)
    141             self.assertTrue(len(list(iter(box))) == 4)
    142 
    143 
    144     # XXX We still need more tests!

    145 
    146 
    147 def test_main():
    148     test_support.run_unittest(MaildirTestCase, MboxTestCase)
    149 
    150 
    151 if __name__ == "__main__":
    152     test_main()
    153