Merge "Improve assertJsonEqual error reporting"

This commit is contained in:
Jenkins 2017-08-29 06:10:25 +00:00 committed by Gerrit Code Review
commit 7602735374

@ -29,6 +29,7 @@ import contextlib
import copy
import datetime
import inspect
import itertools
import os
import pprint
import sys
@ -432,7 +433,15 @@ class TestCase(testtools.TestCase):
if isinstance(expected, dict) and isinstance(observed, dict):
self.assertEqual(
len(expected), len(observed),
'path: %s. Dict lengths are not equal' % path)
('path: %s. Different dict key sets\n'
'expected=%s\n'
'observed=%s\n'
'difference=%s') %
(path,
sorted(expected.keys()),
sorted(observed.keys()),
list(set(expected.keys()).symmetric_difference(
set(observed.keys())))))
expected_keys = sorted(expected)
observed_keys = sorted(observed)
self.assertEqual(
@ -444,7 +453,15 @@ class TestCase(testtools.TestCase):
isinstance(observed, (list, tuple, set))):
self.assertEqual(
len(expected), len(observed),
'path: %s. List lengths are not equal' % path)
('path: %s. Different list items\n'
'expected=%s\n'
'observed=%s\n'
'difference=%s') %
(path,
sorted(expected, key=sort_key),
sorted(observed, key=sort_key),
[a for a in itertools.chain(expected, observed) if
(a not in expected) or (a not in observed)]))
expected_values_iter = iter(sorted(expected, key=sort_key))
observed_values_iter = iter(sorted(observed, key=sort_key))