test_nodelist.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from unittest import TestCase
  2. from django.template import Context, Template
  3. from django.template.base import VariableNode
  4. from django.test import override_settings
  5. class NodelistTest(TestCase):
  6. def test_for(self):
  7. template = Template('{% for i in 1 %}{{ a }}{% endfor %}')
  8. vars = template.nodelist.get_nodes_by_type(VariableNode)
  9. self.assertEqual(len(vars), 1)
  10. def test_if(self):
  11. template = Template('{% if x %}{{ a }}{% endif %}')
  12. vars = template.nodelist.get_nodes_by_type(VariableNode)
  13. self.assertEqual(len(vars), 1)
  14. def test_ifequal(self):
  15. template = Template('{% ifequal x y %}{{ a }}{% endifequal %}')
  16. vars = template.nodelist.get_nodes_by_type(VariableNode)
  17. self.assertEqual(len(vars), 1)
  18. def test_ifchanged(self):
  19. template = Template('{% ifchanged x %}{{ a }}{% endifchanged %}')
  20. vars = template.nodelist.get_nodes_by_type(VariableNode)
  21. self.assertEqual(len(vars), 1)
  22. class ErrorIndexTest(TestCase):
  23. """
  24. Checks whether index of error is calculated correctly in
  25. template debugger in for loops. Refs ticket #5831
  26. """
  27. @override_settings(DEBUG=True, TEMPLATE_DEBUG=True)
  28. def test_correct_exception_index(self):
  29. tests = [
  30. ('{% load bad_tag %}{% for i in range %}{% badsimpletag %}{% endfor %}', (38, 56)),
  31. ('{% load bad_tag %}{% for i in range %}{% for j in range %}{% badsimpletag %}{% endfor %}{% endfor %}', (58, 76)),
  32. ('{% load bad_tag %}{% for i in range %}{% badsimpletag %}{% for j in range %}Hello{% endfor %}{% endfor %}', (38, 56)),
  33. ('{% load bad_tag %}{% for i in range %}{% for j in five %}{% badsimpletag %}{% endfor %}{% endfor %}', (38, 57)),
  34. ('{% load bad_tag %}{% for j in five %}{% badsimpletag %}{% endfor %}', (18, 37)),
  35. ]
  36. context = Context({
  37. 'range': range(5),
  38. 'five': 5,
  39. })
  40. for source, expected_error_source_index in tests:
  41. template = Template(source)
  42. try:
  43. template.render(context)
  44. except (RuntimeError, TypeError) as e:
  45. error_source_index = e.django_template_source[1]
  46. self.assertEqual(error_source_index,
  47. expected_error_source_index)