Skip to content

Commit 4ffbc88

Browse files
no-simplersebastianbergmann
authored andcommitted
Fix transitive trait coverage for enums
1 parent f3a1f87 commit 4ffbc88

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

src/StaticAnalysis/Visitor/CodeUnitFindingVisitor.php

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

108-
if (!$node instanceof Class_ && !$node instanceof Trait_) {
108+
if (!$node instanceof Class_ && !$node instanceof Enum_ && !$node instanceof Trait_) {
109109
return null;
110110
}
111111

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

403-
if ($node instanceof Class_) {
403+
if ($node instanceof Class_ || $node instanceof Enum_) {
404404
assert(isset($this->classes[$name]));
405405

406406
$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
@@ -255,6 +255,22 @@ public function testDetailsAboutExtendedClassesImplementedInterfacesAndUsedTrait
255255
$this->assertArrayHasKey('six', $methods);
256256
}
257257

258+
public function testHandlesEnumUsingTrait(): void
259+
{
260+
$codeUnitFindingVisitor = $this->findCodeUnits(__DIR__ . '/../../../_files/source_with_enum_using_trait.php');
261+
262+
$classes = $codeUnitFindingVisitor->classes();
263+
264+
$this->assertCount(1, $classes);
265+
266+
$enum = $classes['SebastianBergmann\CodeCoverage\TestFixture\EnumWithTrait'];
267+
268+
$this->assertSame(
269+
['SebastianBergmann\CodeCoverage\TestFixture\EnumTrait'],
270+
$enum->traits(),
271+
);
272+
}
273+
258274
private function findCodeUnits(string $filename): CodeUnitFindingVisitor
259275
{
260276
$nodes = (new ParserFactory)->createForHostVersion()->parse(

0 commit comments

Comments
 (0)