import { describe, expect, it } from 'vitest' import { renderMarkdown } from './markdown' describe('renderMarkdown', () => { it('一行文字是一个段落;段内换行是软换行,空行分段', () => { expect(renderMarkdown('读配置。')).toBe('

读配置。

\n') expect(renderMarkdown('第一行\n接着写\n\n第二段')).toBe('

第一行\n接着写

\n

第二段

\n') }) it('行内代码(含双反引号)、强调、列表、代码块、标题、引用、表格', () => { expect(renderMarkdown('先过 :func:`normalize_phone`,打印 ``user`` 时 **脱敏**')).toBe( '

先过 :func:normalize_phone,打印 user 时 脱敏

\n', ) expect(renderMarkdown('- 甲\n- 乙')).toBe('\n') expect(renderMarkdown('```ts\nload(\'a\')\n```')).toBe('
load(\'a\')\n
\n') expect(renderMarkdown('例子:\n\n f(1)')).toBe('

例子:

\n
f(1)\n
\n') expect(renderMarkdown('# 标题')).toBe('

标题

\n') expect(renderMarkdown('> 引用')).toBe('
\n

引用

\n
\n') expect(renderMarkdown('| a | b |\n| - | - |\n| 1 | 2 |')).toContain('') }) it('源码里的 HTML 当文字显示', () => { expect(renderMarkdown('用 mask')).toBe( '

用 <b>mask</b> <script>alert(1)</script>

\n', ) expect(renderMarkdown('
块
')).toBe('

<div onclick="x()">块</div>

\n') }) it('带协议的网址、邮箱自动成链接;不带协议的文件名不算', () => { expect(renderMarkdown('见 https://example.com/phone')).toBe('

见 https://example.com/phone

\n') expect(renderMarkdown('[文档](http://example.com)')).toBe('

文档

\n') expect(renderMarkdown('找 dev@example.com')).toContain('') expect(renderMarkdown('改 sample.py 和 README.md')).toBe('

改 sample.py 和 README.md

\n') }) it('链接只认 http / https / mailto,别的照原文显示;图片不渲染', () => { expect(renderMarkdown('[点](javascript:alert(1))')).not.toContain('