2require_once dirname(__DIR__) .
'/include/dbxSelfTestRunner.class.php';
8 fwrite(STDERR,
"FAIL: {$message}\n");
14 if (!is_dir($path)) return;
15 $iterator =
new RecursiveIteratorIterator(
16 new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
17 RecursiveIteratorIterator::CHILD_FIRST
20 if ($item->isDir()) rmdir($item->getPathname());
21 else unlink($item->getPathname());
26$fixture = sys_get_temp_dir() .
'/dbx-selftest-runner-' . bin2hex(random_bytes(4));
33 "<?php if (getenv('DBX_SELFTEST') !== '1') { fwrite(STDERR, 'FAIL missing test context'); exit(9); } echo 'PASS demo';\n"
35file_put_contents(
$testDir .
'/demo_test.js',
"console.log('PASS browser demo');\n");
39 $runnerSource = (string)file_get_contents(dirname(__DIR__) .
'/include/dbxSelfTestRunner.class.php');
40 $controllerSource = (string)file_get_contents(dirname(__DIR__) .
'/include/dbxSelfTestController.class.php');
41 $dashboardSource = (string)file_get_contents(dirname(__DIR__) .
'/tpl/js/selftest.js');
42 selftest_assert(str_contains(
$runnerSource,
"array(\$php, '-n', '-l', \$file)"),
'PHP-Syntaxchecks muessen ohne php.ini-Startkosten laufen.');
51 'Startschaltflaechen muessen vor dem ersten Request gegen Doppelklicks gesperrt werden.'
56 selftest_assert((
bool)preg_match(
'/^php(?:\.exe)?$/i', basename(
$phpCli)),
'Apache/httpd darf nicht als PHP-CLI verwendet werden.');
58 $demo = array_values(array_filter(
$catalog,
static fn(array $test):
bool => ($test[
'relative_path'] ??
'') ===
'dbx/modules/demo/tests/demo_test.php'));
59 $browserDemo = array_values(array_filter(
$catalog,
static fn(array $test):
bool => ($test[
'relative_path'] ??
'') ===
'dbx/modules/demo/tests/demo_test.js'));
71 selftest_assert(
$runner->loadRun(
'../ungueltig') ===
null,
'Ungueltige Lauf-IDs duerfen nicht aufgeloest werden.');
76 'output' =>
'PASS browser demo',
88 static fn(array $item):
bool => ($item[
'id'] ??
'') ===
$staleRun[
'id']
90 selftest_assert((
$staleHistory[0][
'display_status'] ??
'') ===
'interrupted',
'Verwaiste Weblaeufe muessen als unterbrochen erscheinen.');
96echo
"PASS: dbxSelfTest entdeckt, isoliert, protokolliert und validiert Testlaeufe.\n";
Zentraler, auch ohne Web-Kernel nutzbarer Test-Orchestrator.
selftest_remove_tree(string $path)
selftest_assert(bool $condition, string $message)
if(!defined( 'IMG_WEBP')) define( 'IMG_WEBP'
foreach(array_slice($argv ?? array(), 1) as $argument) $runner