mirror of
https://github.com/django/django.git
synced 2024-12-23 17:46:27 +00:00
4c30fa905d
This is preparation for landing the template-based widget rendering patch and goes a long way to making these tests more useful for future development. The old doctest heritage is strong here.
88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
from django.forms import CheckboxInput
|
|
|
|
from .base import WidgetTest
|
|
|
|
|
|
class CheckboxInputTest(WidgetTest):
|
|
widget = CheckboxInput()
|
|
|
|
def test_render_empty(self):
|
|
self.check_html(self.widget, 'is_cool', '', html='<input type="checkbox" name="is_cool" />')
|
|
|
|
def test_render_none(self):
|
|
self.check_html(self.widget, 'is_cool', None, html='<input type="checkbox" name="is_cool" />')
|
|
|
|
def test_render_false(self):
|
|
self.check_html(self.widget, 'is_cool', False, html='<input type="checkbox" name="is_cool" />')
|
|
|
|
def test_render_true(self):
|
|
self.check_html(
|
|
self.widget, 'is_cool', True,
|
|
html='<input checked="checked" type="checkbox" name="is_cool" />'
|
|
)
|
|
|
|
def test_render_value(self):
|
|
"""
|
|
Using any value that's not in ('', None, False, True) will check the
|
|
checkbox and set the 'value' attribute.
|
|
"""
|
|
self.check_html(
|
|
self.widget, 'is_cool', 'foo',
|
|
html='<input checked="checked" type="checkbox" name="is_cool" value="foo" />',
|
|
)
|
|
|
|
def test_render_int(self):
|
|
"""
|
|
Integers are handled by value, not as booleans (#17114).
|
|
"""
|
|
self.check_html(
|
|
self.widget, 'is_cool', 0,
|
|
html='<input checked="checked" type="checkbox" name="is_cool" value="0" />',
|
|
)
|
|
self.check_html(
|
|
self.widget, 'is_cool', 1,
|
|
html='<input checked="checked" type="checkbox" name="is_cool" value="1" />',
|
|
)
|
|
|
|
def test_render_check_test(self):
|
|
"""
|
|
You can pass 'check_test' to the constructor. This is a callable that
|
|
takes the value and returns True if the box should be checked.
|
|
"""
|
|
widget = CheckboxInput(check_test=lambda value: value.startswith('hello'))
|
|
self.check_html(widget, 'greeting', '', html=(
|
|
'<input type="checkbox" name="greeting" />'
|
|
))
|
|
self.check_html(widget, 'greeting', 'hello', html=(
|
|
'<input checked="checked" type="checkbox" name="greeting" value="hello" />'
|
|
))
|
|
self.check_html(widget, 'greeting', 'hello there', html=(
|
|
'<input checked="checked" type="checkbox" name="greeting" value="hello there" />'
|
|
))
|
|
self.check_html(widget, 'greeting', 'hello & goodbye', html=(
|
|
'<input checked="checked" type="checkbox" name="greeting" value="hello & goodbye" />'
|
|
))
|
|
|
|
def test_render_check_exception(self):
|
|
"""
|
|
Calling check_test() shouldn't swallow exceptions (#17888).
|
|
"""
|
|
widget = CheckboxInput(
|
|
check_test=lambda value: value.startswith('hello'),
|
|
)
|
|
|
|
with self.assertRaises(AttributeError):
|
|
widget.render('greeting', True)
|
|
|
|
def test_value_from_datadict(self):
|
|
"""
|
|
The CheckboxInput widget will return False if the key is not found in
|
|
the data dictionary (because HTML form submission doesn't send any
|
|
result for unchecked checkboxes).
|
|
"""
|
|
self.assertFalse(self.widget.value_from_datadict({}, {}, 'testing'))
|
|
|
|
def test_value_from_datadict_string_int(self):
|
|
value = self.widget.value_from_datadict({'testing': '0'}, {}, 'testing')
|
|
self.assertEqual(value, True)
|