Fixed #21765 -- Added support for comparing Context instances

This commit is contained in:
Marek Wywiał 2014-02-15 13:45:52 +01:00 committed by Baptiste Mispelon
parent 985ae732b2
commit d97bf2e9c8
3 changed files with 28 additions and 0 deletions

View File

@ -97,6 +97,16 @@ class BaseContext(object):
new_context._reset_dicts(values) new_context._reset_dicts(values)
return new_context return new_context
def __eq__(self, other):
"""
Compares two contexts by comparing theirs 'dicts' attributes.
"""
if isinstance(other, BaseContext):
return self.dicts[-1] == other.dicts[-1]
# if it's not comparable return false
return False
class Context(BaseContext): class Context(BaseContext):
"A stack container for variable context" "A stack container for variable context"

View File

@ -49,3 +49,8 @@ class ContextTests(TestCase):
with self.assertRaises(KeyError): with self.assertRaises(KeyError):
test_context['fruit'] test_context['fruit']
self.assertIsNone(test_context.get('fruit')) self.assertIsNone(test_context.get('fruit'))
def test_context_comparable(self):
test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}}
self.assertEquals(Context(test_data), Context(test_data))

View File

@ -1928,6 +1928,19 @@ class RequestContextTests(unittest.TestCase):
# [builtins, supplied context, context processor] # [builtins, supplied context, context processor]
self.assertEqual(len(ctx.dicts), 3) self.assertEqual(len(ctx.dicts), 3)
@override_settings(TEMPLATE_CONTEXT_PROCESSORS=())
def test_context_comparable(self):
test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}}
# test comparing RequestContext to prevent problems if somebody
# adds __eq__ in the future
request = RequestFactory().get('/')
self.assertEquals(
RequestContext(request, dict_=test_data),
RequestContext(request, dict_=test_data)
)
class SSITests(TestCase): class SSITests(TestCase):
def setUp(self): def setUp(self):