diff options
author | Pierre-Yves David <pierre-yves.david@logilab.fr> | 2008-07-25 15:16:30 +0200 |
---|---|---|
committer | Pierre-Yves David <pierre-yves.david@logilab.fr> | 2008-07-25 15:16:30 +0200 |
commit | 9c7fa04117c6b197850edce1262966318d35acc5 (patch) | |
tree | acb49e0d89dfe81bf1dfc13661b31e6650c2fdb1 | |
parent | 1d9a9b267d06973ae0ba1a0d65225afe00d17fbf (diff) | |
download | logilab-common-9c7fa04117c6b197850edce1262966318d35acc5.tar.gz |
improve msg and add a alias of assertUnorderedIterableEquals
-rw-r--r-- | testlib.py | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -1183,20 +1183,28 @@ class TestCase(unittest.TestCase): def assertUnorderedIterableEquals(self, got, expected, msg=None): """compares two iterable and shows difference between both""" got, expected = list(got), list(expected) - if msg is None: - msg1 = '%s != %s' % (sorted(got), sorted(expected)) - else: - msg1 = msg - self.assertEquals(len(got), len(expected), msg1) - got, expected = set(got), set(expected) - if got != expected: - missing = expected - got - unexpected = got - expected + self.assertSetEqual(set(got), set(expected), msg) + if len(got) != len(expected): if msg is None: - msg = '\tunexpected: %s\n\tmissing: %s' % (unexpected, missing) + msg = ['Iterable have the same elements but not the same number', + '\t<element>\t<expected>i\t<got>'] + got_count = {} + expected_count = {} + for element in got: + got_count[element] = got_count.get(element,0) + 1 + for element in expected: + expected_count[element] = expected_count.get(element,0) + 1 + # we know that got_count.key() == expected_count.key() + # because of assertSetEquals + for element, count in got_count.iteritems(): + other_count = expected_count[element] + if other_count != count: + msg.append('\t%s\t%s\t%s' % (element, other_count, count)) + self.fail(msg) assertUnorderedIterableEqual = assertUnorderedIterableEquals + assertUnordIterEquals = assertUnordIterEqual = assertUnorderedIterableEqual def assertSetEquals(self,got,expected, msg=None): if not(isinstance(got, set) and isinstance(expected, set)): @@ -1210,8 +1218,8 @@ class TestCase(unittest.TestCase): items['unexpected'] = got - expected if any(items.itervalues()): if msg is None: - msg = '\n'.join('%s:\n\t%s' % (key,"\n\t".join(value)) - for key, value in items.iteritems() if value) + msg = '\n'.join('%s:\n\t%s' % (key,"\n\t".join(str(value) for value in values)) + for key, values in items.iteritems() if values) self.fail(msg) |