123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php declare(strict_types=1);
- /*
- * This file is part of sebastian/diff.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace SebastianBergmann\Diff\Output;
- use PHPUnit\Framework\TestCase;
- use SebastianBergmann\Diff\Differ;
- /**
- * @covers SebastianBergmann\Diff\Output\AbstractChunkOutputBuilder
- *
- * @uses SebastianBergmann\Diff\Differ
- * @uses SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder
- * @uses SebastianBergmann\Diff\TimeEfficientLongestCommonSubsequenceCalculator
- */
- final class AbstractChunkOutputBuilderTest extends TestCase
- {
- /**
- * @param array $expected
- * @param string $from
- * @param string $to
- * @param int $lineThreshold
- *
- * @dataProvider provideGetCommonChunks
- */
- public function testGetCommonChunks(array $expected, string $from, string $to, int $lineThreshold = 5): void
- {
- $output = new class extends AbstractChunkOutputBuilder {
- public function getDiff(array $diff): string
- {
- return '';
- }
- public function getChunks(array $diff, $lineThreshold)
- {
- return $this->getCommonChunks($diff, $lineThreshold);
- }
- };
- $this->assertSame(
- $expected,
- $output->getChunks((new Differ)->diffToArray($from, $to), $lineThreshold)
- );
- }
- public function provideGetCommonChunks(): array
- {
- return[
- 'same (with default threshold)' => [
- [],
- 'A',
- 'A',
- ],
- 'same (threshold 0)' => [
- [0 => 0],
- 'A',
- 'A',
- 0,
- ],
- 'empty' => [
- [],
- '',
- '',
- ],
- 'single line diff' => [
- [],
- 'A',
- 'B',
- ],
- 'below threshold I' => [
- [],
- "A\nX\nC",
- "A\nB\nC",
- ],
- 'below threshold II' => [
- [],
- "A\n\n\n\nX\nC",
- "A\n\n\n\nB\nC",
- ],
- 'below threshold III' => [
- [0 => 5],
- "A\n\n\n\n\n\nB",
- "A\n\n\n\n\n\nA",
- ],
- 'same start' => [
- [0 => 5],
- "A\n\n\n\n\n\nX\nC",
- "A\n\n\n\n\n\nB\nC",
- ],
- 'same start long' => [
- [0 => 13],
- "\n\n\n\n\n\n\n\n\n\n\n\n\n\nA",
- "\n\n\n\n\n\n\n\n\n\n\n\n\n\nB",
- ],
- 'same part in between' => [
- [2 => 8],
- "A\n\n\n\n\n\n\nX\nY\nZ\n\n",
- "B\n\n\n\n\n\n\nX\nA\nZ\n\n",
- ],
- 'same trailing' => [
- [2 => 14],
- "A\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
- "B\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
- ],
- 'same part in between, same trailing' => [
- [2 => 7, 10 => 15],
- "A\n\n\n\n\n\n\nA\n\n\n\n\n\n\n",
- "B\n\n\n\n\n\n\nB\n\n\n\n\n\n\n",
- ],
- 'below custom threshold I' => [
- [],
- "A\n\nB",
- "A\n\nD",
- 2,
- ],
- 'custom threshold I' => [
- [0 => 1],
- "A\n\nB",
- "A\n\nD",
- 1,
- ],
- 'custom threshold II' => [
- [],
- "A\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
- "A\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
- 19,
- ],
- [
- [3 => 9],
- "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk",
- "a\np\nc\nd\ne\nf\ng\nh\ni\nw\nk",
- ],
- [
- [0 => 5, 8 => 13],
- "A\nA\nA\nA\nA\nA\nX\nC\nC\nC\nC\nC\nC",
- "A\nA\nA\nA\nA\nA\nB\nC\nC\nC\nC\nC\nC",
- ],
- [
- [0 => 5, 8 => 13],
- "A\nA\nA\nA\nA\nA\nX\nC\nC\nC\nC\nC\nC\nX",
- "A\nA\nA\nA\nA\nA\nB\nC\nC\nC\nC\nC\nC\nY",
- ],
- ];
- }
- }
|