test_nodelist.py 2.5 KB

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