recreate the assertItemsEqual
Since it was removed we should use assertCountEqual, but it must have a hashable elements since it uses Counter currently we have dict which are not hashable, So we use the old version Change-Id: Idaf0cf38ef56dfceaca6fd9f8f5ab52c27ffaf2f
This commit is contained in:
parent
a99b1497f5
commit
bca12d383f
@ -54,6 +54,49 @@ LOG = logging.getLogger(__name__)
|
|||||||
IsEmpty = lambda: HasLength(0)
|
IsEmpty = lambda: HasLength(0)
|
||||||
IsNotEmpty = lambda: Not(IsEmpty())
|
IsNotEmpty = lambda: Not(IsEmpty())
|
||||||
|
|
||||||
|
_MAX_LENGTH = 80
|
||||||
|
|
||||||
|
|
||||||
|
def unorderable_list_difference(expected, actual, ignore_duplicate=False):
|
||||||
|
missing = []
|
||||||
|
unexpected = []
|
||||||
|
while expected:
|
||||||
|
item = expected.pop()
|
||||||
|
try:
|
||||||
|
actual.remove(item)
|
||||||
|
except ValueError:
|
||||||
|
missing.append(item)
|
||||||
|
if ignore_duplicate:
|
||||||
|
for lst in expected, actual:
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
lst.remove(item)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
if ignore_duplicate:
|
||||||
|
while actual:
|
||||||
|
item = actual.pop()
|
||||||
|
unexpected.append(item)
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
actual.remove(item)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
return missing, unexpected
|
||||||
|
|
||||||
|
# anything left in actual is unexpected
|
||||||
|
return missing, actual
|
||||||
|
|
||||||
|
|
||||||
|
def safe_repr(obj, short=False):
|
||||||
|
try:
|
||||||
|
result = repr(obj)
|
||||||
|
except Exception:
|
||||||
|
result = object.__repr__(obj)
|
||||||
|
if not short or len(result) < _MAX_LENGTH:
|
||||||
|
return result
|
||||||
|
return result[:_MAX_LENGTH] + ' [truncated]...'
|
||||||
|
|
||||||
|
|
||||||
class BaseVitrageTempest(test.BaseTestCase):
|
class BaseVitrageTempest(test.BaseTestCase):
|
||||||
"""Base test class for All Vitrage tests."""
|
"""Base test class for All Vitrage tests."""
|
||||||
@ -83,6 +126,31 @@ class BaseVitrageTempest(test.BaseTestCase):
|
|||||||
def assert_items_equal(self, s1, s2, message=None):
|
def assert_items_equal(self, s1, s2, message=None):
|
||||||
self.assertItemsEqual(s1, s2, message)
|
self.assertItemsEqual(s1, s2, message)
|
||||||
|
|
||||||
|
def assertItemsEqual(self, expected_seq, actual_seq, msg=None):
|
||||||
|
try:
|
||||||
|
expected = sorted(expected_seq)
|
||||||
|
actual = sorted(actual_seq)
|
||||||
|
except TypeError:
|
||||||
|
# Unsortable items (example: set(), complex(), ...)
|
||||||
|
expected = list(expected_seq)
|
||||||
|
actual = list(actual_seq)
|
||||||
|
missing, unexpected = unorderable_list_difference(
|
||||||
|
expected, actual, ignore_duplicate=False
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return self.assertSequenceEqual(expected, actual, msg=msg)
|
||||||
|
|
||||||
|
errors = []
|
||||||
|
if missing:
|
||||||
|
errors.append('Expected, but missing:\n %s' %
|
||||||
|
safe_repr(missing))
|
||||||
|
if unexpected:
|
||||||
|
errors.append('Unexpected, but present:\n %s' %
|
||||||
|
safe_repr(unexpected))
|
||||||
|
if errors:
|
||||||
|
standard_msg = '\n'.join(errors)
|
||||||
|
self.fail(self._formatMessage(msg, standard_msg))
|
||||||
|
|
||||||
def assert_timestamp_equal(self, first, second, msg=None):
|
def assert_timestamp_equal(self, first, second, msg=None):
|
||||||
"""Checks that two timestamps are equals.
|
"""Checks that two timestamps are equals.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user