test_context.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # coding: utf-8
  2. from unittest import TestCase
  3. from django.template import Context, Variable, VariableDoesNotExist
  4. from django.template.context import RenderContext
  5. class ContextTests(TestCase):
  6. def test_context(self):
  7. c = Context({"a": 1, "b": "xyzzy"})
  8. self.assertEqual(c["a"], 1)
  9. self.assertEqual(c.push(), {})
  10. c["a"] = 2
  11. self.assertEqual(c["a"], 2)
  12. self.assertEqual(c.get("a"), 2)
  13. self.assertEqual(c.pop(), {"a": 2})
  14. self.assertEqual(c["a"], 1)
  15. self.assertEqual(c.get("foo", 42), 42)
  16. with c.push():
  17. c['a'] = 2
  18. self.assertEqual(c['a'], 2)
  19. self.assertEqual(c['a'], 1)
  20. with c.push(a=3):
  21. self.assertEqual(c['a'], 3)
  22. self.assertEqual(c['a'], 1)
  23. def test_resolve_on_context_method(self):
  24. # Regression test for #17778
  25. empty_context = Context()
  26. self.assertRaises(VariableDoesNotExist,
  27. Variable('no_such_variable').resolve, empty_context)
  28. self.assertRaises(VariableDoesNotExist,
  29. Variable('new').resolve, empty_context)
  30. self.assertEqual(Variable('new').resolve(Context({'new': 'foo'})), 'foo')
  31. def test_render_context(self):
  32. test_context = RenderContext({'fruit': 'papaya'})
  33. # Test that push() limits access to the topmost dict
  34. test_context.push()
  35. test_context['vegetable'] = 'artichoke'
  36. self.assertEqual(list(test_context), ['vegetable'])
  37. self.assertNotIn('fruit', test_context)
  38. with self.assertRaises(KeyError):
  39. test_context['fruit']
  40. self.assertIsNone(test_context.get('fruit'))
  41. def test_context_comparable(self):
  42. test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}}
  43. self.assertEquals(Context(test_data), Context(test_data))