summaryrefslogtreecommitdiffstats
path: root/Lib/unittest.py
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2009-05-25 20:36:56 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2009-05-25 20:36:56 (GMT)
commit04516611e7e4ceaef6fef9413719e9cb5b4bb087 (patch)
tree9e2c7ef0606e44ea92c70f5dfb0d610e0c64b8a1 /Lib/unittest.py
parent7285a2666ed408a4a28dfc2cfd452698d970ecf6 (diff)
downloadcpython-04516611e7e4ceaef6fef9413719e9cb5b4bb087.zip
cpython-04516611e7e4ceaef6fef9413719e9cb5b4bb087.tar.gz
cpython-04516611e7e4ceaef6fef9413719e9cb5b4bb087.tar.bz2
Make assertSequenceEqual error messages less cryptic, particularly for nested sequences.
Diffstat (limited to 'Lib/unittest.py')
-rw-r--r--Lib/unittest.py57
1 files changed, 32 insertions, 25 deletions
diff --git a/Lib/unittest.py b/Lib/unittest.py
index d271675..ca20f92 100644
--- a/Lib/unittest.py
+++ b/Lib/unittest.py
@@ -731,23 +731,32 @@ class TestCase(object):
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 @@ class TestCase(object):
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)