mirror of
https://github.com/python/cpython.git
synced 2024-11-25 19:03:49 +08:00
Merged revisions 81728 via svnmerge from
svn+ssh://pythondev@svn.python.org/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. ........
This commit is contained in:
parent
4107d31db6
commit
2034d9a996
@ -12,7 +12,7 @@ from .util import (strclass, safe_repr, sorted_list_difference,
|
|||||||
unorderable_list_difference)
|
unorderable_list_difference)
|
||||||
|
|
||||||
__unittest = True
|
__unittest = True
|
||||||
|
TRUNCATED_DIFF = '\n[diff truncated...]'
|
||||||
|
|
||||||
class SkipTest(Exception):
|
class SkipTest(Exception):
|
||||||
"""
|
"""
|
||||||
@ -599,7 +599,8 @@ class TestCase(object):
|
|||||||
failUnlessRaises = _deprecate(assertRaises)
|
failUnlessRaises = _deprecate(assertRaises)
|
||||||
failIf = _deprecate(assertFalse)
|
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).
|
"""An equality assertion for ordered sequences (like lists and tuples).
|
||||||
|
|
||||||
For the purposes of this function, a valid ordered sequence type is one
|
For the purposes of this function, a valid ordered sequence type is one
|
||||||
@ -612,6 +613,7 @@ class TestCase(object):
|
|||||||
datatype should be enforced.
|
datatype should be enforced.
|
||||||
msg: Optional message to use on failure instead of a list of
|
msg: Optional message to use on failure instead of a list of
|
||||||
differences.
|
differences.
|
||||||
|
max_diff: Maximum size off the diff, larger diffs are not shown
|
||||||
"""
|
"""
|
||||||
if seq_type != None:
|
if seq_type != None:
|
||||||
seq_type_name = seq_type.__name__
|
seq_type_name = seq_type.__name__
|
||||||
@ -694,9 +696,14 @@ class TestCase(object):
|
|||||||
except (TypeError, IndexError, NotImplementedError):
|
except (TypeError, IndexError, NotImplementedError):
|
||||||
differing += ('Unable to index element %d '
|
differing += ('Unable to index element %d '
|
||||||
'of second %s\n' % (len1, seq_type_name))
|
'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(),
|
difflib.ndiff(pprint.pformat(seq1).splitlines(),
|
||||||
pprint.pformat(seq2).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)
|
msg = self._formatMessage(msg, standardMsg)
|
||||||
self.fail(msg)
|
self.fail(msg)
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import difflib
|
||||||
|
import pprint
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -589,6 +591,23 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
|
|||||||
self.assertRaises(self.failureException, self.assertDictEqual, [], d)
|
self.assertRaises(self.failureException, self.assertDictEqual, [], d)
|
||||||
self.assertRaises(self.failureException, self.assertDictEqual, 1, 1)
|
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):
|
def testAssertItemsEqual(self):
|
||||||
a = object()
|
a = object()
|
||||||
self.assertItemsEqual([1, 2, 3], [3, 2, 1])
|
self.assertItemsEqual([1, 2, 3], [3, 2, 1])
|
||||||
|
Loading…
Reference in New Issue
Block a user