|
5 | 5 | namespace Shlinkio\Shlink\TestUtils\Helper; |
6 | 6 |
|
7 | 7 | use PHPUnit\Framework\Attributes\Test; |
8 | | -use PHPUnit\Runner\Version; |
9 | 8 | use ReflectionMethod; |
10 | 9 | use SebastianBergmann\CodeCoverage\CodeCoverage; |
11 | 10 | use SebastianBergmann\CodeCoverage\Driver\Selector; |
12 | 11 | use SebastianBergmann\CodeCoverage\Filter; |
13 | | -use SebastianBergmann\CodeCoverage\Report\Html\Facade as Html; |
14 | 12 | use SebastianBergmann\CodeCoverage\Report\PHP; |
15 | | -use SebastianBergmann\CodeCoverage\Report\Xml\Facade as Xml; |
16 | 13 | use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; |
17 | 14 |
|
18 | 15 | use function debug_backtrace; |
19 | | -use function file_exists; |
| 16 | +use function microtime; |
| 17 | +use function register_shutdown_function; |
20 | 18 |
|
21 | 19 | class CoverageHelper |
22 | 20 | { |
@@ -52,38 +50,30 @@ private static function resolveTestDataSet(string|int $dataName): string |
52 | 50 | return ! empty($dataName) ? '#' . $dataName : ''; |
53 | 51 | } |
54 | 52 |
|
55 | | - public static function createCoverageForDirectories(array $dirs): CodeCoverage |
56 | | - { |
| 53 | + /** |
| 54 | + * @param string|null $shutdownExportBasePath - If provided, it will export coverage to this location on shutdown |
| 55 | + */ |
| 56 | + public static function createCoverageForDirectories( |
| 57 | + array $dirs, |
| 58 | + ?string $shutdownExportBasePath = null, |
| 59 | + ): CodeCoverage { |
57 | 60 | $filter = new Filter(); |
58 | 61 | foreach ($dirs as $dir) { |
59 | 62 | foreach ((new FileIteratorFacade())->getFilesAsArray($dir) as $file) { |
60 | 63 | $filter->includeFile($file); |
61 | 64 | } |
62 | 65 | } |
63 | 66 |
|
64 | | - return new CodeCoverage((new Selector())->forLineCoverage($filter), $filter); |
65 | | - } |
| 67 | + $coverage = new CodeCoverage((new Selector())->forLineCoverage($filter), $filter); |
66 | 68 |
|
67 | | - public static function exportCoverage( |
68 | | - ?CodeCoverage $coverage, |
69 | | - string $basePath, |
70 | | - bool $pretty = false, |
71 | | - bool $mergeWithExisting = false, |
72 | | - ): void { |
73 | | - if ($coverage === null) { |
74 | | - return; |
| 69 | + if ($shutdownExportBasePath !== null) { |
| 70 | + register_shutdown_function(function () use ($shutdownExportBasePath, $coverage): void { |
| 71 | + $id = (string) microtime(as_float: true); |
| 72 | + $covPath = $shutdownExportBasePath . '/' . $id . '.cov'; |
| 73 | + (new PHP())->process($coverage, $covPath); |
| 74 | + }); |
75 | 75 | } |
76 | 76 |
|
77 | | - $covPath = $basePath . '.cov'; |
78 | | - if ($mergeWithExisting && file_exists($covPath)) { |
79 | | - $coverage->merge(require $covPath); |
80 | | - } |
81 | | - |
82 | | - if ($pretty) { |
83 | | - (new Html())->process($coverage, $basePath . '/coverage-html'); |
84 | | - } else { |
85 | | - (new PHP())->process($coverage, $covPath); |
86 | | - (new Xml(Version::getVersionString()))->process($coverage, $basePath . '/coverage-xml'); |
87 | | - } |
| 77 | + return $coverage; |
88 | 78 | } |
89 | 79 | } |
0 commit comments