From 20fde315b282b2853cde68a78c7502f4df942cad Mon Sep 17 00:00:00 2001 From: Emmanuel Arias Date: Mon, 17 Dec 2018 20:04:21 -0300 Subject: [PATCH 1/3] Fix bpo-19217 --- Lib/difflib.py | 6 +++++- Lib/unittest/case.py | 8 +++++--- Lib/unittest/test/test_case.py | 6 ++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Lib/difflib.py b/Lib/difflib.py index 887c3c26cae4588..337a83d0ee19943 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -1187,7 +1187,11 @@ 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) or isinstance(a, tuple) and \ + isinstance(b, list) or isinstance(b, tuple): + yield '{}'.format(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..f6a23afb01ee1d7 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_case.py b/Lib/unittest/test/test_case.py index 687fe5b65f109e7..b11da49b362dce2 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,) From 6996d8a345a5e22768fbc299277fd133666a458b Mon Sep 17 00:00:00 2001 From: eamanu Date: Mon, 17 Dec 2018 23:05:36 -0300 Subject: [PATCH 2/3] fix unnecessary space and solve @gpshead comments --- Lib/difflib.py | 5 ++--- Lib/unittest/case.py | 6 +++--- Lib/unittest/test/test_case.py | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Lib/difflib.py b/Lib/difflib.py index 337a83d0ee19943..0d2c4927847235f 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -1187,9 +1187,8 @@ 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]) - if isinstance(a, list) or isinstance(a, tuple) and \ - isinstance(b, list) or isinstance(b, tuple): - yield '{}'.format(lineterm) + if isinstance(a, (list, tuple)) and isinstance(b, (list, tuple)): + yield lineterm else: yield '@@ -{} +{} @@{}'.format(file1_range, file2_range, lineterm) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index f6a23afb01ee1d7..8be3af3297559fa 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -1058,9 +1058,9 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): 'of second %s\n' % (len1, seq_type_name)) standardMsg = differing diffMsg = difflib.unified_diff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines(), - fromfile='expected', tofile='got', - lineterm='') + pprint.pformat(seq2).splitlines(), + fromfile='expected', tofile='got', + lineterm='') diffMsg = '\n' + '\n'.join(diffMsg) standardMsg = self._truncateMessage(standardMsg, diffMsg) diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py index b11da49b362dce2..68fbdef7665b9c0 100644 --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -790,8 +790,8 @@ def testAssertSequenceEqualMaxDiff(self): seq1 = 'a' + 'x' * 80**2 seq2 = 'b' + 'x' * 80**2 diff = difflib.unified_diff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines(), - lineterm='') + 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,) From adfcf6d2bdd66f13f6ff798fce852e401b3dcb84 Mon Sep 17 00:00:00 2001 From: Emmanuel Arias Date: Tue, 18 Dec 2018 09:54:32 -0300 Subject: [PATCH 3/3] fix test --- Lib/unittest/test/test_assertions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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])),