Commit 674648e3 authored by Michael Foord's avatar Michael Foord

unittest.TestCase.assertDictEqual and assertMultilineEqual provide better...

unittest.TestCase.assertDictEqual and assertMultilineEqual provide better default failure messages in the event of long diffs.
parent 77acee95
......@@ -800,10 +800,11 @@ class TestCase(object):
self.assert_(isinstance(d2, dict), 'Second argument is not a dictionary')
if d1 != d2:
standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True))
diff = ('\n' + '\n'.join(difflib.ndiff(
pprint.pformat(d1).splitlines(),
pprint.pformat(d2).splitlines())))
standardMsg = self._truncateMessage('', diff)
standardMsg = self._truncateMessage(standardMsg, diff)
self.fail(self._formatMessage(msg, standardMsg))
def assertDictContainsSubset(self, expected, actual, msg=None):
......@@ -886,9 +887,10 @@ class TestCase(object):
'Second argument is not a string'))
if first != second:
standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True))
diff = '\n' + ''.join(difflib.ndiff(first.splitlines(True),
second.splitlines(True)))
standardMsg = self._truncateMessage('', diff)
standardMsg = self._truncateMessage(standardMsg, diff)
self.fail(self._formatMessage(msg, standardMsg))
def assertLess(self, a, b, msg=None):
......
......@@ -2,12 +2,16 @@
__unittest = True
def safe_repr(obj):
_MAX_LENGTH = 80
def safe_repr(obj, short=False):
try:
return repr(obj)
result = repr(obj)
except Exception:
return object.__repr__(obj)
result = object.__repr__(obj)
if not short or len(result) < _MAX_LENGTH:
return result
return result[:_MAX_LENGTH] + ' [truncated]...'
def strclass(cls):
return "%s.%s" % (cls.__module__, cls.__name__)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment