8 class ArrayDiffFormatterTest extends MediaWikiTestCase {
12 * @param array $expectedOutput
13 * @dataProvider provideTestFormat
14 * @covers ArrayDiffFormatter::format
16 public function testFormat( $input, $expectedOutput ) {
17 $instance = new ArrayDiffFormatter();
18 $output = $instance->format( $input );
19 $this->assertEquals( $expectedOutput, $output );
22 private function getMockDiff( $edits ) {
23 $diff = $this->getMockBuilder( 'Diff' )
24 ->disableOriginalConstructor()
26 $diff->expects( $this->any() )
27 ->method( 'getEdits' )
28 ->will( $this->returnValue( $edits ) );
32 private function getMockDiffOp( $type = null, $orig = [], $closing = [] ) {
33 $diffOp = $this->getMockBuilder( 'DiffOp' )
34 ->disableOriginalConstructor()
36 $diffOp->expects( $this->any() )
38 ->will( $this->returnValue( $type ) );
39 $diffOp->expects( $this->any() )
41 ->will( $this->returnValue( $orig ) );
42 if ( $type === 'change' ) {
43 $diffOp->expects( $this->any() )
44 ->method( 'getClosing' )
45 ->with( $this->isType( 'integer' ) )
46 ->will( $this->returnCallback( function () {
50 $diffOp->expects( $this->any() )
51 ->method( 'getClosing' )
52 ->will( $this->returnValue( $closing ) );
57 public function provideTestFormat() {
58 $emptyArrayTestCases = [
59 $this->getMockDiff( [] ),
60 $this->getMockDiff( [ $this->getMockDiffOp( 'add' ) ] ),
61 $this->getMockDiff( [ $this->getMockDiffOp( 'delete' ) ] ),
62 $this->getMockDiff( [ $this->getMockDiffOp( 'change' ) ] ),
63 $this->getMockDiff( [ $this->getMockDiffOp( 'copy' ) ] ),
64 $this->getMockDiff( [ $this->getMockDiffOp( 'FOOBARBAZ' ) ] ),
65 $this->getMockDiff( [ $this->getMockDiffOp( 'add', 'line' ) ] ),
66 $this->getMockDiff( [ $this->getMockDiffOp( 'delete', [], [ 'line' ] ) ] ),
67 $this->getMockDiff( [ $this->getMockDiffOp( 'copy', [], [ 'line' ] ) ] ),
72 $this->getMockDiff( [ $this->getMockDiffOp( 'add', [], [ 'a1' ] ) ] ),
73 [ [ 'action' => 'add', 'new' => 'a1', 'newline' => 1 ] ],
76 $this->getMockDiff( [ $this->getMockDiffOp( 'add', [], [ 'a1', 'a2' ] ) ] ),
78 [ 'action' => 'add', 'new' => 'a1', 'newline' => 1 ],
79 [ 'action' => 'add', 'new' => 'a2', 'newline' => 2 ],
83 $this->getMockDiff( [ $this->getMockDiffOp( 'delete', [ 'd1' ] ) ] ),
84 [ [ 'action' => 'delete', 'old' => 'd1', 'oldline' => 1 ] ],
87 $this->getMockDiff( [ $this->getMockDiffOp( 'delete', [ 'd1', 'd2' ] ) ] ),
89 [ 'action' => 'delete', 'old' => 'd1', 'oldline' => 1 ],
90 [ 'action' => 'delete', 'old' => 'd2', 'oldline' => 2 ],
94 $this->getMockDiff( [ $this->getMockDiffOp( 'change', [ 'd1' ], [ 'a1' ] ) ] ),
99 'newline' => 1, 'oldline' => 1
102 $otherTestCases[] = [
103 $this->getMockDiff( [ $this->getMockDiffOp(
110 'action' => 'change',
113 'newline' => 1, 'oldline' => 1
116 'action' => 'change',
119 'newline' => 2, 'oldline' => 2
125 foreach ( $emptyArrayTestCases as $testCase ) {
126 $testCases[] = [ $testCase, [] ];
128 foreach ( $otherTestCases as $testCase ) {
129 $testCases[] = [ $testCase[0], $testCase[1] ];