mediawiki-extensions-Templa.../tests/phpunit/SerializationTest.php
thiemowmde 8f81812242 Enable and enforce a few extra PHPCS sniffs
This is not really anything new. Most code already followed these
sniffs. This patch just fixes the remaining exceptions. Also:
* Remove PHPDoc blocks that don't add anything but just repeat the
  strict types.
* Remove @file comments in favor of class-level comments.
* Add strict types where possible, most notably some `void`.

Change-Id: Iff6872dff68170b0fc4e82ac2ba3cad385e8773e
2023-09-06 18:15:22 +02:00

74 lines
2.5 KiB
PHP

<?php
use MediaWiki\Extension\TemplateData\TemplateDataStatus;
/**
* @covers \MediaWiki\Extension\TemplateData\TemplateDataStatus
* @license GPL-2.0-or-later
*/
class SerializationTest extends MediaWikiIntegrationTestCase {
public function testParserOutputPersistenceForwardCompatibility() {
$output = new ParserOutput();
$status = Status::newFatal( 'a', 'b', 'c' );
$status->fatal( 'f' );
$status->warning( 'd', 'e' );
// Set JSONified state. Should work before we set JSON-serializable data,
// to be robust against old code reading new data after a rollback.
$output->setExtensionData( 'TemplateDataStatus',
TemplateDataStatus::jsonSerialize( $status )
);
$result = TemplateDataStatus::newFromJson( $output->getExtensionData( 'TemplateDataStatus' ) );
$this->assertEquals( $status->getStatusValue(), $result->getStatusValue() );
$this->assertSame( (string)$status, (string)$result );
}
public function testParserOutputPersistenceBackwardCompatibility() {
$output = new ParserOutput();
$status = Status::newFatal( 'a', 'b', 'c' );
$status->fatal( 'f' );
$status->warning( 'd', 'e' );
// Set the object directly. Should still work once we normally set JSON-serializable data.
$output->setExtensionData( 'TemplateDataStatus', $status );
$result = TemplateDataStatus::newFromJson( $output->getExtensionData( 'TemplateDataStatus' ) );
$this->assertEquals( $status->getStatusValue(), $result->getStatusValue() );
$this->assertSame( (string)$status, (string)$result );
}
public static function provideStatus() {
yield [ Status::newGood() ];
$status = Status::newFatal( 'a', 'b', 'c' );
$status->fatal( 'f' );
$status->warning( 'd', 'e' );
yield [ $status ];
}
/**
* @dataProvider provideStatus
*/
public function testParserOutputPersistenceRoundTrip( Status $status ) {
$parserOutput = new ParserOutput();
$parserOutput->setExtensionData( 'TemplateDataStatus', TemplateDataStatus::jsonSerialize( $status ) );
$result = TemplateDataStatus::newFromJson( $parserOutput->getExtensionData( 'TemplateDataStatus' ) );
$this->assertEquals( $status->getStatusValue(), $result->getStatusValue() );
$this->assertSame( (string)$status, (string)$result );
}
/**
* @dataProvider provideStatus
*/
public function testJsonRoundTrip( Status $status ) {
$json = TemplateDataStatus::jsonSerialize( $status );
$result = TemplateDataStatus::newFromJson( $json );
$this->assertEquals( $status->getStatusValue(), $result->getStatusValue() );
$this->assertSame( (string)$status, (string)$result );
}
}