Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/test/browser/chatMarkdownRenderer.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { MarkdownString } from '../../../../../base/common/htmlContent.js';
7
import { assertSnapshot } from '../../../../../base/test/common/snapshot.js';
8
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
9
import { ChatMarkdownRenderer } from '../../browser/chatMarkdownRenderer.js';
10
import { workbenchInstantiationService } from '../../../../test/browser/workbenchTestServices.js';
11
12
suite('ChatMarkdownRenderer', () => {
13
const store = ensureNoDisposablesAreLeakedInTestSuite();
14
15
let testRenderer: ChatMarkdownRenderer;
16
setup(() => {
17
const instantiationService = store.add(workbenchInstantiationService(undefined, store));
18
testRenderer = instantiationService.createInstance(ChatMarkdownRenderer, {});
19
});
20
21
test('simple', async () => {
22
const md = new MarkdownString('a');
23
const result = store.add(testRenderer.render(md));
24
await assertSnapshot(result.element.textContent);
25
});
26
27
test('supportHtml with one-line markdown', async () => {
28
const md = new MarkdownString('**hello**');
29
md.supportHtml = true;
30
const result = store.add(testRenderer.render(md));
31
await assertSnapshot(result.element.outerHTML);
32
33
const md2 = new MarkdownString('1. [_hello_](https://example.com) test **text**');
34
md2.supportHtml = true;
35
const result2 = store.add(testRenderer.render(md2));
36
await assertSnapshot(result2.element.outerHTML);
37
});
38
39
test('invalid HTML', async () => {
40
const md = new MarkdownString('1<canvas>2<details>3</details></canvas>4');
41
md.supportHtml = true;
42
const result = store.add(testRenderer.render(md));
43
await assertSnapshot(result.element.outerHTML);
44
});
45
46
test('invalid HTML with attributes', async () => {
47
const md = new MarkdownString('1<details id="id1" style="display: none">2<details id="my id 2">3</details></details>4');
48
md.supportHtml = true;
49
const result = store.add(testRenderer.render(md));
50
await assertSnapshot(result.element.outerHTML);
51
});
52
53
test('valid HTML', async () => {
54
const md = new MarkdownString(`
55
<h1>heading</h1>
56
<ul>
57
<li>1</li>
58
<li><b>hi</b></li>
59
</ul>
60
<pre><code>code here</code></pre>`);
61
md.supportHtml = true;
62
const result = store.add(testRenderer.render(md));
63
await assertSnapshot(result.element.outerHTML);
64
});
65
66
test('mixed valid and invalid HTML', async () => {
67
const md = new MarkdownString(`
68
<h1>heading</h1>
69
<details>
70
<ul>
71
<li><span><details><i>1</i></details></span></li>
72
<li><b>hi</b></li>
73
</ul>
74
</details>
75
<pre><canvas>canvas here</canvas></pre><details></details>`);
76
md.supportHtml = true;
77
const result = store.add(testRenderer.render(md));
78
await assertSnapshot(result.element.outerHTML);
79
});
80
81
test('self-closing elements', async () => {
82
{
83
const md = new MarkdownString('<area><hr><br><input type="text" value="test">');
84
md.supportHtml = true;
85
const result = store.add(testRenderer.render(md));
86
await assertSnapshot(result.element.outerHTML);
87
}
88
{
89
const md = new MarkdownString('<area><hr><br><input type="checkbox">');
90
md.supportHtml = true;
91
const result = store.add(testRenderer.render(md));
92
await assertSnapshot(result.element.outerHTML);
93
}
94
});
95
96
test('html comments', async () => {
97
const md = new MarkdownString('<!-- comment1 <div></div> --><div>content</div><!-- comment2 -->');
98
md.supportHtml = true;
99
const result = store.add(testRenderer.render(md));
100
await assertSnapshot(result.element.outerHTML);
101
});
102
103
test('CDATA', async () => {
104
const md = new MarkdownString('<![CDATA[<div>content</div>]]>');
105
md.supportHtml = true;
106
const result = store.add(testRenderer.render(md));
107
await assertSnapshot(result.element.outerHTML);
108
});
109
110
test('remote images are disallowed', async () => {
111
const md = new MarkdownString('<img src="http://disallowed.com/image.jpg">');
112
md.supportHtml = true;
113
const result = store.add(testRenderer.render(md));
114
await assertSnapshot(result.element.outerHTML);
115
});
116
});
117
118