1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
<?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\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase;
use SebastianBergmann\Diff\Differ;
use SebastianBergmann\Diff\TimeEfficientLongestCommonSubsequenceCalculator;
#[CoversClass(UnifiedDiffOutputBuilder::class)]
#[UsesClass(Differ::class)]
#[UsesClass(AbstractChunkOutputBuilder::class)]
#[UsesClass(TimeEfficientLongestCommonSubsequenceCalculator::class)]
final class UnifiedDiffOutputBuilderTest extends TestCase
{
/**
* @return array<
* string[],
* >
*/
public static function headerProvider(): array
{
return [
[
"CUSTOM HEADER\n@@ @@\n-a\n+b\n",
'a',
'b',
'CUSTOM HEADER',
],
[
"CUSTOM HEADER\n@@ @@\n-a\n+b\n",
'a',
'b',
"CUSTOM HEADER\n",
],
[
"CUSTOM HEADER\n\n@@ @@\n-a\n+b\n",
'a',
'b',
"CUSTOM HEADER\n\n",
],
[
"@@ @@\n-a\n+b\n",
'a',
'b',
'',
],
];
}
/**
* @return array{
* string?: array{
* 0: string,
* 1: string,
* 2: string,
* },
* }
*/
public static function provideDiffWithLineNumbers(): array
{
return UnifiedDiffOutputBuilderDataProvider::provideDiffWithLineNumbers();
}
/**
* @return array<
* array{0: string, 1: string}
* >
*/
public static function provideStringsThatAreTheSame(): array
{
return [
['', ''],
['a', 'a'],
['these strings are the same', 'these strings are the same'],
["\n", "\n"],
["multi-line strings\nare the same", "multi-line strings\nare the same"],
];
}
#[DataProvider('headerProvider')]
public function testCustomHeaderCanBeUsed(string $expected, string $from, string $to, string $header): void
{
$differ = new Differ(new UnifiedDiffOutputBuilder($header));
$this->assertSame(
$expected,
$differ->diff($from, $to),
);
}
#[DataProvider('provideDiffWithLineNumbers')]
public function testDiffWithLineNumbers(string $expected, string $from, string $to): void
{
$differ = new Differ(new UnifiedDiffOutputBuilder("--- Original\n+++ New\n", true));
$this->assertSame($expected, $differ->diff($from, $to));
}
#[DataProvider('provideStringsThatAreTheSame')]
public function testEmptyDiffProducesEmptyOutput(string $from, string $to): void
{
$differ = new Differ(new UnifiedDiffOutputBuilder('', false));
$output = $differ->diff($from, $to);
$this->assertEmpty($output);
}
}
|