Skip to content

Commit 819b341

Browse files
unittest assertEqual difference output foiled by newlines
1 parent 6fe9c44 commit 819b341

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

Lib/unittest/case.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1238,6 +1238,11 @@ def assertCountEqual(self, first, second, msg=None):
12381238
msg = self._formatMessage(msg, standardMsg)
12391239
self.fail(msg)
12401240

1241+
def addTrailingNewLine(self, line):
1242+
if line != '' and line[-1] != '\n':
1243+
line = line + '\n'
1244+
return line
1245+
12411246
def assertMultiLineEqual(self, first, second, msg=None):
12421247
"""Assert that two multi-line strings are equal."""
12431248
self.assertIsInstance(first, str, 'First argument is not a string')
@@ -1248,13 +1253,16 @@ def assertMultiLineEqual(self, first, second, msg=None):
12481253
if (len(first) > self._diffThreshold or
12491254
len(second) > self._diffThreshold):
12501255
self._baseAssertEqual(first, second, msg)
1251-
firstlines = first.splitlines(keepends=True)
1256+
firstlines = first.splitlines(keepends=True)
12521257
secondlines = second.splitlines(keepends=True)
12531258
if len(firstlines) == 1 and first.strip('\r\n') == first:
12541259
firstlines = [first + '\n']
12551260
secondlines = [second + '\n']
12561261
standardMsg = '%s != %s' % _common_shorten_repr(first, second)
1257-
diff = '\n' + ''.join(difflib.ndiff(firstlines, secondlines))
1262+
difflines = list(difflib.ndiff(firstlines, secondlines))
1263+
if len(difflines) > 1:
1264+
difflines = [self.addTrailingNewLine(line) for line in difflines]
1265+
diff = '\n' + ''.join(difflines)
12581266
standardMsg = self._truncateMessage(standardMsg, diff)
12591267
self.fail(self._formatMessage(msg, standardMsg))
12601268

Lib/unittest/test/test_case.py

+15
Original file line numberDiff line numberDiff line change
@@ -1839,5 +1839,20 @@ def test2(self):
18391839
self.assertEqual(MyException.ninstance, 0)
18401840

18411841

1842+
class testAssertEqualSingleLine(unittest.TestCase):
1843+
1844+
def test_trailing_new_line_at_end(self):
1845+
self.assertEqual("abc\n", "abc\n")
1846+
def test_trailing_space_at_end(self):
1847+
self.assertEqual("abc ", "abc ")
1848+
def test_no_trailing_new_line(self):
1849+
self.assertEqual("abc", "abc")
1850+
def test_new_line_at_beginning(self):
1851+
self.assertEqual("\nabc", "\nabc")
1852+
def test_new_line_at_start_and_end(self):
1853+
self.assertEqual("\nabc\n", "\nabc\n")
1854+
def test_with_space_at_start_and_end(self):
1855+
self.assertEqual(" abc ", " abc ")
1856+
18421857
if __name__ == "__main__":
18431858
unittest.main()

0 commit comments

Comments
 (0)