mirror of https://github.com/django/django.git
Fixed bad comparison logic introduced in d97bf2e9c8
.
Refs #21765. Thanks to kezabelle for the quick report and to onjin for providing the patch.
This commit is contained in:
parent
f46ef750b9
commit
9db4271bd1
|
@ -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):
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue