mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Make assertSequenceEqual error messages less cryptic, particularly for nested sequences.
This commit is contained in:
parent
7285a2666e
commit
04516611e7
1 changed files with 32 additions and 25 deletions
|
@ -731,23 +731,32 @@ class TestCase(object):
|
||||||
if seq1 == seq2:
|
if seq1 == seq2:
|
||||||
return
|
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)):
|
for i in xrange(min(len1, len2)):
|
||||||
try:
|
try:
|
||||||
item1 = seq1[i]
|
item1 = seq1[i]
|
||||||
except (TypeError, IndexError, NotImplementedError):
|
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))
|
(i, seq_type_name))
|
||||||
break
|
break
|
||||||
|
|
||||||
try:
|
try:
|
||||||
item2 = seq2[i]
|
item2 = seq2[i]
|
||||||
except (TypeError, IndexError, NotImplementedError):
|
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))
|
(i, seq_type_name))
|
||||||
break
|
break
|
||||||
|
|
||||||
if item1 != item2:
|
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))
|
(i, item1, item2))
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
@ -755,28 +764,26 @@ class TestCase(object):
|
||||||
type(seq1) != type(seq2)):
|
type(seq1) != type(seq2)):
|
||||||
# The sequences are the same, but have differing types.
|
# The sequences are the same, but have differing types.
|
||||||
return
|
return
|
||||||
# A catch-all message for handling arbitrary user-defined
|
|
||||||
# sequences.
|
if len1 > len2:
|
||||||
differing = '%ss differ:\n' % seq_type_name.capitalize()
|
differing += ('\nFirst %s contains %d additional '
|
||||||
if len1 > len2:
|
'elements.\n' % (seq_type_name, len1 - len2))
|
||||||
differing = ('First %s contains %d additional '
|
try:
|
||||||
'elements.\n' % (seq_type_name, len1 - len2))
|
differing += ('First extra element %d:\n%s\n' %
|
||||||
try:
|
(len2, seq1[len2]))
|
||||||
differing += ('First extra element %d:\n%s\n' %
|
except (TypeError, IndexError, NotImplementedError):
|
||||||
(len2, seq1[len2]))
|
differing += ('Unable to index element %d '
|
||||||
except (TypeError, IndexError, NotImplementedError):
|
'of first %s\n' % (len2, seq_type_name))
|
||||||
differing += ('Unable to index element %d '
|
elif len1 < len2:
|
||||||
'of first %s\n' % (len2, seq_type_name))
|
differing += ('\nSecond %s contains %d additional '
|
||||||
elif len1 < len2:
|
'elements.\n' % (seq_type_name, len2 - len1))
|
||||||
differing = ('Second %s contains %d additional '
|
try:
|
||||||
'elements.\n' % (seq_type_name, len2 - len1))
|
differing += ('First extra element %d:\n%s\n' %
|
||||||
try:
|
(len1, seq2[len1]))
|
||||||
differing += ('First extra element %d:\n%s\n' %
|
except (TypeError, IndexError, NotImplementedError):
|
||||||
(len1, seq2[len1]))
|
differing += ('Unable to index element %d '
|
||||||
except (TypeError, IndexError, NotImplementedError):
|
'of second %s\n' % (len1, seq_type_name))
|
||||||
differing += ('Unable to index element %d '
|
standardMsg = differing + '\n' + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(),
|
||||||
'of second %s\n' % (len1, seq_type_name))
|
|
||||||
standardMsg = differing + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(),
|
|
||||||
pprint.pformat(seq2).splitlines()))
|
pprint.pformat(seq2).splitlines()))
|
||||||
msg = self._formatMessage(msg, standardMsg)
|
msg = self._formatMessage(msg, standardMsg)
|
||||||
self.fail(msg)
|
self.fail(msg)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue