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