diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-11-17 20:34:48 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-11-27 12:48:07 +0100 |
| commit | 8d322902799019908ec0ded3f08cc8c09425ee8e (patch) | |
| tree | 85d93fccfd688f9e329b7be13e099e8d58d69714 /tests | |
| parent | 1f817daa20110987bf155fc6c942a8a14720a66b (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.html | 1 | ||||
| -rw-r--r-- | tests/template_backends/test_jinja2.py | 38 |
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) |
