From 687eab952800145d7f14408735ae5ee7945fc898 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Sun, 9 May 2010 23:20:28 -0400 Subject: [PATCH] Adding a toggle all button to the coverage report. Makes it easier to see the test subject at a glance. Adding ability to only show files that match the extension-less basename of the test case file. This hides much of the noise the new reports have. --- .../lib/coverage/html_coverage_report.php | 49 +++++++++++++++++-- cake/tests/lib/templates/header.php | 8 +++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/cake/tests/lib/coverage/html_coverage_report.php b/cake/tests/lib/coverage/html_coverage_report.php index 2bf406ef2f2..f4cf268274e 100644 --- a/cake/tests/lib/coverage/html_coverage_report.php +++ b/cake/tests/lib/coverage/html_coverage_report.php @@ -25,16 +25,34 @@ class HtmlCoverageReport { */ protected $_rawCoverage; +/** + * is the test an app test + * + * @var string + */ public $appTest = false; + +/** + * is the test a plugin test + * + * @var string + */ public $pluginTest = false; + +/** + * is the test a group test? + * + * @var string + */ public $groupTest = false; /** - * Number of lines to provide around an uncovered code block + * Array of test case file names. Used to do basename() matching with + * files that have coverage to decide which results to show on page load. * - * @var integer + * @var array */ - public $numDiffContextLines = 7; + protected $_testNames = array(); /** * Constructor @@ -85,6 +103,11 @@ public function report() { return '

No files to generate coverage for

'; } $output = $this->coverageScript(); + $output .= <<Code coverage results + Toggle all files + +HTML; foreach ($coverageData as $file => $coverageData) { $fileData = file($file); $output .= $this->generateDiff($file, $fileData, $coverageData); @@ -138,6 +161,11 @@ public function filterCoverageDataByPath($path) { $files[$filename]['executable'] += $executable; $files[$filename]['dead'] += $dead; } + if (isset($testRun['test'])) { + $testReflection = new ReflectionClass(get_class($testRun['test'])); + list($fileBasename, $x) = explode('.', basename($testReflection->getFileName()), 2); + $this->_testNames[] = $fileBasename; + } } ksort($files); return $files; @@ -209,6 +237,15 @@ function coverage_show_hide(selector) { var element = document.getElementById(selector); element.style.display = (element.style.display == 'none') ? '' : 'none'; } + function coverage_toggle_all () { + var divs = document.querySelectorAll('div.coverage-container'); + var i = divs.length; + while (i--) { + if (divs[i] && divs[i].className.indexOf('primary') == -1) { + divs[i].style.display = (divs[i].style.display == 'none') ? '' : 'none'; + } + } + } HTML; } @@ -220,7 +257,11 @@ function coverage_show_hide(selector) { */ public function coverageHeader($filename, $percent) { $filename = basename($filename); + list($file, $ext) = explode('.', $filename); + $display = in_array($file, $this->_testNames) ? 'block' : 'none'; + $primary = $display == 'block' ? 'primary' : ''; return <<

$filename Code coverage: $percent% @@ -237,6 +278,6 @@ public function coverageHeader($filename, $percent) { * @return void */ public function coverageFooter() { - return ""; + return ""; } } \ No newline at end of file diff --git a/cake/tests/lib/templates/header.php b/cake/tests/lib/templates/header.php index 38ad1a62441..3a8ac12b0e1 100644 --- a/cake/tests/lib/templates/header.php +++ b/cake/tests/lib/templates/header.php @@ -79,6 +79,14 @@ display:block; margin-left:10px; } + .coverage-toggle { + float:right; + margin-top:10px; + font-size:12px; + } + .coverage-container { + margin-top:1em; + } div.code-coverage-results div.uncovered span.content { background:#ecc; } div.code-coverage-results div.covered span.content { background:#cec; } div.code-coverage-results div.ignored span.content { color:#aaa; }