blob: 77d39a627eec601117127f89fa945d88937611e4 [file] [log] [blame]
Fred Drake0aaed272000-10-23 13:39:15 +00001import mailbox
2import os
Fred Drakec02bc3e2001-05-21 20:23:21 +00003import time
4import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00005from test import test_support
Fred Drake0aaed272000-10-23 13:39:15 +00006
Fred Drakec02bc3e2001-05-21 20:23:21 +00007# cleanup earlier tests
Guido van Rossum75ebb292001-04-10 15:01:20 +00008try:
9 os.unlink(test_support.TESTFN)
10except os.error:
11 pass
12
Skip Montanaro5253da12004-07-24 19:56:03 +000013FROM_ = "From some.body@dummy.domain Sat Jul 24 13:43:35 2004\n"
Fred Drakec02bc3e2001-05-21 20:23:21 +000014DUMMY_MESSAGE = """\
15From: some.body@dummy.domain
16To: me@my.domain
Skip Montanaro5253da12004-07-24 19:56:03 +000017Subject: Simple Test
Fred Drakec02bc3e2001-05-21 20:23:21 +000018
19This is a dummy message.
20"""
21
Fred Drakec02bc3e2001-05-21 20:23:21 +000022class MaildirTestCase(unittest.TestCase):
23
24 def setUp(self):
25 # create a new maildir mailbox to work with:
26 self._dir = test_support.TESTFN
27 os.mkdir(self._dir)
28 os.mkdir(os.path.join(self._dir, "cur"))
29 os.mkdir(os.path.join(self._dir, "tmp"))
30 os.mkdir(os.path.join(self._dir, "new"))
31 self._counter = 1
32 self._msgfiles = []
33
34 def tearDown(self):
35 map(os.unlink, self._msgfiles)
36 os.rmdir(os.path.join(self._dir, "cur"))
37 os.rmdir(os.path.join(self._dir, "tmp"))
38 os.rmdir(os.path.join(self._dir, "new"))
39 os.rmdir(self._dir)
40
Skip Montanaro5253da12004-07-24 19:56:03 +000041 def createMessage(self, dir, mbox=False):
Jack Jansen97df7b62001-06-19 20:20:05 +000042 t = int(time.time() % 1000000)
Fred Drakec02bc3e2001-05-21 20:23:21 +000043 pid = self._counter
44 self._counter += 1
Guido van Rossume2ae77b2001-10-24 20:42:55 +000045 filename = os.extsep.join((str(t), str(pid), "myhostname", "mydomain"))
Fred Drakec02bc3e2001-05-21 20:23:21 +000046 tmpname = os.path.join(self._dir, "tmp", filename)
47 newname = os.path.join(self._dir, dir, filename)
48 fp = open(tmpname, "w")
49 self._msgfiles.append(tmpname)
Skip Montanaro5253da12004-07-24 19:56:03 +000050 if mbox:
51 fp.write(FROM_)
Fred Drakec02bc3e2001-05-21 20:23:21 +000052 fp.write(DUMMY_MESSAGE)
53 fp.close()
Tim Peters6626c1f2001-05-22 16:29:01 +000054 if hasattr(os, "link"):
55 os.link(tmpname, newname)
56 else:
57 fp = open(newname, "w")
58 fp.write(DUMMY_MESSAGE)
59 fp.close()
Fred Drakec02bc3e2001-05-21 20:23:21 +000060 self._msgfiles.append(newname)
Skip Montanaro5253da12004-07-24 19:56:03 +000061 return tmpname
Fred Drakec02bc3e2001-05-21 20:23:21 +000062
63 def test_empty_maildir(self):
64 """Test an empty maildir mailbox"""
65 # Test for regression on bug #117490:
66 # Make sure the boxes attribute actually gets set.
67 self.mbox = mailbox.Maildir(test_support.TESTFN)
68 self.assert_(hasattr(self.mbox, "boxes"))
69 self.assert_(len(self.mbox.boxes) == 0)
70 self.assert_(self.mbox.next() is None)
71 self.assert_(self.mbox.next() is None)
72
73 def test_nonempty_maildir_cur(self):
74 self.createMessage("cur")
75 self.mbox = mailbox.Maildir(test_support.TESTFN)
76 self.assert_(len(self.mbox.boxes) == 1)
77 self.assert_(self.mbox.next() is not None)
78 self.assert_(self.mbox.next() is None)
79 self.assert_(self.mbox.next() is None)
80
81 def test_nonempty_maildir_new(self):
82 self.createMessage("new")
83 self.mbox = mailbox.Maildir(test_support.TESTFN)
84 self.assert_(len(self.mbox.boxes) == 1)
85 self.assert_(self.mbox.next() is not None)
86 self.assert_(self.mbox.next() is None)
87 self.assert_(self.mbox.next() is None)
88
89 def test_nonempty_maildir_both(self):
90 self.createMessage("cur")
91 self.createMessage("new")
92 self.mbox = mailbox.Maildir(test_support.TESTFN)
93 self.assert_(len(self.mbox.boxes) == 2)
94 self.assert_(self.mbox.next() is not None)
95 self.assert_(self.mbox.next() is not None)
96 self.assert_(self.mbox.next() is None)
97 self.assert_(self.mbox.next() is None)
Fred Drake0aaed272000-10-23 13:39:15 +000098
Skip Montanaro5253da12004-07-24 19:56:03 +000099 def test_unix_mbox(self):
100 ### should be better!
101 import email.Parser
102 fname = self.createMessage("cur", True)
103 n = 0
104 for msg in mailbox.PortableUnixMailbox(open(fname),
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
Fred Drake0aaed272000-10-23 13:39:15 +0000111 # XXX We still need more tests!
112
Fred Drakec02bc3e2001-05-21 20:23:21 +0000113
Fred Drake2e2be372001-09-20 21:33:42 +0000114def test_main():
115 test_support.run_unittest(MaildirTestCase)
116
117
118if __name__ == "__main__":
119 test_main()