isDot()) { $data[] = ['OCA\\Talk\\Events\\' . substr($fileinfo->getFilename(), 0, -4)]; } } sort($data); return $data; } #[DataProvider('dataEventDocumentation')] public function testEventDocumentation(string $eventClass): void { $reflectionClass = new \ReflectionClass($eventClass); if ($reflectionClass->isAbstract()) { self::assertTrue(true, 'Abstract event class ' . $eventClass . ' does not have to be documented'); return; } $classDocBlock = $reflectionClass->getDocComment(); if (is_string($classDocBlock) && str_contains($classDocBlock, '@deprecated')) { self::assertTrue(true, 'Deprecated event ' . $eventClass . ' does not have to be documented'); return; } if (is_string($classDocBlock) && str_contains($classDocBlock, '@internal')) { self::assertTrue(true, 'Internal event ' . $eventClass . ' does not have to be documented'); return; } $docs = file_get_contents(__DIR__ . '/../../docs/events.md'); $eventIsDocumented = str_contains($docs, 'Before event: `' . $eventClass . '`') || str_contains($docs, 'After event: `' . $eventClass . '`') || str_contains($docs, 'Final event: `' . $eventClass . '`') || str_contains($docs, 'Event: `' . $eventClass . '`'); self::assertTrue($eventIsDocumented, 'Asserting that event ' . $eventClass . ' is documented'); } }