wiki.techinc.nl/tests/phpunit/unit/includes/content/FallbackContentHandlerTest.php
Timo Tijhof 64734f61ee content: Widen @covers tags in phpunit tests
https://gerrit.wikimedia.org/r/q/owner:Krinkle+is:merged+message:Widen

> Given all called methods are de-facto and liberally claimed, and
> that we keep the coverage limited to the subject class, it maintains
> the spirit and intent by listing the class explicitly instead.
>
> PHPUnit offers a more precise tool when you need it (i.e. when testing
> legacy monster/god classes), but for well-written code, the
> class-wide tag is exactly what you want.
>
> We lose useful coverage and waste valuable time on keeping tags
> accurate through refactors (or worse, forget to do so).
> Tracking tiny per-method details wastes time in realizing (and
> fixing) when people inevitably don't keep them in sync, and time
> lost in finding uncovered code to write tests to realize it was
> already covered but "not yet claimed".

While at it, also fix PHPUnit warnings in CssContentHandlerIntegrationTest
and JavaScriptContentHandlerIntegrationTest about not having any
`@covers` annotations.

Change-Id: I5afd9fe0bca0fa86cc096f6e5e79f2ba1cfbfa77
2024-07-21 21:03:10 +00:00

88 lines
2.7 KiB
PHP

<?php
namespace MediaWiki\Tests\Unit;
use MediaWiki\Content\FallbackContent;
use MediaWiki\Content\FallbackContentHandler;
use MediaWiki\Revision\SlotRecord;
use MediaWiki\Revision\SlotRenderingProvider;
use MediaWiki\Title\Title;
use MediaWikiUnitTestCase;
/**
* Split from \FallbackContentHandlerTest integration tests
*
* @group ContentHandler
* @covers \MediaWiki\Content\FallbackContentHandler
*/
class FallbackContentHandlerTest extends MediaWikiUnitTestCase {
public function testSupportsDirectEditing() {
$handler = new FallbackContentHandler( 'horkyporky' );
$this->assertFalse( $handler->supportsDirectEditing(), 'direct editing supported' );
}
public function testSerializeContent() {
$handler = new FallbackContentHandler( 'horkyporky' );
$content = new FallbackContent( 'hello world', 'horkyporky' );
$this->assertEquals( 'hello world', $handler->serializeContent( $content ) );
$this->assertEquals(
'hello world',
$handler->serializeContent( $content, 'application/horkyporky' )
);
}
public function testUnserializeContent() {
$handler = new FallbackContentHandler( 'horkyporky' );
$content = $handler->unserializeContent( 'hello world' );
$this->assertEquals( 'hello world', $content->getData() );
$content = $handler->unserializeContent( 'hello world', 'application/horkyporky' );
$this->assertEquals( 'hello world', $content->getData() );
}
public function testMakeEmptyContent() {
$handler = new FallbackContentHandler( 'horkyporky' );
$content = $handler->makeEmptyContent();
$this->assertTrue( $content->isEmpty() );
$this->assertSame( '', $content->getData() );
}
public function dataIsSupportedFormat() {
return [
[ null, true ],
[ 'application/octet-stream', true ],
[ 'unknown/unknown', true ],
[ 'text/plain', false ],
[ 99887766, false ],
];
}
/**
* @dataProvider dataIsSupportedFormat
*/
public function testIsSupportedFormat( $format, $supported ) {
$handler = new FallbackContentHandler( 'horkyporky' );
$this->assertEquals( $supported, $handler->isSupportedFormat( $format ) );
}
public function testGetSecondaryDataUpdates() {
$title = $this->createMock( Title::class );
$content = new FallbackContent( '', 'horkyporky' );
$srp = $this->createMock( SlotRenderingProvider::class );
$handler = new FallbackContentHandler( 'horkyporky' );
$updates = $handler->getSecondaryDataUpdates( $title, $content, SlotRecord::MAIN, $srp );
$this->assertEquals( [], $updates );
}
public function testGetDeletionUpdates() {
$title = $this->createMock( Title::class );
$handler = new FallbackContentHandler( 'horkyporky' );
$updates = $handler->getDeletionUpdates( $title, SlotRecord::MAIN );
$this->assertEquals( [], $updates );
}
}