Skip to content

Commit 577e595

Browse files
Extract class
1 parent 92b8e4f commit 577e595

5 files changed

Lines changed: 56 additions & 30 deletions

File tree

build.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -376,11 +376,6 @@
376376
<arg path="${basedir}/build/tmp/phar" />
377377
</exec>
378378

379-
<replace file="${basedir}/build/tmp/phar-scoped/phpunit/Runner/Phpt/templates/phpt.tpl" token="SebastianBergmann\CodeCoverage\CodeCoverage" value="PHPUnitPHAR\SebastianBergmann\CodeCoverage\CodeCoverage"/>
380-
<replace file="${basedir}/build/tmp/phar-scoped/phpunit/Runner/Phpt/templates/phpt.tpl" token="SebastianBergmann\CodeCoverage\Driver\Selector" value="PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\Selector"/>
381-
<replace file="${basedir}/build/tmp/phar-scoped/phpunit/Runner/Phpt/templates/phpt.tpl" token="SebastianBergmann\CodeCoverage\Driver\Granularity" value="PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\Granularity"/>
382-
<replace file="${basedir}/build/tmp/phar-scoped/phpunit/Runner/Phpt/templates/phpt.tpl" token="SebastianBergmann\CodeCoverage\Filter" value="PHPUnitPHAR\SebastianBergmann\CodeCoverage\Filter"/>
383-
384379
<exec executable="${basedir}/tools/phpab" taskname="phpab" failonerror="true">
385380
<arg value="--all" />
386381
<arg value="--tolerant" />
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <sebastian@phpunit.de>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\Runner\Phpt;
11+
12+
use SebastianBergmann\CodeCoverage\CodeCoverage;
13+
use SebastianBergmann\CodeCoverage\Driver\Granularity;
14+
use SebastianBergmann\CodeCoverage\Driver\Selector;
15+
use SebastianBergmann\CodeCoverage\Filter;
16+
17+
/**
18+
* @internal This class is not covered by the backward compatibility promise for PHPUnit
19+
*/
20+
final readonly class CodeCoverageBootstrapper
21+
{
22+
/**
23+
* @param ?non-empty-string $codeCoverageCacheDirectory
24+
*/
25+
public static function bootstrap(?string $codeCoverageCacheDirectory, bool $pathCoverage): CodeCoverage
26+
{
27+
$filter = new Filter;
28+
29+
if ($pathCoverage) {
30+
$granularity = Granularity::LineBranchAndPath;
31+
} else {
32+
$granularity = Granularity::Line;
33+
}
34+
35+
$coverage = new CodeCoverage(
36+
(new Selector)->select($filter, $granularity),
37+
$filter,
38+
);
39+
40+
if ($codeCoverageCacheDirectory !== null) {
41+
$coverage->cacheStaticAnalysis($codeCoverageCacheDirectory);
42+
}
43+
44+
return $coverage;
45+
}
46+
}

src/Runner/Phpt/Renderer.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ public function renderForCoverage(string &$job, bool $pathCoverage, ?string $cod
8585
}
8686

8787
if ($pathCoverage) {
88-
$granularity = 'Granularity::LineBranchAndPath';
88+
$pathCoverageValue = 'true';
8989
} else {
90-
$granularity = 'Granularity::Line';
90+
$pathCoverageValue = 'false';
9191
}
9292

9393
$template->setVar(
@@ -97,7 +97,7 @@ public function renderForCoverage(string &$job, bool $pathCoverage, ?string $cod
9797
'phar' => $phar,
9898
'job' => $files['job'],
9999
'coverageFile' => $files['coverage'],
100-
'granularity' => $granularity,
100+
'pathCoverage' => $pathCoverageValue,
101101
'codeCoverageCacheDirectory' => $codeCoverageCacheDirectory,
102102
],
103103
);

src/Runner/Phpt/templates/phpt.tpl

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
<?php declare(strict_types=1);
2-
use SebastianBergmann\CodeCoverage\CodeCoverage;
3-
use SebastianBergmann\CodeCoverage\Driver\Granularity;
4-
use SebastianBergmann\CodeCoverage\Driver\Selector;
5-
use SebastianBergmann\CodeCoverage\Filter;
2+
use PHPUnit\Runner\Phpt\CodeCoverageBootstrapper;
63

74
$__phpunit_composerAutoload = {composerAutoload};
85
$__phpunit_phar = {phar};
@@ -19,32 +16,21 @@ if ($__phpunit_composerAutoload) {
1916
require $__phpunit_phar;
2017
}
2118

22-
$__phpunit_coverage = null;
23-
2419
if ('{bootstrap}' !== '') {
2520
require_once '{bootstrap}';
2621
}
2722

28-
if (class_exists('SebastianBergmann\CodeCoverage\CodeCoverage')) {
29-
$__phpunit_filter = new Filter;
30-
31-
$__phpunit_coverage = new CodeCoverage(
32-
(new Selector)->select($__phpunit_filter, {granularity}),
33-
$__phpunit_filter
34-
);
35-
36-
if ({codeCoverageCacheDirectory}) {
37-
$__phpunit_coverage->cacheStaticAnalysis({codeCoverageCacheDirectory});
38-
}
23+
$__phpunit_coverage = CodeCoverageBootstrapper::bootstrap({codeCoverageCacheDirectory}, {pathCoverage});
3924

25+
if ($__phpunit_coverage !== null) {
4026
$__phpunit_coverage->start(__FILE__);
4127
}
4228

4329
register_shutdown_function(
4430
function() use ($__phpunit_coverage) {
4531
$output = null;
4632
47-
if ($__phpunit_coverage) {
33+
if ($__phpunit_coverage !== null) {
4834
$output = $__phpunit_coverage->stop();
4935
}
5036

tests/unit/Runner/Phpt/RendererTest.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ public function testRenderForCoverageWritesJobFileAndUpdatesJobVariable(): void
6464
);
6565

6666
$this->assertStringEqualsFile($files['job'], '<?php echo 1;');
67-
$this->assertStringContainsString('Granularity::Line', $job);
67+
$this->assertStringContainsString('CodeCoverageBootstrapper::bootstrap(null, false)', $job);
6868
$this->assertStringContainsString($files['coverage'], $job);
69-
$this->assertStringContainsString('if (null)', $job);
7069
}
7170

7271
public function testRenderForCoverageWithPathCoverage(): void
@@ -82,7 +81,7 @@ public function testRenderForCoverageWithPathCoverage(): void
8281
$files,
8382
);
8483

85-
$this->assertStringContainsString('Granularity::LineBranchAndPath', $job);
84+
$this->assertStringContainsString('CodeCoverageBootstrapper::bootstrap(null, true)', $job);
8685
}
8786

8887
public function testRenderForCoverageWithCacheDirectory(): void
@@ -98,7 +97,7 @@ public function testRenderForCoverageWithCacheDirectory(): void
9897
$files,
9998
);
10099

101-
$this->assertStringContainsString("if ('/tmp/cache')", $job);
100+
$this->assertStringContainsString("CodeCoverageBootstrapper::bootstrap('/tmp/cache', false)", $job);
102101
}
103102

104103
public function testRenderForCoverageWithBootstrap(): void

0 commit comments

Comments
 (0)