Merge "Exclude redirects from Special:Fewestrevisions"
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / diff / SlotDiffRendererTest.php
1 <?php
2
3 use Wikimedia\Assert\ParameterTypeException;
4 use Wikimedia\TestingAccessWrapper;
5
6 /**
7 * @covers SlotDiffRenderer
8 */
9 class SlotDiffRendererTest extends \MediaWikiUnitTestCase {
10
11 /**
12 * @dataProvider provideNormalizeContents
13 */
14 public function testNormalizeContents(
15 $oldContent, $newContent, $allowedClasses,
16 $expectedOldContent, $expectedNewContent, $expectedExceptionClass
17 ) {
18 $slotDiffRenderer = $this->getMockBuilder( SlotDiffRenderer::class )
19 ->getMock();
20 try {
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 ) {
28 throw $e;
29 }
30 $this->assertInstanceOf( $expectedExceptionClass, $e );
31 }
32 }
33
34 public function provideNormalizeContents() {
35 return [
36 'both null' => [ null, null, null, null, null, InvalidArgumentException::class ],
37 'left null' => [
38 null, new WikitextContent( 'abc' ), null,
39 new WikitextContent( '' ), new WikitextContent( 'abc' ), null,
40 ],
41 'right null' => [
42 new WikitextContent( 'def' ), null, null,
43 new WikitextContent( 'def' ), new WikitextContent( '' ), null,
44 ],
45 'type filter' => [
46 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent::class,
47 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
48 ],
49 'type filter (subclass)' => [
50 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), TextContent::class,
51 new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
52 ],
53 'type filter (null)' => [
54 new WikitextContent( 'abc' ), null, TextContent::class,
55 new WikitextContent( 'abc' ), new WikitextContent( '' ), null,
56 ],
57 'type filter failure (left)' => [
58 new TextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent::class,
59 null, null, ParameterTypeException::class,
60 ],
61 'type filter failure (right)' => [
62 new WikitextContent( 'abc' ), new TextContent( 'def' ), WikitextContent::class,
63 null, null, ParameterTypeException::class,
64 ],
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,
69 ],
70 'type filter failure (array syntax)' => [
71 new WikitextContent( 'abc' ), new CssContent( 'def' ),
72 [ JsonContent::class, WikitextContent::class ],
73 null, null, ParameterTypeException::class,
74 ],
75 ];
76 }
77
78 }