MessageValue and friends are pure value objects and newable, so it makes sense for them to be (de)serializable too. There are some places where we want to serialize messages, such as in ParserOutput. The structure of the resulting JSON is inspired by the way we represent Message objects as plain values elsewhere in MediaWiki, e.g. StatusValue::getStatusArray(). Co-Authored-By: C. Scott Ananian <cscott@cscott.net> Depends-On: Ia32f95a6bdf342262b4ef044140527f0676402b9 Depends-On: I7bafe80cd36c2558517f474871148286350a4e76 Change-Id: Id47d58b5e26707fa0e0dbdd37418c0d54c8dd503
83 lines
2.2 KiB
PHP
83 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace Wikimedia\Tests\Message;
|
|
|
|
use MediaWiki\Json\JsonCodec;
|
|
use MediaWikiUnitTestCase;
|
|
use Wikimedia\Message\DataMessageValue;
|
|
use Wikimedia\Message\ParamType;
|
|
use Wikimedia\Message\ScalarParam;
|
|
|
|
/**
|
|
* @covers \Wikimedia\Message\DataMessageValue
|
|
*/
|
|
class DataMessageValueTest extends MediaWikiUnitTestCase {
|
|
use MessageSerializationTestTrait;
|
|
|
|
/**
|
|
* Overrides SerializationTestTrait::getClassToTest
|
|
* @return string
|
|
*/
|
|
public static function getClassToTest(): string {
|
|
return DataMessageValue::class;
|
|
}
|
|
|
|
public static function provideConstruct() {
|
|
return [
|
|
'empty' => [
|
|
[ 'key' ],
|
|
'<datamessage key="key" code="key"></datamessage>',
|
|
],
|
|
'withParam' => [
|
|
[ 'key', [ 'a' ] ],
|
|
'<datamessage key="key" code="key"><params><text>a</text></params></datamessage>'
|
|
],
|
|
'withCode' => [
|
|
[ 'key', [], 'code' ],
|
|
'<datamessage key="key" code="code"></datamessage>'
|
|
],
|
|
'withData' => [
|
|
[ 'key', [ new ScalarParam( ParamType::NUM, 1 ) ], 'code', [ 'value' => 1 ] ],
|
|
'<datamessage key="key" code="code">'
|
|
. '<params><num>1</num></params>'
|
|
. '<data>{"value":1}</data>'
|
|
. '</datamessage>'
|
|
],
|
|
];
|
|
}
|
|
|
|
/** @dataProvider provideConstruct */
|
|
public function testSerialize( $args, $_ ) {
|
|
$codec = new JsonCodec;
|
|
$obj = new DataMessageValue( ...$args );
|
|
|
|
$serialized = $codec->serialize( $obj );
|
|
$newObj = $codec->deserialize( $serialized );
|
|
|
|
// XXX: would be nice to have a proper ::equals() method.
|
|
$this->assertEquals( $obj->dump(), $newObj->dump() );
|
|
}
|
|
|
|
/** @dataProvider provideConstruct */
|
|
public function testConstruct( $args, $expected ) {
|
|
$mv = new DataMessageValue( ...$args );
|
|
$this->assertSame( $expected, $mv->dump() );
|
|
}
|
|
|
|
/** @dataProvider provideConstruct */
|
|
public function testNew( $args, $expected ) {
|
|
$mv = DataMessageValue::new( ...$args );
|
|
$this->assertSame( $expected, $mv->dump() );
|
|
}
|
|
|
|
public function testGetCode() {
|
|
$mv = new DataMessageValue( 'key', [], 'code' );
|
|
$this->assertSame( 'code', $mv->getCode() );
|
|
}
|
|
|
|
public function testGetData() {
|
|
$mv = new DataMessageValue( 'key', [], 'code', [ 'data' => 'foobar' ] );
|
|
$this->assertSame( [ 'data' => 'foobar' ], $mv->getData() );
|
|
}
|
|
|
|
}
|