Merge "Simplify DatabaseBase::tableName()"
[lhc/web/wiklou.git] / tests / phpunit / includes / XmlSelectTest.php
1 <?php
2
3 // TODO
4 class XmlSelectTest extends MediaWikiTestCase {
5 protected $select;
6
7 protected function setUp() {
8 parent::setUp();
9 $this->setMwGlobals( array(
10 'wgHtml5' => true,
11 'wgWellFormedXml' => true,
12 ));
13 $this->select = new XmlSelect();
14 }
15 protected function tearDown() {
16 parent::tearDown();
17 $this->select = null;
18 }
19
20 ### START OF TESTS ###
21
22 public function testConstructWithoutParameters() {
23 $this->assertEquals( '<select></select>', $this->select->getHTML() );
24 }
25
26 /**
27 * Parameters are $name (false), $id (false), $default (false)
28 * @dataProvider provideConstructionParameters
29 */
30 public function testConstructParameters( $name, $id, $default, $expected ) {
31 $this->select = new XmlSelect( $name, $id, $default );
32 $this->assertEquals( $expected, $this->select->getHTML() );
33 }
34
35 /**
36 * Provide parameters for testConstructParameters() which use three
37 * parameters:
38 * - $name (default: false)
39 * - $id (default: false)
40 * - $default (default: false)
41 * Provides a fourth parameters representing the expected HTML output
42 *
43 */
44 public static function provideConstructionParameters() {
45 return array(
46 /**
47 * Values are set following a 3-bit Gray code where two successive
48 * values differ by only one value.
49 * See http://en.wikipedia.org/wiki/Gray_code
50 */
51 # $name $id $default
52 array( false , false, false, '<select></select>' ),
53 array( false , false, 'foo', '<select></select>' ),
54 array( false , 'id' , 'foo', '<select id="id"></select>' ),
55 array( false , 'id' , false, '<select id="id"></select>' ),
56 array( 'name', 'id' , false, '<select name="name" id="id"></select>' ),
57 array( 'name', 'id' , 'foo', '<select name="name" id="id"></select>' ),
58 array( 'name', false, 'foo', '<select name="name"></select>' ),
59 array( 'name', false, false, '<select name="name"></select>' ),
60 );
61 }
62
63 # Begin XmlSelect::addOption() similar to Xml::option
64 public function testAddOption() {
65 $this->select->addOption( 'foo' );
66 $this->assertEquals( '<select><option value="foo">foo</option></select>', $this->select->getHTML() );
67 }
68 public function testAddOptionWithDefault() {
69 $this->select->addOption( 'foo', true );
70 $this->assertEquals( '<select><option value="1">foo</option></select>', $this->select->getHTML() );
71 }
72 public function testAddOptionWithFalse() {
73 $this->select->addOption( 'foo', false );
74 $this->assertEquals( '<select><option value="foo">foo</option></select>', $this->select->getHTML() );
75 }
76 public function testAddOptionWithValueZero() {
77 $this->select->addOption( 'foo', 0 );
78 $this->assertEquals( '<select><option value="0">foo</option></select>', $this->select->getHTML() );
79 }
80 # End XmlSelect::addOption() similar to Xml::option
81
82 public function testSetDefault() {
83 $this->select->setDefault( 'bar1' );
84 $this->select->addOption( 'foo1' );
85 $this->select->addOption( 'bar1' );
86 $this->select->addOption( 'foo2' );
87 $this->assertEquals(
88 '<select><option value="foo1">foo1</option>' . "\n" .
89 '<option value="bar1" selected="">bar1</option>' . "\n" .
90 '<option value="foo2">foo2</option></select>', $this->select->getHTML() );
91 }
92
93 /**
94 * Adding default later on should set the correct selection or
95 * raise an exception.
96 * To handle this, we need to render the options in getHtml()
97 */
98 public function testSetDefaultAfterAddingOptions() {
99 $this->select->addOption( 'foo1' );
100 $this->select->addOption( 'bar1' );
101 $this->select->addOption( 'foo2' );
102 $this->select->setDefault( 'bar1' ); # setting default after adding options
103 $this->assertEquals(
104 '<select><option value="foo1">foo1</option>' . "\n" .
105 '<option value="bar1" selected="">bar1</option>' . "\n" .
106 '<option value="foo2">foo2</option></select>', $this->select->getHTML() );
107 }
108
109 public function testGetAttributes() {
110 # create some attributes
111 $this->select->setAttribute( 'dummy', 0x777 );
112 $this->select->setAttribute( 'string', 'euro €' );
113 $this->select->setAttribute( 1911, 'razor' );
114
115 # verify we can retrieve them
116 $this->assertEquals(
117 $this->select->getAttribute( 'dummy' ),
118 0x777
119 );
120 $this->assertEquals(
121 $this->select->getAttribute( 'string' ),
122 'euro €'
123 );
124 $this->assertEquals(
125 $this->select->getAttribute( 1911 ),
126 'razor'
127 );
128
129 # inexistant keys should give us 'null'
130 $this->assertEquals(
131 $this->select->getAttribute( 'I DO NOT EXIT' ),
132 null
133 );
134
135 # verify string / integer
136 $this->assertEquals(
137 $this->select->getAttribute( '1911' ),
138 'razor'
139 );
140 $this->assertEquals(
141 $this->select->getAttribute( 'dummy' ),
142 0x777
143 );
144 }
145 }