summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php')
-rw-r--r--vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php147
1 files changed, 147 insertions, 0 deletions
diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php
new file mode 100644
index 000000000..69935d734
--- /dev/null
+++ b/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php
@@ -0,0 +1,147 @@
+<?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\Report\Html;
+
+use const DIRECTORY_SEPARATOR;
+use function copy;
+use function date;
+use function dirname;
+use function substr;
+use SebastianBergmann\CodeCoverage\CodeCoverage;
+use SebastianBergmann\CodeCoverage\InvalidArgumentException;
+use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
+use SebastianBergmann\CodeCoverage\Util\Filesystem;
+
+final class Facade
+{
+ /**
+ * @var string
+ */
+ private $templatePath;
+
+ /**
+ * @var string
+ */
+ private $generator;
+
+ /**
+ * @var int
+ */
+ private $lowUpperBound;
+
+ /**
+ * @var int
+ */
+ private $highLowerBound;
+
+ public function __construct(int $lowUpperBound = 50, int $highLowerBound = 90, string $generator = '')
+ {
+ if ($lowUpperBound > $highLowerBound) {
+ throw new InvalidArgumentException(
+ '$lowUpperBound must not be larger than $highLowerBound'
+ );
+ }
+
+ $this->generator = $generator;
+ $this->highLowerBound = $highLowerBound;
+ $this->lowUpperBound = $lowUpperBound;
+ $this->templatePath = __DIR__ . '/Renderer/Template/';
+ }
+
+ public function process(CodeCoverage $coverage, string $target): void
+ {
+ $target = $this->directory($target);
+ $report = $coverage->getReport();
+ $date = date('D M j G:i:s T Y');
+
+ $dashboard = new Dashboard(
+ $this->templatePath,
+ $this->generator,
+ $date,
+ $this->lowUpperBound,
+ $this->highLowerBound,
+ $coverage->collectsBranchAndPathCoverage()
+ );
+
+ $directory = new Directory(
+ $this->templatePath,
+ $this->generator,
+ $date,
+ $this->lowUpperBound,
+ $this->highLowerBound,
+ $coverage->collectsBranchAndPathCoverage()
+ );
+
+ $file = new File(
+ $this->templatePath,
+ $this->generator,
+ $date,
+ $this->lowUpperBound,
+ $this->highLowerBound,
+ $coverage->collectsBranchAndPathCoverage()
+ );
+
+ $directory->render($report, $target . 'index.html');
+ $dashboard->render($report, $target . 'dashboard.html');
+
+ foreach ($report as $node) {
+ $id = $node->id();
+
+ if ($node instanceof DirectoryNode) {
+ Filesystem::createDirectory($target . $id);
+
+ $directory->render($node, $target . $id . '/index.html');
+ $dashboard->render($node, $target . $id . '/dashboard.html');
+ } else {
+ $dir = dirname($target . $id);
+
+ Filesystem::createDirectory($dir);
+
+ $file->render($node, $target . $id);
+ }
+ }
+
+ $this->copyFiles($target);
+ }
+
+ private function copyFiles(string $target): void
+ {
+ $dir = $this->directory($target . '_css');
+
+ copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css');
+ copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css');
+ copy($this->templatePath . 'css/style.css', $dir . 'style.css');
+ copy($this->templatePath . 'css/custom.css', $dir . 'custom.css');
+ copy($this->templatePath . 'css/octicons.css', $dir . 'octicons.css');
+
+ $dir = $this->directory($target . '_icons');
+ copy($this->templatePath . 'icons/file-code.svg', $dir . 'file-code.svg');
+ copy($this->templatePath . 'icons/file-directory.svg', $dir . 'file-directory.svg');
+
+ $dir = $this->directory($target . '_js');
+ copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js');
+ copy($this->templatePath . 'js/popper.min.js', $dir . 'popper.min.js');
+ copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js');
+ copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js');
+ copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js');
+ copy($this->templatePath . 'js/file.js', $dir . 'file.js');
+ }
+
+ private function directory(string $directory): string
+ {
+ if (substr($directory, -1, 1) != DIRECTORY_SEPARATOR) {
+ $directory .= DIRECTORY_SEPARATOR;
+ }
+
+ Filesystem::createDirectory($directory);
+
+ return $directory;
+ }
+}