Kaydet (Commit) 9db4271b authored tarafından Baptiste Mispelon's avatar Baptiste Mispelon

Fixed bad comparison logic introduced in d97bf2e9.

Refs #21765.

Thanks to kezabelle for the quick report and to onjin
for providing the patch.
üst f46ef750
...@@ -102,7 +102,15 @@ class BaseContext(object): ...@@ -102,7 +102,15 @@ class BaseContext(object):
Compares two contexts by comparing theirs 'dicts' attributes. Compares two contexts by comparing theirs 'dicts' attributes.
""" """
if isinstance(other, BaseContext): if isinstance(other, BaseContext):
return self.dicts[-1] == other.dicts[-1] # because dictionaries can be put in different order
# we have to flatten them like in templates
def flatten(dicts):
flat = {}
for d in dicts:
flat.update(d)
return flat
return flatten(self.dicts) == flatten(other.dicts)
# if it's not comparable return false # if it's not comparable return false
return False return False
......
...@@ -53,4 +53,22 @@ class ContextTests(TestCase): ...@@ -53,4 +53,22 @@ class ContextTests(TestCase):
def test_context_comparable(self): def test_context_comparable(self):
test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}} test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}}
self.assertEquals(Context(test_data), Context(test_data)) self.assertEqual(Context(test_data), Context(test_data))
# Regression test for #21765
a = Context()
b = Context()
self.assertEqual(a, b)
# update only a
a.update({'a': 1})
self.assertNotEqual(a, b)
# update both to check regression
a.update({'c': 3})
b.update({'c': 3})
self.assertNotEqual(a, b)
# make contexts equals again
b.update({'a': 1})
self.assertEqual(a, b)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment