Skip to content

Commit 449e406

Browse files
committed
[PhpUnitBridge] Added a CoverageListener to enhance the code coverage report
1 parent 7c1febd commit 449e406

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace App;
4+
5+
use PHPUnit\Framework\AssertionFailedError;
6+
use PHPUnit\Framework\BaseTestListener;
7+
use PHPUnit\Framework\Test;
8+
use PHPUnit\Framework\TestSuite;
9+
use PHPUnit\Framework\Warning;
10+
11+
/**
12+
* CoverageListener adds `@covers <className>` on each test suite when possible
13+
* to make the code coverage more accurate.
14+
*
15+
* @author Grégoire Pineau <lyrixx@lyrixx.info>
16+
*/
17+
class CoverageListener extends BaseTestListener
18+
{
19+
public function startTest(Test $test)
20+
{
21+
$annotations = $test->getAnnotations();
22+
23+
if (isset($annotations['class']['covers']) || isset($annotations['method']['covers'])) {
24+
return;
25+
}
26+
27+
$class = get_class($test);
28+
29+
$coverClass = str_replace('Tests\\', '', $class);
30+
$coverClass = preg_replace('{Test$}', '', $coverClass);
31+
32+
if (!class_exists($coverClass)) {
33+
return;
34+
}
35+
36+
$r = new \ReflectionProperty(\PHPUnit\Util\Test::class, 'annotationCache');
37+
$r->setAccessible(true);
38+
39+
$cache = $r->getValue();
40+
$cache = array_replace_recursive($cache, array(
41+
$class => array(
42+
'covers' => array($coverClass),
43+
)
44+
));
45+
$r->setValue(\PHPUnit\Util\Test::class, $cache);
46+
}
47+
}

0 commit comments

Comments
 (0)