From 04ff65fc69dd2e768bd0581a85e10d7590db1c08 Mon Sep 17 00:00:00 2001 From: Fomafix Date: Thu, 21 Apr 2016 05:39:08 +0000 Subject: [PATCH] Simplify autocomplete attribute in HTMLForm Follows-up 7489a3e8 Change-Id: Ifb17c88e39df7031054b3bee83772172c64d0a6b --- includes/htmlform/HTMLForm.php | 14 +++---- .../includes/htmlform/HTMLFormTest.php | 42 +++++++++++++++++-- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index d959dd2adc..296c4b3bb9 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -213,11 +213,11 @@ class HTMLForm extends ContextSource { protected $mAction = false; /** - * Form attribute autocomplete. false does not set the attribute + * Form attribute autocomplete. A typical value is "off". null does not set the attribute * @since 1.27 - * @var bool|string + * @var string|null */ - protected $mAutocomplete = false; + protected $mAutocomplete = null; protected $mUseMultipart = false; protected $mHiddenFields = []; @@ -1062,7 +1062,7 @@ class HTMLForm extends ContextSource { if ( $this->mId ) { $attribs['id'] = $this->mId; } - if ( $this->mAutocomplete ) { + if ( is_string( $this->mAutocomplete ) ) { $attribs['autocomplete'] = $this->mAutocomplete; } if ( $this->mName ) { @@ -1868,12 +1868,12 @@ class HTMLForm extends ContextSource { } /** - * Set the value for the autocomplete attribute of the form. - * When set to false (which is the default state), the attribute get not set. + * Set the value for the autocomplete attribute of the form. A typical value is "off". + * When set to null (which is the default state), the attribute get not set. * * @since 1.27 * - * @param string|bool $autocomplete + * @param string|null $autocomplete * * @return HTMLForm $this for chaining calls */ diff --git a/tests/phpunit/includes/htmlform/HTMLFormTest.php b/tests/phpunit/includes/htmlform/HTMLFormTest.php index 98511ca79c..f74f60af05 100644 --- a/tests/phpunit/includes/htmlform/HTMLFormTest.php +++ b/tests/phpunit/includes/htmlform/HTMLFormTest.php @@ -2,22 +2,56 @@ /** * @covers HTMLForm + * + * @licence GNU GPL v2+ + * @author Gergő Tisza + * @author Thiemo Mättig */ class HTMLFormTest extends MediaWikiTestCase { - public function testGetHTML_empty() { + + private function newInstance() { $form = new HTMLForm( [] ); $form->setTitle( Title::newFromText( 'Foo' ) ); + return $form; + } + + public function testGetHTML_empty() { + $form = $this->newInstance(); $form->prepareForm(); $html = $form->getHTML( false ); - $this->assertRegExp( '/assertStringStartsWith( '
setTitle( Title::newFromText( 'Foo' ) ); + $form = $this->newInstance(); $form->getHTML( false ); } + + public function testAutocompleteDefaultsToNull() { + $form = $this->newInstance(); + $this->assertNotContains( 'autocomplete', $form->wrapForm( '' ) ); + } + + public function testAutocompleteWhenSetToNull() { + $form = $this->newInstance(); + $form->setAutocomplete( null ); + $this->assertNotContains( 'autocomplete', $form->wrapForm( '' ) ); + } + + public function testAutocompleteWhenSetToFalse() { + $form = $this->newInstance(); + // Previously false was used instead of null to indicate the attribute should not be set + $form->setAutocomplete( false ); + $this->assertNotContains( 'autocomplete', $form->wrapForm( '' ) ); + } + + public function testAutocompleteWhenSetToOff() { + $form = $this->newInstance(); + $form->setAutocomplete( 'off' ); + $this->assertContains( ' autocomplete="off"', $form->wrapForm( '' ) ); + } + } -- 2.20.1