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