PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/HTML/Renderer.php

https://gitlab.com/Georgiy.Zhegusov/museum_documents
PHP | 273 lines | 178 code | 40 blank | 55 comment | 16 complexity | 3a4891866c7ee3bbda6a879257422d2e MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the PHP_CodeCoverage package.
  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. use SebastianBergmann\Environment\Runtime;
  11. /**
  12. * Base class for PHP_CodeCoverage_Report_Node renderers.
  13. *
  14. * @since Class available since Release 1.1.0
  15. */
  16. abstract class PHP_CodeCoverage_Report_HTML_Renderer
  17. {
  18. /**
  19. * @var string
  20. */
  21. protected $templatePath;
  22. /**
  23. * @var string
  24. */
  25. protected $generator;
  26. /**
  27. * @var string
  28. */
  29. protected $date;
  30. /**
  31. * @var int
  32. */
  33. protected $lowUpperBound;
  34. /**
  35. * @var int
  36. */
  37. protected $highLowerBound;
  38. /**
  39. * @var string
  40. */
  41. protected $version;
  42. /**
  43. * Constructor.
  44. *
  45. * @param string $templatePath
  46. * @param string $generator
  47. * @param string $date
  48. * @param int $lowUpperBound
  49. * @param int $highLowerBound
  50. */
  51. public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound)
  52. {
  53. $version = new SebastianBergmann\Version('3.3.3', dirname(dirname(dirname(dirname(__DIR__)))));
  54. $this->templatePath = $templatePath;
  55. $this->generator = $generator;
  56. $this->date = $date;
  57. $this->lowUpperBound = $lowUpperBound;
  58. $this->highLowerBound = $highLowerBound;
  59. $this->version = $version->getVersion();
  60. }
  61. /**
  62. * @param Text_Template $template
  63. * @param array $data
  64. *
  65. * @return string
  66. */
  67. protected function renderItemTemplate(Text_Template $template, array $data)
  68. {
  69. $numSeparator = '&nbsp;/&nbsp;';
  70. if (isset($data['numClasses']) && $data['numClasses'] > 0) {
  71. $classesLevel = $this->getColorLevel($data['testedClassesPercent']);
  72. $classesNumber = $data['numTestedClasses'] . $numSeparator .
  73. $data['numClasses'];
  74. $classesBar = $this->getCoverageBar(
  75. $data['testedClassesPercent']
  76. );
  77. } else {
  78. $classesLevel = 'success';
  79. $classesNumber = '0' . $numSeparator . '0';
  80. $classesBar = $this->getCoverageBar(100);
  81. }
  82. if ($data['numMethods'] > 0) {
  83. $methodsLevel = $this->getColorLevel($data['testedMethodsPercent']);
  84. $methodsNumber = $data['numTestedMethods'] . $numSeparator .
  85. $data['numMethods'];
  86. $methodsBar = $this->getCoverageBar(
  87. $data['testedMethodsPercent']
  88. );
  89. } else {
  90. $methodsLevel = 'success';
  91. $methodsNumber = '0' . $numSeparator . '0';
  92. $methodsBar = $this->getCoverageBar(100);
  93. $data['testedMethodsPercentAsString'] = '100.00%';
  94. }
  95. if ($data['numExecutableLines'] > 0) {
  96. $linesLevel = $this->getColorLevel($data['linesExecutedPercent']);
  97. $linesNumber = $data['numExecutedLines'] . $numSeparator .
  98. $data['numExecutableLines'];
  99. $linesBar = $this->getCoverageBar(
  100. $data['linesExecutedPercent']
  101. );
  102. } else {
  103. $linesLevel = 'success';
  104. $linesNumber = '0' . $numSeparator . '0';
  105. $linesBar = $this->getCoverageBar(100);
  106. $data['linesExecutedPercentAsString'] = '100.00%';
  107. }
  108. $template->setVar(
  109. [
  110. 'icon' => isset($data['icon']) ? $data['icon'] : '',
  111. 'crap' => isset($data['crap']) ? $data['crap'] : '',
  112. 'name' => $data['name'],
  113. 'lines_bar' => $linesBar,
  114. 'lines_executed_percent' => $data['linesExecutedPercentAsString'],
  115. 'lines_level' => $linesLevel,
  116. 'lines_number' => $linesNumber,
  117. 'methods_bar' => $methodsBar,
  118. 'methods_tested_percent' => $data['testedMethodsPercentAsString'],
  119. 'methods_level' => $methodsLevel,
  120. 'methods_number' => $methodsNumber,
  121. 'classes_bar' => $classesBar,
  122. 'classes_tested_percent' => isset($data['testedClassesPercentAsString']) ? $data['testedClassesPercentAsString'] : '',
  123. 'classes_level' => $classesLevel,
  124. 'classes_number' => $classesNumber
  125. ]
  126. );
  127. return $template->render();
  128. }
  129. /**
  130. * @param Text_Template $template
  131. * @param PHP_CodeCoverage_Report_Node $node
  132. */
  133. protected function setCommonTemplateVariables(Text_Template $template, PHP_CodeCoverage_Report_Node $node)
  134. {
  135. $runtime = new Runtime;
  136. $template->setVar(
  137. [
  138. 'id' => $node->getId(),
  139. 'full_path' => $node->getPath(),
  140. 'path_to_root' => $this->getPathToRoot($node),
  141. 'breadcrumbs' => $this->getBreadcrumbs($node),
  142. 'date' => $this->date,
  143. 'version' => $this->version,
  144. 'runtime_name' => $runtime->getName(),
  145. 'runtime_version' => $runtime->getVersion(),
  146. 'runtime_link' => $runtime->getVendorUrl(),
  147. 'generator' => $this->generator,
  148. 'low_upper_bound' => $this->lowUpperBound,
  149. 'high_lower_bound' => $this->highLowerBound
  150. ]
  151. );
  152. }
  153. protected function getBreadcrumbs(PHP_CodeCoverage_Report_Node $node)
  154. {
  155. $breadcrumbs = '';
  156. $path = $node->getPathAsArray();
  157. $pathToRoot = [];
  158. $max = count($path);
  159. if ($node instanceof PHP_CodeCoverage_Report_Node_File) {
  160. $max--;
  161. }
  162. for ($i = 0; $i < $max; $i++) {
  163. $pathToRoot[] = str_repeat('../', $i);
  164. }
  165. foreach ($path as $step) {
  166. if ($step !== $node) {
  167. $breadcrumbs .= $this->getInactiveBreadcrumb(
  168. $step,
  169. array_pop($pathToRoot)
  170. );
  171. } else {
  172. $breadcrumbs .= $this->getActiveBreadcrumb($step);
  173. }
  174. }
  175. return $breadcrumbs;
  176. }
  177. protected function getActiveBreadcrumb(PHP_CodeCoverage_Report_Node $node)
  178. {
  179. $buffer = sprintf(
  180. ' <li class="active">%s</li>' . "\n",
  181. $node->getName()
  182. );
  183. if ($node instanceof PHP_CodeCoverage_Report_Node_Directory) {
  184. $buffer .= ' <li>(<a href="dashboard.html">Dashboard</a>)</li>' . "\n";
  185. }
  186. return $buffer;
  187. }
  188. protected function getInactiveBreadcrumb(PHP_CodeCoverage_Report_Node $node, $pathToRoot)
  189. {
  190. return sprintf(
  191. ' <li><a href="%sindex.html">%s</a></li>' . "\n",
  192. $pathToRoot,
  193. $node->getName()
  194. );
  195. }
  196. protected function getPathToRoot(PHP_CodeCoverage_Report_Node $node)
  197. {
  198. $id = $node->getId();
  199. $depth = substr_count($id, '/');
  200. if ($id != 'index' &&
  201. $node instanceof PHP_CodeCoverage_Report_Node_Directory) {
  202. $depth++;
  203. }
  204. return str_repeat('../', $depth);
  205. }
  206. protected function getCoverageBar($percent)
  207. {
  208. $level = $this->getColorLevel($percent);
  209. $template = new Text_Template(
  210. $this->templatePath . 'coverage_bar.html',
  211. '{{',
  212. '}}'
  213. );
  214. $template->setVar(['level' => $level, 'percent' => sprintf('%.2F', $percent)]);
  215. return $template->render();
  216. }
  217. /**
  218. * @param int $percent
  219. *
  220. * @return string
  221. */
  222. protected function getColorLevel($percent)
  223. {
  224. if ($percent <= $this->lowUpperBound) {
  225. return 'danger';
  226. } elseif ($percent > $this->lowUpperBound &&
  227. $percent < $this->highLowerBound) {
  228. return 'warning';
  229. } else {
  230. return 'success';
  231. }
  232. }
  233. }