Private
Public Access
55 lines
2.4 KiB
PHP
55 lines
2.4 KiB
PHP
<?php
|
|
chdir(__DIR__.'/..');
|
|
$_SERVER['REQUEST_METHOD'] = 'GET';
|
|
$_SERVER['REQUEST_URI'] = '/docset-viewer/';
|
|
$_SERVER['PHP_SELF'] = '/docset-viewer/index.php';
|
|
|
|
require_once 'config/settings.php';
|
|
require_once 'lib/ulib.php';
|
|
require_once 'lib/components.php';
|
|
require_once 'lib/theme_helpers.php';
|
|
require_once 'lib/docset_repository.php';
|
|
require_once 'lib/docset_renderer.php';
|
|
|
|
function assert_true($condition, string $message): void
|
|
{
|
|
if(!$condition)
|
|
{
|
|
fwrite(STDERR, "FAIL: $message\n");
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
assert_true(class_exists('SQLite3'), 'SQLite3 extension is available');
|
|
assert_true(class_exists('SimpleXMLElement'), 'SimpleXML extension is available');
|
|
assert_true(class_exists('DOMDocument'), 'DOM extension is available');
|
|
|
|
URL::MakeRoute('/docsets');
|
|
assert_true(URL::$route['page'] === 'docsets', 'route parsing finds docsets page');
|
|
|
|
$repo = new DocsetRepository();
|
|
$docsets = $repo->listDocsets();
|
|
assert_true(is_array($docsets), 'docset list returns an array');
|
|
|
|
$sanitized = DocsetRenderer::renderInlineHtml('<main><a href="javascript:alert(1)" onclick="alert(2)">bad link</a></main>', $repo, 'PHP', '.');
|
|
assert_true(!str_contains(strtolower($sanitized), 'javascript:'), 'inline renderer blocks javascript URLs from docset HTML');
|
|
assert_true(!str_contains(strtolower($sanitized), 'onclick='), 'inline renderer strips event handler attributes from docset HTML');
|
|
assert_true(str_contains($sanitized, '#blocked-unsafe-url'), 'inline renderer keeps unsafe links inert and visible');
|
|
|
|
$phpDocset = $repo->getDocset('PHP');
|
|
if($phpDocset)
|
|
{
|
|
assert_true($phpDocset['entry_count'] > 1000, 'PHP docset has indexed entries');
|
|
$results = $repo->search('array_map', 'PHP', 5);
|
|
assert_true(count($results) > 0, 'PHP docset search returns results');
|
|
assert_true(isset($results[0]['href']), 'search result contains view URL');
|
|
$doc = $repo->resolveDocumentPath('PHP', 'www.php.net/manual/en/function.array-map.html');
|
|
assert_true($doc !== null, 'PHP docset document resolves');
|
|
$html = DocsetRenderer::renderInlineHtml((string)file_get_contents($doc['file']), $repo, 'PHP', dirname($doc['relative']));
|
|
assert_true(str_contains($html, 'array_map'), 'inline renderer includes document content');
|
|
$rewrittenLink = str_replace('&', '&', URL::Link('view', array('docset' => 'PHP', 'path' => 'www.php.net/manual/en/language.types.array.html')));
|
|
assert_true(str_contains($html, $rewrittenLink), 'inline renderer rewrites doc links to view routes');
|
|
}
|
|
|
|
echo "Smoke tests passed\n";
|