12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- from django.template import Context, Engine
- from django.template.base import TextNode, VariableNode
- from django.test import SimpleTestCase, ignore_warnings
- from django.utils.deprecation import RemovedInDjango40Warning
- class NodelistTest(SimpleTestCase):
- @classmethod
- def setUpClass(cls):
- cls.engine = Engine()
- super().setUpClass()
- def test_for(self):
- template = self.engine.from_string('{% for i in 1 %}{{ a }}{% endfor %}')
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
- def test_if(self):
- template = self.engine.from_string('{% if x %}{{ a }}{% endif %}')
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
- @ignore_warnings(category=RemovedInDjango40Warning)
- def test_ifequal(self):
- template = self.engine.from_string('{% ifequal x y %}{{ a }}{% endifequal %}')
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
- def test_ifchanged(self):
- template = self.engine.from_string('{% ifchanged x %}{{ a }}{% endifchanged %}')
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
- class TextNodeTest(SimpleTestCase):
- def test_textnode_repr(self):
- engine = Engine()
- for temptext, reprtext in [
- ("Hello, world!", "<TextNode: 'Hello, world!'>"),
- ("One\ntwo.", "<TextNode: 'One\\ntwo.'>"),
- ]:
- template = engine.from_string(temptext)
- texts = template.nodelist.get_nodes_by_type(TextNode)
- self.assertEqual(repr(texts[0]), reprtext)
- class ErrorIndexTest(SimpleTestCase):
- """
- Checks whether index of error is calculated correctly in
- template debugger in for loops. Refs ticket #5831
- """
- def test_correct_exception_index(self):
- tests = [
- ('{% load bad_tag %}{% for i in range %}{% badsimpletag %}{% endfor %}', (38, 56)),
- (
- '{% load bad_tag %}{% for i in range %}{% for j in range %}'
- '{% badsimpletag %}{% endfor %}{% endfor %}',
- (58, 76)
- ),
- (
- '{% load bad_tag %}{% for i in range %}{% badsimpletag %}'
- '{% for j in range %}Hello{% endfor %}{% endfor %}',
- (38, 56)
- ),
- (
- '{% load bad_tag %}{% for i in range %}{% for j in five %}'
- '{% badsimpletag %}{% endfor %}{% endfor %}',
- (38, 57)
- ),
- ('{% load bad_tag %}{% for j in five %}{% badsimpletag %}{% endfor %}', (18, 37)),
- ]
- context = Context({
- 'range': range(5),
- 'five': 5,
- })
- engine = Engine(debug=True, libraries={'bad_tag': 'template_tests.templatetags.bad_tag'})
- for source, expected_error_source_index in tests:
- template = engine.from_string(source)
- try:
- template.render(context)
- except (RuntimeError, TypeError) as e:
- debug = e.template_debug
- self.assertEqual((debug['start'], debug['end']), expected_error_source_index)
|