Simplify autocomplete attribute in HTMLForm
authorFomafix <fomafix@googlemail.com>
Thu, 21 Apr 2016 05:39:08 +0000 (05:39 +0000)
committerThiemo Mättig <thiemo.maettig@wikimedia.de>
Thu, 28 Dec 2017 15:41:39 +0000 (16:41 +0100)
Follows-up 7489a3e8

Change-Id: Ifb17c88e39df7031054b3bee83772172c64d0a6b

includes/htmlform/HTMLForm.php
tests/phpunit/includes/htmlform/HTMLFormTest.php

index d959dd2..296c4b3 100644 (file)
@@ -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
         */
index 98511ca..f74f60a 100644 (file)
@@ -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( '/<form\b/', $html );
+               $this->assertStringStartsWith( '<form ', $html );
        }
 
        /**
         * @expectedException LogicException
         */
        public function testGetHTML_noPrepare() {
-               $form = new HTMLForm( [] );
-               $form->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( '' ) );
+       }
+
 }