* * @internal */ final class ComponentTestDoesNotExtendCoreTest implements Rule { public function __construct( private ReflectionProvider $reflectionProvider, ) { } /** * {@inheritdoc} */ public function getNodeType(): string { return InClassNode::class; } /** * {@inheritdoc} */ public function processNode(Node $node, Scope $scope): array { $class = $node->getClassReflection(); if (!str_starts_with($class->getName(), 'Drupal\Tests\Component')) { return []; } $invalidParents = [ $this->reflectionProvider->getClass(UnitTestCase::class), $this->reflectionProvider->getClass(BuildTestBase::class), $this->reflectionProvider->getClass(KernelTestBase::class), $this->reflectionProvider->getClass(BrowserTestBase::class), ]; foreach ($invalidParents as $invalidParent) { if ($class->isSubclassOfClass($invalidParent)) { return [ RuleErrorBuilder::message("Component tests should not extend {$invalidParent->getName()}.") ->line($node->getStartLine()) ->build(), ]; } } return []; } }