Skip to content

Commit c8ab0fa

Browse files
Merge branch '12.5'
* 12.5: Update ChangeLog Fix transitive trait coverage for enums
2 parents 7e77bb0 + ef1499f commit c8ab0fa

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

ChangeLog-14.0.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt
88

99
* The XML document of the code coverage report in Cobertura XML format no longer has the `<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">` line at the beginning. No document exists at this URL any more, referencing remote DTD URLs is problematic, and no common consumer of Cobertura XML relies on this line.
1010

11+
### Fixed
12+
13+
* [#1147](https://github.com/sebastianbergmann/php-code-coverage/pull/1147): `CoversClass` does not transitively target traits used by enumerations
14+
1115
## [14.0.0] - 2026-04-03
1216

1317
### Added

src/StaticAnalysis/Visitor/CodeUnitFindingVisitor.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public function leaveNode(Node $node): null
107107
return null;
108108
}
109109

110-
if (!$node instanceof Class_ && !$node instanceof Trait_) {
110+
if (!$node instanceof Class_ && !$node instanceof Enum_ && !$node instanceof Trait_) {
111111
return null;
112112
}
113113

@@ -398,11 +398,11 @@ private function typeAsString(Identifier|Name $node): string
398398
/**
399399
* @param list<non-empty-string> $traits
400400
*/
401-
private function postProcessClassOrTrait(Class_|Trait_ $node, array $traits): void
401+
private function postProcessClassOrTrait(Class_|Enum_|Trait_ $node, array $traits): void
402402
{
403403
$name = $node->namespacedName->toString();
404404

405-
if ($node instanceof Class_) {
405+
if ($node instanceof Class_ || $node instanceof Enum_) {
406406
assert(isset($this->classes[$name]));
407407

408408
$this->classes[$name] = new \SebastianBergmann\CodeCoverage\StaticAnalysis\Class_(
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php declare(strict_types=1);
2+
namespace SebastianBergmann\CodeCoverage\TestFixture;
3+
4+
trait EnumTrait
5+
{
6+
public function traitMethod(): string
7+
{
8+
return 'from trait';
9+
}
10+
}
11+
12+
enum EnumWithTrait: string
13+
{
14+
use EnumTrait;
15+
16+
case Foo = 'foo';
17+
}

tests/tests/StaticAnalysis/Visitor/CodeUnitFindingVisitorTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,22 @@ public function testHandlesTraitUsingTrait(): void
304304
);
305305
}
306306

307+
public function testHandlesEnumUsingTrait(): void
308+
{
309+
$codeUnitFindingVisitor = $this->findCodeUnits(__DIR__ . '/../../../_files/source_with_enum_using_trait.php');
310+
311+
$classes = $codeUnitFindingVisitor->classes();
312+
313+
$this->assertCount(1, $classes);
314+
315+
$enum = $classes['SebastianBergmann\CodeCoverage\TestFixture\EnumWithTrait'];
316+
317+
$this->assertSame(
318+
['SebastianBergmann\CodeCoverage\TestFixture\EnumTrait'],
319+
$enum->traits(),
320+
);
321+
}
322+
307323
private function findCodeUnits(string $filename): CodeUnitFindingVisitor
308324
{
309325
$nodes = (new ParserFactory)->createForHostVersion()->parse(

0 commit comments

Comments
 (0)