diff options
| author | Jon Dufresne <jon.dufresne@gmail.com> | 2016-08-12 10:59:01 -0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-08-12 13:59:01 -0400 |
| commit | fab46ce6f5a0a58c4e5e39c9e5e412702beb4a64 (patch) | |
| tree | 361730d067142bfc0e51ecfd2e65b9d719f08a07 /tests/forms_tests | |
| parent | f842d1011c1195aa26071a6ab6f96e0b8d907343 (diff) | |
Fixed #27037 -- Prevented required attribute on ClearableFileInput when initial data exists.
Diffstat (limited to 'tests/forms_tests')
5 files changed, 36 insertions, 0 deletions
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 773b89a7bc..0e0ea9f1c2 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -2360,6 +2360,15 @@ Password: <input type="password" name="password" required /> '<tr><th>File1:</th><td><input type="file" name="file1" required /></td></tr>', ) + # A required file field with initial data should not contain the + # required HTML attribute. The file input is left blank by the user to + # keep the existing, initial value. + f = FileForm(initial={'file1': 'resume.txt'}, auto_id=False) + self.assertHTMLEqual( + f.as_table(), + '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>', + ) + def test_basic_processing_in_view(self): class UserRegistration(Form): username = CharField(max_length=10) diff --git a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py index 10d025e4c2..2d73f2b589 100644 --- a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py +++ b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py @@ -112,3 +112,11 @@ class CheckboxSelectMultipleTest(WidgetTest): </ul> """ self.check_html(widget, 'letters', ['a', 'c'], html=html) + + def test_use_required_attribute(self): + widget = self.widget(choices=self.beatles) + # Always False because browser validation would require all checkboxes + # to be checked instead of at least one. + self.assertIs(widget.use_required_attribute(None), False) + self.assertIs(widget.use_required_attribute([]), False) + self.assertIs(widget.use_required_attribute(['J', 'P']), False) diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index 720f17b035..3727d0c0df 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -143,3 +143,9 @@ class ClearableFileInputTest(WidgetTest): html = self.widget.render('myfile', NoURLFieldFile()) self.assertHTMLEqual(html, '<input name="myfile" type="file" />') + + def test_use_required_attribute(self): + # False when initial data exists. The file input is left blank by the + # user to keep the existing, initial value. + self.assertIs(self.widget.use_required_attribute(None), True) + self.assertIs(self.widget.use_required_attribute('resume.txt'), False) diff --git a/tests/forms_tests/widget_tests/test_hiddeninput.py b/tests/forms_tests/widget_tests/test_hiddeninput.py index 039e89d5cc..d1604a31e4 100644 --- a/tests/forms_tests/widget_tests/test_hiddeninput.py +++ b/tests/forms_tests/widget_tests/test_hiddeninput.py @@ -8,3 +8,10 @@ class HiddenInputTest(WidgetTest): def test_render(self): self.check_html(self.widget, 'email', '', html='<input type="hidden" name="email" />') + + def test_use_required_attribute(self): + # Always False to avoid browser validation on inputs hidden from the + # user. + self.assertIs(self.widget.use_required_attribute(None), False) + self.assertIs(self.widget.use_required_attribute(''), False) + self.assertIs(self.widget.use_required_attribute('foo'), False) diff --git a/tests/forms_tests/widget_tests/test_textinput.py b/tests/forms_tests/widget_tests/test_textinput.py index 33e455a160..65b5da4e03 100644 --- a/tests/forms_tests/widget_tests/test_textinput.py +++ b/tests/forms_tests/widget_tests/test_textinput.py @@ -76,3 +76,9 @@ class TextInputTest(WidgetTest): 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) |
