2011-02-05 23:41:29 +00:00
|
|
|
<?php
|
|
|
|
|
|
2013-10-21 21:09:13 +00:00
|
|
|
/**
|
|
|
|
|
* @group Xml
|
|
|
|
|
*/
|
2021-01-16 01:33:13 +00:00
|
|
|
class XmlSelectTest extends MediaWikiUnitTestCase {
|
2013-02-14 11:56:23 +00:00
|
|
|
|
2013-10-21 21:09:13 +00:00
|
|
|
/**
|
|
|
|
|
* @covers XmlSelect::__construct
|
|
|
|
|
*/
|
2011-02-05 23:41:29 +00:00
|
|
|
public function testConstructWithoutParameters() {
|
2021-01-16 01:33:13 +00:00
|
|
|
$select = new XmlSelect();
|
|
|
|
|
$this->assertEquals( '<select></select>', $select->getHTML() );
|
2011-02-05 23:41:29 +00:00
|
|
|
}
|
|
|
|
|
|
2011-02-06 13:59:06 +00:00
|
|
|
/**
|
|
|
|
|
* Parameters are $name (false), $id (false), $default (false)
|
|
|
|
|
* @dataProvider provideConstructionParameters
|
2013-10-21 21:09:13 +00:00
|
|
|
* @covers XmlSelect::__construct
|
2011-02-06 13:59:06 +00:00
|
|
|
*/
|
|
|
|
|
public function testConstructParameters( $name, $id, $default, $expected ) {
|
2021-01-16 01:33:13 +00:00
|
|
|
$select = new XmlSelect( $name, $id, $default );
|
|
|
|
|
$this->assertEquals( $expected, $select->getHTML() );
|
2011-02-06 13:59:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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
|
|
|
|
|
*/
|
2012-10-08 10:56:20 +00:00
|
|
|
public static function provideConstructionParameters() {
|
2016-02-17 09:09:32 +00:00
|
|
|
return [
|
2011-02-06 13:59:06 +00:00
|
|
|
/**
|
|
|
|
|
* Values are set following a 3-bit Gray code where two successive
|
|
|
|
|
* values differ by only one value.
|
2016-10-09 17:48:14 +00:00
|
|
|
* See https://en.wikipedia.org/wiki/Gray_code
|
2011-02-06 13:59:06 +00:00
|
|
|
*/
|
|
|
|
|
# $name $id $default
|
2016-02-17 09:09:32 +00:00
|
|
|
[ false, false, false, '<select></select>' ],
|
|
|
|
|
[ false, false, 'foo', '<select></select>' ],
|
|
|
|
|
[ false, 'id', 'foo', '<select id="id"></select>' ],
|
|
|
|
|
[ false, 'id', false, '<select id="id"></select>' ],
|
|
|
|
|
[ 'name', 'id', false, '<select name="name" id="id"></select>' ],
|
|
|
|
|
[ 'name', 'id', 'foo', '<select name="name" id="id"></select>' ],
|
|
|
|
|
[ 'name', false, 'foo', '<select name="name"></select>' ],
|
|
|
|
|
[ 'name', false, false, '<select name="name"></select>' ],
|
|
|
|
|
];
|
2011-02-06 13:59:06 +00:00
|
|
|
}
|
|
|
|
|
|
2013-10-21 21:09:13 +00:00
|
|
|
/**
|
|
|
|
|
* @covers XmlSelect::addOption
|
|
|
|
|
*/
|
2021-01-16 01:33:13 +00:00
|
|
|
public function testAddOptionNoValue() {
|
|
|
|
|
$select = new XmlSelect();
|
|
|
|
|
$select->addOption( 'foo' );
|
2014-04-24 12:50:36 +00:00
|
|
|
$this->assertEquals(
|
|
|
|
|
'<select><option value="foo">foo</option></select>',
|
2021-01-16 01:33:13 +00:00
|
|
|
$select->getHTML()
|
2014-04-24 12:50:36 +00:00
|
|
|
);
|
2011-02-05 23:41:29 +00:00
|
|
|
}
|
2013-02-14 11:56:23 +00:00
|
|
|
|
2013-10-21 21:09:13 +00:00
|
|
|
/**
|
2021-01-16 01:33:13 +00:00
|
|
|
* @dataProvider provideAddOption
|
2013-10-21 21:09:13 +00:00
|
|
|
* @covers XmlSelect::addOption
|
|
|
|
|
*/
|
2021-01-16 01:33:13 +00:00
|
|
|
public function testAddOption( $value, $expected ) {
|
|
|
|
|
$select = new XmlSelect();
|
|
|
|
|
$select->addOption( 'foo', $value );
|
|
|
|
|
$this->assertEquals( $expected, $select->getHTML() );
|
2011-02-05 23:41:29 +00:00
|
|
|
}
|
2013-02-14 11:56:23 +00:00
|
|
|
|
2023-03-23 11:36:19 +00:00
|
|
|
public static function provideAddOption() {
|
2021-01-16 01:33:13 +00:00
|
|
|
yield 'true' => [ true, '<select><option value="1">foo</option></select>' ];
|
|
|
|
|
yield 'false' => [ false, '<select><option value="foo">foo</option></select>' ];
|
|
|
|
|
yield 'zero' => [ 0, '<select><option value="0">foo</option></select>' ];
|
2011-02-05 23:41:29 +00:00
|
|
|
}
|
2013-02-14 11:56:23 +00:00
|
|
|
|
2013-10-21 21:09:13 +00:00
|
|
|
/**
|
|
|
|
|
* @covers XmlSelect::setDefault
|
|
|
|
|
*/
|
2011-02-06 13:59:06 +00:00
|
|
|
public function testSetDefault() {
|
2021-01-16 01:33:13 +00:00
|
|
|
$select = new XmlSelect();
|
|
|
|
|
$select->setDefault( 'bar1' );
|
|
|
|
|
$select->addOption( 'foo1' );
|
|
|
|
|
$select->addOption( 'bar1' );
|
|
|
|
|
$select->addOption( 'foo2' );
|
2011-02-06 13:59:06 +00:00
|
|
|
$this->assertEquals(
|
2013-02-14 11:56:23 +00:00
|
|
|
'<select><option value="foo1">foo1</option>' . "\n" .
|
|
|
|
|
'<option value="bar1" selected="">bar1</option>' . "\n" .
|
2021-01-16 01:33:13 +00:00
|
|
|
'<option value="foo2">foo2</option></select>', $select->getHTML() );
|
2011-02-06 13:59:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Adding default later on should set the correct selection or
|
|
|
|
|
* raise an exception.
|
|
|
|
|
* To handle this, we need to render the options in getHtml()
|
2013-10-21 21:09:13 +00:00
|
|
|
* @covers XmlSelect::setDefault
|
2011-02-06 13:59:06 +00:00
|
|
|
*/
|
|
|
|
|
public function testSetDefaultAfterAddingOptions() {
|
2021-01-16 01:33:13 +00:00
|
|
|
$select = new XmlSelect();
|
|
|
|
|
$select->addOption( 'foo1' );
|
|
|
|
|
$select->addOption( 'bar1' );
|
|
|
|
|
$select->addOption( 'foo2' );
|
|
|
|
|
$select->setDefault( 'bar1' ); # setting default after adding options
|
2011-02-06 13:59:06 +00:00
|
|
|
$this->assertEquals(
|
2013-02-14 11:56:23 +00:00
|
|
|
'<select><option value="foo1">foo1</option>' . "\n" .
|
|
|
|
|
'<option value="bar1" selected="">bar1</option>' . "\n" .
|
2021-01-16 01:33:13 +00:00
|
|
|
'<option value="foo2">foo2</option></select>', $select->getHTML() );
|
2011-02-06 13:59:06 +00:00
|
|
|
}
|
|
|
|
|
|
2013-10-21 21:09:13 +00:00
|
|
|
/**
|
|
|
|
|
* @covers XmlSelect::setAttribute
|
|
|
|
|
* @covers XmlSelect::getAttribute
|
|
|
|
|
*/
|
2011-05-12 20:07:57 +00:00
|
|
|
public function testGetAttributes() {
|
|
|
|
|
# create some attributes
|
2021-01-16 01:33:13 +00:00
|
|
|
$select = new XmlSelect();
|
|
|
|
|
$select->setAttribute( 'dummy', 0x777 );
|
|
|
|
|
$select->setAttribute( 'string', 'euro €' );
|
|
|
|
|
$select->setAttribute( 1911, 'razor' );
|
2011-05-12 20:07:57 +00:00
|
|
|
|
|
|
|
|
# verify we can retrieve them
|
2021-01-16 01:33:13 +00:00
|
|
|
$this->assertSame(
|
|
|
|
|
0x777,
|
|
|
|
|
$select->getAttribute( 'dummy' )
|
2011-05-12 20:07:57 +00:00
|
|
|
);
|
|
|
|
|
$this->assertEquals(
|
2021-01-16 01:33:13 +00:00
|
|
|
'euro €',
|
|
|
|
|
$select->getAttribute( 'string' )
|
2011-05-12 20:07:57 +00:00
|
|
|
);
|
|
|
|
|
$this->assertEquals(
|
2021-01-16 01:33:13 +00:00
|
|
|
'razor',
|
|
|
|
|
$select->getAttribute( 1911 )
|
2011-05-12 20:07:57 +00:00
|
|
|
);
|
|
|
|
|
|
2014-12-12 08:41:27 +00:00
|
|
|
# inexistent keys should give us 'null'
|
2019-12-29 10:50:03 +00:00
|
|
|
$this->assertNull(
|
2021-01-16 01:33:13 +00:00
|
|
|
$select->getAttribute( 'I DO NOT EXIT' )
|
2011-05-12 20:07:57 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
# verify string / integer
|
|
|
|
|
$this->assertEquals(
|
2021-01-16 01:33:13 +00:00
|
|
|
'razor',
|
|
|
|
|
$select->getAttribute( '1911' )
|
2011-05-12 20:07:57 +00:00
|
|
|
);
|
2021-01-16 01:33:13 +00:00
|
|
|
$this->assertSame(
|
|
|
|
|
0x777,
|
|
|
|
|
$select->getAttribute( 'dummy' )
|
2011-05-12 20:07:57 +00:00
|
|
|
);
|
|
|
|
|
}
|
2011-02-05 23:41:29 +00:00
|
|
|
}
|