Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/CarnetApp/CarnetNextcloud.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-code-coverage/src/Report/Text.php')
-rw-r--r--vendor/phpunit/php-code-coverage/src/Report/Text.php257
1 files changed, 257 insertions, 0 deletions
diff --git a/vendor/phpunit/php-code-coverage/src/Report/Text.php b/vendor/phpunit/php-code-coverage/src/Report/Text.php
new file mode 100644
index 0000000..1e66022
--- /dev/null
+++ b/vendor/phpunit/php-code-coverage/src/Report/Text.php
@@ -0,0 +1,257 @@
+<?php
+/*
+ * This file is part of the php-code-coverage package.
+ *
+ * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace SebastianBergmann\CodeCoverage\Report;
+
+use SebastianBergmann\CodeCoverage\CodeCoverage;
+use SebastianBergmann\CodeCoverage\Node\File;
+use SebastianBergmann\CodeCoverage\Util;
+
+/**
+ * Generates human readable output from a code coverage object.
+ *
+ * The output gets put into a text file our written to the CLI.
+ */
+class Text
+{
+ private $lowUpperBound;
+ private $highLowerBound;
+ private $showUncoveredFiles;
+ private $showOnlySummary;
+
+ private $colors = [
+ 'green' => "\x1b[30;42m",
+ 'yellow' => "\x1b[30;43m",
+ 'red' => "\x1b[37;41m",
+ 'header' => "\x1b[1;37;40m",
+ 'reset' => "\x1b[0m",
+ 'eol' => "\x1b[2K",
+ ];
+
+ /**
+ * @param int $lowUpperBound
+ * @param int $highLowerBound
+ * @param bool $showUncoveredFiles
+ * @param bool $showOnlySummary
+ */
+ public function __construct($lowUpperBound = 50, $highLowerBound = 90, $showUncoveredFiles = false, $showOnlySummary = false)
+ {
+ $this->lowUpperBound = $lowUpperBound;
+ $this->highLowerBound = $highLowerBound;
+ $this->showUncoveredFiles = $showUncoveredFiles;
+ $this->showOnlySummary = $showOnlySummary;
+ }
+
+ /**
+ * @param CodeCoverage $coverage
+ * @param bool $showColors
+ *
+ * @return string
+ */
+ public function process(CodeCoverage $coverage, $showColors = false)
+ {
+ $output = PHP_EOL . PHP_EOL;
+ $report = $coverage->getReport();
+ unset($coverage);
+
+ $colors = [
+ 'header' => '',
+ 'classes' => '',
+ 'methods' => '',
+ 'lines' => '',
+ 'reset' => '',
+ 'eol' => ''
+ ];
+
+ if ($showColors) {
+ $colors['classes'] = $this->getCoverageColor(
+ $report->getNumTestedClassesAndTraits(),
+ $report->getNumClassesAndTraits()
+ );
+ $colors['methods'] = $this->getCoverageColor(
+ $report->getNumTestedMethods(),
+ $report->getNumMethods()
+ );
+ $colors['lines'] = $this->getCoverageColor(
+ $report->getNumExecutedLines(),
+ $report->getNumExecutableLines()
+ );
+ $colors['reset'] = $this->colors['reset'];
+ $colors['header'] = $this->colors['header'];
+ $colors['eol'] = $this->colors['eol'];
+ }
+
+ $classes = sprintf(
+ ' Classes: %6s (%d/%d)',
+ Util::percent(
+ $report->getNumTestedClassesAndTraits(),
+ $report->getNumClassesAndTraits(),
+ true
+ ),
+ $report->getNumTestedClassesAndTraits(),
+ $report->getNumClassesAndTraits()
+ );
+
+ $methods = sprintf(
+ ' Methods: %6s (%d/%d)',
+ Util::percent(
+ $report->getNumTestedMethods(),
+ $report->getNumMethods(),
+ true
+ ),
+ $report->getNumTestedMethods(),
+ $report->getNumMethods()
+ );
+
+ $lines = sprintf(
+ ' Lines: %6s (%d/%d)',
+ Util::percent(
+ $report->getNumExecutedLines(),
+ $report->getNumExecutableLines(),
+ true
+ ),
+ $report->getNumExecutedLines(),
+ $report->getNumExecutableLines()
+ );
+
+ $padding = max(array_map('strlen', [$classes, $methods, $lines]));
+
+ if ($this->showOnlySummary) {
+ $title = 'Code Coverage Report Summary:';
+ $padding = max($padding, strlen($title));
+
+ $output .= $this->format($colors['header'], $padding, $title);
+ } else {
+ $date = date(' Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);
+ $title = 'Code Coverage Report:';
+
+ $output .= $this->format($colors['header'], $padding, $title);
+ $output .= $this->format($colors['header'], $padding, $date);
+ $output .= $this->format($colors['header'], $padding, '');
+ $output .= $this->format($colors['header'], $padding, ' Summary:');
+ }
+
+ $output .= $this->format($colors['classes'], $padding, $classes);
+ $output .= $this->format($colors['methods'], $padding, $methods);
+ $output .= $this->format($colors['lines'], $padding, $lines);
+
+ if ($this->showOnlySummary) {
+ return $output . PHP_EOL;
+ }
+
+ $classCoverage = [];
+
+ foreach ($report as $item) {
+ if (!$item instanceof File) {
+ continue;
+ }
+
+ $classes = $item->getClassesAndTraits();
+
+ foreach ($classes as $className => $class) {
+ $classStatements = 0;
+ $coveredClassStatements = 0;
+ $coveredMethods = 0;
+ $classMethods = 0;
+
+ foreach ($class['methods'] as $method) {
+ if ($method['executableLines'] == 0) {
+ continue;
+ }
+
+ $classMethods++;
+ $classStatements += $method['executableLines'];
+ $coveredClassStatements += $method['executedLines'];
+ if ($method['coverage'] == 100) {
+ $coveredMethods++;
+ }
+ }
+
+ if (!empty($class['package']['namespace'])) {
+ $namespace = '\\' . $class['package']['namespace'] . '::';
+ } elseif (!empty($class['package']['fullPackage'])) {
+ $namespace = '@' . $class['package']['fullPackage'] . '::';
+ } else {
+ $namespace = '';
+ }
+
+ $classCoverage[$namespace . $className] = [
+ 'namespace' => $namespace,
+ 'className ' => $className,
+ 'methodsCovered' => $coveredMethods,
+ 'methodCount' => $classMethods,
+ 'statementsCovered' => $coveredClassStatements,
+ 'statementCount' => $classStatements,
+ ];
+ }
+ }
+
+ ksort($classCoverage);
+
+ $methodColor = '';
+ $linesColor = '';
+ $resetColor = '';
+
+ foreach ($classCoverage as $fullQualifiedPath => $classInfo) {
+ if ($classInfo['statementsCovered'] != 0 ||
+ $this->showUncoveredFiles) {
+ if ($showColors) {
+ $methodColor = $this->getCoverageColor($classInfo['methodsCovered'], $classInfo['methodCount']);
+ $linesColor = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementCount']);
+ $resetColor = $colors['reset'];
+ }
+
+ $output .= PHP_EOL . $fullQualifiedPath . PHP_EOL
+ . ' ' . $methodColor . 'Methods: ' . $this->printCoverageCounts($classInfo['methodsCovered'], $classInfo['methodCount'], 2) . $resetColor . ' '
+ . ' ' . $linesColor . 'Lines: ' . $this->printCoverageCounts($classInfo['statementsCovered'], $classInfo['statementCount'], 3) . $resetColor
+ ;
+ }
+ }
+
+ return $output . PHP_EOL;
+ }
+
+ protected function getCoverageColor($numberOfCoveredElements, $totalNumberOfElements)
+ {
+ $coverage = Util::percent(
+ $numberOfCoveredElements,
+ $totalNumberOfElements
+ );
+
+ if ($coverage >= $this->highLowerBound) {
+ return $this->colors['green'];
+ } elseif ($coverage > $this->lowUpperBound) {
+ return $this->colors['yellow'];
+ }
+
+ return $this->colors['red'];
+ }
+
+ protected function printCoverageCounts($numberOfCoveredElements, $totalNumberOfElements, $precision)
+ {
+ $format = '%' . $precision . 's';
+
+ return Util::percent(
+ $numberOfCoveredElements,
+ $totalNumberOfElements,
+ true,
+ true
+ ) .
+ ' (' . sprintf($format, $numberOfCoveredElements) . '/' .
+ sprintf($format, $totalNumberOfElements) . ')';
+ }
+
+ private function format($color, $padding, $string)
+ {
+ $reset = $color ? $this->colors['reset'] : '';
+
+ return $color . str_pad($string, $padding) . $reset . PHP_EOL;
+ }
+}