2 use Wikimedia\Assert\ParameterTypeException
;
3 use Wikimedia\TestingAccessWrapper
;
6 * @covers SlotDiffRenderer
8 class SlotDiffRendererTest
extends \PHPUnit\Framework\TestCase
{
11 * @dataProvider provideNormalizeContents
13 public function testNormalizeContents(
14 $oldContent, $newContent, $allowedClasses,
15 $expectedOldContent, $expectedNewContent, $expectedExceptionClass
17 $slotDiffRenderer = $this->getMockBuilder( SlotDiffRenderer
::class )
20 // __call needs help deciding which parameter to take by reference
21 call_user_func_array( [ TestingAccessWrapper
::newFromObject( $slotDiffRenderer ),
22 'normalizeContents' ], [ &$oldContent, &$newContent, $allowedClasses ] );
23 $this->assertEquals( $expectedOldContent, $oldContent );
24 $this->assertEquals( $expectedNewContent, $newContent );
25 } catch ( Exception
$e ) {
26 if ( !$expectedExceptionClass ) {
29 $this->assertInstanceOf( $expectedExceptionClass, $e );
33 public function provideNormalizeContents() {
35 'both null' => [ null, null, null, null, null, InvalidArgumentException
::class ],
37 null, new WikitextContent( 'abc' ), null,
38 new WikitextContent( '' ), new WikitextContent( 'abc' ), null,
41 new WikitextContent( 'def' ), null, null,
42 new WikitextContent( 'def' ), new WikitextContent( '' ), null,
45 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent
::class,
46 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
48 'type filter (subclass)' => [
49 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), TextContent
::class,
50 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
52 'type filter (null)' => [
53 new WikitextContent( 'abc' ), null, TextContent
::class,
54 new WikitextContent( 'abc' ), new WikitextContent( '' ), null,
56 'type filter failure (left)' => [
57 new TextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent
::class,
58 null, null, ParameterTypeException
::class,
60 'type filter failure (right)' => [
61 new WikitextContent( 'abc' ), new TextContent( 'def' ), WikitextContent
::class,
62 null, null, ParameterTypeException
::class,
64 'type filter (array syntax)' => [
65 new WikitextContent( 'abc' ), new JsonContent( 'def' ),
66 [ JsonContent
::class, WikitextContent
::class ],
67 new WikitextContent( 'abc' ), new JsonContent( 'def' ), null,
69 'type filter failure (array syntax)' => [
70 new WikitextContent( 'abc' ), new CssContent( 'def' ),
71 [ JsonContent
::class, WikitextContent
::class ],
72 null, null, ParameterTypeException
::class,