summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
authorMoritz Sichert <moritz.sichert@googlemail.com>2015-03-18 21:42:59 +0100
committerTim Graham <timograham@gmail.com>2015-03-27 20:01:41 -0400
commit44a05a8a912596c44f37f050dcde85b45827b3b6 (patch)
tree237d32eff118beb88ebbb0c29eaff456978bdbfa /tests/forms_tests
parent6a2f46f2381269187195a0f9165a893f54dc01a3 (diff)
[1.8.x] Fixed #24469 -- Refined escaping of Django's form elements in non-Django templates.
Backport of 1f2abf784a9fe550959de242d91963b2ad6f7e9c from master
Diffstat (limited to 'tests/forms_tests')
-rw-r--r--tests/forms_tests/tests/test_forms.py10
-rw-r--r--tests/forms_tests/tests/test_formsets.py6
-rw-r--r--tests/forms_tests/tests/test_media.py6
-rw-r--r--tests/forms_tests/tests/test_utils.py13
-rw-r--r--tests/forms_tests/tests/test_widgets.py21
5 files changed, 54 insertions, 2 deletions
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 82a9dd92e4..4b418d6dd4 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -2446,3 +2446,13 @@ class FormsTestCase(TestCase):
self.assertRaises(AttributeError, lambda: p.cleaned_data)
self.assertFalse(p.is_valid())
self.assertEqual(p.cleaned_data, {'first_name': 'John', 'last_name': 'Lennon'})
+
+ def test_html_safe(self):
+ class SimpleForm(Form):
+ username = CharField()
+
+ form = SimpleForm()
+ self.assertTrue(hasattr(SimpleForm, '__html__'))
+ self.assertEqual(force_text(form), form.__html__())
+ self.assertTrue(hasattr(form['username'], '__html__'))
+ self.assertEqual(force_text(form['username']), form['username'].__html__())
diff --git a/tests/forms_tests/tests/test_formsets.py b/tests/forms_tests/tests/test_formsets.py
index 7f450247eb..9285a83038 100644
--- a/tests/forms_tests/tests/test_formsets.py
+++ b/tests/forms_tests/tests/test_formsets.py
@@ -10,6 +10,7 @@ from django.forms import (
from django.forms.formsets import BaseFormSet, formset_factory
from django.forms.utils import ErrorList
from django.test import TestCase
+from django.utils.encoding import force_text
class Choice(Form):
@@ -1093,6 +1094,11 @@ class FormsFormsetTestCase(TestCase):
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
self.assertEqual(formset.total_error_count(), 2)
+ def test_html_safe(self):
+ formset = self.make_choiceformset()
+ self.assertTrue(hasattr(formset, '__html__'))
+ self.assertEqual(force_text(formset), formset.__html__())
+
data = {
'choices-TOTAL_FORMS': '1', # the number of forms rendered
diff --git a/tests/forms_tests/tests/test_media.py b/tests/forms_tests/tests/test_media.py
index 027e410f30..64d29c44cb 100644
--- a/tests/forms_tests/tests/test_media.py
+++ b/tests/forms_tests/tests/test_media.py
@@ -2,6 +2,7 @@
from django.forms import CharField, Form, Media, MultiWidget, TextInput
from django.template import Context, Template
from django.test import TestCase, override_settings
+from django.utils.encoding import force_text
@override_settings(
@@ -455,6 +456,11 @@ class FormsMediaTestCase(TestCase):
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />""")
+ def test_html_safe(self):
+ media = Media(css={'all': ['/path/to/css']}, js=['/path/to/js'])
+ self.assertTrue(hasattr(Media, '__html__'))
+ self.assertEqual(force_text(media), media.__html__())
+
@override_settings(
STATIC_URL='http://media.example.com/static/',
diff --git a/tests/forms_tests/tests/test_utils.py b/tests/forms_tests/tests/test_utils.py
index 4519963d96..7baf975bea 100644
--- a/tests/forms_tests/tests/test_utils.py
+++ b/tests/forms_tests/tests/test_utils.py
@@ -7,7 +7,7 @@ from django.core.exceptions import ValidationError
from django.forms.utils import ErrorDict, ErrorList, flatatt
from django.test import TestCase
from django.utils import six
-from django.utils.encoding import python_2_unicode_compatible
+from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy
@@ -131,3 +131,14 @@ class FormsUtilsTestCase(TestCase):
e_deepcopy = copy.deepcopy(e)
self.assertEqual(e, e_deepcopy)
self.assertEqual(e.as_data(), e_copy.as_data())
+
+ def test_error_dict_html_safe(self):
+ e = ErrorDict()
+ e['username'] = 'Invalid username.'
+ self.assertTrue(hasattr(ErrorDict, '__html__'))
+ self.assertEqual(force_text(e), e.__html__())
+
+ def test_error_list_html_safe(self):
+ e = ErrorList(['Invalid username.'])
+ self.assertTrue(hasattr(ErrorList, '__html__'))
+ self.assertEqual(force_text(e), e.__html__())
diff --git a/tests/forms_tests/tests/test_widgets.py b/tests/forms_tests/tests/test_widgets.py
index 223f4cf35b..01f58ef8d1 100644
--- a/tests/forms_tests/tests/test_widgets.py
+++ b/tests/forms_tests/tests/test_widgets.py
@@ -14,7 +14,9 @@ from django.forms import (
PasswordInput, RadioSelect, Select, SelectMultiple, SplitDateTimeWidget,
Textarea, TextInput, TimeInput,
)
-from django.forms.widgets import RadioFieldRenderer
+from django.forms.widgets import (
+ ChoiceFieldRenderer, ChoiceInput, RadioFieldRenderer,
+)
from django.test import TestCase, ignore_warnings, override_settings
from django.utils import six
from django.utils.deprecation import RemovedInDjango19Warning
@@ -1021,6 +1023,23 @@ beatle J R Ringo False""")
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), '<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), '<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:00" />')
+ def test_sub_widget_html_safe(self):
+ widget = TextInput()
+ subwidget = next(widget.subwidgets('username', 'John Doe'))
+ self.assertTrue(hasattr(subwidget, '__html__'))
+ self.assertEqual(force_text(subwidget), subwidget.__html__())
+
+ def test_choice_input_html_safe(self):
+ widget = ChoiceInput('choices', 'CHOICE1', {}, ('CHOICE1', 'first choice'), 0)
+ self.assertTrue(hasattr(ChoiceInput, '__html__'))
+ self.assertEqual(force_text(widget), widget.__html__())
+
+ def test_choice_field_renderer_html_safe(self):
+ renderer = ChoiceFieldRenderer('choices', 'CHOICE1', {}, [('CHOICE1', 'first_choice')])
+ renderer.choice_input_class = lambda *args: args
+ self.assertTrue(hasattr(ChoiceFieldRenderer, '__html__'))
+ self.assertEqual(force_text(renderer), renderer.__html__())
+
class NullBooleanSelectLazyForm(Form):
"""Form to test for lazy evaluation. Refs #17190"""