[[], [], []], 'add' => [[DiffOpAdd::class], [], ['a']], 'copy' => [[DiffOpCopy::class], ['a'], ['a']], 'change' => [[DiffOpChange::class], ['a'], ['b']], 'copy-and-change' => [ [ DiffOpCopy::class, DiffOpChange::class, ], ['a', 'b'], ['a', 'c'], ], 'copy-change-copy' => [ [ DiffOpCopy::class, DiffOpChange::class, DiffOpCopy::class, ], ['a', 'b', 'd'], ['a', 'c', 'd'], ], 'copy-change-copy-add' => [ [ DiffOpCopy::class, DiffOpChange::class, DiffOpCopy::class, DiffOpAdd::class, ], ['a', 'b', 'd'], ['a', 'c', 'd', 'e'], ], 'copy-delete' => [ [ DiffOpCopy::class, DiffOpDelete::class, ], ['a', 'b', 'd'], ['a'], ], ]; } /** * Tests whether op classes returned by DiffEngine::diff() match expectations. * * @covers ::diff * @dataProvider provideTestDiff */ public function testDiff($expected, $from, $to) { $diff_engine = new DiffEngine(); $diff = $diff_engine->diff($from, $to); // Make sure we have the same number of results as expected. $this->assertCount(count($expected), $diff); // Make sure the diff objects match our expectations. foreach ($expected as $index => $op_class) { $this->assertEquals($op_class, get_class($diff[$index])); } } }