[Python-checkins] r72923 - python/trunk/Lib/unittest.py

michael.foord python-checkins at python.org
Mon May 25 22:36:56 CEST 2009


Author: michael.foord
Date: Mon May 25 22:36:56 2009
New Revision: 72923

Log:
Make assertSequenceEqual error messages less cryptic, particularly for nested sequences.

Modified:
   python/trunk/Lib/unittest.py

Modified: python/trunk/Lib/unittest.py
==============================================================================
--- python/trunk/Lib/unittest.py	(original)
+++ python/trunk/Lib/unittest.py	Mon May 25 22:36:56 2009
@@ -731,23 +731,32 @@
             if seq1 == seq2:
                 return
 
+            seq1_repr = repr(seq1)
+            seq2_repr = repr(seq2)
+            if len(seq1_repr) > 30:
+                seq1_repr = seq1_repr[:30] + '...'
+            if len(seq2_repr) > 30:
+                seq2_repr = seq2_repr[:30] + '...'
+            elements = (seq_type_name.capitalize(), seq1_repr, seq2_repr)
+            differing = '%ss differ: %s != %s\n' % elements
+
             for i in xrange(min(len1, len2)):
                 try:
                     item1 = seq1[i]
                 except (TypeError, IndexError, NotImplementedError):
-                    differing = ('Unable to index element %d of first %s\n' %
+                    differing += ('\nUnable to index element %d of first %s\n' %
                                  (i, seq_type_name))
                     break
 
                 try:
                     item2 = seq2[i]
                 except (TypeError, IndexError, NotImplementedError):
-                    differing = ('Unable to index element %d of second %s\n' %
+                    differing += ('\nUnable to index element %d of second %s\n' %
                                  (i, seq_type_name))
                     break
 
                 if item1 != item2:
-                    differing = ('First differing element %d:\n%s\n%s\n' %
+                    differing += ('\nFirst differing element %d:\n%s\n%s\n' %
                                  (i, item1, item2))
                     break
             else:
@@ -755,28 +764,26 @@
                     type(seq1) != type(seq2)):
                     # The sequences are the same, but have differing types.
                     return
-                # A catch-all message for handling arbitrary user-defined
-                # sequences.
-                differing = '%ss differ:\n' % seq_type_name.capitalize()
-                if len1 > len2:
-                    differing = ('First %s contains %d additional '
-                                 'elements.\n' % (seq_type_name, len1 - len2))
-                    try:
-                        differing += ('First extra element %d:\n%s\n' %
-                                      (len2, seq1[len2]))
-                    except (TypeError, IndexError, NotImplementedError):
-                        differing += ('Unable to index element %d '
-                                      'of first %s\n' % (len2, seq_type_name))
-                elif len1 < len2:
-                    differing = ('Second %s contains %d additional '
-                                 'elements.\n' % (seq_type_name, len2 - len1))
-                    try:
-                        differing += ('First extra element %d:\n%s\n' %
-                                      (len1, seq2[len1]))
-                    except (TypeError, IndexError, NotImplementedError):
-                        differing += ('Unable to index element %d '
-                                      'of second %s\n' % (len1, seq_type_name))
-        standardMsg = differing + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(),
+
+            if len1 > len2:
+                differing += ('\nFirst %s contains %d additional '
+                             'elements.\n' % (seq_type_name, len1 - len2))
+                try:
+                    differing += ('First extra element %d:\n%s\n' %
+                                  (len2, seq1[len2]))
+                except (TypeError, IndexError, NotImplementedError):
+                    differing += ('Unable to index element %d '
+                                  'of first %s\n' % (len2, seq_type_name))
+            elif len1 < len2:
+                differing += ('\nSecond %s contains %d additional '
+                             'elements.\n' % (seq_type_name, len2 - len1))
+                try:
+                    differing += ('First extra element %d:\n%s\n' %
+                                  (len1, seq2[len1]))
+                except (TypeError, IndexError, NotImplementedError):
+                    differing += ('Unable to index element %d '
+                                  'of second %s\n' % (len1, seq_type_name))
+        standardMsg = differing + '\n' + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(),
                                             pprint.pformat(seq2).splitlines()))
         msg = self._formatMessage(msg, standardMsg)
         self.fail(msg)


More information about the Python-checkins mailing list