diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc new file mode 100644 index 00000000..beb72f3b --- /dev/null +++ b/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc @@ -0,0 +1,16 @@ +testsNodeAnalyzer->isInTestClass($node)) { + if (! $this->testsNodeAnalyzer->isDirectlyExtendsTestCase($node)) { return null; } diff --git a/src/NodeAnalyzer/TestsNodeAnalyzer.php b/src/NodeAnalyzer/TestsNodeAnalyzer.php index d2b90e5a..4c162443 100644 --- a/src/NodeAnalyzer/TestsNodeAnalyzer.php +++ b/src/NodeAnalyzer/TestsNodeAnalyzer.php @@ -43,6 +43,21 @@ public function isInTestClass(Node $node): bool return false; } + public function isDirectlyExtendsTestCase(ClassMethod $classMethod): bool + { + $classReflection = $this->reflectionResolver->resolveClassReflection($classMethod); + if (! $classReflection instanceof ClassReflection) { + return false; + } + + $parents = $classReflection->getParents(); + if ($parents === []) { + return false; + } + + return in_array($parents[0]->getName(), PHPUnitClassName::TEST_CLASSES, true); + } + public function isTestClassMethod(ClassMethod $classMethod): bool { if (! $classMethod->isPublic()) {