diff options
author | Raymond Hettinger <python@rcn.com> | 2010-12-24 10:02:22 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2010-12-24 10:02:22 (GMT) |
commit | 93e233d6e5ef84b9e6d70917cdfe8ef1f9499cb5 (patch) | |
tree | 3c3859c8f70746ef6145613ae20b695f57f48e09 /Lib/unittest/case.py | |
parent | fca8beed4afaaae53549f4ca3fd43a1cfabc85d1 (diff) | |
download | cpython-93e233d6e5ef84b9e6d70917cdfe8ef1f9499cb5.zip cpython-93e233d6e5ef84b9e6d70917cdfe8ef1f9499cb5.tar.gz cpython-93e233d6e5ef84b9e6d70917cdfe8ef1f9499cb5.tar.bz2 |
Improve diff for assertCountEqual() to actually show the differing counts.
New output looks like this:
Traceback (most recent call last):
File "test.py", line 5, in test_ce
self.assertCountEqual('abracadabra xx', 'simsalabim xx')
AssertionError: Element counts were not equal:
Expected 5, got 2: 'a'
Expected 2, got 1: 'b'
Expected 0, got 2: 'i'
Expected 0, got 2: 'm'
Expected 0, got 1: 'l'
Expected 0, got 2: 's'
Expected 1, got 0: 'c'
Expected 1, got 0: 'd'
Expected 2, got 0: 'r'
Diffstat (limited to 'Lib/unittest/case.py')
-rw-r--r-- | Lib/unittest/case.py | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 02dbd7e..235af82 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -10,7 +10,8 @@ import collections from . import result from .util import (strclass, safe_repr, sorted_list_difference, - unorderable_list_difference) + unorderable_list_difference, _count_diff_all_purpose, + _count_diff_hashable) __unittest = True @@ -1022,23 +1023,22 @@ class TestCase(object): expected = collections.Counter(expected_seq) except TypeError: # Handle case with unhashable elements - missing, unexpected = unorderable_list_difference(expected_seq, actual_seq) + differences = _count_diff_all_purpose(expected_seq, actual_seq) else: if actual == expected: return - missing = list(expected - actual) - unexpected = list(actual - expected) - - errors = [] - if missing: - errors.append('Expected, but missing:\n %s' % - safe_repr(missing)) - if unexpected: - errors.append('Unexpected, but present:\n %s' % - safe_repr(unexpected)) - if errors: - standardMsg = '\n'.join(errors) - self.fail(self._formatMessage(msg, standardMsg)) + differences = _count_diff_hashable(expected_seq, actual_seq) + + if differences: + standardMsg = 'Element counts were not equal:\n' + lines = [] + for act, exp, elem in differences: + line = 'Expected %d, got %d: %r' % (exp, act, elem) + lines.append(line) + diffMsg = '\n'.join(lines) + standardMsg = self._truncateMessage(standardMsg, diffMsg) + msg = self._formatMessage(msg, standardMsg) + self.fail(msg) def assertMultiLineEqual(self, first, second, msg=None): """Assert that two multi-line strings are equal.""" |