]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Put diff output in useful order (when the elements were first seen).
authorRaymond Hettinger <python@rcn.com>
Fri, 24 Dec 2010 11:20:30 +0000 (11:20 +0000)
committerRaymond Hettinger <python@rcn.com>
Fri, 24 Dec 2010 11:20:30 +0000 (11:20 +0000)
Lib/unittest/case.py
Lib/unittest/util.py

index 235af82820442f6f1e6efa4eb6634819d499dc2a..82b139faf120fd86d39865b845897c0dfe581e74 100644 (file)
@@ -1023,18 +1023,15 @@ class TestCase(object):
             expected = collections.Counter(expected_seq)
         except TypeError:
             # Handle case with unhashable elements
-            differences = _count_diff_all_purpose(expected_seq, actual_seq)
+            differences = _count_diff_all_purpose(actual_seq, expected_seq)
         else:
             if actual == expected:
                 return
-            differences = _count_diff_hashable(expected_seq, actual_seq)
+            differences = _count_diff_hashable(actual_seq, expected_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)
+            lines = ['Got %d, expected %d:  %r' % diff for diff in differences]
             diffMsg = '\n'.join(lines)
             standardMsg = self._truncateMessage(standardMsg, diffMsg)
             msg = self._formatMessage(msg, standardMsg)
index 0407ae9b6a97019765d0c76b684acd36356ef20b..9dd147a70fee71111e910ad8fa407fafd35c2b99 100644 (file)
@@ -1,6 +1,6 @@
 """Various utility functions."""
 
-from collections import namedtuple, Counter
+from collections import namedtuple, OrderedDict
 
 __unittest = True
 
@@ -116,15 +116,20 @@ def _count_diff_all_purpose(actual, expected):
         result.append(diff)
     return result
 
+def ordered_count(iterable):
+    'Return dict of element counts, in the order they were first seen'
+    c = OrderedDict()
+    for elem in iterable:
+        c[elem] = c.get(elem, 0) + 1
+    return c
+
 def _count_diff_hashable(actual, expected):
     'Returns list of (cnt_act, cnt_exp, elem) triples where the counts differ'
     # elements must be hashable
-    s, t = Counter(actual), Counter(expected)
-    if s == t:
-        return []
+    s, t = ordered_count(actual), ordered_count(expected)
     result = []
     for elem, cnt_s in s.items():
-        cnt_t = t[elem]
+        cnt_t = t.get(elem, 0)
         if cnt_s != cnt_t:
             diff = _Mismatch(cnt_s, cnt_t, elem)
             result.append(diff)