annotate vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php
Chris@14 2 /*
Chris@14 3 * This file is part of the php-code-coverage package.
Chris@14 4 *
Chris@14 5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
Chris@14 6 *
Chris@14 7 * For the full copyright and license information, please view the LICENSE
Chris@14 8 * file that was distributed with this source code.
Chris@14 9 */
Chris@14 10
Chris@14 11 namespace SebastianBergmann\CodeCoverage\Report\Html;
Chris@14 12
Chris@14 13 use SebastianBergmann\CodeCoverage\CodeCoverage;
Chris@14 14 use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
Chris@14 15 use SebastianBergmann\CodeCoverage\RuntimeException;
Chris@14 16
Chris@14 17 /**
Chris@14 18 * Generates an HTML report from a code coverage object.
Chris@14 19 */
Chris@14 20 class Facade
Chris@14 21 {
Chris@14 22 /**
Chris@14 23 * @var string
Chris@14 24 */
Chris@14 25 private $templatePath;
Chris@14 26
Chris@14 27 /**
Chris@14 28 * @var string
Chris@14 29 */
Chris@14 30 private $generator;
Chris@14 31
Chris@14 32 /**
Chris@14 33 * @var int
Chris@14 34 */
Chris@14 35 private $lowUpperBound;
Chris@14 36
Chris@14 37 /**
Chris@14 38 * @var int
Chris@14 39 */
Chris@14 40 private $highLowerBound;
Chris@14 41
Chris@14 42 /**
Chris@14 43 * Constructor.
Chris@14 44 *
Chris@14 45 * @param int $lowUpperBound
Chris@14 46 * @param int $highLowerBound
Chris@14 47 * @param string $generator
Chris@14 48 */
Chris@14 49 public function __construct($lowUpperBound = 50, $highLowerBound = 90, $generator = '')
Chris@14 50 {
Chris@14 51 $this->generator = $generator;
Chris@14 52 $this->highLowerBound = $highLowerBound;
Chris@14 53 $this->lowUpperBound = $lowUpperBound;
Chris@14 54 $this->templatePath = __DIR__ . '/Renderer/Template/';
Chris@14 55 }
Chris@14 56
Chris@14 57 /**
Chris@14 58 * @param CodeCoverage $coverage
Chris@14 59 * @param string $target
Chris@14 60 */
Chris@14 61 public function process(CodeCoverage $coverage, $target)
Chris@14 62 {
Chris@14 63 $target = $this->getDirectory($target);
Chris@14 64 $report = $coverage->getReport();
Chris@14 65 unset($coverage);
Chris@14 66
Chris@14 67 if (!isset($_SERVER['REQUEST_TIME'])) {
Chris@14 68 $_SERVER['REQUEST_TIME'] = \time();
Chris@14 69 }
Chris@14 70
Chris@14 71 $date = \date('D M j G:i:s T Y', $_SERVER['REQUEST_TIME']);
Chris@14 72
Chris@14 73 $dashboard = new Dashboard(
Chris@14 74 $this->templatePath,
Chris@14 75 $this->generator,
Chris@14 76 $date,
Chris@14 77 $this->lowUpperBound,
Chris@14 78 $this->highLowerBound
Chris@14 79 );
Chris@14 80
Chris@14 81 $directory = new Directory(
Chris@14 82 $this->templatePath,
Chris@14 83 $this->generator,
Chris@14 84 $date,
Chris@14 85 $this->lowUpperBound,
Chris@14 86 $this->highLowerBound
Chris@14 87 );
Chris@14 88
Chris@14 89 $file = new File(
Chris@14 90 $this->templatePath,
Chris@14 91 $this->generator,
Chris@14 92 $date,
Chris@14 93 $this->lowUpperBound,
Chris@14 94 $this->highLowerBound
Chris@14 95 );
Chris@14 96
Chris@14 97 $directory->render($report, $target . 'index.html');
Chris@14 98 $dashboard->render($report, $target . 'dashboard.html');
Chris@14 99
Chris@14 100 foreach ($report as $node) {
Chris@14 101 $id = $node->getId();
Chris@14 102
Chris@14 103 if ($node instanceof DirectoryNode) {
Chris@14 104 if (!\file_exists($target . $id)) {
Chris@14 105 \mkdir($target . $id, 0777, true);
Chris@14 106 }
Chris@14 107
Chris@14 108 $directory->render($node, $target . $id . '/index.html');
Chris@14 109 $dashboard->render($node, $target . $id . '/dashboard.html');
Chris@14 110 } else {
Chris@14 111 $dir = \dirname($target . $id);
Chris@14 112
Chris@14 113 if (!\file_exists($dir)) {
Chris@14 114 \mkdir($dir, 0777, true);
Chris@14 115 }
Chris@14 116
Chris@14 117 $file->render($node, $target . $id . '.html');
Chris@14 118 }
Chris@14 119 }
Chris@14 120
Chris@14 121 $this->copyFiles($target);
Chris@14 122 }
Chris@14 123
Chris@14 124 /**
Chris@14 125 * @param string $target
Chris@14 126 */
Chris@14 127 private function copyFiles($target)
Chris@14 128 {
Chris@14 129 $dir = $this->getDirectory($target . '.css');
Chris@14 130
Chris@14 131 \file_put_contents(
Chris@14 132 $dir . 'bootstrap.min.css',
Chris@14 133 \str_replace(
Chris@14 134 'url(../fonts/',
Chris@14 135 'url(../.fonts/',
Chris@14 136 \file_get_contents($this->templatePath . 'css/bootstrap.min.css')
Chris@14 137 )
Chris@14 138
Chris@14 139 );
Chris@14 140
Chris@14 141 \copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css');
Chris@14 142 \copy($this->templatePath . 'css/style.css', $dir . 'style.css');
Chris@14 143
Chris@14 144 $dir = $this->getDirectory($target . '.fonts');
Chris@14 145 \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.eot', $dir . 'glyphicons-halflings-regular.eot');
Chris@14 146 \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.svg', $dir . 'glyphicons-halflings-regular.svg');
Chris@14 147 \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.ttf', $dir . 'glyphicons-halflings-regular.ttf');
Chris@14 148 \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff', $dir . 'glyphicons-halflings-regular.woff');
Chris@14 149 \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff2', $dir . 'glyphicons-halflings-regular.woff2');
Chris@14 150
Chris@14 151 $dir = $this->getDirectory($target . '.js');
Chris@14 152 \copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js');
Chris@14 153 \copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js');
Chris@14 154 \copy($this->templatePath . 'js/holder.min.js', $dir . 'holder.min.js');
Chris@14 155 \copy($this->templatePath . 'js/html5shiv.min.js', $dir . 'html5shiv.min.js');
Chris@14 156 \copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js');
Chris@14 157 \copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js');
Chris@14 158 \copy($this->templatePath . 'js/respond.min.js', $dir . 'respond.min.js');
Chris@14 159 \copy($this->templatePath . 'js/file.js', $dir . 'file.js');
Chris@14 160 }
Chris@14 161
Chris@14 162 /**
Chris@14 163 * @param string $directory
Chris@14 164 *
Chris@14 165 * @return string
Chris@14 166 *
Chris@14 167 * @throws RuntimeException
Chris@14 168 */
Chris@14 169 private function getDirectory($directory)
Chris@14 170 {
Chris@14 171 if (\substr($directory, -1, 1) != DIRECTORY_SEPARATOR) {
Chris@14 172 $directory .= DIRECTORY_SEPARATOR;
Chris@14 173 }
Chris@14 174
Chris@14 175 if (\is_dir($directory)) {
Chris@14 176 return $directory;
Chris@14 177 }
Chris@14 178
Chris@14 179 if (@\mkdir($directory, 0777, true)) {
Chris@14 180 return $directory;
Chris@14 181 }
Chris@14 182
Chris@14 183 throw new RuntimeException(
Chris@14 184 \sprintf(
Chris@14 185 'Directory "%s" does not exist.',
Chris@14 186 $directory
Chris@14 187 )
Chris@14 188 );
Chris@14 189 }
Chris@14 190 }