mirror of
https://github.com/python/cpython.git
synced 2025-10-08 08:01:55 +00:00
Patch for Py3k with fallback for comparing unsortable sequences in
assertSameElements. Removed the expected failure and added another test case to confirm that this patch works for unsortable sequences that are the same (no fail) and different (fail). Issue #2578
This commit is contained in:
parent
270a9ceb5b
commit
a5809c84b3
2 changed files with 25 additions and 5 deletions
|
@ -2392,8 +2392,6 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
|
|||
self.assertRaises(self.failureException, self.assertEqual, a, b,
|
||||
msg='foo')
|
||||
|
||||
# The fact that dictionaries are unorderable breaks this test for them.
|
||||
@unittest.expectedFailure
|
||||
def testEquality(self):
|
||||
self.assertListEqual([], [])
|
||||
self.assertTupleEqual((), ())
|
||||
|
@ -2459,6 +2457,8 @@ class Test_TestCase(TestCase, TestEquality, TestHashing):
|
|||
self.assertSameElements([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}])
|
||||
self.assertRaises(self.failureException, self.assertSameElements,
|
||||
[[1]], [[2]])
|
||||
self.assertRaises(self.failureException, self.assertSameElements,
|
||||
[{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 2}])
|
||||
|
||||
def testAssertSetEqual(self):
|
||||
set1 = set()
|
||||
|
|
|
@ -858,8 +858,12 @@ class TestCase(object):
|
|||
# not hashable.
|
||||
expected = list(expected_seq)
|
||||
actual = list(actual_seq)
|
||||
try:
|
||||
expected.sort()
|
||||
actual.sort()
|
||||
except TypeError:
|
||||
missing, unexpected = _UnorderableListDifference(expected, actual)
|
||||
else:
|
||||
missing, unexpected = _SortedListDifference(expected, actual)
|
||||
errors = []
|
||||
if missing:
|
||||
|
@ -985,6 +989,22 @@ def _SortedListDifference(expected, actual):
|
|||
break
|
||||
return missing, unexpected
|
||||
|
||||
def _UnorderableListDifference(expected, actual):
|
||||
"""Same behavior as _SortedListDifference but
|
||||
for lists of unorderable items (like dicts).
|
||||
|
||||
As it does a linear search per item (remove) it
|
||||
has O(n*n) performance."""
|
||||
missing = []
|
||||
while expected:
|
||||
item = expected.pop()
|
||||
try:
|
||||
actual.remove(item)
|
||||
except ValueError:
|
||||
missing.append(item)
|
||||
|
||||
# anything left in actual is unexpected
|
||||
return missing, actual
|
||||
|
||||
class TestSuite(object):
|
||||
"""A test suite is a composite test consisting of a number of TestCases.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue