summaryrefslogtreecommitdiff
path: root/tests/template_backends
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2014-12-14 21:22:57 +0100
committerAymeric Augustin <aymeric.augustin@m4x.org>2014-12-28 16:23:00 +0100
commit332154e7263d01ceea9665fb51d4d24cd8b54470 (patch)
treeb4ba6f0f1be77e238d2a431156a49c8c6dd38394 /tests/template_backends
parent1eca0e95cf1aa9b7a2d2806999609924e2bc3afe (diff)
downloaddjango-332154e7263d01ceea9665fb51d4d24cd8b54470.tar.gz
Added basic tests for template backends.
Diffstat (limited to 'tests/template_backends')
-rw-r--r--tests/template_backends/__init__.py0
-rw-r--r--tests/template_backends/forbidden/template_backends/hello.html1
-rw-r--r--tests/template_backends/jinja2/template_backends/csrf.html1
-rw-r--r--tests/template_backends/jinja2/template_backends/hello.html1
-rw-r--r--tests/template_backends/template_strings/template_backends/csrf.html1
-rw-r--r--tests/template_backends/template_strings/template_backends/hello.html1
-rw-r--r--tests/template_backends/templates/template_backends/csrf.html1
-rw-r--r--tests/template_backends/templates/template_backends/hello.html1
-rw-r--r--tests/template_backends/test_django.py9
-rw-r--r--tests/template_backends/test_dummy.py70
-rw-r--r--tests/template_backends/test_jinja2.py26
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('&lt;script&gt;', 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}