forked from jfcherng/php-diff
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDiffHelperTest.php
More file actions
119 lines (101 loc) · 3.21 KB
/
DiffHelperTest.php
File metadata and controls
119 lines (101 loc) · 3.21 KB
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
119
<?php
declare(strict_types=1);
namespace Jfcherng\Diff\Test;
use Jfcherng\Diff\DiffHelper;
use Jfcherng\Diff\Renderer\RendererConstant;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
/**
* @coversNothing
*
* @internal
*/
final class DiffHelperTest extends TestCase
{
/**
* Test renderer output.
*
* @covers \Jfcherng\Diff\DiffHelper::calculate
* @covers \Jfcherng\Diff\Renderer\Text\Context
* @covers \Jfcherng\Diff\Renderer\Text\Unified
*
* @dataProvider rendererOutputDataProvider
*
* @param string $rendererName The renderer name
* @param int $idx The index
* @param SplFileInfo[] $testFiles The test files
*/
public function testRendererOutput(string $rendererName, int $idx, array $testFiles): void
{
if (!isset($testFiles['old'], $testFiles['new'], $testFiles['result'])) {
static::markTestSkipped("Renderer output test '{$rendererName}' #{$idx} is imcomplete.");
}
$result = DiffHelper::calculate(
$testFiles['old']->getContents(),
$testFiles['new']->getContents(),
$rendererName,
[],
['cliColorization' => RendererConstant::CLI_COLOR_DISABLE],
);
static::assertSame(
$testFiles['result']->getContents(),
$result,
"Renderer output test '{$rendererName}' #{$idx} failed...",
);
}
/**
* Test the DiffHelper::getStyleSheet.
*
* @covers \Jfcherng\Diff\DiffHelper::getStyleSheet
*/
public function testGetStyleSheet(): void
{
static::assertIsString(DiffHelper::getStyleSheet());
}
/**
* Data provider for self::testRendererOutput.
*/
public function rendererOutputDataProvider(): array
{
$rendererNames = DiffHelper::getAvailableRenderers();
$data = [];
foreach ($rendererNames as $rendererName) {
$tests = $this->findRendererOutputTestFiles($rendererName);
foreach ($tests as $idx => $files) {
$data[] = [$rendererName, $idx, $files];
}
}
return $data;
}
/**
* Find renderer output test files.
*
* The structure is like [
* 1 => ['old' => SplFileInfo, 'new' => SplFileInfo, 'result' => SplFileInfo],
* ...
* ]
*
* @param string $rendererName The renderer name
*/
protected function findRendererOutputTestFiles(string $rendererName): array
{
$rendererNameRegex = preg_quote($rendererName, '/');
$fileNameRegex = "/{$rendererNameRegex}-(?P<idx>[0-9]+)-(?P<name>[^.\-]+)\.txt$/u";
$finder = (new Finder())
->files()
->name($fileNameRegex)
->in(__DIR__ . '/data/renderer_outputs')
;
$ret = [];
/** @var SplFileInfo $file */
foreach ($finder as $file) {
preg_match($fileNameRegex, $file->getFilename(), $matches);
$idx = (int) $matches['idx'];
$name = $matches['name'];
$ret[$idx] = $ret[$idx] ?? [];
$ret[$idx][$name] = $file;
}
return $ret;
}
}