Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/test/browser/formattedTextRenderer.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 assert from 'assert';
7
import { renderFormattedText, renderText } from '../../browser/formattedTextRenderer.js';
8
import { DisposableStore } from '../../common/lifecycle.js';
9
import { ensureNoDisposablesAreLeakedInTestSuite } from '../common/utils.js';
10
import { $ } from '../../browser/dom.js';
11
12
suite('FormattedTextRenderer', () => {
13
const store = new DisposableStore();
14
15
setup(() => {
16
store.clear();
17
});
18
19
teardown(() => {
20
store.clear();
21
});
22
23
test('render simple element', () => {
24
const result: HTMLElement = renderText('testing');
25
26
assert.strictEqual(result.nodeType, document.ELEMENT_NODE);
27
assert.strictEqual(result.textContent, 'testing');
28
assert.strictEqual(result.tagName, 'DIV');
29
});
30
31
test('render element with target', () => {
32
const target = $('div.testClass');
33
const result = renderText('testing', {}, target);
34
assert.strictEqual(result.nodeType, document.ELEMENT_NODE);
35
assert.strictEqual(result, target);
36
assert.strictEqual(result.className, 'testClass');
37
});
38
39
test('simple formatting', () => {
40
let result: HTMLElement = renderFormattedText('**bold**');
41
assert.strictEqual(result.children.length, 1);
42
assert.strictEqual(result.firstChild!.textContent, 'bold');
43
assert.strictEqual((<HTMLElement>result.firstChild).tagName, 'B');
44
assert.strictEqual(result.innerHTML, '<b>bold</b>');
45
46
result = renderFormattedText('__italics__');
47
assert.strictEqual(result.innerHTML, '<i>italics</i>');
48
49
result = renderFormattedText('``code``');
50
assert.strictEqual(result.innerHTML, '``code``');
51
52
result = renderFormattedText('``code``', { renderCodeSegments: true });
53
assert.strictEqual(result.innerHTML, '<code>code</code>');
54
55
result = renderFormattedText('this string has **bold**, __italics__, and ``code``!!', { renderCodeSegments: true });
56
assert.strictEqual(result.innerHTML, 'this string has <b>bold</b>, <i>italics</i>, and <code>code</code>!!');
57
});
58
59
test('no formatting', () => {
60
const result: HTMLElement = renderFormattedText('this is just a string');
61
assert.strictEqual(result.innerHTML, 'this is just a string');
62
});
63
64
test('preserve newlines', () => {
65
const result: HTMLElement = renderFormattedText('line one\nline two');
66
assert.strictEqual(result.innerHTML, 'line one<br>line two');
67
});
68
69
test('action', () => {
70
let callbackCalled = false;
71
const result: HTMLElement = renderFormattedText('[[action]]', {
72
actionHandler: {
73
callback(content) {
74
assert.strictEqual(content, '0');
75
callbackCalled = true;
76
},
77
disposables: store
78
}
79
});
80
assert.strictEqual(result.innerHTML, '<a>action</a>');
81
82
const event: MouseEvent = document.createEvent('MouseEvent');
83
event.initEvent('click', true, true);
84
result.firstChild!.dispatchEvent(event);
85
assert.strictEqual(callbackCalled, true);
86
});
87
88
test('fancy action', () => {
89
let callbackCalled = false;
90
const result: HTMLElement = renderFormattedText('__**[[action]]**__', {
91
actionHandler: {
92
callback(content) {
93
assert.strictEqual(content, '0');
94
callbackCalled = true;
95
},
96
disposables: store
97
}
98
});
99
assert.strictEqual(result.innerHTML, '<i><b><a>action</a></b></i>');
100
101
const event: MouseEvent = document.createEvent('MouseEvent');
102
event.initEvent('click', true, true);
103
result.firstChild!.firstChild!.firstChild!.dispatchEvent(event);
104
assert.strictEqual(callbackCalled, true);
105
});
106
107
test('fancier action', () => {
108
let callbackCalled = false;
109
const result: HTMLElement = renderFormattedText('``__**[[action]]**__``', {
110
renderCodeSegments: true,
111
actionHandler: {
112
callback(content) {
113
assert.strictEqual(content, '0');
114
callbackCalled = true;
115
},
116
disposables: store
117
}
118
});
119
assert.strictEqual(result.innerHTML, '<code><i><b><a>action</a></b></i></code>');
120
121
const event: MouseEvent = document.createEvent('MouseEvent');
122
event.initEvent('click', true, true);
123
result.firstChild!.firstChild!.firstChild!.firstChild!.dispatchEvent(event);
124
assert.strictEqual(callbackCalled, true);
125
});
126
127
test('escaped formatting', () => {
128
const result: HTMLElement = renderFormattedText('\\*\\*bold\\*\\*');
129
assert.strictEqual(result.children.length, 0);
130
assert.strictEqual(result.innerHTML, '**bold**');
131
});
132
133
ensureNoDisposablesAreLeakedInTestSuite();
134
});
135
136