From a5809c84b392ef855ac18b17967c9f7e34118053 Mon Sep 17 00:00:00 2001 From: Michael Foord Date: Sat, 4 Apr 2009 18:55:09 +0000 Subject: 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 --- Lib/unittest.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'Lib/unittest.py') diff --git a/Lib/unittest.py b/Lib/unittest.py index 16a866343f..244a45beec 100644 --- a/Lib/unittest.py +++ b/Lib/unittest.py @@ -858,9 +858,13 @@ class TestCase(object): # not hashable. expected = list(expected_seq) actual = list(actual_seq) - expected.sort() - actual.sort() - missing, unexpected = _SortedListDifference(expected, actual) + try: + expected.sort() + actual.sort() + except TypeError: + missing, unexpected = _UnorderableListDifference(expected, actual) + else: + missing, unexpected = _SortedListDifference(expected, actual) errors = [] if missing: errors.append('Expected, but missing:\n %r' % 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. -- cgit v1.2.1