Improve PHPUnit code coverage
[lhc/web/wiklou.git] / tests / phpunit / includes / XmlSelectTest.php
index a4b0f8f..c17cba2 100644 (file)
@@ -17,12 +17,48 @@ class XmlSelectTest extends MediaWikiTestCase {
                $this->assertEquals( '<select></select>', $this->select->getHTML() );
        }
 
+       /**
+        * Parameters are $name (false), $id (false), $default (false)
+        * @dataProvider provideConstructionParameters
+        */
+       public function testConstructParameters( $name, $id, $default, $expected ) {
+               $this->select = new XmlSelect( $name, $id, $default );
+               $this->assertEquals( $expected, $this->select->getHTML() );
+       }
+
+       /**
+        * Provide parameters for testConstructParameters() which use three
+        * parameters:
+        *  - $name    (default: false)
+        *  - $id      (default: false)
+        *  - $default (default: false)
+        * Provides a fourth parameters representing the expected HTML output
+        *
+        */
+       public function provideConstructionParameters() {
+               return array(
+                       /**
+                        * Values are set following a 3-bit Gray code where two successive
+                        * values differ by only one value.
+                        * See http://en.wikipedia.org/wiki/Gray_code
+                        */
+                       #      $name   $id    $default
+                       array( false , false, false,  '<select></select>' ),
+                       array( false , false, 'foo',  '<select></select>' ),
+                       array( false , 'id' , 'foo',  '<select id="id"></select>' ),
+                       array( false , 'id' , false,  '<select id="id"></select>' ),
+                       array( 'name', 'id' , false,  '<select name="name" id="id"></select>' ),
+                       array( 'name', 'id' , 'foo',  '<select name="name" id="id"></select>' ),
+                       array( 'name', false, 'foo',  '<select name="name"></select>' ),
+                       array( 'name', false, false,  '<select name="name"></select>' ),
+               );
+       }
+
        # Begin XmlSelect::addOption() similar to Xml::option
        public function testAddOption() {
                $this->select->addOption( 'foo' );
                $this->assertEquals( '<select><option value="foo">foo</option></select>', $this->select->getHTML() );
        }
-
        public function testAddOptionWithDefault() {
                $this->select->addOption( 'foo', true );
                $this->assertEquals( '<select><option value="1">foo</option></select>', $this->select->getHTML() );
@@ -37,4 +73,33 @@ class XmlSelectTest extends MediaWikiTestCase {
        }
        # End XmlSelect::addOption() similar to Xml::option
 
+       public function testSetDefault() {
+               $this->select->setDefault( 'bar1' );
+               $this->select->addOption( 'foo1' );
+               $this->select->addOption( 'bar1' );
+               $this->select->addOption( 'foo2' );
+               $this->assertEquals(
+'<select><option value="foo1">foo1</option>
+<option value="bar1" selected="selected">bar1</option>
+<option value="foo2">foo2</option></select>', $this->select->getHTML() );
+       }
+
+       /**
+        * Adding default later on should set the correct selection or
+        * raise an exception.
+        * To handle this, we need to render the options in getHtml()
+        */
+       public function testSetDefaultAfterAddingOptions() {
+               $this->markTestSkipped( 'XmlSelect::setDefault() need to apply to previously added options');
+
+               $this->select->addOption( 'foo1' );
+               $this->select->addOption( 'bar1' );
+               $this->select->addOption( 'foo2' );
+               $this->select->setDefault( 'bar1' ); # setting default after adding options
+               $this->assertEquals(
+'<select><option value="foo1">foo1</option>
+<option value="bar1" selected="selected">bar1</option>
+<option value="foo2">foo2</option></select>', $this->select->getHTML() );
+       }
+
 }