Files
prop-ai-hr/mobile-uni/tests/web-ai-markdown.test.mjs
T

25 lines
1.3 KiB
JavaScript

import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import test from 'node:test';
import ts from 'typescript';
const source = await readFile(new URL('../src/utils/markdown.ts', import.meta.url), 'utf8');
const compiled = ts.transpileModule(source, {
compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2020 }
}).outputText;
const { renderMarkdown } = await import(`data:text/javascript,${encodeURIComponent(compiled)}`);
test('全网答案 Markdown 只渲染白名单标签并转义原始 HTML', () => {
const html = renderMarkdown('### 标题\n**加粗** 和 *强调*,含 [官网](https://example.com)。\n\n- 一项\n- 二项\n\n> 引用\n\n`行内`\n\n```\n<script>alert(1)</script>\n```');
assert.match(html, /<h3>标题<\/h3>/);
assert.match(html, /<strong>加粗<\/strong>/);
assert.match(html, /<em>强调<\/em>/);
assert.match(html, /href="https:\/\/example\.com\//);
assert.match(html, /<ul><li>一项<\/li><li>二项<\/li><\/ul>/);
assert.match(html, /<blockquote>引用<\/blockquote>/);
assert.match(html, /&lt;script&gt;alert\(1\)&lt;\/script&gt;/);
assert.equal(renderMarkdown('普通文本'), '<p>普通文本</p>');
assert.doesNotMatch(renderMarkdown('[危险](javascript:alert(1))'), /href=/);
});