From 8444bd642609ab7de6e75fbc99b244a12fb9e8fa Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sat, 3 Sep 2011 15:02:22 +0200 Subject: [PATCH 01/10] First draft of Cli coverage output. Work in progress. Just to see if it could work out like that --- PHP/CodeCoverage/Autoload.php | 1 + PHP/CodeCoverage/Report/Cli.php | 180 ++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 PHP/CodeCoverage/Report/Cli.php diff --git a/PHP/CodeCoverage/Autoload.php b/PHP/CodeCoverage/Autoload.php index 4740758e9..5f4dfbcc2 100644 --- a/PHP/CodeCoverage/Autoload.php +++ b/PHP/CodeCoverage/Autoload.php @@ -59,6 +59,7 @@ function php_codecoverage_autoload($class = NULL) { 'php_codecoverage_exception' => '/CodeCoverage/Exception.php', 'php_codecoverage_filter' => '/CodeCoverage/Filter.php', 'php_codecoverage_report_clover' => '/CodeCoverage/Report/Clover.php', + 'php_codecoverage_report_cli' => '/CodeCoverage/Report/Cli.php', 'php_codecoverage_report_factory' => '/CodeCoverage/Report/Factory.php', 'php_codecoverage_report_html' => '/CodeCoverage/Report/HTML.php', 'php_codecoverage_report_html_renderer' => '/CodeCoverage/Report/HTML/Renderer.php', diff --git a/PHP/CodeCoverage/Report/Cli.php b/PHP/CodeCoverage/Report/Cli.php new file mode 100644 index 000000000..02fb9c3f1 --- /dev/null +++ b/PHP/CodeCoverage/Report/Cli.php @@ -0,0 +1,180 @@ +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2011 Sebastian Bergmann + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since File available since Release 1.0.0 + */ + +/** + * Generates human readable output for a CLI from an PHP_CodeCoverage object. + * + * @category PHP + * @package CodeCoverage + * @author Sebastian Bergmann + * @copyright 2009-2011 Sebastian Bergmann + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + * @version Release: @package_version@ + * @link http://github.com/sebastianbergmann/php-code-coverage + * @since Class available since Release 1.0.0 + */ +class PHP_CodeCoverage_Report_Cli +{ + protected $outputStream; + protected $title; + protected $lowUpperBound; + protected $highLowerBound; + + public function __construct(PHPUnit_Util_Printer $outputStream, $title, $lowUpperBound, $highLowerBound) { + $this->outputStream = $outputStream; + $this->title = $title; + $this->lowUpperBound = $lowUpperBound; + $this->highLowerBound = $highLowerBound; + } + + /** + * @param PHP_CodeCoverage $coverage + * @param string $target + * @param string $name + * @return string + */ + public function process(PHP_CodeCoverage $coverage, $target = 'short') + { + $output = ""; + + $output .= PHP_EOL . PHP_EOL . "Code Coverage Report "; + if($this->title) { + $output .= 'for "' . $this->title . '"'; + } + $output .= PHP_EOL . date(" Y-m-d H:i:s", $_SERVER['REQUEST_TIME']) . PHP_EOL; + + $packages = array(); + $report = $coverage->getReport(); + unset($coverage); + + $output .= PHP_EOL; + $output .= 'Executed Lines of Code: ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . PHP_EOL; + $output .= 'Classes: ' . $report->getNumClasses() . PHP_EOL; + $output .= 'Covered Methods: ' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . PHP_EOL; + + $output .= PHP_EOL . PHP_EOL; + + + foreach ($report as $item) { + if (!$item instanceof PHP_CodeCoverage_Report_Node_File) { + continue; + } + #$output .= PHP_EOL . $item->getPath() . PHP_EOL; + + $classes = array_merge($item->getClasses(), $item->getTraits()); + $coverage = $item->getCoverageData(); + $lines = array(); + $ignoredLines = $item->getIgnoredLines(); + + foreach ($classes as $className => $class) { + $classStatements = 0; + $coveredClassStatements = 0; + $coveredMethods = 0; + + foreach ($class['methods'] as $methodName => $method) { + $methodCount = 0; + $methodLines = 0; + $methodLinesCovered = 0; + + for ($i = $method['startLine']; + $i <= $method['endLine']; + $i++) { + if (isset($ignoredLines[$i])) { + continue; + } + + $add = TRUE; + $count = 0; + + if (isset($coverage[$i])) { + if ($coverage[$i] !== NULL) { + $classStatements++; + $methodLines++; + } else { + $add = FALSE; + } + + $count = count($coverage[$i]); + + if ($count > 0) { + $coveredClassStatements++; + $methodLinesCovered++; + } + } else { + $add = FALSE; + } + + $methodCount = max($methodCount, $count); + + if ($add) { + $lines[$i] = array( + 'count' => $count, 'type' => 'stmt' + ); + } + } + + if ($methodCount > 0) { + $coveredMethods++; + } + + } + + if (!empty($class['package']['namespace'])) { + $namespace = $class['package']['namespace']; + } else { + $namespace = ''; + } + + $output .= PHP_EOL . PHP_EOL . $namespace . $className; + $output .= PHP_EOL . ' Methods: ' . $coveredMethods . '/' . count($class['methods']); + $output .= PHP_EOL . ' Lines: ' . $classStatements . '/' . $coveredClassStatements; + + } + } + $this->outputStream->write($output); + return; + + } +} From 7b18852c75244faf7527eee1727c9691ccf84c69 Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sun, 4 Sep 2011 14:46:28 +0200 Subject: [PATCH 02/10] Reflected the refactoring of phpunit coverage-cli to coverage-text --- PHP/CodeCoverage/Autoload.php | 2 +- PHP/CodeCoverage/Report/{Cli.php => Text.php} | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) rename PHP/CodeCoverage/Report/{Cli.php => Text.php} (97%) diff --git a/PHP/CodeCoverage/Autoload.php b/PHP/CodeCoverage/Autoload.php index 5f4dfbcc2..b53b5d149 100644 --- a/PHP/CodeCoverage/Autoload.php +++ b/PHP/CodeCoverage/Autoload.php @@ -59,7 +59,6 @@ function php_codecoverage_autoload($class = NULL) { 'php_codecoverage_exception' => '/CodeCoverage/Exception.php', 'php_codecoverage_filter' => '/CodeCoverage/Filter.php', 'php_codecoverage_report_clover' => '/CodeCoverage/Report/Clover.php', - 'php_codecoverage_report_cli' => '/CodeCoverage/Report/Cli.php', 'php_codecoverage_report_factory' => '/CodeCoverage/Report/Factory.php', 'php_codecoverage_report_html' => '/CodeCoverage/Report/HTML.php', 'php_codecoverage_report_html_renderer' => '/CodeCoverage/Report/HTML/Renderer.php', @@ -71,6 +70,7 @@ function php_codecoverage_autoload($class = NULL) { 'php_codecoverage_report_node_file' => '/CodeCoverage/Report/Node/File.php', 'php_codecoverage_report_node_iterator' => '/CodeCoverage/Report/Node/Iterator.php', 'php_codecoverage_report_php' => '/CodeCoverage/Report/PHP.php', + 'php_codecoverage_report_text' => '/CodeCoverage/Report/Text.php', 'php_codecoverage_util' => '/CodeCoverage/Util.php' ); diff --git a/PHP/CodeCoverage/Report/Cli.php b/PHP/CodeCoverage/Report/Text.php similarity index 97% rename from PHP/CodeCoverage/Report/Cli.php rename to PHP/CodeCoverage/Report/Text.php index 02fb9c3f1..c33c274dc 100644 --- a/PHP/CodeCoverage/Report/Cli.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -44,7 +44,9 @@ */ /** - * Generates human readable output for a CLI from an PHP_CodeCoverage object. + * Generates human readable output from an PHP_CodeCoverage object. + * + * The output gets put into a text file our written to the cli * * @category PHP * @package CodeCoverage @@ -55,7 +57,7 @@ * @link http://github.com/sebastianbergmann/php-code-coverage * @since Class available since Release 1.0.0 */ -class PHP_CodeCoverage_Report_Cli +class PHP_CodeCoverage_Report_Text { protected $outputStream; protected $title; From 5b0fa437b66052fb5c43db45a46d4fd53cc5eda3 Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sun, 4 Sep 2011 23:19:10 +0200 Subject: [PATCH 03/10] First output formatting changes --- PHP/CodeCoverage/Report/Text.php | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index c33c274dc..bc27237fb 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -77,7 +77,7 @@ public function __construct(PHPUnit_Util_Printer $outputStream, $title, $lowUppe * @param string $name * @return string */ - public function process(PHP_CodeCoverage $coverage, $target = 'short') + public function process(PHP_CodeCoverage $coverage, $colors = false) { $output = ""; @@ -91,19 +91,18 @@ public function process(PHP_CodeCoverage $coverage, $target = 'short') $report = $coverage->getReport(); unset($coverage); - $output .= PHP_EOL; - $output .= 'Executed Lines of Code: ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . PHP_EOL; - $output .= 'Classes: ' . $report->getNumClasses() . PHP_EOL; - $output .= 'Covered Methods: ' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . PHP_EOL; - - $output .= PHP_EOL . PHP_EOL; - + $output .= PHP_EOL . 'Summary: ' . PHP_EOL + . ' Classes: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedClasses(), $report->getNumClasses(), TRUE) + . ' ( ' . $report->getNumTestedClasses() . '/' . $report->getNumClasses() . ' )' . PHP_EOL + . ' Methods: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedMethods(), $report->getNumMethods(), TRUE) + . ' ( ' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . ' )' . PHP_EOL + . ' Lines: ' . PHP_CodeCoverage_Util::percent($report->getNumExecutedLines(), $report->getNumExecutableLines(), TRUE) + . ' ( ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . ' )' . PHP_EOL; foreach ($report as $item) { if (!$item instanceof PHP_CodeCoverage_Report_Node_File) { continue; } - #$output .= PHP_EOL . $item->getPath() . PHP_EOL; $classes = array_merge($item->getClasses(), $item->getTraits()); $coverage = $item->getCoverageData(); @@ -169,9 +168,9 @@ public function process(PHP_CodeCoverage $coverage, $target = 'short') $namespace = ''; } - $output .= PHP_EOL . PHP_EOL . $namespace . $className; - $output .= PHP_EOL . ' Methods: ' . $coveredMethods . '/' . count($class['methods']); - $output .= PHP_EOL . ' Lines: ' . $classStatements . '/' . $coveredClassStatements; + $output .= PHP_EOL . $namespace . '::' . $className + . PHP_EOL . ' Methods: ' . $coveredMethods . '/' . count($class['methods']) + . ' Lines: ' . $classStatements . '/' . $coveredClassStatements; } } From 3b79ce2680a1a09e289861ba908e3335a7193378 Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Wed, 7 Sep 2011 23:12:33 +0200 Subject: [PATCH 04/10] Unfinished coloring, little layout changes and using namespace and @package information for listing the classes --- PHP/CodeCoverage/Report/Text.php | 71 +++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 19 deletions(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index bc27237fb..90e171a65 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -63,12 +63,23 @@ class PHP_CodeCoverage_Report_Text protected $title; protected $lowUpperBound; protected $highLowerBound; - - public function __construct(PHPUnit_Util_Printer $outputStream, $title, $lowUpperBound, $highLowerBound) { + protected $showUncoveredFiles; + + protected $colors = array( + 'green' => "\x1b[30;42m", + 'yellow' => "\x1b[30;43m", + 'red' => "\x1b[37;41m", + 'header' => "\x1b[47;40m", + 'reset' => "\x1b[0m", + 'eol' => "\x1b[2K", + ); + + public function __construct(PHPUnit_Util_Printer $outputStream, $title, $lowUpperBound, $highLowerBound, $showUncoveredFiles) { $this->outputStream = $outputStream; $this->title = $title; $this->lowUpperBound = $lowUpperBound; $this->highLowerBound = $highLowerBound; + $this->showUncoveredFiles = $showUncoveredFiles; } /** @@ -77,27 +88,37 @@ public function __construct(PHPUnit_Util_Printer $outputStream, $title, $lowUppe * @param string $name * @return string */ - public function process(PHP_CodeCoverage $coverage, $colors = false) + public function process(PHP_CodeCoverage $coverage, $showColors = false) { $output = ""; - $output .= PHP_EOL . PHP_EOL . "Code Coverage Report "; + $packages = array(); + $report = $coverage->getReport(); + unset($coverage); + + $colors = array('header' => '', 'classes' => '', 'methods' => '', 'lines' => '', 'reset' => '', 'eol' => ''); + if($showColors) { + $colors['classes'] = $this->getCoverageColor($report->getNumTestedClasses(), $report->getNumClasses()); + $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']; + } + + $output .= PHP_EOL . PHP_EOL . $colors['header'] . "Code Coverage Report "; if($this->title) { $output .= 'for "' . $this->title . '"'; } $output .= PHP_EOL . date(" Y-m-d H:i:s", $_SERVER['REQUEST_TIME']) . PHP_EOL; - $packages = array(); - $report = $coverage->getReport(); - unset($coverage); - - $output .= PHP_EOL . 'Summary: ' . PHP_EOL - . ' Classes: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedClasses(), $report->getNumClasses(), TRUE) - . ' ( ' . $report->getNumTestedClasses() . '/' . $report->getNumClasses() . ' )' . PHP_EOL - . ' Methods: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedMethods(), $report->getNumMethods(), TRUE) - . ' ( ' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . ' )' . PHP_EOL - . ' Lines: ' . PHP_CodeCoverage_Util::percent($report->getNumExecutedLines(), $report->getNumExecutableLines(), TRUE) - . ' ( ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . ' )' . PHP_EOL; + $output .= PHP_EOL . ' Summary: ' . PHP_EOL . $colors['reset'] + . $colors['classes'] . $colors['eol'] . ' Classes: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedClasses(), $report->getNumClasses(), TRUE) + . ' ( ' . $report->getNumTestedClasses() . '/' . $report->getNumClasses() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol'] + . $colors['methods'] . $colors['eol'] . ' Methods: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedMethods(), $report->getNumMethods(), TRUE) + . ' ( ' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol'] + . $colors['lines'] . $colors['eol'] . ' Lines: ' . PHP_CodeCoverage_Util::percent($report->getNumExecutedLines(), $report->getNumExecutableLines(), TRUE) + . ' ( ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol']; foreach ($report as $item) { if (!$item instanceof PHP_CodeCoverage_Report_Node_File) { @@ -163,14 +184,18 @@ public function process(PHP_CodeCoverage $coverage, $colors = false) } if (!empty($class['package']['namespace'])) { - $namespace = $class['package']['namespace']; + $namespace = '\\' . $class['package']['namespace'] . '::'; + } else if (!empty($class['package']['fullPackage'])) { + $namespace = '@' . $class['package']['fullPackage'] . '::'; } else { $namespace = ''; } - $output .= PHP_EOL . $namespace . '::' . $className - . PHP_EOL . ' Methods: ' . $coveredMethods . '/' . count($class['methods']) - . ' Lines: ' . $classStatements . '/' . $coveredClassStatements; + if($coveredClassStatements != 0 || $this->showUncoveredFiles || true) { + $output .= PHP_EOL . $namespace . $className + . PHP_EOL . ' Methods: ' . $coveredMethods . '/' . count($class['methods']) + . ' Lines: ' . $classStatements . '/' . $coveredClassStatements; + } } } @@ -178,4 +203,12 @@ public function process(PHP_CodeCoverage $coverage, $colors = false) return; } + + protected function getCoverageColor($numberOfCoveredElements, $totalNumberOfElements) { + if($totalNumberOfElements > 0) { + $coverage = $numberOfCoveredElements / $totalNumberOfElements; + } + return $this->colors['red']; + } + } From 170236d3a6c1a49859000e793ce022c112e6f6df Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sun, 11 Sep 2011 19:05:15 +0200 Subject: [PATCH 05/10] Method ordering, color and layout fixes for Report_Text --- PHP/CodeCoverage/Report/Text.php | 47 ++++++++++++++++++++++++++++---- PHP/CodeCoverage/Util.php | 5 +++- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index 90e171a65..5f0ebd4cf 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -120,6 +120,8 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) . $colors['lines'] . $colors['eol'] . ' Lines: ' . PHP_CodeCoverage_Util::percent($report->getNumExecutedLines(), $report->getNumExecutableLines(), TRUE) . ' ( ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol']; + $classCoverage = array(); + foreach ($report as $item) { if (!$item instanceof PHP_CodeCoverage_Report_Node_File) { continue; @@ -191,14 +193,35 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) $namespace = ''; } - if($coveredClassStatements != 0 || $this->showUncoveredFiles || true) { - $output .= PHP_EOL . $namespace . $className - . PHP_EOL . ' Methods: ' . $coveredMethods . '/' . count($class['methods']) - . ' Lines: ' . $classStatements . '/' . $coveredClassStatements; + $classCoverage[$namespace . $className] = array( + 'namespace' => $namespace, + 'className ' => $className, + 'methodsCovered' => $coveredMethods, + 'methodCount' => count($class['methods']), + 'statementsCovered' => $coveredClassStatements, + 'statementCount' => $classStatements, + ); + } + } + ksort($classCoverage); + + $methodColor = ''; + $linesColor = ''; + $resetColor = ''; + foreach($classCoverage as $fullQualifiedPath => $classInfo) { + if($classInfo['statementsCovered'] != 0 || $this->showUncoveredFiles || true) { + if($showColors) { + $methodColor = $this->getCoverageColor($classInfo['methodsCovered'], $classInfo['methodCount']); + $linesColor = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementsCovered' ]); + $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 + ; } } + $this->outputStream->write($output); return; @@ -206,9 +229,21 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) protected function getCoverageColor($numberOfCoveredElements, $totalNumberOfElements) { if($totalNumberOfElements > 0) { - $coverage = $numberOfCoveredElements / $totalNumberOfElements; + $coverage = $numberOfCoveredElements / $totalNumberOfElements * 100; + if($coverage > $this->highLowerBound) { + return $this->colors['green']; + } else if($coverage > $this->lowUpperBound) { + return $this->colors['yellow']; + } } return $this->colors['red']; } + protected function printCoverageCounts($numberOfCoveredElements, $totalNumberOfElements, $presicion) { + $format = '%' . $presicion . 's'; + return PHP_CodeCoverage_Util::percent($numberOfCoveredElements, $totalNumberOfElements, TRUE, TRUE) + . ' (' . sprintf($format, $numberOfCoveredElements) . '/' . sprintf($format, $totalNumberOfElements) . ')'; + } + } + diff --git a/PHP/CodeCoverage/Util.php b/PHP/CodeCoverage/Util.php index ed7a0041f..47f28de95 100644 --- a/PHP/CodeCoverage/Util.php +++ b/PHP/CodeCoverage/Util.php @@ -321,7 +321,7 @@ public static function getLinesToBeIgnored($filename, $cacheTokens = TRUE) * @param float $b * @return float ($a / $b) * 100 */ - public static function percent($a, $b, $asString = FALSE) + public static function percent($a, $b, $asString = FALSE, $fixedWidth = FALSE) { if ($b > 0) { $percent = ($a / $b) * 100; @@ -330,6 +330,9 @@ public static function percent($a, $b, $asString = FALSE) } if ($asString) { + if($fixedWidth) { + return sprintf('%6.2F%%', $percent); + } return sprintf('%01.2F%%', $percent); } else { return $percent; From 6bf324876c8c1baf0e90a8f8f280f11458ff79dd Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sun, 11 Sep 2011 19:18:36 +0200 Subject: [PATCH 06/10] Small layout fixed to improve consistancy --- PHP/CodeCoverage/Report/Text.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index 5f0ebd4cf..f4f06bdee 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -114,11 +114,11 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) $output .= PHP_EOL . ' Summary: ' . PHP_EOL . $colors['reset'] . $colors['classes'] . $colors['eol'] . ' Classes: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedClasses(), $report->getNumClasses(), TRUE) - . ' ( ' . $report->getNumTestedClasses() . '/' . $report->getNumClasses() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol'] + . ' (' . $report->getNumTestedClasses() . '/' . $report->getNumClasses() . ')' . PHP_EOL . $colors ['eol'] . $colors['methods'] . $colors['eol'] . ' Methods: ' . PHP_CodeCoverage_Util::percent($report->getNumTestedMethods(), $report->getNumMethods(), TRUE) - . ' ( ' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol'] + . ' (' . $report->getNumTestedMethods() . '/' . $report->getNumMethods() . ')' . PHP_EOL . $colors ['eol'] . $colors['lines'] . $colors['eol'] . ' Lines: ' . PHP_CodeCoverage_Util::percent($report->getNumExecutedLines(), $report->getNumExecutableLines(), TRUE) - . ' ( ' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . ' )' . PHP_EOL . $colors['reset'] . $colors ['eol']; + . ' (' . $report->getNumExecutedLines() . '/' . $report->getNumExecutableLines() . ')' . PHP_EOL . $colors['reset'] . $colors ['eol']; $classCoverage = array(); From 6ecf092b8dbd7d5a936c06564641f3202d397ce9 Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sun, 11 Sep 2011 19:56:39 +0200 Subject: [PATCH 07/10] Picked a more apropriate version number --- PHP/CodeCoverage/Report/Text.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index f4f06bdee..08a48af12 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -40,7 +40,7 @@ * @copyright 2009-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @link http://github.com/sebastianbergmann/php-code-coverage - * @since File available since Release 1.0.0 + * @since File available since Release 1.1.0 */ /** @@ -55,7 +55,7 @@ * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @version Release: @package_version@ * @link http://github.com/sebastianbergmann/php-code-coverage - * @since Class available since Release 1.0.0 + * @since Class available since Release 1.1.0 */ class PHP_CodeCoverage_Report_Text { From c25715c2bc6d1b636161431f367b0ffb14aa3909 Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Mon, 12 Sep 2011 09:17:58 +0200 Subject: [PATCH 08/10] Refactored coverage color to be consistant with all the other numbers. 0 Elements means 100% coverage so it should be green --- PHP/CodeCoverage/Report/Text.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index 08a48af12..bd0613aff 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -228,13 +228,11 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) } protected function getCoverageColor($numberOfCoveredElements, $totalNumberOfElements) { - if($totalNumberOfElements > 0) { - $coverage = $numberOfCoveredElements / $totalNumberOfElements * 100; - if($coverage > $this->highLowerBound) { - return $this->colors['green']; - } else if($coverage > $this->lowUpperBound) { - return $this->colors['yellow']; - } + $coverage = PHP_CodeCoverage_Util::percent($numberOfCoveredElements, $totalNumberOfElements); + if($coverage > $this->highLowerBound) { + return $this->colors['green']; + } else if($coverage > $this->lowUpperBound) { + return $this->colors['yellow']; } return $this->colors['red']; } From 6c172e1532ad960c36f4735b18c481770bfba843 Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Fri, 30 Sep 2011 10:24:39 +0200 Subject: [PATCH 09/10] Fixed wrong statement coverage color --- PHP/CodeCoverage/Report/Text.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index bd0613aff..35bde8509 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -212,7 +212,7 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) if($classInfo['statementsCovered'] != 0 || $this->showUncoveredFiles || true) { if($showColors) { $methodColor = $this->getCoverageColor($classInfo['methodsCovered'], $classInfo['methodCount']); - $linesColor = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementsCovered' ]); + $linesColor = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementCount']); $resetColor = $colors['reset']; } $output .= PHP_EOL . $fullQualifiedPath . PHP_EOL From 9747ee6a5e0ac08571fcf5fbde7cde998027e67f Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Fri, 30 Sep 2011 10:45:42 +0200 Subject: [PATCH 10/10] Removed debugging leftovers --- PHP/CodeCoverage/Report/Text.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PHP/CodeCoverage/Report/Text.php b/PHP/CodeCoverage/Report/Text.php index 35bde8509..8a1b3c82e 100644 --- a/PHP/CodeCoverage/Report/Text.php +++ b/PHP/CodeCoverage/Report/Text.php @@ -209,7 +209,7 @@ public function process(PHP_CodeCoverage $coverage, $showColors = false) $linesColor = ''; $resetColor = ''; foreach($classCoverage as $fullQualifiedPath => $classInfo) { - if($classInfo['statementsCovered'] != 0 || $this->showUncoveredFiles || true) { + if($classInfo['statementsCovered'] != 0 || $this->showUncoveredFiles) { if($showColors) { $methodColor = $this->getCoverageColor($classInfo['methodsCovered'], $classInfo['methodCount']); $linesColor = $this->getCoverageColor($classInfo['statementsCovered'], $classInfo['statementCount']);