mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Fix html coverage reporting.
HTML coverage reports now work with PHPUnit 3.6 Fixes #2235
This commit is contained in:
parent
ee6d1cfdf0
commit
5934a7a324
4 changed files with 70 additions and 9 deletions
|
@ -127,6 +127,55 @@ class HtmlCoverageReportTest extends CakeTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that coverage works with phpunit 3.6 as the data formats from coverage are totally different.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testPhpunit36Compatibility() {
|
||||||
|
$file = array(
|
||||||
|
'line 1',
|
||||||
|
'line 2',
|
||||||
|
'line 3',
|
||||||
|
'line 4',
|
||||||
|
'line 5',
|
||||||
|
'line 6',
|
||||||
|
'line 7',
|
||||||
|
'line 8',
|
||||||
|
'line 9',
|
||||||
|
'line 10',
|
||||||
|
);
|
||||||
|
$coverage = array(
|
||||||
|
1 => array('HtmlCoverageReportTest::testGenerateDiff'),
|
||||||
|
2 => null,
|
||||||
|
3 => array('HtmlCoverageReportTest::testGenerateDiff'),
|
||||||
|
4 => array('HtmlCoverageReportTest::testGenerateDiff'),
|
||||||
|
5 => array(),
|
||||||
|
6 => array('HtmlCoverageReportTest::testGenerateDiff'),
|
||||||
|
7 => array('HtmlCoverageReportTest::testGenerateDiff'),
|
||||||
|
8 => array('HtmlCoverageReportTest::testGenerateDiff'),
|
||||||
|
9 => array(),
|
||||||
|
10 => array('HtmlCoverageReportTest::testSomething', 'HtmlCoverageReportTest::testGenerateDiff')
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);
|
||||||
|
$this->assertRegExp('/myfile\.php Code coverage\: \d+\.?\d*\%/', $result);
|
||||||
|
$this->assertRegExp('/<div class="code-coverage-results" id\="coverage\-myfile\.php"/', $result);
|
||||||
|
$this->assertRegExp('/<pre>/', $result);
|
||||||
|
foreach ($file as $i => $line) {
|
||||||
|
$this->assertTrue(strpos($line, $result) !== 0, 'Content is missing ' . $i);
|
||||||
|
$class = 'covered';
|
||||||
|
if (in_array($i + 1, array(5, 9, 2))) {
|
||||||
|
$class = 'uncovered';
|
||||||
|
}
|
||||||
|
if ($i + 1 == 2) {
|
||||||
|
$class .= ' dead';
|
||||||
|
}
|
||||||
|
$this->assertTrue(strpos($class, $result) !== 0, 'Class name is wrong ' . $i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* test that covering methods show up as title attributes for lines.
|
* test that covering methods show up as title attributes for lines.
|
||||||
*
|
*
|
||||||
|
|
|
@ -120,7 +120,12 @@ abstract class BaseCoverageReport {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates how many lines are covered and what the total number of executable lines is
|
* Calculates how many lines are covered and what the total number of executable lines is.
|
||||||
|
*
|
||||||
|
* Handles both PHPUnit3.5 and 3.6 formats.
|
||||||
|
*
|
||||||
|
* 3.5 uses -1 for uncovered, and -2 for dead.
|
||||||
|
* 3.6 uses array() for uncovered and null for dead.
|
||||||
*
|
*
|
||||||
* @param array $fileLines
|
* @param array $fileLines
|
||||||
* @param array $coverageData
|
* @param array $coverageData
|
||||||
|
@ -137,10 +142,10 @@ abstract class BaseCoverageReport {
|
||||||
if (!isset($coverageData[$lineno])) {
|
if (!isset($coverageData[$lineno])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (is_array($coverageData[$lineno])) {
|
if (is_array($coverageData[$lineno]) && !empty($coverageData[$lineno])) {
|
||||||
$covered++;
|
$covered++;
|
||||||
$total++;
|
$total++;
|
||||||
} else if ($coverageData[$lineno] === -1) {
|
} else if ($coverageData[$lineno] === -1 || $coverageData[$lineno] === array()) {
|
||||||
$total++;
|
$total++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,11 @@ HTML;
|
||||||
/**
|
/**
|
||||||
* Generates an HTML diff for $file based on $coverageData.
|
* Generates an HTML diff for $file based on $coverageData.
|
||||||
*
|
*
|
||||||
|
* Handles both PHPUnit3.5 and 3.6 formats.
|
||||||
|
*
|
||||||
|
* 3.5 uses -1 for uncovered, and -2 for dead.
|
||||||
|
* 3.6 uses array() for uncovered and null for dead.
|
||||||
|
*
|
||||||
* @param string $filename Name of the file having coverage generated
|
* @param string $filename Name of the file having coverage generated
|
||||||
* @param array $fileLines File data as an array. See file() for how to get one of these.
|
* @param array $fileLines File data as an array. See file() for how to get one of these.
|
||||||
* @param array $coverageData Array of coverage data to use to generate HTML diffs with
|
* @param array $coverageData Array of coverage data to use to generate HTML diffs with
|
||||||
|
@ -65,17 +70,18 @@ HTML;
|
||||||
foreach ($fileLines as $lineno => $line) {
|
foreach ($fileLines as $lineno => $line) {
|
||||||
$class = 'ignored';
|
$class = 'ignored';
|
||||||
$coveringTests = array();
|
$coveringTests = array();
|
||||||
if (isset($coverageData[$lineno]) && is_array($coverageData[$lineno])) {
|
if (!empty($coverageData[$lineno]) && is_array($coverageData[$lineno])) {
|
||||||
$coveringTests = array();
|
$coveringTests = array();
|
||||||
foreach ($coverageData[$lineno] as $test) {
|
foreach ($coverageData[$lineno] as $test) {
|
||||||
$testReflection = new ReflectionClass(current(explode('::', $test['id'])));
|
$class = (is_array($test) && isset($test['id'])) ? $test['id'] : $test;
|
||||||
|
$testReflection = new ReflectionClass(current(explode('::', $class)));
|
||||||
$this->_testNames[] = $this->_guessSubjectName($testReflection);
|
$this->_testNames[] = $this->_guessSubjectName($testReflection);
|
||||||
$coveringTests[] = $test['id'];
|
$coveringTests[] = $class;
|
||||||
}
|
}
|
||||||
$class = 'covered';
|
$class = 'covered';
|
||||||
} elseif (isset($coverageData[$lineno]) && $coverageData[$lineno] === -1) {
|
} elseif (isset($coverageData[$lineno]) && ($coverageData[$lineno] === -1 || $coverageData[$lineno] === array())) {
|
||||||
$class = 'uncovered';
|
$class = 'uncovered';
|
||||||
} elseif (isset($coverageData[$lineno]) && $coverageData[$lineno] === -2) {
|
} elseif (array_key_exists($lineno, $coverageData) && ($coverageData[$lineno] === -2 || $coverageData[$lineno] === null)) {
|
||||||
$class .= ' dead';
|
$class .= ' dead';
|
||||||
}
|
}
|
||||||
$diff[] = $this->_paintLine($line, $lineno, $class, $coveringTests);
|
$diff[] = $this->_paintLine($line, $lineno, $class, $coveringTests);
|
||||||
|
|
|
@ -148,7 +148,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
|
||||||
}
|
}
|
||||||
if (method_exists($coverage, 'getData')) {
|
if (method_exists($coverage, 'getData')) {
|
||||||
$report = $coverage->getData();
|
$report = $coverage->getData();
|
||||||
echo '<div class="cake-error">' . __('Coverage generation is not supported with PHPUnit 3.6 at this time.') . '</div>';
|
echo $this->paintCoverage($report);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->paintDocumentEnd();
|
$this->paintDocumentEnd();
|
||||||
|
@ -161,6 +161,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
|
||||||
*/
|
*/
|
||||||
public function paintCoverage(array $coverage) {
|
public function paintCoverage(array $coverage) {
|
||||||
App::uses('HtmlCoverageReport', 'TestSuite/Coverage');
|
App::uses('HtmlCoverageReport', 'TestSuite/Coverage');
|
||||||
|
|
||||||
$reporter = new HtmlCoverageReport($coverage, $this);
|
$reporter = new HtmlCoverageReport($coverage, $this);
|
||||||
echo $reporter->report();
|
echo $reporter->report();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue