@@ -53,7 +53,7 @@ class TestMailbox(TestBase):
5353 maxDiff = None
5454
5555 _factory = None # Overridden by subclasses to reuse tests
56- _template = 'From: foo\n \n %s'
56+ _template = 'From: foo\n \n %s\n '
5757
5858 def setUp (self ):
5959 self ._path = support .TESTFN
@@ -232,22 +232,22 @@ def test_get(self):
232232 key0 = self ._box .add (self ._template % 0 )
233233 msg = self ._box .get (key0 )
234234 self .assertEqual (msg ['from' ], 'foo' )
235- self .assertEqual (msg .get_payload (), '0' )
235+ self .assertEqual (msg .get_payload (), '0\n ' )
236236 self .assertIs (self ._box .get ('foo' ), None )
237237 self .assertIs (self ._box .get ('foo' , False ), False )
238238 self ._box .close ()
239239 self ._box = self ._factory (self ._path )
240240 key1 = self ._box .add (self ._template % 1 )
241241 msg = self ._box .get (key1 )
242242 self .assertEqual (msg ['from' ], 'foo' )
243- self .assertEqual (msg .get_payload (), '1' )
243+ self .assertEqual (msg .get_payload (), '1\n ' )
244244
245245 def test_getitem (self ):
246246 # Retrieve message using __getitem__()
247247 key0 = self ._box .add (self ._template % 0 )
248248 msg = self ._box [key0 ]
249249 self .assertEqual (msg ['from' ], 'foo' )
250- self .assertEqual (msg .get_payload (), '0' )
250+ self .assertEqual (msg .get_payload (), '0\n ' )
251251 self .assertRaises (KeyError , lambda : self ._box ['foo' ])
252252 self ._box .discard (key0 )
253253 self .assertRaises (KeyError , lambda : self ._box [key0 ])
@@ -259,7 +259,7 @@ def test_get_message(self):
259259 msg0 = self ._box .get_message (key0 )
260260 self .assertIsInstance (msg0 , mailbox .Message )
261261 self .assertEqual (msg0 ['from' ], 'foo' )
262- self .assertEqual (msg0 .get_payload (), '0' )
262+ self .assertEqual (msg0 .get_payload (), '0\n ' )
263263 self ._check_sample (self ._box .get_message (key1 ))
264264
265265 def test_get_bytes (self ):
@@ -432,15 +432,15 @@ def test_pop(self):
432432 self .assertIn (key0 , self ._box )
433433 key1 = self ._box .add (self ._template % 1 )
434434 self .assertIn (key1 , self ._box )
435- self .assertEqual (self ._box .pop (key0 ).get_payload (), '0' )
435+ self .assertEqual (self ._box .pop (key0 ).get_payload (), '0\n ' )
436436 self .assertNotIn (key0 , self ._box )
437437 self .assertIn (key1 , self ._box )
438438 key2 = self ._box .add (self ._template % 2 )
439439 self .assertIn (key2 , self ._box )
440- self .assertEqual (self ._box .pop (key2 ).get_payload (), '2' )
440+ self .assertEqual (self ._box .pop (key2 ).get_payload (), '2\n ' )
441441 self .assertNotIn (key2 , self ._box )
442442 self .assertIn (key1 , self ._box )
443- self .assertEqual (self ._box .pop (key1 ).get_payload (), '1' )
443+ self .assertEqual (self ._box .pop (key1 ).get_payload (), '1\n ' )
444444 self .assertNotIn (key1 , self ._box )
445445 self .assertEqual (len (self ._box ), 0 )
446446
@@ -635,15 +635,15 @@ def test_set_MM(self):
635635 msg_returned = self ._box .get_message (key )
636636 self .assertEqual (msg_returned .get_subdir (), 'new' )
637637 self .assertEqual (msg_returned .get_flags (), '' )
638- self .assertEqual (msg_returned .get_payload (), '1' )
638+ self .assertEqual (msg_returned .get_payload (), '1\n ' )
639639 msg2 = mailbox .MaildirMessage (self ._template % 2 )
640640 msg2 .set_info ('2,S' )
641641 self ._box [key ] = msg2
642642 self ._box [key ] = self ._template % 3
643643 msg_returned = self ._box .get_message (key )
644644 self .assertEqual (msg_returned .get_subdir (), 'new' )
645645 self .assertEqual (msg_returned .get_flags (), 'S' )
646- self .assertEqual (msg_returned .get_payload (), '3' )
646+ self .assertEqual (msg_returned .get_payload (), '3\n ' )
647647
648648 def test_consistent_factory (self ):
649649 # Add a message.
@@ -996,20 +996,20 @@ def assertMailboxEmpty(self):
996996
997997 def test_add_from_string (self ):
998998 # Add a string starting with 'From ' to the mailbox
999- key = self ._box .add ('From foo@bar blah\n From: foo\n \n 0' )
999+ key = self ._box .add ('From foo@bar blah\n From: foo\n \n 0\n ' )
10001000 self .assertEqual (self ._box [key ].get_from (), 'foo@bar blah' )
1001- self .assertEqual (self ._box [key ].get_payload (), '0' )
1001+ self .assertEqual (self ._box [key ].get_payload (), '0\n ' )
10021002
10031003 def test_add_from_bytes (self ):
10041004 # Add a byte string starting with 'From ' to the mailbox
1005- key = self ._box .add (b'From foo@bar blah\n From: foo\n \n 0' )
1005+ key = self ._box .add (b'From foo@bar blah\n From: foo\n \n 0\n ' )
10061006 self .assertEqual (self ._box [key ].get_from (), 'foo@bar blah' )
1007- self .assertEqual (self ._box [key ].get_payload (), '0' )
1007+ self .assertEqual (self ._box [key ].get_payload (), '0\n ' )
10081008
10091009 def test_add_mbox_or_mmdf_message (self ):
10101010 # Add an mboxMessage or MMDFMessage
10111011 for class_ in (mailbox .mboxMessage , mailbox .MMDFMessage ):
1012- msg = class_ ('From foo@bar blah\n From: foo\n \n 0' )
1012+ msg = class_ ('From foo@bar blah\n From: foo\n \n 0\n ' )
10131013 key = self ._box .add (msg )
10141014
10151015 def test_open_close_open (self ):
@@ -1116,6 +1116,29 @@ def test_file_perms(self):
11161116 perms = st .st_mode
11171117 self .assertFalse ((perms & 0o111 )) # Execute bits should all be off.
11181118
1119+ def test_terminating_newline (self ):
1120+ message = email .message .Message ()
1121+ message [
'From' ]
= '[email protected] ' 1122+ message .set_payload ('No newline at the end' )
1123+ i = self ._box .add (message )
1124+
1125+ # A newline should have been appended to the payload
1126+ message = self ._box .get (i )
1127+ self .assertEqual (message .get_payload (), 'No newline at the end\n ' )
1128+
1129+ def test_message_separator (self ):
1130+ # Check there's always a single blank line after each message
1131+ self ._box .add ('From: foo\n \n 0' ) # No newline at the end
1132+ with open (self ._path ) as f :
1133+ data = f .read ()
1134+ self .assertEqual (data [- 3 :], '0\n \n ' )
1135+
1136+ self ._box .add ('From: foo\n \n 0\n ' ) # Newline at the end
1137+ with open (self ._path ) as f :
1138+ data = f .read ()
1139+ self .assertEqual (data [- 3 :], '0\n \n ' )
1140+
1141+
11191142class TestMMDF (_TestMboxMMDF , unittest .TestCase ):
11201143
11211144 _factory = lambda self , path , factory = None : mailbox .MMDF (path , factory )
0 commit comments