assertNull( Xml::expandAttributes( null ), 'Converting a null list of attributes' ); $this->assertSame( '', Xml::expandAttributes( [] ), 'Converting an empty list of attributes' ); } /** * @covers Xml::expandAttributes */ public function testExpandAttributesException() { $this->expectException( MWException::class ); Xml::expandAttributes( 'string' ); } /** * @covers Xml::escapeTagsOnly */ public function testEscapeTagsOnly() { $this->assertEquals( '"><', Xml::escapeTagsOnly( '"><' ), 'replace " > and < with their HTML entitites' ); } public static function provideEncodeJsVar() { // $expected, $input yield 'boolean' => [ 'true', true ]; yield 'null' => [ 'null', null ]; yield 'array' => [ '["a",1]', [ 'a', 1 ] ]; yield 'associative arary' => [ '{"a":"a","b":1}', [ 'a' => 'a', 'b' => 1 ] ]; yield 'object' => [ '{"a":"a","b":1}', (object)[ 'a' => 'a', 'b' => 1 ] ]; yield 'int' => [ '123456', 123456 ]; yield 'float' => [ '1.5', 1.5 ]; yield 'int-like string' => [ '"123456"', '123456' ]; $code = 'function () { foo( 42 ); }'; yield 'code' => [ $code, new XmlJsCode( $code ) ]; } /** * @covers Xml::encodeJsVar * @dataProvider provideEncodeJsVar */ public function testEncodeJsVar( string $expect, $input ) { $this->assertEquals( $expect, Xml::encodeJsVar( $input ) ); } /** * @covers Xml::encodeJsVar * @covers XmlJsCode::encodeObject */ public function testEncodeObject() { $codeA = 'function () { foo( 42 ); }'; $codeB = 'function ( jQuery ) { bar( 142857 ); }'; $obj = XmlJsCode::encodeObject( [ 'a' => new XmlJsCode( $codeA ), 'b' => new XmlJsCode( $codeB ) ] ); $this->assertEquals( "{\"a\":$codeA,\"b\":$codeB}", Xml::encodeJsVar( $obj ) ); } }