3 use Wikimedia\Assert\ParameterTypeException
;
4 use Wikimedia\TestingAccessWrapper
;
7 * @covers SlotDiffRenderer
9 class SlotDiffRendererTest
extends \PHPUnit\Framework\TestCase
{
12 * @dataProvider provideNormalizeContents
14 public function testNormalizeContents(
15 $oldContent, $newContent, $allowedClasses,
16 $expectedOldContent, $expectedNewContent, $expectedExceptionClass
18 $slotDiffRenderer = $this->getMockBuilder( SlotDiffRenderer
::class )
21 // __call needs help deciding which parameter to take by reference
22 call_user_func_array( [ TestingAccessWrapper
::newFromObject( $slotDiffRenderer ),
23 'normalizeContents' ], [ &$oldContent, &$newContent, $allowedClasses ] );
24 $this->assertEquals( $expectedOldContent, $oldContent );
25 $this->assertEquals( $expectedNewContent, $newContent );
26 } catch ( Exception
$e ) {
27 if ( !$expectedExceptionClass ) {
30 $this->assertInstanceOf( $expectedExceptionClass, $e );
34 public function provideNormalizeContents() {
36 'both null' => [ null, null, null, null, null, InvalidArgumentException
::class ],
38 null, new WikitextContent( 'abc' ), null,
39 new WikitextContent( '' ), new WikitextContent( 'abc' ), null,
42 new WikitextContent( 'def' ), null, null,
43 new WikitextContent( 'def' ), new WikitextContent( '' ), null,
46 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent
::class,
47 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
49 'type filter (subclass)' => [
50 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), TextContent
::class,
51 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
53 'type filter (null)' => [
54 new WikitextContent( 'abc' ), null, TextContent
::class,
55 new WikitextContent( 'abc' ), new WikitextContent( '' ), null,
57 'type filter failure (left)' => [
58 new TextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent
::class,
59 null, null, ParameterTypeException
::class,
61 'type filter failure (right)' => [
62 new WikitextContent( 'abc' ), new TextContent( 'def' ), WikitextContent
::class,
63 null, null, ParameterTypeException
::class,
65 'type filter (array syntax)' => [
66 new WikitextContent( 'abc' ), new JsonContent( 'def' ),
67 [ JsonContent
::class, WikitextContent
::class ],
68 new WikitextContent( 'abc' ), new JsonContent( 'def' ), null,
70 'type filter failure (array syntax)' => [
71 new WikitextContent( 'abc' ), new CssContent( 'def' ),
72 [ JsonContent
::class, WikitextContent
::class ],
73 null, null, ParameterTypeException
::class,