✨ feat(vscode): 代码阅读的注释和函数说明按 Markdown 渲染
This commit is contained in:
1 parent
aae9012f14
commit
a53c2a6aac
18 files changed
+394
-66
No files matched your search
@@ -0,0 +1,42 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { renderMarkdown } from './markdown'
|
||||
|
||||
describe('renderMarkdown', () => {
|
||||
it('一行文字是一个段落;段内换行是软换行,空行分段', () => {
|
||||
expect(renderMarkdown('读配置。')).toBe('<p>读配置。</p>\n')
|
||||
expect(renderMarkdown('第一行\n接着写\n\n第二段')).toBe('<p>第一行\n接着写</p>\n<p>第二段</p>\n')
|
||||
})
|
||||
|
||||
it('行内代码(含双反引号)、强调、列表、代码块、标题、引用、表格', () => {
|
||||
expect(renderMarkdown('先过 :func:`normalize_phone`,打印 ``user`` 时 **脱敏**')).toBe(
|
||||
'<p>先过 :func:<code>normalize_phone</code>,打印 <code>user</code> 时 <strong>脱敏</strong></p>\n',
|
||||
)
|
||||
expect(renderMarkdown('- 甲\n- 乙')).toBe('<ul>\n<li>甲</li>\n<li>乙</li>\n</ul>\n')
|
||||
expect(renderMarkdown('```ts\nload(\'a\')\n```')).toBe('<pre><code class="language-ts">load(\'a\')\n</code></pre>\n')
|
||||
expect(renderMarkdown('例子:\n\n f(1)')).toBe('<p>例子:</p>\n<pre><code>f(1)\n</code></pre>\n')
|
||||
expect(renderMarkdown('# 标题')).toBe('<h1>标题</h1>\n')
|
||||
expect(renderMarkdown('> 引用')).toBe('<blockquote>\n<p>引用</p>\n</blockquote>\n')
|
||||
expect(renderMarkdown('| a | b |\n| - | - |\n| 1 | 2 |')).toContain('<table>')
|
||||
})
|
||||
|
||||
it('源码里的 HTML 当文字显示', () => {
|
||||
expect(renderMarkdown('用 <b>mask</b> <script>alert(1)</script>')).toBe(
|
||||
'<p>用 <b>mask</b> <script>alert(1)</script></p>\n',
|
||||
)
|
||||
expect(renderMarkdown('<div onclick="x()">块</div>')).toBe('<p><div onclick="x()">块</div></p>\n')
|
||||
})
|
||||
|
||||
it('带协议的网址、邮箱自动成链接;不带协议的文件名不算', () => {
|
||||
expect(renderMarkdown('见 https://example.com/phone')).toBe('<p>见 <a href="https://example.com/phone">https://example.com/phone</a></p>\n')
|
||||
expect(renderMarkdown('[文档](http://example.com)')).toBe('<p><a href="http://example.com">文档</a></p>\n')
|
||||
expect(renderMarkdown('找 dev@example.com')).toContain('<a href="mailto:dev@example.com">')
|
||||
expect(renderMarkdown('改 sample.py 和 README.md')).toBe('<p>改 sample.py 和 README.md</p>\n')
|
||||
})
|
||||
|
||||
it('链接只认 http / https / mailto,别的照原文显示;图片不渲染', () => {
|
||||
expect(renderMarkdown('[点](javascript:alert(1))')).not.toContain('<a')
|
||||
expect(renderMarkdown('[命令](command:workbench.action.reloadWindow)')).not.toContain('<a')
|
||||
expect(renderMarkdown('[相对](./x.md)')).not.toContain('<a')
|
||||
expect(renderMarkdown('')).not.toContain('<img')
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user