diff --git a/src/vs/base/test/browser/markdownRenderer.test.ts b/src/vs/base/test/browser/markdownRenderer.test.ts
index bd1382b36e2..1da026b5174 100644
--- a/src/vs/base/test/browser/markdownRenderer.test.ts
+++ b/src/vs/base/test/browser/markdownRenderer.test.ts
@@ -10,6 +10,7 @@ import { marked } from 'vs/base/common/marked/marked';
import { parse } from 'vs/base/common/marshalling';
import { isWeb } from 'vs/base/common/platform';
import { URI } from 'vs/base/common/uri';
+import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
function strToNode(str: string): HTMLElement {
return new DOMParser().parseFromString(str, 'text/html').body.firstChild as HTMLElement;
@@ -23,10 +24,13 @@ function assertNodeEquals(actualNode: HTMLElement, expectedHtml: string) {
}
suite('MarkdownRenderer', () => {
+
+ const store = ensureNoDisposablesAreLeakedInTestSuite();
+
suite('Sanitization', () => {
test('Should not render images with unknown schemes', () => {
const markdown = { value: `` };
- const result: HTMLElement = renderMarkdown(markdown).element;
+ const result: HTMLElement = store.add(renderMarkdown(markdown)).element;
assert.strictEqual(result.innerHTML, '
![image]()
');
});
});
@@ -34,28 +38,28 @@ suite('MarkdownRenderer', () => {
suite('Images', () => {
test('image rendering conforms to default', () => {
const markdown = { value: `` };
- const result: HTMLElement = renderMarkdown(markdown).element;
+ const result: HTMLElement = store.add(renderMarkdown(markdown)).element;
assertNodeEquals(result, '
');
});
test('image rendering conforms to default without title', () => {
const markdown = { value: `` };
- const result: HTMLElement = renderMarkdown(markdown).element;
+ const result: HTMLElement = store.add(renderMarkdown(markdown)).element;
assertNodeEquals(result, '
');
});
test('image width from title params', () => {
- const result: HTMLElement = renderMarkdown({ value: `` }).element;
+ const result: HTMLElement = store.add(renderMarkdown({ value: `` })).element;
assertNodeEquals(result, `
`);
});
test('image height from title params', () => {
- const result: HTMLElement = renderMarkdown({ value: `` }).element;
+ const result: HTMLElement = store.add(renderMarkdown({ value: `` })).element;
assertNodeEquals(result, `
`);
});
test('image width and height from title params', () => {
- const result: HTMLElement = renderMarkdown({ value: `` }).element;
+ const result: HTMLElement = store.add(renderMarkdown({ value: `` })).element;
assertNodeEquals(result, `
`);
});
@@ -63,7 +67,7 @@ suite('MarkdownRenderer', () => {
if (isWeb) {
return;
}
- const result: HTMLElement = renderMarkdown({ value: `` }).element;
+ const result: HTMLElement = store.add(renderMarkdown({ value: `` })).element;
assertNodeEquals(result, '
');
});
});
@@ -78,10 +82,10 @@ suite('MarkdownRenderer', () => {
test('asyncRenderCallback should be invoked for code blocks', () => {
const markdown = { value: '```js\n1 + 1;\n```' };
return new Promise(resolve => {
- renderMarkdown(markdown, {
+ store.add(renderMarkdown(markdown, {
asyncRenderCallback: resolve,
codeBlockRenderer: simpleCodeBlockRenderer
- });
+ }));
});
});
@@ -120,12 +124,12 @@ suite('MarkdownRenderer', () => {
test('Code blocks should use leading language id (#157793)', async () => {
const markdown = { value: '```js some other stuff\n1 + 1;\n```' };
const lang = await new Promise(resolve => {
- renderMarkdown(markdown, {
+ store.add(renderMarkdown(markdown, {
codeBlockRenderer: async (lang, value) => {
resolve(lang);
return simpleCodeBlockRenderer(lang, value);
}
- });
+ }));
});
assert.strictEqual(lang, 'js');
});
@@ -137,7 +141,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendText('$(zap) $(not a theme icon) $(add)');
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `$(zap) $(not a theme icon) $(add)
`);
});
@@ -145,7 +149,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown('$(zap) $(not a theme icon) $(add)');
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, ` $(not a theme icon)
`);
});
@@ -153,7 +157,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown('\\$(zap) $(not a theme icon) $(add)');
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `$(zap) $(not a theme icon)
`);
});
@@ -161,7 +165,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true });
mds.appendMarkdown(`[$(zap)-link](#link)`);
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `-link
`);
});
@@ -172,7 +176,7 @@ suite('MarkdownRenderer', () => {
|--------|----------------------|
| $(zap) | [$(zap)-link](#link) |`);
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `
@@ -192,7 +196,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: true, supportHtml: true });
mds.appendMarkdown(`$(sync)`);
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `
`);
});
});
@@ -203,7 +207,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: false });
mds.appendText('$(zap) $(not a theme icon) $(add)');
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `$(zap) $(not a theme icon) $(add)
`);
});
@@ -211,7 +215,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportThemeIcons: false });
mds.appendMarkdown('\\$(zap) $(not a theme icon) $(add)');
- const result: HTMLElement = renderMarkdown(mds).element;
+ const result: HTMLElement = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `$(zap) $(not a theme icon) $(add)
`);
});
});
@@ -219,7 +223,7 @@ suite('MarkdownRenderer', () => {
test('npm Hover Run Script not working #90855', function () {
const md: IMarkdownString = JSON.parse('{"value":"[Run Script](command:npm.runScriptFromHover?%7B%22documentUri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22c%3A%5C%5CUsers%5C%5Cjrieken%5C%5CCode%5C%5C_sample%5C%5Cfoo%5C%5Cpackage.json%22%2C%22_sep%22%3A1%2C%22external%22%3A%22file%3A%2F%2F%2Fc%253A%2FUsers%2Fjrieken%2FCode%2F_sample%2Ffoo%2Fpackage.json%22%2C%22path%22%3A%22%2Fc%3A%2FUsers%2Fjrieken%2FCode%2F_sample%2Ffoo%2Fpackage.json%22%2C%22scheme%22%3A%22file%22%7D%2C%22script%22%3A%22echo%22%7D \\"Run the script as a task\\")","supportThemeIcons":false,"isTrusted":true,"uris":{"__uri_e49443":{"$mid":1,"fsPath":"c:\\\\Users\\\\jrieken\\\\Code\\\\_sample\\\\foo\\\\package.json","_sep":1,"external":"file:///c%3A/Users/jrieken/Code/_sample/foo/package.json","path":"/c:/Users/jrieken/Code/_sample/foo/package.json","scheme":"file"},"command:npm.runScriptFromHover?%7B%22documentUri%22%3A%7B%22%24mid%22%3A1%2C%22fsPath%22%3A%22c%3A%5C%5CUsers%5C%5Cjrieken%5C%5CCode%5C%5C_sample%5C%5Cfoo%5C%5Cpackage.json%22%2C%22_sep%22%3A1%2C%22external%22%3A%22file%3A%2F%2F%2Fc%253A%2FUsers%2Fjrieken%2FCode%2F_sample%2Ffoo%2Fpackage.json%22%2C%22path%22%3A%22%2Fc%3A%2FUsers%2Fjrieken%2FCode%2F_sample%2Ffoo%2Fpackage.json%22%2C%22scheme%22%3A%22file%22%7D%2C%22script%22%3A%22echo%22%7D":{"$mid":1,"path":"npm.runScriptFromHover","scheme":"command","query":"{\\"documentUri\\":\\"__uri_e49443\\",\\"script\\":\\"echo\\"}"}}}');
- const element = renderMarkdown(md).element;
+ const element = store.add(renderMarkdown(md)).element;
const anchor = element.querySelector('a')!;
assert.ok(anchor);
@@ -238,7 +242,7 @@ suite('MarkdownRenderer', () => {
supportHtml: true
});
- const result: HTMLElement = renderMarkdown(md).element;
+ const result: HTMLElement = store.add(renderMarkdown(md)).element;
assert.strictEqual(result.innerHTML, `command1 command2
`);
});
@@ -248,7 +252,7 @@ suite('MarkdownRenderer', () => {
supportHtml: true,
});
- const result: HTMLElement = renderMarkdown(md).element;
+ const result: HTMLElement = store.add(renderMarkdown(md)).element;
assert.strictEqual(result.innerHTML, `command1 command2
`);
});
@@ -274,7 +278,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, {});
mds.appendMarkdown('abc');
- const result = renderMarkdown(mds).element;
+ const result = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `abc
`);
});
@@ -282,7 +286,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportHtml: true });
mds.appendMarkdown('abc');
- const result = renderMarkdown(mds).element;
+ const result = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `abc
`);
});
@@ -290,7 +294,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportHtml: true });
mds.appendMarkdown('abc');
- const result = renderMarkdown(mds).element;
+ const result = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `abc
`);
});
@@ -298,7 +302,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportHtml: true });
mds.appendText('abc');
- const result = renderMarkdown(mds).element;
+ const result = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `a<b>b</b>c
`);
});
@@ -310,7 +314,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportHtml: true });
mds.appendMarkdown(`
`);
- const result = renderMarkdown(mds).element;
+ const result = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `
`);
});
@@ -322,7 +326,7 @@ suite('MarkdownRenderer', () => {
const mds = new MarkdownString(undefined, { supportHtml: true });
mds.appendMarkdown(`
`);
- const result = renderMarkdown(mds).element;
+ const result = store.add(renderMarkdown(mds)).element;
assert.strictEqual(result.innerHTML, `
`);
});
});