]> granicus.if.org Git - python/commitdiff
unittest.TestCase.assertDictEqual and assertMultilineEqual provide better default...
authorMichael Foord <fuzzyman@voidspace.org.uk>
Sat, 5 Jun 2010 12:58:39 +0000 (12:58 +0000)
committerMichael Foord <fuzzyman@voidspace.org.uk>
Sat, 5 Jun 2010 12:58:39 +0000 (12:58 +0000)
Lib/unittest/case.py
Lib/unittest/util.py

index b984bb951f4b91ebd2f8cc8c521ab1f7bc74efbd..ff6b8b3cb961991b4ffbd1cc4105e86a549022f0 100644 (file)
@@ -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):
index 7d90ddf9ca4f2f5f0abcfbc6c2d45dcb87ec04a3..d201657c6ec9470d60abe30aa3fc11ea313a5579 100644 (file)
@@ -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__)