getNamespaces(); $wgContLang->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', 100 => 'Custom', 101 => 'Custom_talk', ) ); } public function tearDown() { global $wgLang, $wgContLang; $wgLang = self::$oldLang; $wgContLang->setNamespaces( self::$oldNamespaces ); } public function testExpandAttributes() { $this->assertNull( Xml::expandAttributes(null), 'Converting a null list of attributes' ); $this->assertEquals( '', Xml::expandAttributes( array() ), 'Converting an empty list of attributes' ); } public function testExpandAttributesException() { $this->setExpectedException('MWException'); Xml::expandAttributes('string'); } function testElementOpen() { $this->assertEquals( '', Xml::element( 'element', null, null ), 'Opening element with no attributes' ); } function testElementEmpty() { $this->assertEquals( '', Xml::element( 'element', null, '' ), 'Terminated empty element' ); } function testElementInputCanHaveAValueOfZero() { $this->assertEquals( '', Xml::input( 'name', false, 0 ), 'Input with a value of 0 (bug 23797)' ); } function testElementEscaping() { $this->assertEquals( 'hello <there> you & you', Xml::element( 'element', null, 'hello you & you' ), 'Element with no attributes and content that needs escaping' ); } public function testEscapeTagsOnly() { $this->assertEquals( '"><', Xml::escapeTagsOnly( '"><' ), 'replace " > and < with their HTML entitites' ); } function testElementAttributes() { $this->assertEquals( '="<>">', Xml::element( 'element', array( 'key' => 'value', '<>' => '<>' ), null ), 'Element attributes, keys are not escaped' ); } function testOpenElement() { $this->assertEquals( '', Xml::openElement( 'element', array( 'k' => 'v' ) ), 'openElement() shortcut' ); } function testCloseElement() { $this->assertEquals( '', Xml::closeElement( 'element' ), 'closeElement() shortcut' ); } /** * @group Broken */ public function testDateMenu( ) { $curYear = intval(gmdate('Y')); $prevYear = $curYear - 1; $curMonth = intval(gmdate('n')); $prevMonth = $curMonth - 1; if( $prevMonth == 0 ) { $prevMonth = 12; } $nextMonth = $curMonth + 1; if( $nextMonth == 13 ) { $nextMonth = 1; } $this->assertEquals( ' ', Xml::dateMenu( 2011, 02 ), "Date menu for february 2011" ); $this->assertEquals( ' ', Xml::dateMenu( 2011, -1), "Date menu with negative month for 'All'" ); $this->assertEquals( Xml::dateMenu( $curYear, $curMonth ), Xml::dateMenu( '' , $curMonth ), "Date menu year is the current one when not specified" ); // @todo FIXME: next month can be in the next year // test failing because it is now december $this->assertEquals( Xml::dateMenu( $prevYear, $nextMonth ), Xml::dateMenu( '', $nextMonth ), "Date menu next month is 11 months ago" ); # @todo FIXME: Please note there is no year there! $this->assertEquals( ' ', Xml::dateMenu( '', '' ), "Date menu with neither year or month" ); } # # textarea # function testTextareaNoContent() { $this->assertEquals( '', Xml::textarea( 'name', '' ), 'textarea() with not content' ); } function testTextareaAttribs() { $this->assertEquals( '', Xml::textarea( 'name', '', 20, 10 ), 'textarea() with custom attribs' ); } # # input and label # function testLabelCreation() { $this->assertEquals( '', Xml::label( 'name', 'id' ), 'label() with no attribs' ); } function testLabelAttributeCanOnlyBeClassOrTitle() { $this->assertEquals( '', Xml::label( 'name', 'id', array( 'generated' => true ) ), 'label() can not be given a generated attribute' ); $this->assertEquals( '', Xml::label( 'name', 'id', array( 'class' => 'nice' ) ), 'label() can get a class attribute' ); $this->assertEquals( '', Xml::label( 'name', 'id', array( 'title' => 'nice tooltip' ) ), 'label() can get a title attribute' ); $this->assertEquals( '', Xml::label( 'name', 'id', array( 'generated' => true, 'class' => 'nice', 'title' => 'nice tooltip', 'anotherattr' => 'value', ) ), 'label() skip all attributes but "class" and "title"' ); } function testLanguageSelector() { $select = Xml::languageSelector( 'en', true, null, array( 'id' => 'testlang' ), wfMessage( 'yourlanguage' ) ); $this->assertEquals( '', $select[0] ); } # # JS # function testEscapeJsStringSpecialChars() { $this->assertEquals( '\\\\\r\n', Xml::escapeJsString( "\\\r\n" ), 'escapeJsString() with special characters' ); } function testEncodeJsVarBoolean() { $this->assertEquals( 'true', Xml::encodeJsVar( true ), 'encodeJsVar() with boolean' ); } function testEncodeJsVarNull() { $this->assertEquals( 'null', Xml::encodeJsVar( null ), 'encodeJsVar() with null' ); } function testEncodeJsVarArray() { $this->assertEquals( '["a",1]', Xml::encodeJsVar( array( 'a', 1 ) ), 'encodeJsVar() with array' ); $this->assertEquals( '{"a":"a","b":1}', Xml::encodeJsVar( array( 'a' => 'a', 'b' => 1 ) ), 'encodeJsVar() with associative array' ); } function testEncodeJsVarObject() { $this->assertEquals( '{"a":"a","b":1}', Xml::encodeJsVar( (object)array( 'a' => 'a', 'b' => 1 ) ), 'encodeJsVar() with object' ); } function testEncodeJsVarInt() { $this->assertEquals( '123456', Xml::encodeJsVar( 123456 ), 'encodeJsVar() with int' ); } function testEncodeJsVarFloat() { $this->assertEquals( '1.23456', Xml::encodeJsVar( 1.23456 ), 'encodeJsVar() with float' ); } function testEncodeJsVarIntString() { $this->assertEquals( '"123456"', Xml::encodeJsVar( '123456' ), 'encodeJsVar() with int-like string' ); } function testEncodeJsVarFloatString() { $this->assertEquals( '"1.23456"', Xml::encodeJsVar( '1.23456' ), 'encodeJsVar() with float-like string' ); } }