diff options
author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2014-12-14 21:22:57 +0100 |
---|---|---|
committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2014-12-28 16:23:00 +0100 |
commit | 332154e7263d01ceea9665fb51d4d24cd8b54470 (patch) | |
tree | b4ba6f0f1be77e238d2a431156a49c8c6dd38394 /tests/template_backends | |
parent | 1eca0e95cf1aa9b7a2d2806999609924e2bc3afe (diff) | |
download | django-332154e7263d01ceea9665fb51d4d24cd8b54470.tar.gz |
Added basic tests for template backends.
Diffstat (limited to 'tests/template_backends')
11 files changed, 112 insertions, 0 deletions
diff --git a/tests/template_backends/__init__.py b/tests/template_backends/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/__init__.py diff --git a/tests/template_backends/forbidden/template_backends/hello.html b/tests/template_backends/forbidden/template_backends/hello.html new file mode 100644 index 0000000000..14240a43ee --- /dev/null +++ b/tests/template_backends/forbidden/template_backends/hello.html @@ -0,0 +1 @@ +Hu ho. diff --git a/tests/template_backends/jinja2/template_backends/csrf.html b/tests/template_backends/jinja2/template_backends/csrf.html new file mode 100644 index 0000000000..081577fe3a --- /dev/null +++ b/tests/template_backends/jinja2/template_backends/csrf.html @@ -0,0 +1 @@ +{{ csrf_input }} diff --git a/tests/template_backends/jinja2/template_backends/hello.html b/tests/template_backends/jinja2/template_backends/hello.html new file mode 100644 index 0000000000..4ce626e9be --- /dev/null +++ b/tests/template_backends/jinja2/template_backends/hello.html @@ -0,0 +1 @@ +Hello {{ name }}! diff --git a/tests/template_backends/template_strings/template_backends/csrf.html b/tests/template_backends/template_strings/template_backends/csrf.html new file mode 100644 index 0000000000..b1c144dcb7 --- /dev/null +++ b/tests/template_backends/template_strings/template_backends/csrf.html @@ -0,0 +1 @@ +$csrf_input diff --git a/tests/template_backends/template_strings/template_backends/hello.html b/tests/template_backends/template_strings/template_backends/hello.html new file mode 100644 index 0000000000..7a1b4446c7 --- /dev/null +++ b/tests/template_backends/template_strings/template_backends/hello.html @@ -0,0 +1 @@ +Hello $name! diff --git a/tests/template_backends/templates/template_backends/csrf.html b/tests/template_backends/templates/template_backends/csrf.html new file mode 100644 index 0000000000..a8367c4f08 --- /dev/null +++ b/tests/template_backends/templates/template_backends/csrf.html @@ -0,0 +1 @@ +{% csrf_token %} diff --git a/tests/template_backends/templates/template_backends/hello.html b/tests/template_backends/templates/template_backends/hello.html new file mode 100644 index 0000000000..4ce626e9be --- /dev/null +++ b/tests/template_backends/templates/template_backends/hello.html @@ -0,0 +1 @@ +Hello {{ name }}! diff --git a/tests/template_backends/test_django.py b/tests/template_backends/test_django.py new file mode 100644 index 0000000000..5c5070cb18 --- /dev/null +++ b/tests/template_backends/test_django.py @@ -0,0 +1,9 @@ +from django.template.backends.django import DjangoTemplates + +from .test_dummy import TemplateStringsTests + + +class DjangoTemplatesTests(TemplateStringsTests): + + engine_class = DjangoTemplates + backend_name = 'django' diff --git a/tests/template_backends/test_dummy.py b/tests/template_backends/test_dummy.py new file mode 100644 index 0000000000..e79dbbe02a --- /dev/null +++ b/tests/template_backends/test_dummy.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +from __future__ import unicode_literals + +from django.http import HttpRequest +from django.middleware.csrf import CsrfViewMiddleware, get_token +from django.template import TemplateDoesNotExist +from django.template.backends.dummy import TemplateStrings +from django.test import SimpleTestCase + + +class TemplateStringsTests(SimpleTestCase): + + engine_class = TemplateStrings + backend_name = 'dummy' + options = {} + + @classmethod + def setUpClass(cls): + params = { + 'DIRS': [], + 'APP_DIRS': True, + 'NAME': cls.backend_name, + 'OPTIONS': cls.options, + } + cls.engine = cls.engine_class(params) + + def test_from_string(self): + template = self.engine.from_string("Hello!\n") + content = template.render() + self.assertEqual(content, "Hello!\n") + + def test_get_template(self): + template = self.engine.get_template('template_backends/hello.html') + content = template.render({'name': 'world'}) + self.assertEqual(content, "Hello world!\n") + + def test_get_template_non_existing(self): + with self.assertRaises(TemplateDoesNotExist): + self.engine.get_template('template_backends/non_existing.html') + + def test_html_escaping(self): + template = self.engine.get_template('template_backends/hello.html') + context = {'name': '<script>alert("XSS!");</script>'} + content = template.render(context) + + self.assertIn('<script>', content) + self.assertNotIn('<script>', content) + + def test_csrf_token(self): + request = HttpRequest() + CsrfViewMiddleware().process_view(request, lambda r: None, (), {}) + + template = self.engine.get_template('template_backends/csrf.html') + content = template.render(request=request) + + expected = ( + '<input type="hidden" name="csrfmiddlewaretoken" ' + 'value="{}" />'.format(get_token(request))) + + self.assertHTMLEqual(content, expected) + + def test_no_directory_traversal(self): + with self.assertRaises(TemplateDoesNotExist): + self.engine.get_template('../forbidden/template_backends/hello.html') + + def test_non_ascii_characters(self): + template = self.engine.get_template('template_backends/hello.html') + content = template.render({'name': 'Jérôme'}) + self.assertEqual(content, "Hello Jérôme!\n") diff --git a/tests/template_backends/test_jinja2.py b/tests/template_backends/test_jinja2.py new file mode 100644 index 0000000000..8c0b8fc8f4 --- /dev/null +++ b/tests/template_backends/test_jinja2.py @@ -0,0 +1,26 @@ +import sys + +from unittest import skipIf + +# Jinja2 doesn't run on Python 3.2 because it uses u-prefixed unicode strings. +if sys.version_info[:2] == (2, 7) or sys.version_info[:2] >= (3, 3): + try: + import jinja2 + except ImportError: + jinja2 = None + Jinja2 = None + else: + from django.template.backends.jinja2 import Jinja2 +else: + jinja2 = None + Jinja2 = None + +from .test_dummy import TemplateStringsTests + + +@skipIf(jinja2 is None, "this test requires jinja2") +class Jinja2Tests(TemplateStringsTests): + + engine_class = Jinja2 + backend_name = 'jinja2' + options = {'keep_trailing_newline': True} |