diff --git a/Lib/difflib.py b/Lib/difflib.py index 887c3c26cae4588..0d2c4927847235f 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -1187,7 +1187,10 @@ def unified_diff(a, b, fromfile='', tofile='', fromfiledate='', first, last = group[0], group[-1] file1_range = _format_range_unified(first[1], last[2]) file2_range = _format_range_unified(first[3], last[4]) - yield '@@ -{} +{} @@{}'.format(file1_range, file2_range, lineterm) + if isinstance(a, (list, tuple)) and isinstance(b, (list, tuple)): + yield lineterm + else: + yield '@@ -{} +{} @@{}'.format(file1_range, file2_range, lineterm) for tag, i1, i2, j1, j2 in group: if tag == 'equal': diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index a157ae8a14bcbe0..8be3af3297559fa 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -1057,9 +1057,11 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): differing += ('Unable to index element %d ' 'of second %s\n' % (len1, seq_type_name)) standardMsg = differing - diffMsg = '\n' + '\n'.join( - difflib.ndiff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines())) + diffMsg = difflib.unified_diff(pprint.pformat(seq1).splitlines(), + pprint.pformat(seq2).splitlines(), + fromfile='expected', tofile='got', + lineterm='') + diffMsg = '\n' + '\n'.join(diffMsg) standardMsg = self._truncateMessage(standardMsg, diffMsg) msg = self._formatMessage(msg, standardMsg) diff --git a/Lib/unittest/test/test_assertions.py b/Lib/unittest/test/test_assertions.py index f5e64d68e7b1014..14a8f231e1c023b 100644 --- a/Lib/unittest/test/test_assertions.py +++ b/Lib/unittest/test/test_assertions.py @@ -242,8 +242,8 @@ def testAssertSequenceEqual(self): # Error messages are multiline so not testing on full message # assertTupleEqual and assertListEqual delegate to this method self.assertMessages('assertSequenceEqual', ([], [None]), - [r"\+ \[None\]$", "^oops$", r"\+ \[None\]$", - r"\+ \[None\] : oops$"]) + [r"\+\[None\]$", "^oops$", r"\+\[None\]$", + r"\+\[None\] : oops$"]) def testAssertSetEqual(self): self.assertMessages('assertSetEqual', (set(), set([None])), diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py index 687fe5b65f109e7..68fbdef7665b9c0 100644 --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -789,8 +789,10 @@ def testAssertSequenceEqualMaxDiff(self): self.assertEqual(self.maxDiff, 80*8) seq1 = 'a' + 'x' * 80**2 seq2 = 'b' + 'x' * 80**2 - diff = '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines())) + diff = difflib.unified_diff(pprint.pformat(seq1).splitlines(), + pprint.pformat(seq2).splitlines(), + lineterm='') + diff = '\n'.join(diff) # the +1 is the leading \n added by assertSequenceEqual omitted = unittest.case.DIFF_OMITTED % (len(diff) + 1,)