listDocsets(); assert_true(is_array($docsets), 'docset list returns an array'); $sanitized = DocsetRenderer::renderInlineHtml('
bad link
', $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";