Skip to content

Commit 7e9c818

Browse files
1 parent 83540e7 commit 7e9c818

File tree

5 files changed

+107
-48
lines changed

5 files changed

+107
-48
lines changed

ChangeLog.md

+14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@
22

33
All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
44

5+
## [9.1.10] - 2020-MM-DD
6+
7+
### Added
8+
9+
* `SebastianBergmann\CodeCoverage\Driver\Selector::forLineCoverage()` and `SebastianBergmann\CodeCoverage\Driver\Selector::forLineAndPathCoverage()` have been added
10+
11+
### Fixed
12+
13+
* [#810](https://github.com/sebastianbergmann/php-code-coverage/issues/810): `SebastianBergmann\CodeCoverage\Driver\Driver::forLineCoverage()` and `SebastianBergmann\CodeCoverage\Driver\Driver::forLineAndPathCoverage()` are marked as internal
14+
15+
### Removed
16+
17+
* `SebastianBergmann\CodeCoverage\Driver\Driver::forLineCoverage()` and `SebastianBergmann\CodeCoverage\Driver\Driver::forLineAndPathCoverage()` are now deprecated
18+
519
## [9.1.9] - 2020-09-15
620

721
### Fixed

README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,18 @@ composer require --dev phpunit/php-code-coverage
2424

2525
```php
2626
<?php declare(strict_types=1);
27-
use SebastianBergmann\CodeCoverage\CodeCoverage;
28-
use SebastianBergmann\CodeCoverage\Driver\Driver;
2927
use SebastianBergmann\CodeCoverage\Filter;
28+
use SebastianBergmann\CodeCoverage\Driver\Selector;
29+
use SebastianBergmann\CodeCoverage\CodeCoverage;
3030
use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport;
3131

3232
$filter = new Filter;
3333
$filter->includeDirectory('/path/to/directory');
3434

35-
$driver = Driver::forLineCoverage($filter);
36-
37-
$coverage = new CodeCoverage($driver, $filter);
35+
$coverage = new CodeCoverage(
36+
(new Selector)->forLineCoverage($filter),
37+
$filter
38+
);
3839

3940
$coverage->start('<name of test>');
4041

src/Driver/Driver.php

+6-42
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,13 @@
99
*/
1010
namespace SebastianBergmann\CodeCoverage\Driver;
1111

12-
use function phpversion;
1312
use function sprintf;
14-
use function version_compare;
1513
use SebastianBergmann\CodeCoverage\BranchAndPathCoverageNotSupportedException;
1614
use SebastianBergmann\CodeCoverage\DeadCodeDetectionNotSupportedException;
1715
use SebastianBergmann\CodeCoverage\Filter;
1816
use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException;
1917
use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverWithPathCoverageSupportAvailableException;
2018
use SebastianBergmann\CodeCoverage\RawCodeCoverageData;
21-
use SebastianBergmann\Environment\Runtime;
2219

2320
/**
2421
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
@@ -77,58 +74,25 @@ abstract class Driver
7774
* @throws XdebugNotAvailableException
7875
* @throws Xdebug2NotEnabledException
7976
* @throws Xdebug3NotEnabledException
77+
*
78+
* @deprecated Use DriverSelector::forLineCoverage() instead
8079
*/
8180
public static function forLineCoverage(Filter $filter): self
8281
{
83-
$runtime = new Runtime;
84-
85-
if ($runtime->hasPHPDBGCodeCoverage()) {
86-
return new PhpdbgDriver;
87-
}
88-
89-
if ($runtime->hasPCOV()) {
90-
return new PcovDriver($filter);
91-
}
92-
93-
if ($runtime->hasXdebug()) {
94-
if (version_compare(phpversion('xdebug'), '3', '>=')) {
95-
$driver = new Xdebug3Driver($filter);
96-
} else {
97-
$driver = new Xdebug2Driver($filter);
98-
}
99-
100-
$driver->enableDeadCodeDetection();
101-
102-
return $driver;
103-
}
104-
105-
throw new NoCodeCoverageDriverAvailableException;
82+
return (new Selector)->forLineCoverage($filter);
10683
}
10784

10885
/**
10986
* @throws NoCodeCoverageDriverWithPathCoverageSupportAvailableException
11087
* @throws XdebugNotAvailableException
11188
* @throws Xdebug2NotEnabledException
11289
* @throws Xdebug3NotEnabledException
90+
*
91+
* @deprecated Use DriverSelector::forLineAndPathCoverage() instead
11392
*/
11493
public static function forLineAndPathCoverage(Filter $filter): self
11594
{
116-
$runtime = new Runtime;
117-
118-
if ($runtime->hasXdebug()) {
119-
if (version_compare(phpversion('xdebug'), '3', '>=')) {
120-
$driver = new Xdebug3Driver($filter);
121-
} else {
122-
$driver = new Xdebug2Driver($filter);
123-
}
124-
125-
$driver->enableDeadCodeDetection();
126-
$driver->enableBranchAndPathCoverage();
127-
128-
return $driver;
129-
}
130-
131-
throw new NoCodeCoverageDriverWithPathCoverageSupportAvailableException;
95+
return (new Selector)->forLineAndPathCoverage($filter);
13296
}
13397

13498
public function canCollectBranchAndPathCoverage(): bool

src/Driver/Selector.php

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of phpunit/php-code-coverage.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
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 SebastianBergmann\CodeCoverage\Driver;
11+
12+
use function phpversion;
13+
use function version_compare;
14+
use SebastianBergmann\CodeCoverage\Filter;
15+
use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException;
16+
use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverWithPathCoverageSupportAvailableException;
17+
use SebastianBergmann\Environment\Runtime;
18+
19+
final class Selector
20+
{
21+
/**
22+
* @throws NoCodeCoverageDriverAvailableException
23+
* @throws PcovNotAvailableException
24+
* @throws PhpdbgNotAvailableException
25+
* @throws XdebugNotAvailableException
26+
* @throws Xdebug2NotEnabledException
27+
* @throws Xdebug3NotEnabledException
28+
*/
29+
public function forLineCoverage(Filter $filter): Driver
30+
{
31+
$runtime = new Runtime;
32+
33+
if ($runtime->hasPHPDBGCodeCoverage()) {
34+
return new PhpdbgDriver;
35+
}
36+
37+
if ($runtime->hasPCOV()) {
38+
return new PcovDriver($filter);
39+
}
40+
41+
if ($runtime->hasXdebug()) {
42+
if (version_compare(phpversion('xdebug'), '3', '>=')) {
43+
$driver = new Xdebug3Driver($filter);
44+
} else {
45+
$driver = new Xdebug2Driver($filter);
46+
}
47+
48+
$driver->enableDeadCodeDetection();
49+
50+
return $driver;
51+
}
52+
53+
throw new NoCodeCoverageDriverAvailableException;
54+
}
55+
56+
/**
57+
* @throws NoCodeCoverageDriverWithPathCoverageSupportAvailableException
58+
* @throws XdebugNotAvailableException
59+
* @throws Xdebug2NotEnabledException
60+
* @throws Xdebug3NotEnabledException
61+
*/
62+
public function forLineAndPathCoverage(Filter $filter): Driver
63+
{
64+
if ((new Runtime)->hasXdebug()) {
65+
if (version_compare(phpversion('xdebug'), '3', '>=')) {
66+
$driver = new Xdebug3Driver($filter);
67+
} else {
68+
$driver = new Xdebug2Driver($filter);
69+
}
70+
71+
$driver->enableDeadCodeDetection();
72+
$driver->enableBranchAndPathCoverage();
73+
74+
return $driver;
75+
}
76+
77+
throw new NoCodeCoverageDriverWithPathCoverageSupportAvailableException;
78+
}
79+
}

tests/tests/CodeCoverageTest.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace SebastianBergmann\CodeCoverage;
1111

1212
use SebastianBergmann\CodeCoverage\Driver\Driver;
13+
use SebastianBergmann\CodeCoverage\Driver\Selector;
1314
use SebastianBergmann\Environment\Runtime;
1415

1516
/**
@@ -33,7 +34,7 @@ protected function setUp(): void
3334
$filter = new Filter;
3435

3536
$this->coverage = new CodeCoverage(
36-
Driver::forLineCoverage($filter),
37+
(new Selector)->forLineCoverage($filter),
3738
$filter
3839
);
3940
}

0 commit comments

Comments
 (0)