summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-code-coverage/src/Driver/Selector.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-code-coverage/src/Driver/Selector.php')
-rw-r--r--vendor/phpunit/php-code-coverage/src/Driver/Selector.php79
1 files changed, 79 insertions, 0 deletions
diff --git a/vendor/phpunit/php-code-coverage/src/Driver/Selector.php b/vendor/phpunit/php-code-coverage/src/Driver/Selector.php
new file mode 100644
index 000000000..936ee8981
--- /dev/null
+++ b/vendor/phpunit/php-code-coverage/src/Driver/Selector.php
@@ -0,0 +1,79 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-code-coverage.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\CodeCoverage\Driver;
+
+use function phpversion;
+use function version_compare;
+use SebastianBergmann\CodeCoverage\Filter;
+use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException;
+use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverWithPathCoverageSupportAvailableException;
+use SebastianBergmann\Environment\Runtime;
+
+final class Selector
+{
+ /**
+ * @throws NoCodeCoverageDriverAvailableException
+ * @throws PcovNotAvailableException
+ * @throws PhpdbgNotAvailableException
+ * @throws Xdebug2NotEnabledException
+ * @throws Xdebug3NotEnabledException
+ * @throws XdebugNotAvailableException
+ */
+ public function forLineCoverage(Filter $filter): Driver
+ {
+ $runtime = new Runtime;
+
+ if ($runtime->hasPHPDBGCodeCoverage()) {
+ return new PhpdbgDriver;
+ }
+
+ if ($runtime->hasPCOV()) {
+ return new PcovDriver($filter);
+ }
+
+ if ($runtime->hasXdebug()) {
+ if (version_compare(phpversion('xdebug'), '3', '>=')) {
+ $driver = new Xdebug3Driver($filter);
+ } else {
+ $driver = new Xdebug2Driver($filter);
+ }
+
+ $driver->enableDeadCodeDetection();
+
+ return $driver;
+ }
+
+ throw new NoCodeCoverageDriverAvailableException;
+ }
+
+ /**
+ * @throws NoCodeCoverageDriverWithPathCoverageSupportAvailableException
+ * @throws Xdebug2NotEnabledException
+ * @throws Xdebug3NotEnabledException
+ * @throws XdebugNotAvailableException
+ */
+ public function forLineAndPathCoverage(Filter $filter): Driver
+ {
+ if ((new Runtime)->hasXdebug()) {
+ if (version_compare(phpversion('xdebug'), '3', '>=')) {
+ $driver = new Xdebug3Driver($filter);
+ } else {
+ $driver = new Xdebug2Driver($filter);
+ }
+
+ $driver->enableDeadCodeDetection();
+ $driver->enableBranchAndPathCoverage();
+
+ return $driver;
+ }
+
+ throw new NoCodeCoverageDriverWithPathCoverageSupportAvailableException;
+ }
+}