Skip to content

Commit

Permalink
Merged revisions 81728 via svnmerge from
Browse files Browse the repository at this point in the history
svn+ssh://[email protected]/python/trunk

........
  r81728 | michael.foord | 2010-06-05 12:23:51 +0100 (Sat, 05 Jun 2010) | 1 line

  Issue 8351. Suppress large diffs in unittest.TestCase.assertSequenceEqual.
........
  • Loading branch information
Michael Foord committed Jun 5, 2010
1 parent 4107d31 commit 2034d9a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
13 changes: 10 additions & 3 deletions Lib/unittest/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
unorderable_list_difference)

__unittest = True

TRUNCATED_DIFF = '\n[diff truncated...]'

class SkipTest(Exception):
"""
Expand Down Expand Up @@ -599,7 +599,8 @@ def deprecated_func(*args, **kwargs):
failUnlessRaises = _deprecate(assertRaises)
failIf = _deprecate(assertFalse)

def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None,
max_diff=80*8):
"""An equality assertion for ordered sequences (like lists and tuples).
For the purposes of this function, a valid ordered sequence type is one
Expand All @@ -612,6 +613,7 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
datatype should be enforced.
msg: Optional message to use on failure instead of a list of
differences.
max_diff: Maximum size off the diff, larger diffs are not shown
"""
if seq_type != None:
seq_type_name = seq_type.__name__
Expand Down Expand Up @@ -694,9 +696,14 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
except (TypeError, IndexError, NotImplementedError):
differing += ('Unable to index element %d '
'of second %s\n' % (len1, seq_type_name))
standardMsg = differing + '\n' + '\n'.join(
standardMsg = differing
diffMsg = '\n' + '\n'.join(
difflib.ndiff(pprint.pformat(seq1).splitlines(),
pprint.pformat(seq2).splitlines()))
if max_diff is None or len(diffMsg) <= max_diff:
standardMsg += diffMsg
else:
standardMsg += diffMsg[:max_diff] + TRUNCATED_DIFF
msg = self._formatMessage(msg, standardMsg)
self.fail(msg)

Expand Down
19 changes: 19 additions & 0 deletions Lib/unittest/test/test_case.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import difflib
import pprint
import re
import sys

Expand Down Expand Up @@ -589,6 +591,23 @@ def testEquality(self):
self.assertRaises(self.failureException, self.assertDictEqual, [], d)
self.assertRaises(self.failureException, self.assertDictEqual, 1, 1)

def testAssertSequenceEqualMaxDiff(self):
seq1 = 'a' + 'x' * 80**2
seq2 = 'b' + 'x' * 80**2
diff = '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(),
pprint.pformat(seq2).splitlines()))
try:
self.assertSequenceEqual(seq1, seq2, max_diff=len(diff)/2)
except AssertionError as e:
msg = e.args[0]
self.assertTrue(len(msg) < len(diff))

try:
self.assertSequenceEqual(seq1, seq2, max_diff=len(diff)*2)
except AssertionError as e:
msg = e.args[0]
self.assertTrue(len(msg) > len(diff))

def testAssertItemsEqual(self):
a = object()
self.assertItemsEqual([1, 2, 3], [3, 2, 1])
Expand Down

0 comments on commit 2034d9a

Please sign in to comment.