createMock() does the same, but is much easier to read. A small difference is that some of the replacements made in this patch didn't use disableOriginalConstructor() before. In case this was relevant we should see the respective test fail. If not we can save some CPU cycles and skip these constructors. Change-Id: Ib98fb06e0fe753b7a53cb087a47e1159515a8ad5
77 lines
2.7 KiB
PHP
77 lines
2.7 KiB
PHP
<?php
|
|
|
|
use Wikimedia\Assert\ParameterTypeException;
|
|
use Wikimedia\TestingAccessWrapper;
|
|
|
|
/**
|
|
* @covers SlotDiffRenderer
|
|
*/
|
|
class SlotDiffRendererTest extends \MediaWikiIntegrationTestCase {
|
|
|
|
/**
|
|
* @dataProvider provideNormalizeContents
|
|
*/
|
|
public function testNormalizeContents(
|
|
$oldContent, $newContent, $allowedClasses,
|
|
$expectedOldContent, $expectedNewContent, $expectedExceptionClass
|
|
) {
|
|
$slotDiffRenderer = $this->createMock( SlotDiffRenderer::class );
|
|
try {
|
|
// __call needs help deciding which parameter to take by reference
|
|
call_user_func_array( [ TestingAccessWrapper::newFromObject( $slotDiffRenderer ),
|
|
'normalizeContents' ], [ &$oldContent, &$newContent, $allowedClasses ] );
|
|
$this->assertEquals( $expectedOldContent, $oldContent );
|
|
$this->assertEquals( $expectedNewContent, $newContent );
|
|
} catch ( Exception $e ) {
|
|
if ( !$expectedExceptionClass ) {
|
|
throw $e;
|
|
}
|
|
$this->assertInstanceOf( $expectedExceptionClass, $e );
|
|
}
|
|
}
|
|
|
|
public function provideNormalizeContents() {
|
|
return [
|
|
'both null' => [ null, null, null, null, null, InvalidArgumentException::class ],
|
|
'left null' => [
|
|
null, new WikitextContent( 'abc' ), null,
|
|
new WikitextContent( '' ), new WikitextContent( 'abc' ), null,
|
|
],
|
|
'right null' => [
|
|
new WikitextContent( 'def' ), null, null,
|
|
new WikitextContent( 'def' ), new WikitextContent( '' ), null,
|
|
],
|
|
'type filter' => [
|
|
new WikitextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent::class,
|
|
new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
|
|
],
|
|
'type filter (subclass)' => [
|
|
new WikitextContent( 'abc' ), new WikitextContent( 'def' ), TextContent::class,
|
|
new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
|
|
],
|
|
'type filter (null)' => [
|
|
new WikitextContent( 'abc' ), null, TextContent::class,
|
|
new WikitextContent( 'abc' ), new WikitextContent( '' ), null,
|
|
],
|
|
'type filter failure (left)' => [
|
|
new TextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent::class,
|
|
null, null, ParameterTypeException::class,
|
|
],
|
|
'type filter failure (right)' => [
|
|
new WikitextContent( 'abc' ), new TextContent( 'def' ), WikitextContent::class,
|
|
null, null, ParameterTypeException::class,
|
|
],
|
|
'type filter (array syntax)' => [
|
|
new WikitextContent( 'abc' ), new JsonContent( 'def' ),
|
|
[ JsonContent::class, WikitextContent::class ],
|
|
new WikitextContent( 'abc' ), new JsonContent( 'def' ), null,
|
|
],
|
|
'type filter failure (array syntax)' => [
|
|
new WikitextContent( 'abc' ), new CssContent( 'def' ),
|
|
[ JsonContent::class, WikitextContent::class ],
|
|
null, null, ParameterTypeException::class,
|
|
],
|
|
];
|
|
}
|
|
|
|
}
|