1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
from django.forms import CharField, Form, TextInput
from django.utils.safestring import mark_safe
from .base import WidgetTest
class TextInputTest(WidgetTest):
widget = TextInput()
def test_render(self):
self.check_html(
self.widget, "email", "", html='<input type="text" name="email">'
)
def test_render_none(self):
self.check_html(
self.widget, "email", None, html='<input type="text" name="email">'
)
def test_render_value(self):
self.check_html(
self.widget,
"email",
"test@example.com",
html=('<input type="text" name="email" value="test@example.com">'),
)
def test_render_boolean(self):
"""
Boolean values are rendered to their string forms ("True" and
"False").
"""
self.check_html(
self.widget,
"get_spam",
False,
html=('<input type="text" name="get_spam" value="False">'),
)
self.check_html(
self.widget,
"get_spam",
True,
html=('<input type="text" name="get_spam" value="True">'),
)
def test_render_quoted(self):
self.check_html(
self.widget,
"email",
'some "quoted" & ampersanded value',
html=(
'<input type="text" name="email" '
'value="some "quoted" & ampersanded value">'
),
)
def test_render_custom_attrs(self):
self.check_html(
self.widget,
"email",
"test@example.com",
attrs={"class": "fun"},
html=(
'<input type="text" name="email" value="test@example.com" class="fun">'
),
)
def test_render_unicode(self):
self.check_html(
self.widget,
"email",
"ŠĐĆŽćžšđ",
attrs={"class": "fun"},
html=(
'<input type="text" name="email" '
'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun">'
),
)
def test_constructor_attrs(self):
widget = TextInput(attrs={"class": "fun", "type": "email"})
self.check_html(
widget, "email", "", html='<input type="email" class="fun" name="email">'
)
self.check_html(
widget,
"email",
"foo@example.com",
html=(
'<input type="email" class="fun" value="foo@example.com" name="email">'
),
)
def test_attrs_precedence(self):
"""
`attrs` passed to render() get precedence over those passed to the
constructor
"""
widget = TextInput(attrs={"class": "pretty"})
self.check_html(
widget,
"email",
"",
attrs={"class": "special"},
html='<input type="text" class="special" name="email">',
)
def test_attrs_safestring(self):
widget = TextInput(attrs={"onBlur": mark_safe("function('foo')")})
self.check_html(
widget,
"email",
"",
html='<input onBlur="function(\'foo\')" type="text" name="email">',
)
def test_use_required_attribute(self):
# Text inputs can safely trigger the browser validation.
self.assertIs(self.widget.use_required_attribute(None), True)
self.assertIs(self.widget.use_required_attribute(""), True)
self.assertIs(self.widget.use_required_attribute("resume.txt"), True)
def test_fieldset(self):
class TestForm(Form):
template_name = "forms_tests/use_fieldset.html"
field = CharField(widget=self.widget)
form = TestForm()
self.assertIs(self.widget.use_fieldset, False)
self.assertHTMLEqual(
'<div><label for="id_field">Field:</label>'
'<input type="text" name="field" required id="id_field"></div>',
form.render(),
)
|