From 819b34195d5c89eb15939ff4b0746af4df797486 Mon Sep 17 00:00:00 2001 From: nanjekyejoannah Date: Wed, 16 Jan 2019 12:04:04 +0300 Subject: [PATCH 1/3] unittest assertEqual difference output foiled by newlines --- Lib/unittest/case.py | 12 ++++++++++-- Lib/unittest/test/test_case.py | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index a157ae8a14bcbe..2b20dcf22aba70 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -1238,6 +1238,11 @@ def assertCountEqual(self, first, second, msg=None): msg = self._formatMessage(msg, standardMsg) self.fail(msg) + def addTrailingNewLine(self, line): + if line != '' and line[-1] != '\n': + line = line + '\n' + return line + def assertMultiLineEqual(self, first, second, msg=None): """Assert that two multi-line strings are equal.""" self.assertIsInstance(first, str, 'First argument is not a string') @@ -1248,13 +1253,16 @@ def assertMultiLineEqual(self, first, second, msg=None): if (len(first) > self._diffThreshold or len(second) > self._diffThreshold): self._baseAssertEqual(first, second, msg) - firstlines = first.splitlines(keepends=True) + firstlines = first.splitlines(keepends=True) secondlines = second.splitlines(keepends=True) if len(firstlines) == 1 and first.strip('\r\n') == first: firstlines = [first + '\n'] secondlines = [second + '\n'] standardMsg = '%s != %s' % _common_shorten_repr(first, second) - diff = '\n' + ''.join(difflib.ndiff(firstlines, secondlines)) + difflines = list(difflib.ndiff(firstlines, secondlines)) + if len(difflines) > 1: + difflines = [self.addTrailingNewLine(line) for line in difflines] + diff = '\n' + ''.join(difflines) standardMsg = self._truncateMessage(standardMsg, diff) self.fail(self._formatMessage(msg, standardMsg)) diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py index 687fe5b65f109e..0b834bc4fa7083 100644 --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -1839,5 +1839,20 @@ def test2(self): self.assertEqual(MyException.ninstance, 0) +class testAssertEqualSingleLine(unittest.TestCase): + + def test_trailing_new_line_at_end(self): + self.assertEqual("abc\n", "abc\n") + def test_trailing_space_at_end(self): + self.assertEqual("abc ", "abc ") + def test_no_trailing_new_line(self): + self.assertEqual("abc", "abc") + def test_new_line_at_beginning(self): + self.assertEqual("\nabc", "\nabc") + def test_new_line_at_start_and_end(self): + self.assertEqual("\nabc\n", "\nabc\n") + def test_with_space_at_start_and_end(self): + self.assertEqual(" abc ", " abc ") + if __name__ == "__main__": unittest.main() From 28bd8932c8e5e0198a569b767d7998eb7fabbaec Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" Date: Wed, 16 Jan 2019 09:11:30 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NEWS.d/next/Library/2019-01-16-09-11-29.bpo-24780.69AB4h.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2019-01-16-09-11-29.bpo-24780.69AB4h.rst diff --git a/Misc/NEWS.d/next/Library/2019-01-16-09-11-29.bpo-24780.69AB4h.rst b/Misc/NEWS.d/next/Library/2019-01-16-09-11-29.bpo-24780.69AB4h.rst new file mode 100644 index 00000000000000..4a796eb92caab6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-01-16-09-11-29.bpo-24780.69AB4h.rst @@ -0,0 +1 @@ +unittest assertEqual difference output now not foiled by newlines. \ No newline at end of file From 00190f8e2a9456bba518fc36b885cb4efb077bab Mon Sep 17 00:00:00 2001 From: nanjekyejoannah Date: Wed, 16 Jan 2019 12:21:58 +0300 Subject: [PATCH 3/3] fix space --- Lib/unittest/case.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 2b20dcf22aba70..867589809dd549 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -1253,7 +1253,7 @@ def assertMultiLineEqual(self, first, second, msg=None): if (len(first) > self._diffThreshold or len(second) > self._diffThreshold): self._baseAssertEqual(first, second, msg) - firstlines = first.splitlines(keepends=True) + firstlines = first.splitlines(keepends=True) secondlines = second.splitlines(keepends=True) if len(firstlines) == 1 and first.strip('\r\n') == first: firstlines = [first + '\n']