summaryrefslogtreecommitdiff
path: root/tests/phpunit/includes/HtmlTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/phpunit/includes/HtmlTest.php')
-rw-r--r--tests/phpunit/includes/HtmlTest.php495
1 files changed, 273 insertions, 222 deletions
diff --git a/tests/phpunit/includes/HtmlTest.php b/tests/phpunit/includes/HtmlTest.php
index 135ebc5a..1c62d032 100644
--- a/tests/phpunit/includes/HtmlTest.php
+++ b/tests/phpunit/includes/HtmlTest.php
@@ -2,119 +2,144 @@
/** tests for includes/Html.php */
class HtmlTest extends MediaWikiTestCase {
- private static $oldLang;
- private static $oldContLang;
- private static $oldLanguageCode;
- private static $oldNamespaces;
- private static $oldHTML5;
- public function setUp() {
- global $wgLang, $wgContLang, $wgLanguageCode, $wgHTML5;
+ protected function setUp() {
+ parent::setUp();
- // Save globals
- self::$oldLang = $wgLang;
- self::$oldContLang = $wgContLang;
- self::$oldNamespaces = $wgContLang->getNamespaces();
- self::$oldLanguageCode = $wgLanguageCode;
- self::$oldHTML5 = $wgHTML5;
-
- $wgLanguageCode = 'en';
- $wgContLang = $wgLang = Language::factory( $wgLanguageCode );
+ $langCode = 'en';
+ $langObj = Language::factory( $langCode );
// Hardcode namespaces during test runs,
// so that html output based on existing namespaces
// can be properly evaluated.
- $wgContLang->setNamespaces( array(
+ $langObj->setNamespaces( array(
-2 => 'Media',
-1 => 'Special',
- 0 => '',
- 1 => 'Talk',
- 2 => 'User',
- 3 => 'User_talk',
- 4 => 'MyWiki',
- 5 => 'MyWiki_Talk',
- 6 => 'File',
- 7 => 'File_talk',
- 8 => 'MediaWiki',
- 9 => 'MediaWiki_talk',
- 10 => 'Template',
- 11 => 'Template_talk',
- 14 => 'Category',
- 15 => 'Category_talk',
- 100 => 'Custom',
- 101 => 'Custom_talk',
+ 0 => '',
+ 1 => 'Talk',
+ 2 => 'User',
+ 3 => 'User_talk',
+ 4 => 'MyWiki',
+ 5 => 'MyWiki_Talk',
+ 6 => 'File',
+ 7 => 'File_talk',
+ 8 => 'MediaWiki',
+ 9 => 'MediaWiki_talk',
+ 10 => 'Template',
+ 11 => 'Template_talk',
+ 14 => 'Category',
+ 15 => 'Category_talk',
+ 100 => 'Custom',
+ 101 => 'Custom_talk',
+ ) );
+
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => $langCode,
+ 'wgContLang' => $langObj,
+ 'wgLang' => $langObj,
+ 'wgWellFormedXml' => false,
) );
}
- public function tearDown() {
- global $wgLang, $wgContLang, $wgLanguageCode, $wgHTML5;
+ public function testElementBasics() {
+ $this->assertEquals(
+ '<img>',
+ Html::element( 'img', null, '' ),
+ 'No close tag for short-tag elements'
+ );
- // Restore globals
- $wgContLang->setNamespaces( self::$oldNamespaces );
- $wgLang = self::$oldLang;
- $wgContLang = self::$oldContLang;
- $wgLanguageCode = self::$oldLanguageCode;
- $wgHTML5 = self::$oldHTML5;
+ $this->assertEquals(
+ '<element></element>',
+ Html::element( 'element', null, null ),
+ 'Close tag for empty element (null, null)'
+ );
+
+ $this->assertEquals(
+ '<element></element>',
+ Html::element( 'element', array(), '' ),
+ 'Close tag for empty element (array, string)'
+ );
+
+ $this->setMwGlobals( 'wgWellFormedXml', true );
+
+ $this->assertEquals(
+ '<img />',
+ Html::element( 'img', null, '' ),
+ 'Self-closing tag for short-tag elements (wgWellFormedXml = true)'
+ );
}
- /**
- * Wrapper to easily set $wgHTML5 = true.
- * Original value will be restored after test completion.
- * @todo Move to MediaWikiTestCase
- */
- public function enableHTML5() {
- global $wgHTML5;
- $wgHTML5 = true;
+ public function dataXmlMimeType() {
+ return array(
+ // ( $mimetype, $isXmlMimeType )
+ # HTML is not an XML MimeType
+ array( 'text/html', false ),
+ # XML is an XML MimeType
+ array( 'text/xml', true ),
+ array( 'application/xml', true ),
+ # XHTML is an XML MimeType
+ array( 'application/xhtml+xml', true ),
+ # Make sure other +xml MimeTypes are supported
+ # SVG is another random MimeType even though we don't use it
+ array( 'image/svg+xml', true ),
+ # Complete random other MimeTypes are not XML
+ array( 'text/plain', false ),
+ );
}
+
/**
- * Wrapper to easily set $wgHTML5 = false
- * Original value will be restored after test completion.
- * @todo Move to MediaWikiTestCase
+ * @dataProvider dataXmlMimeType
*/
- public function disableHTML5() {
- global $wgHTML5;
- $wgHTML5 = false;
+ public function testXmlMimeType( $mimetype, $isXmlMimeType ) {
+ $this->assertEquals( $isXmlMimeType, Html::isXmlMimeType( $mimetype ) );
}
public function testExpandAttributesSkipsNullAndFalse() {
-
+
### EMPTY ########
- $this->AssertEmpty(
+ $this->assertEmpty(
Html::expandAttributes( array( 'foo' => null ) ),
'skip keys with null value'
);
- $this->AssertEmpty(
+ $this->assertEmpty(
Html::expandAttributes( array( 'foo' => false ) ),
'skip keys with false value'
);
- $this->AssertNotEmpty(
+ $this->assertNotEmpty(
Html::expandAttributes( array( 'foo' => '' ) ),
'keep keys with an empty string'
);
}
public function testExpandAttributesForBooleans() {
- global $wgHtml5;
- $this->AssertEquals(
+ $this->assertEquals(
'',
Html::expandAttributes( array( 'selected' => false ) ),
'Boolean attributes do not generates output when value is false'
);
- $this->AssertEquals(
+ $this->assertEquals(
'',
Html::expandAttributes( array( 'selected' => null ) ),
'Boolean attributes do not generates output when value is null'
);
- $this->AssertEquals(
- $wgHtml5 ? ' selected=""' : ' selected="selected"',
+ $this->assertEquals(
+ ' selected',
Html::expandAttributes( array( 'selected' => true ) ),
- 'Boolean attributes skip value output'
+ 'Boolean attributes have no value when value is true'
);
- $this->AssertEquals(
- $wgHtml5 ? ' selected=""' : ' selected="selected"',
+ $this->assertEquals(
+ ' selected',
Html::expandAttributes( array( 'selected' ) ),
- 'Boolean attributes (ex: selected) do not need a value'
+ 'Boolean attributes have no value when value is true (passed as numerical array)'
+ );
+
+ $this->setMwGlobals( 'wgWellFormedXml', true );
+
+ $this->assertEquals(
+ ' selected=""',
+ Html::expandAttributes( array( 'selected' => true ) ),
+ 'Boolean attributes have empty string value when value is true (wgWellFormedXml)'
);
}
@@ -124,25 +149,48 @@ class HtmlTest extends MediaWikiTestCase {
*/
public function testExpandAttributesVariousExpansions() {
### NOT EMPTY ####
- $this->AssertEquals(
+ $this->assertEquals(
' empty_string=""',
Html::expandAttributes( array( 'empty_string' => '' ) ),
- 'Value with an empty string'
+ 'Empty string is always quoted'
);
- $this->AssertEquals(
+ $this->assertEquals(
+ ' key=value',
+ Html::expandAttributes( array( 'key' => 'value' ) ),
+ 'Simple string value needs no quotes'
+ );
+ $this->assertEquals(
+ ' one=1',
+ Html::expandAttributes( array( 'one' => 1 ) ),
+ 'Number 1 value needs no quotes'
+ );
+ $this->assertEquals(
+ ' zero=0',
+ Html::expandAttributes( array( 'zero' => 0 ) ),
+ 'Number 0 value needs no quotes'
+ );
+
+ $this->setMwGlobals( 'wgWellFormedXml', true );
+
+ $this->assertEquals(
+ ' empty_string=""',
+ Html::expandAttributes( array( 'empty_string' => '' ) ),
+ 'Attribute values are always quoted (wgWellFormedXml): Empty string'
+ );
+ $this->assertEquals(
' key="value"',
Html::expandAttributes( array( 'key' => 'value' ) ),
- 'Value is a string'
+ 'Attribute values are always quoted (wgWellFormedXml): Simple string'
);
- $this->AssertEquals(
+ $this->assertEquals(
' one="1"',
Html::expandAttributes( array( 'one' => 1 ) ),
- 'Value is a numeric one'
+ 'Attribute values are always quoted (wgWellFormedXml): Number 1'
);
- $this->AssertEquals(
+ $this->assertEquals(
' zero="0"',
Html::expandAttributes( array( 'zero' => 0 ) ),
- 'Value is a numeric zero'
+ 'Attribute values are always quoted (wgWellFormedXml): Number 0'
);
}
@@ -153,29 +201,29 @@ class HtmlTest extends MediaWikiTestCase {
*/
public function testExpandAttributesListValueAttributes() {
### STRING VALUES
- $this->AssertEquals(
+ $this->assertEquals(
' class="redundant spaces here"',
Html::expandAttributes( array( 'class' => ' redundant spaces here ' ) ),
'Normalization should strip redundant spaces'
);
- $this->AssertEquals(
+ $this->assertEquals(
' class="foo bar"',
Html::expandAttributes( array( 'class' => 'foo bar foo bar bar' ) ),
'Normalization should remove duplicates in string-lists'
);
### "EMPTY" ARRAY VALUES
- $this->AssertEquals(
+ $this->assertEquals(
' class=""',
Html::expandAttributes( array( 'class' => array() ) ),
'Value with an empty array'
);
- $this->AssertEquals(
+ $this->assertEquals(
' class=""',
Html::expandAttributes( array( 'class' => array( null, '', ' ', ' ' ) ) ),
'Array with null, empty string and spaces'
);
### NON-EMPTY ARRAY VALUES
- $this->AssertEquals(
+ $this->assertEquals(
' class="foo bar"',
Html::expandAttributes( array( 'class' => array(
'foo',
@@ -186,7 +234,7 @@ class HtmlTest extends MediaWikiTestCase {
) ) ),
'Normalization should remove duplicates in the array'
);
- $this->AssertEquals(
+ $this->assertEquals(
' class="foo bar"',
Html::expandAttributes( array( 'class' => array(
'foo bar',
@@ -202,7 +250,7 @@ class HtmlTest extends MediaWikiTestCase {
* Test feature added by r96188, let pass attributes values as
* a PHP array. Restricted to class,rel, accesskey.
*/
- function testExpandAttributesSpaceSeparatedAttributesWithBoolean() {
+ public function testExpandAttributesSpaceSeparatedAttributesWithBoolean() {
$this->assertEquals(
' class="booltrue one"',
Html::expandAttributes( array( 'class' => array(
@@ -210,12 +258,12 @@ class HtmlTest extends MediaWikiTestCase {
'one' => 1,
# Method use isset() internally, make sure we do discard
- # attributes values which have been assigned well known values
+ # attributes values which have been assigned well known values
'emptystring' => '',
'boolfalse' => false,
'zero' => 0,
'null' => null,
- )))
+ ) ) )
);
}
@@ -226,62 +274,62 @@ class HtmlTest extends MediaWikiTestCase {
*
* Feature added by r96188
*/
- function testValueIsAuthoritativeInSpaceSeparatedAttributesArrays() {
+ public function testValueIsAuthoritativeInSpaceSeparatedAttributesArrays() {
$this->assertEquals(
' class=""',
Html::expandAttributes( array( 'class' => array(
'GREEN',
'GREEN' => false,
'GREEN',
- )))
+ ) ) )
);
}
- function testNamespaceSelector() {
- $this->assertEquals(
- '<select>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
-'</select>',
+ public function testNamespaceSelector() {
+ $this->assertEquals(
+ '<select id=namespace name=namespace>' . "\n" .
+ '<option value=0>(Main)</option>' . "\n" .
+ '<option value=1>Talk</option>' . "\n" .
+ '<option value=2>User</option>' . "\n" .
+ '<option value=3>User talk</option>' . "\n" .
+ '<option value=4>MyWiki</option>' . "\n" .
+ '<option value=5>MyWiki Talk</option>' . "\n" .
+ '<option value=6>File</option>' . "\n" .
+ '<option value=7>File talk</option>' . "\n" .
+ '<option value=8>MediaWiki</option>' . "\n" .
+ '<option value=9>MediaWiki talk</option>' . "\n" .
+ '<option value=10>Template</option>' . "\n" .
+ '<option value=11>Template talk</option>' . "\n" .
+ '<option value=14>Category</option>' . "\n" .
+ '<option value=15>Category talk</option>' . "\n" .
+ '<option value=100>Custom</option>' . "\n" .
+ '<option value=101>Custom talk</option>' . "\n" .
+ '</select>',
Html::namespaceSelector(),
'Basic namespace selector without custom options'
);
$this->assertEquals(
- '<label for="mw-test-namespace">Select a namespace:</label>&#160;' .
-'<select id="mw-test-namespace" name="wpNamespace">' . "\n" .
-'<option value="all">all</option>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2" selected="">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
-'</select>',
+ '<label for=mw-test-namespace>Select a namespace:</label>&#160;' .
+ '<select id=mw-test-namespace name=wpNamespace>' . "\n" .
+ '<option value=all>all</option>' . "\n" .
+ '<option value=0>(Main)</option>' . "\n" .
+ '<option value=1>Talk</option>' . "\n" .
+ '<option value=2 selected>User</option>' . "\n" .
+ '<option value=3>User talk</option>' . "\n" .
+ '<option value=4>MyWiki</option>' . "\n" .
+ '<option value=5>MyWiki Talk</option>' . "\n" .
+ '<option value=6>File</option>' . "\n" .
+ '<option value=7>File talk</option>' . "\n" .
+ '<option value=8>MediaWiki</option>' . "\n" .
+ '<option value=9>MediaWiki talk</option>' . "\n" .
+ '<option value=10>Template</option>' . "\n" .
+ '<option value=11>Template talk</option>' . "\n" .
+ '<option value=14>Category</option>' . "\n" .
+ '<option value=15>Category talk</option>' . "\n" .
+ '<option value=100>Custom</option>' . "\n" .
+ '<option value=101>Custom talk</option>' . "\n" .
+ '</select>',
Html::namespaceSelector(
array( 'selected' => '2', 'all' => 'all', 'label' => 'Select a namespace:' ),
array( 'name' => 'wpNamespace', 'id' => 'mw-test-namespace' )
@@ -290,25 +338,25 @@ class HtmlTest extends MediaWikiTestCase {
);
$this->assertEquals(
- '<label>Select a namespace:</label>&#160;' .
-'<select>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
-'</select>',
+ '<label for=namespace>Select a namespace:</label>&#160;' .
+ '<select id=namespace name=namespace>' . "\n" .
+ '<option value=0>(Main)</option>' . "\n" .
+ '<option value=1>Talk</option>' . "\n" .
+ '<option value=2>User</option>' . "\n" .
+ '<option value=3>User talk</option>' . "\n" .
+ '<option value=4>MyWiki</option>' . "\n" .
+ '<option value=5>MyWiki Talk</option>' . "\n" .
+ '<option value=6>File</option>' . "\n" .
+ '<option value=7>File talk</option>' . "\n" .
+ '<option value=8>MediaWiki</option>' . "\n" .
+ '<option value=9>MediaWiki talk</option>' . "\n" .
+ '<option value=10>Template</option>' . "\n" .
+ '<option value=11>Template talk</option>' . "\n" .
+ '<option value=14>Category</option>' . "\n" .
+ '<option value=15>Category talk</option>' . "\n" .
+ '<option value=100>Custom</option>' . "\n" .
+ '<option value=101>Custom talk</option>' . "\n" .
+ '</select>',
Html::namespaceSelector(
array( 'label' => 'Select a namespace:' )
),
@@ -316,21 +364,21 @@ class HtmlTest extends MediaWikiTestCase {
);
}
- function testCanFilterOutNamespaces() {
- $this->assertEquals(
-'<select>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'</select>',
+ public function testCanFilterOutNamespaces() {
+ $this->assertEquals(
+ '<select id=namespace name=namespace>' . "\n" .
+ '<option value=2>User</option>' . "\n" .
+ '<option value=4>MyWiki</option>' . "\n" .
+ '<option value=5>MyWiki Talk</option>' . "\n" .
+ '<option value=6>File</option>' . "\n" .
+ '<option value=7>File talk</option>' . "\n" .
+ '<option value=8>MediaWiki</option>' . "\n" .
+ '<option value=9>MediaWiki talk</option>' . "\n" .
+ '<option value=10>Template</option>' . "\n" .
+ '<option value=11>Template talk</option>' . "\n" .
+ '<option value=14>Category</option>' . "\n" .
+ '<option value=15>Category talk</option>' . "\n" .
+ '</select>',
Html::namespaceSelector(
array( 'exclude' => array( 0, 1, 3, 100, 101 ) )
),
@@ -338,26 +386,26 @@ class HtmlTest extends MediaWikiTestCase {
);
}
- function testCanDisableANamespaces() {
- $this->assertEquals(
-'<select>' . "\n" .
-'<option disabled="" value="0">(Main)</option>' . "\n" .
-'<option disabled="" value="1">Talk</option>' . "\n" .
-'<option disabled="" value="2">User</option>' . "\n" .
-'<option disabled="" value="3">User talk</option>' . "\n" .
-'<option disabled="" value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="14">Category</option>' . "\n" .
-'<option value="15">Category talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
-'</select>',
+ public function testCanDisableANamespaces() {
+ $this->assertEquals(
+ '<select id=namespace name=namespace>' . "\n" .
+ '<option disabled value=0>(Main)</option>' . "\n" .
+ '<option disabled value=1>Talk</option>' . "\n" .
+ '<option disabled value=2>User</option>' . "\n" .
+ '<option disabled value=3>User talk</option>' . "\n" .
+ '<option disabled value=4>MyWiki</option>' . "\n" .
+ '<option value=5>MyWiki Talk</option>' . "\n" .
+ '<option value=6>File</option>' . "\n" .
+ '<option value=7>File talk</option>' . "\n" .
+ '<option value=8>MediaWiki</option>' . "\n" .
+ '<option value=9>MediaWiki talk</option>' . "\n" .
+ '<option value=10>Template</option>' . "\n" .
+ '<option value=11>Template talk</option>' . "\n" .
+ '<option value=14>Category</option>' . "\n" .
+ '<option value=15>Category talk</option>' . "\n" .
+ '<option value=100>Custom</option>' . "\n" .
+ '<option value=101>Custom talk</option>' . "\n" .
+ '</select>',
Html::namespaceSelector( array(
'disable' => array( 0, 1, 2, 3, 4 )
) ),
@@ -366,13 +414,12 @@ class HtmlTest extends MediaWikiTestCase {
}
/**
- * @dataProvider providesHtml5InputTypes
+ * @dataProvider provideHtml5InputTypes
*/
- function testHtmlElementAcceptsNewHtml5TypesInHtml5Mode( $HTML5InputType ) {
- $this->enableHTML5();
+ public function testHtmlElementAcceptsNewHtml5TypesInHtml5Mode( $HTML5InputType ) {
$this->assertEquals(
- '<input type="' . $HTML5InputType . '" />',
- HTML::element( 'input', array( 'type' => $HTML5InputType ) ),
+ '<input type=' . $HTML5InputType . '>',
+ Html::element( 'input', array( 'type' => $HTML5InputType ) ),
'In HTML5, HTML::element() should accept type="' . $HTML5InputType . '"'
);
}
@@ -381,7 +428,7 @@ class HtmlTest extends MediaWikiTestCase {
* List of input element types values introduced by HTML5
* Full list at http://www.w3.org/TR/html-markup/input.html
*/
- function providesHtml5InputTypes() {
+ public static function provideHtml5InputTypes() {
$types = array(
'datetime',
'datetime-local',
@@ -398,42 +445,39 @@ class HtmlTest extends MediaWikiTestCase {
'color',
);
$cases = array();
- foreach( $types as $type ) {
+ foreach ( $types as $type ) {
$cases[] = array( $type );
}
+
return $cases;
}
/**
- * Test out Html::element drops default value
- * @cover Html::dropDefaults
+ * Test out Html::element drops or enforces default value
+ * @covers Html::dropDefaults
* @dataProvider provideElementsWithAttributesHavingDefaultValues
*/
- function testDropDefaults( $expected, $element, $message = '' ) {
- $this->enableHTML5();
- $this->assertEquals( $expected, $element, $message );
+ public function testDropDefaults( $expected, $element, $attribs, $message = '' ) {
+ $this->assertEquals( $expected, Html::element( $element, $attribs ), $message );
}
- function provideElementsWithAttributesHavingDefaultValues() {
+ public static function provideElementsWithAttributesHavingDefaultValues() {
# Use cases in a concise format:
# <expected>, <element name>, <array of attributes> [, <message>]
# Will be mapped to Html::element()
$cases = array();
### Generic cases, match $attribDefault static array
- $cases[] = array( '<area />',
+ $cases[] = array( '<area>',
'area', array( 'shape' => 'rect' )
);
- $cases[] = array( '<button></button>',
+ $cases[] = array( '<button type=submit></button>',
'button', array( 'formaction' => 'GET' )
);
- $cases[] = array( '<button></button>',
+ $cases[] = array( '<button type=submit></button>',
'button', array( 'formenctype' => 'application/x-www-form-urlencoded' )
);
- $cases[] = array( '<button></button>',
- 'button', array( 'type' => 'submit' )
- );
$cases[] = array( '<canvas></canvas>',
'canvas', array( 'height' => '150' )
@@ -449,7 +493,7 @@ class HtmlTest extends MediaWikiTestCase {
'canvas', array( 'width' => 300 )
);
- $cases[] = array( '<command />',
+ $cases[] = array( '<command>',
'command', array( 'type' => 'command' )
);
@@ -463,18 +507,18 @@ class HtmlTest extends MediaWikiTestCase {
'form', array( 'enctype' => 'application/x-www-form-urlencoded' )
);
- $cases[] = array( '<input />',
+ $cases[] = array( '<input>',
'input', array( 'formaction' => 'GET' )
);
- $cases[] = array( '<input />',
+ $cases[] = array( '<input>',
'input', array( 'type' => 'text' )
);
- $cases[] = array( '<keygen />',
+ $cases[] = array( '<keygen>',
'keygen', array( 'keytype' => 'rsa' )
);
- $cases[] = array( '<link />',
+ $cases[] = array( '<link>',
'link', array( 'media' => 'all' )
);
@@ -499,37 +543,44 @@ class HtmlTest extends MediaWikiTestCase {
### SPECIFIC CASES
- # <link type="text/css" />
- $cases[] = array( '<link />',
+ # <link type="text/css">
+ $cases[] = array( '<link>',
'link', array( 'type' => 'text/css' )
);
- # <input /> specific handling
- $cases[] = array( '<input type="checkbox" />',
+ # <input> specific handling
+ $cases[] = array( '<input type=checkbox>',
'input', array( 'type' => 'checkbox', 'value' => 'on' ),
'Default value "on" is stripped of checkboxes',
);
- $cases[] = array( '<input type="radio" />',
+ $cases[] = array( '<input type=radio>',
'input', array( 'type' => 'radio', 'value' => 'on' ),
'Default value "on" is stripped of radio buttons',
);
- $cases[] = array( '<input type="submit" value="Submit" />',
+ $cases[] = array( '<input type=submit value=Submit>',
'input', array( 'type' => 'submit', 'value' => 'Submit' ),
'Default value "Submit" is kept on submit buttons (for possible l10n issues)',
);
- $cases[] = array( '<input type="color" />',
+ $cases[] = array( '<input type=color>',
'input', array( 'type' => 'color', 'value' => '' ),
);
- $cases[] = array( '<input type="range" />',
+ $cases[] = array( '<input type=range>',
'input', array( 'type' => 'range', 'value' => '' ),
);
- # <select /> specifc handling
- $cases[] = array( '<select multiple=""></select>',
+ # <button> specific handling
+ # see remarks on http://msdn.microsoft.com/en-us/library/ie/ms535211%28v=vs.85%29.aspx
+ $cases[] = array( '<button type=submit></button>',
+ 'button', array( 'type' => 'submit' ),
+ 'According to standard the default type is "submit". Depending on compatibility mode IE might use "button", instead.',
+ );
+
+ # <select> specifc handling
+ $cases[] = array( '<select multiple></select>',
'select', array( 'size' => '4', 'multiple' => true ),
);
# .. with numeric value
- $cases[] = array( '<select multiple=""></select>',
+ $cases[] = array( '<select multiple></select>',
'select', array( 'size' => 4, 'multiple' => true ),
);
$cases[] = array( '<select></select>',
@@ -553,15 +604,16 @@ class HtmlTest extends MediaWikiTestCase {
"dropDefaults accepts values given as an array"
);
-
# Craft the Html elements
$ret = array();
- foreach( $cases as $case ) {
+ foreach ( $cases as $case ) {
$ret[] = array(
$case[0],
- Html::element( $case[1], $case[2] )
+ $case[1], $case[2],
+ isset( $case[3] ) ? $case[3] : ''
);
}
+
return $ret;
}
@@ -571,10 +623,9 @@ class HtmlTest extends MediaWikiTestCase {
'Blacklist form validation attributes.'
);
$this->assertEquals(
- ' step="any"',
+ ' step=any',
Html::expandAttributes( array( 'min' => 1, 'max' => 100, 'pattern' => 'abc', 'required' => true, 'step' => 'any' ) ),
- "Allow special case 'step=\"any\"'."
+ 'Allow special case "step=any".'
);
}
-
}