diff options
| author | django-bot <ops@djangoproject.com> | 2022-02-08 12:09:55 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-02-08 12:15:38 +0100 |
| commit | 6a682b38e75d4c975b4c4493565a59f1bc14397c (patch) | |
| tree | 0bd9cda550bea26238656d9f120d769e8b41bb9e /tests/forms_tests/widget_tests/test_multiwidget.py | |
| parent | e73ce08888e6f34d3f050377cfd2fbb733be94a9 (diff) | |
[4.0.x] Refs #33476 -- Reformatted code with Black.
Backport of 9c19aff7c7561e3a82978a272ecdaad40dda5c00 from main.
Diffstat (limited to 'tests/forms_tests/widget_tests/test_multiwidget.py')
| -rw-r--r-- | tests/forms_tests/widget_tests/test_multiwidget.py | 203 |
1 files changed, 136 insertions, 67 deletions
diff --git a/tests/forms_tests/widget_tests/test_multiwidget.py b/tests/forms_tests/widget_tests/test_multiwidget.py index cb1e9d31c5..c3f676e3f7 100644 --- a/tests/forms_tests/widget_tests/test_multiwidget.py +++ b/tests/forms_tests/widget_tests/test_multiwidget.py @@ -2,8 +2,15 @@ import copy from datetime import datetime from django.forms import ( - CharField, FileInput, MultipleChoiceField, MultiValueField, MultiWidget, - RadioSelect, SelectMultiple, SplitDateTimeField, SplitDateTimeWidget, + CharField, + FileInput, + MultipleChoiceField, + MultiValueField, + MultiWidget, + RadioSelect, + SelectMultiple, + SplitDateTimeField, + SplitDateTimeWidget, TextInput, ) @@ -13,8 +20,8 @@ from .base import WidgetTest class MyMultiWidget(MultiWidget): def decompress(self, value): if value: - return value.split('__') - return ['', ''] + return value.split("__") + return ["", ""] class ComplexMultiWidget(MultiWidget): @@ -28,9 +35,11 @@ class ComplexMultiWidget(MultiWidget): def decompress(self, value): if value: - data = value.split(',') + data = value.split(",") return [ - data[0], list(data[1]), datetime.strptime(data[2], "%Y-%m-%d %H:%M:%S") + data[0], + list(data[1]), + datetime.strptime(data[2], "%Y-%m-%d %H:%M:%S"), ] return [None, None, None] @@ -46,8 +55,10 @@ class ComplexField(MultiValueField): def compress(self, data_list): if data_list: - return '%s,%s,%s' % ( - data_list[0], ''.join(data_list[1]), data_list[2], + return "%s,%s,%s" % ( + data_list[0], + "".join(data_list[1]), + data_list[2], ) return None @@ -56,6 +67,7 @@ class DeepCopyWidget(MultiWidget): """ Used to test MultiWidget.__deepcopy__(). """ + def __init__(self, choices=[]): widgets = [ RadioSelect(choices=choices), @@ -75,6 +87,7 @@ class DeepCopyWidget(MultiWidget): The choices for this widget are the Select widget's choices. """ return self.widgets[0].choices + choices = property(_get_choices, _set_choices) @@ -82,97 +95,144 @@ class MultiWidgetTest(WidgetTest): def test_subwidgets_name(self): widget = MultiWidget( widgets={ - '': TextInput(), - 'big': TextInput(attrs={'class': 'big'}), - 'small': TextInput(attrs={'class': 'small'}), + "": TextInput(), + "big": TextInput(attrs={"class": "big"}), + "small": TextInput(attrs={"class": "small"}), }, ) - self.check_html(widget, 'name', ['John', 'George', 'Paul'], html=( - '<input type="text" name="name" value="John">' - '<input type="text" name="name_big" value="George" class="big">' - '<input type="text" name="name_small" value="Paul" class="small">' - )) + self.check_html( + widget, + "name", + ["John", "George", "Paul"], + html=( + '<input type="text" name="name" value="John">' + '<input type="text" name="name_big" value="George" class="big">' + '<input type="text" name="name_small" value="Paul" class="small">' + ), + ) def test_text_inputs(self): widget = MyMultiWidget( widgets=( - TextInput(attrs={'class': 'big'}), - TextInput(attrs={'class': 'small'}), + TextInput(attrs={"class": "big"}), + TextInput(attrs={"class": "small"}), ) ) - self.check_html(widget, 'name', ['john', 'lennon'], html=( - '<input type="text" class="big" value="john" name="name_0">' - '<input type="text" class="small" value="lennon" name="name_1">' - )) - self.check_html(widget, 'name', 'john__lennon', html=( - '<input type="text" class="big" value="john" name="name_0">' - '<input type="text" class="small" value="lennon" name="name_1">' - )) - self.check_html(widget, 'name', 'john__lennon', attrs={'id': 'foo'}, html=( - '<input id="foo_0" type="text" class="big" value="john" name="name_0">' - '<input id="foo_1" type="text" class="small" value="lennon" name="name_1">' - )) + self.check_html( + widget, + "name", + ["john", "lennon"], + html=( + '<input type="text" class="big" value="john" name="name_0">' + '<input type="text" class="small" value="lennon" name="name_1">' + ), + ) + self.check_html( + widget, + "name", + "john__lennon", + html=( + '<input type="text" class="big" value="john" name="name_0">' + '<input type="text" class="small" value="lennon" name="name_1">' + ), + ) + self.check_html( + widget, + "name", + "john__lennon", + attrs={"id": "foo"}, + html=( + '<input id="foo_0" type="text" class="big" value="john" name="name_0">' + '<input id="foo_1" type="text" class="small" value="lennon" name="name_1">' + ), + ) def test_constructor_attrs(self): widget = MyMultiWidget( widgets=( - TextInput(attrs={'class': 'big'}), - TextInput(attrs={'class': 'small'}), + TextInput(attrs={"class": "big"}), + TextInput(attrs={"class": "small"}), + ), + attrs={"id": "bar"}, + ) + self.check_html( + widget, + "name", + ["john", "lennon"], + html=( + '<input id="bar_0" type="text" class="big" value="john" name="name_0">' + '<input id="bar_1" type="text" class="small" value="lennon" name="name_1">' ), - attrs={'id': 'bar'}, ) - self.check_html(widget, 'name', ['john', 'lennon'], html=( - '<input id="bar_0" type="text" class="big" value="john" name="name_0">' - '<input id="bar_1" type="text" class="small" value="lennon" name="name_1">' - )) def test_constructor_attrs_with_type(self): - attrs = {'type': 'number'} + attrs = {"type": "number"} widget = MyMultiWidget(widgets=(TextInput, TextInput()), attrs=attrs) - self.check_html(widget, 'code', ['1', '2'], html=( - '<input type="number" value="1" name="code_0">' - '<input type="number" value="2" name="code_1">' - )) - widget = MyMultiWidget(widgets=(TextInput(attrs), TextInput(attrs)), attrs={'class': 'bar'}) - self.check_html(widget, 'code', ['1', '2'], html=( - '<input type="number" value="1" name="code_0" class="bar">' - '<input type="number" value="2" name="code_1" class="bar">' - )) + self.check_html( + widget, + "code", + ["1", "2"], + html=( + '<input type="number" value="1" name="code_0">' + '<input type="number" value="2" name="code_1">' + ), + ) + widget = MyMultiWidget( + widgets=(TextInput(attrs), TextInput(attrs)), attrs={"class": "bar"} + ) + self.check_html( + widget, + "code", + ["1", "2"], + html=( + '<input type="number" value="1" name="code_0" class="bar">' + '<input type="number" value="2" name="code_1" class="bar">' + ), + ) def test_value_omitted_from_data(self): widget = MyMultiWidget(widgets=(TextInput(), TextInput())) - self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True) - self.assertIs(widget.value_omitted_from_data({'field_0': 'x'}, {}, 'field'), False) - self.assertIs(widget.value_omitted_from_data({'field_1': 'y'}, {}, 'field'), False) - self.assertIs(widget.value_omitted_from_data({'field_0': 'x', 'field_1': 'y'}, {}, 'field'), False) + self.assertIs(widget.value_omitted_from_data({}, {}, "field"), True) + self.assertIs( + widget.value_omitted_from_data({"field_0": "x"}, {}, "field"), False + ) + self.assertIs( + widget.value_omitted_from_data({"field_1": "y"}, {}, "field"), False + ) + self.assertIs( + widget.value_omitted_from_data( + {"field_0": "x", "field_1": "y"}, {}, "field" + ), + False, + ) def test_value_from_datadict_subwidgets_name(self): - widget = MultiWidget(widgets={'x': TextInput(), '': TextInput()}) + widget = MultiWidget(widgets={"x": TextInput(), "": TextInput()}) tests = [ ({}, [None, None]), - ({'field': 'x'}, [None, 'x']), - ({'field_x': 'y'}, ['y', None]), - ({'field': 'x', 'field_x': 'y'}, ['y', 'x']), + ({"field": "x"}, [None, "x"]), + ({"field_x": "y"}, ["y", None]), + ({"field": "x", "field_x": "y"}, ["y", "x"]), ] for data, expected in tests: with self.subTest(data): self.assertEqual( - widget.value_from_datadict(data, {}, 'field'), + widget.value_from_datadict(data, {}, "field"), expected, ) def test_value_omitted_from_data_subwidgets_name(self): - widget = MultiWidget(widgets={'x': TextInput(), '': TextInput()}) + widget = MultiWidget(widgets={"x": TextInput(), "": TextInput()}) tests = [ ({}, True), - ({'field': 'x'}, False), - ({'field_x': 'y'}, False), - ({'field': 'x', 'field_x': 'y'}, False), + ({"field": "x"}, False), + ({"field_x": "y"}, False), + ({"field": "x", "field_x": "y"}, False), ] for data, expected in tests: with self.subTest(data): self.assertIs( - widget.value_omitted_from_data(data, {}, 'field'), + widget.value_omitted_from_data(data, {}, "field"), expected, ) @@ -195,8 +255,12 @@ class MultiWidgetTest(WidgetTest): MultiWidgets can be composed of other MultiWidgets. """ widget = ComplexMultiWidget() - self.check_html(widget, 'name', 'some text,JP,2007-04-25 06:24:00', html=( - """ + self.check_html( + widget, + "name", + "some text,JP,2007-04-25 06:24:00", + html=( + """ <input type="text" name="name_0" value="some text"> <select multiple name="name_1"> <option value="J" selected>John</option> @@ -207,13 +271,18 @@ class MultiWidgetTest(WidgetTest): <input type="text" name="name_2_0" value="2007-04-25"> <input type="text" name="name_2_1" value="06:24:00"> """ - )) + ), + ) def test_no_whitespace_between_widgets(self): widget = MyMultiWidget(widgets=(TextInput, TextInput())) - self.check_html(widget, 'code', None, html=( - '<input type="text" name="code_0"><input type="text" name="code_1">' - ), strict=True) + self.check_html( + widget, + "code", + None, + html=('<input type="text" name="code_0"><input type="text" name="code_1">'), + strict=True, + ) def test_deepcopy(self): """ |
