'The settings tab "Divi" is Divi UI: release state, admin check and release/withdraw.', ]; public function testTheCoreUsesNoDiviClass(): void { $offenders = []; foreach (self::coreFiles() as $relative => $path) { if (isset(self::EXCEPTIONS[$relative])) { continue; } $names = self::diviNames((string) file_get_contents($path)); if ($names !== []) { $offenders[] = $relative . ': ' . implode(', ', $names); } } self::assertSame([], $offenders, "Der Kern darf keine Divi-Klasse benutzen (Port über Plugin.php verdrahten):\n" . implode("\n", $offenders)); } public function testEveryExceptionExistsAndStillNeedsIt(): void { $files = self::coreFiles(); foreach (array_keys(self::EXCEPTIONS) as $relative) { self::assertArrayHasKey($relative, $files, $relative . ' gibt es nicht mehr – Ausnahme streichen'); self::assertNotSame( [], self::diviNames((string) file_get_contents($files[$relative])), $relative . ' braucht die Ausnahme nicht mehr – streichen' ); } } public function testTheScanFindsImportsQualifiedNamesGroupUsesAndClassStrings(): void { $source = <<<'PHP' Sorted, unique names of Divi classes the source uses. */ private static function diviNames(string $source): array { $names = []; foreach (token_get_all($source) as $token) { if (! is_array($token)) { continue; } $text = match ($token[0]) { T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED => ltrim($token[1], '\\'), T_CONSTANT_ENCAPSED_STRING => ltrim(str_replace('\\\\', '\\', substr($token[1], 1, -1)), '\\'), default => '', }; if (preg_match('/^(?:LIT\\\\MCP\\\\Integrations\\\\)?Divi\\\\[A-Za-z0-9_\\\\]+$/', $text) === 1) { $names[] = $text; } } $names = array_values(array_unique($names)); sort($names); return $names; } /** @return array Path below src/ => absolute path of every PHP file in CORE_PATHS. */ private static function coreFiles(): array { $root = dirname(__DIR__, 3) . '/src/'; $files = []; foreach (self::CORE_PATHS as $directory) { $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($root . $directory, FilesystemIterator::SKIP_DOTS) ); foreach ($iterator as $file) { if ($file->getExtension() === 'php') { $files[substr((string) $file->getPathname(), strlen($root))] = (string) $file->getPathname(); } } } ksort($files); return $files; } }