X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FHtmlTest.php;h=95a6cb0a04be7aec72b4eb184b7a9c631f6a5392;hb=2759e2a5efc1df364424caa4cc27f281a9a63662;hp=a18f7922f04c5b5cd1f4514b9f902d77246dfa66;hpb=6518ffba8de49e687a114d28aa919f49a3845af6;p=lhc%2Fweb%2Fwiklou.git
diff --git a/tests/phpunit/includes/HtmlTest.php b/tests/phpunit/includes/HtmlTest.php
index a18f7922f0..95a6cb0a04 100644
--- a/tests/phpunit/includes/HtmlTest.php
+++ b/tests/phpunit/includes/HtmlTest.php
@@ -2,29 +2,17 @@
/** 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 => '',
@@ -44,77 +32,102 @@ class HtmlTest extends MediaWikiTestCase {
100 => 'Custom',
101 => 'Custom_talk',
) );
+
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => $langCode,
+ 'wgContLang' => $langObj,
+ 'wgLang' => $langObj,
+ 'wgHtml5' => true,
+ 'wgWellFormedXml' => false,
+ ) );
}
- public function tearDown() {
- global $wgLang, $wgContLang, $wgLanguageCode, $wgHTML5;
+ public function testElementBasics() {
+ global $wgWellFormedXml;
- // Restore globals
- $wgContLang->setNamespaces( self::$oldNamespaces );
- $wgLang = self::$oldLang;
- $wgContLang = self::$oldContLang;
- $wgLanguageCode = self::$oldLanguageCode;
- $wgHTML5 = self::$oldHTML5;
- }
+ $this->assertEquals(
+ '',
+ Html::element( 'img', null, '' ),
+ 'No close tag for short-tag elements'
+ );
- /**
- * 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;
- }
- /**
- * Wrapper to easily set $wgHTML5 = false
- * Original value will be restored after test completion.
- * @todo Move to MediaWikiTestCase
- */
- public function disableHTML5() {
- global $wgHTML5;
- $wgHTML5 = false;
+ $this->assertEquals(
+ '',
+ Html::element( 'element', null, null ),
+ 'Close tag for empty element (null, null)'
+ );
+
+ $this->assertEquals(
+ '',
+ Html::element( 'element', array(), '' ),
+ 'Close tag for empty element (array, string)'
+ );
+
+ $wgWellFormedXml = true;
+
+ $this->assertEquals(
+ '',
+ Html::element( 'img', null, '' ),
+ 'Self-closing tag for short-tag elements (wgWellFormedXml = true)'
+ );
}
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(
+ global $wgHtml5, $wgWellFormedXml;
+
+ $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)'
+ );
+
+ $wgWellFormedXml = true;
+
+ $this->assertEquals(
+ ' selected=""',
+ Html::expandAttributes( array( 'selected' => true ) ),
+ 'Boolean attributes have empty string value when value is true (wgWellFormedXml)'
+ );
+
+ $wgHtml5 = false;
+
+ $this->assertEquals(
+ ' selected="selected"',
+ Html::expandAttributes( array( 'selected' => true ) ),
+ 'Boolean attributes have their key as value when value is true (wgWellFormedXml, wgHTML5 = false)'
);
}
@@ -123,26 +136,51 @@ class HtmlTest extends MediaWikiTestCase {
* Please note it output a string prefixed with a space!
*/
public function testExpandAttributesVariousExpansions() {
+ global $wgWellFormedXml;
+
### 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(
+ ' 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(
+ $this->assertEquals(
+ ' zero=0',
+ Html::expandAttributes( array( 'zero' => 0 ) ),
+ 'Number 0 value needs no quotes'
+ );
+
+ $wgWellFormedXml = true;
+
+ $this->assertEquals(
+ ' empty_string=""',
+ Html::expandAttributes( array( 'empty_string' => '' ) ),
+ 'Attribtue values are always quoted (wgWellFormedXml): Empty string'
+ );
+ $this->assertEquals(
' key="value"',
Html::expandAttributes( array( 'key' => 'value' ) ),
- 'Value is a string'
+ 'Attribtue values are always quoted (wgWellFormedXml): Simple string'
);
- $this->AssertEquals(
+ $this->assertEquals(
' one="1"',
Html::expandAttributes( array( 'one' => 1 ) ),
- 'Value is a numeric one'
+ 'Attribtue values are always quoted (wgWellFormedXml): Number 1'
);
- $this->AssertEquals(
+ $this->assertEquals(
' zero="0"',
Html::expandAttributes( array( 'zero' => 0 ) ),
- 'Value is a numeric zero'
+ 'Attribtue values are always quoted (wgWellFormedXml): Number 0'
);
}
@@ -153,29 +191,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 +224,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',
@@ -239,48 +277,48 @@ class HtmlTest extends MediaWikiTestCase {
function testNamespaceSelector() {
$this->assertEquals(
- '