diff options
author | Raymond Hettinger <python@rcn.com> | 2010-11-27 09:31:37 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2010-11-27 09:31:37 (GMT) |
commit | 6e165b30de0120360f13d86652db4c528941269f (patch) | |
tree | b68b64c195a1ea96b472274b286701c924221987 /Lib/unittest/case.py | |
parent | db213a297d5b7f4728c540b33f5e2a25b0596b23 (diff) | |
download | cpython-6e165b30de0120360f13d86652db4c528941269f.zip cpython-6e165b30de0120360f13d86652db4c528941269f.tar.gz cpython-6e165b30de0120360f13d86652db4c528941269f.tar.bz2 |
Issue 10242: unittest.assertItemsEqual makes too many assumptions.
Diffstat (limited to 'Lib/unittest/case.py')
-rw-r--r-- | Lib/unittest/case.py | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index dbf7aa2..f59c068 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -6,6 +6,7 @@ import difflib import pprint import re import warnings +import collections from . import result from .util import (strclass, safe_repr, sorted_list_difference, @@ -990,15 +991,13 @@ class TestCase(object): self.fail(self._formatMessage(msg, standardMsg)) - def assertItemsEqual(self, expected_seq, actual_seq, msg=None): - """An unordered sequence / set specific comparison. It asserts that - expected_seq and actual_seq contain the same elements. It is - the equivalent of:: + def assertCountEqual(self, expected_seq, actual_seq, msg=None): + """An unordered sequence specific comparison. It asserts that + expected_seq and actual_seq have the same element counts. + Equivalent to:: - self.assertEqual(sorted(expected_seq), sorted(actual_seq)) - - Raises with an error message listing which elements of expected_seq - are missing from actual_seq and vice versa if any. + self.assertEqual(Counter(iter(expected_seq)), + Counter(iter(actual_seq))) Asserts that each element has the same count in both sequences. Example: @@ -1006,15 +1005,18 @@ class TestCase(object): - [0, 0, 1] and [0, 1] compare unequal. """ try: - expected = sorted(expected_seq) - actual = sorted(actual_seq) + expected = collections.Counter(iter(expected_seq)) + actual = collections.Counter(iter(actual_seq)) except TypeError: # Unsortable items (example: set(), complex(), ...) expected = list(expected_seq) actual = list(actual_seq) missing, unexpected = unorderable_list_difference(expected, actual) else: - return self.assertSequenceEqual(expected, actual, msg=msg) + if expected == actual: + return + missing = list(expected - actual) + unexpected = list(actual - expected) errors = [] if missing: @@ -1027,6 +1029,9 @@ class TestCase(object): standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) + # Old name for assertCountEqual() + assertItemsEqual = assertCountEqual + def assertMultiLineEqual(self, first, second, msg=None): """Assert that two multi-line strings are equal.""" self.assertIsInstance(first, str, 'First argument is not a string') |