summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-11-17 20:34:48 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-27 12:48:07 +0100
commit8d322902799019908ec0ded3f08cc8c09425ee8e (patch)
tree85d93fccfd688f9e329b7be13e099e8d58d69714 /tests
parent1f817daa20110987bf155fc6c942a8a14720a66b (diff)
Fixed #30425 -- Handled jinja2.TemplateSyntaxError when rendering a template.
Jinja raises jinja2.TemplateSyntaxError in render() not in get_template() when it's in an included template.
Diffstat (limited to 'tests')
-rw-r--r--tests/template_backends/jinja2/template_backends/syntax_error_include.html1
-rw-r--r--tests/template_backends/test_jinja2.py38
2 files changed, 38 insertions, 1 deletions
diff --git a/tests/template_backends/jinja2/template_backends/syntax_error_include.html b/tests/template_backends/jinja2/template_backends/syntax_error_include.html
new file mode 100644
index 0000000000..e23b0e78d3
--- /dev/null
+++ b/tests/template_backends/jinja2/template_backends/syntax_error_include.html
@@ -0,0 +1 @@
+{% include "template_backends/syntax_error.html" %}
diff --git a/tests/template_backends/test_jinja2.py b/tests/template_backends/test_jinja2.py
index a454e93a39..b908431914 100644
--- a/tests/template_backends/test_jinja2.py
+++ b/tests/template_backends/test_jinja2.py
@@ -1,5 +1,5 @@
from pathlib import Path
-from unittest import skipIf
+from unittest import mock, skipIf
from django.template import TemplateSyntaxError
from django.test import RequestFactory
@@ -96,3 +96,39 @@ class Jinja2Tests(TemplateStringsTests):
})
template = engine.get_template('hello.html')
self.assertEqual(template.render({'name': 'Joe'}), 'Hello Joe!')
+
+ def test_template_render_nested_error(self):
+ template = self.engine.get_template('template_backends/syntax_error_include.html')
+ with self.assertRaises(TemplateSyntaxError) as e:
+ template.render(context={})
+ debug = e.exception.template_debug
+ self.assertEqual(debug['after'], '')
+ self.assertEqual(debug['before'], '')
+ self.assertEqual(debug['during'], '{% block %}')
+ self.assertEqual(debug['bottom'], 1)
+ self.assertEqual(debug['top'], 0)
+ self.assertEqual(debug['line'], 1)
+ self.assertEqual(debug['total'], 1)
+ self.assertEqual(len(debug['source_lines']), 1)
+ self.assertTrue(debug['name'].endswith('syntax_error.html'))
+ self.assertIn('message', debug)
+
+ def test_template_render_error_nonexistent_source(self):
+ template = self.engine.get_template('template_backends/hello.html')
+ with mock.patch(
+ 'jinja2.environment.Template.render',
+ side_effect=jinja2.TemplateSyntaxError('', 1, filename='nonexistent.html'),
+ ):
+ with self.assertRaises(TemplateSyntaxError) as e:
+ template.render(context={})
+ debug = e.exception.template_debug
+ self.assertEqual(debug['after'], '')
+ self.assertEqual(debug['before'], '')
+ self.assertEqual(debug['during'], '')
+ self.assertEqual(debug['bottom'], 0)
+ self.assertEqual(debug['top'], 0)
+ self.assertEqual(debug['line'], 1)
+ self.assertEqual(debug['total'], 0)
+ self.assertEqual(len(debug['source_lines']), 0)
+ self.assertTrue(debug['name'].endswith('nonexistent.html'))
+ self.assertIn('message', debug)