From 76323b1ac7821cf1e9ee4885c4339df8083d0456 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Fri, 15 Feb 2019 10:06:34 +0100 Subject: [PATCH] api tests for links --- .../src/singlefolder-tests/languages.test.ts | 39 ++++++++++++++++++- extensions/vscode-api-tests/src/utils.ts | 4 +- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts index 032bd82375b..6970507fee1 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts @@ -10,6 +10,18 @@ import { createRandomFile } from '../utils'; suite('languages namespace tests', () => { + function positionToString(p: vscode.Position) { + return `[${p.character}/${p.line}]`; + } + + function rangeToString(r: vscode.Range) { + return `[${positionToString(r.start)}/${positionToString(r.end)}]`; + } + + function assertEqualRange(actual: vscode.Range, expected: vscode.Range, message?: string) { + assert.equal(rangeToString(actual), rangeToString(expected), message); + } + test('setTextDocumentLanguage -> close/open event', async function () { const file = await createRandomFile('foo\nbar\nbar'); const doc = await vscode.workspace.openTextDocument(file); @@ -77,6 +89,31 @@ suite('languages namespace tests', () => { assert.ok(found); }); + test('link detector', async function () { + const uri = await createRandomFile('class A { // http://a.com }', undefined, '.java'); + const doc = await vscode.workspace.openTextDocument(uri); + + const target = vscode.Uri.parse('file://foo/bar'); + const range = new vscode.Range(new vscode.Position(0, 0), new vscode.Position(0, 5)); + + const linkProvider: vscode.DocumentLinkProvider = { + provideDocumentLinks: _doc => { + return [new vscode.DocumentLink(range, target)]; + } + }; + vscode.languages.registerDocumentLinkProvider({ language: 'java', scheme: 'file' }, linkProvider); + + const links = await vscode.commands.executeCommand('vscode.executeLinkProvider', doc.uri); + assert.equal(2, links && links.length); + let [link1, link2] = links!.sort((l1, l2) => l1.range.start.compareTo(l2.range.start)); + + assert.equal(target.toString(), link1.target && link1.target.toString()); + assertEqualRange(range, link1.range); + + assert.equal('http://a.com/', link2.target && link2.target.toString()); + assertEqualRange(new vscode.Range(new vscode.Position(0, 13), new vscode.Position(0, 25)), link2.range); + }); + test('diagnostics & CodeActionProvider', async function () { class D2 extends vscode.Diagnostic { @@ -144,5 +181,5 @@ suite('languages namespace tests', () => { assert.ok(ran); assert.equal(result!.items[0].label, 'foo'); }); - + }); diff --git a/extensions/vscode-api-tests/src/utils.ts b/extensions/vscode-api-tests/src/utils.ts index 79db77f0d0c..b65e542c583 100644 --- a/extensions/vscode-api-tests/src/utils.ts +++ b/extensions/vscode-api-tests/src/utils.ts @@ -12,9 +12,9 @@ export function rndName() { return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10); } -export function createRandomFile(contents = '', dir: string = os.tmpdir()): Thenable { +export function createRandomFile(contents = '', dir: string = os.tmpdir(), ext = ''): Thenable { return new Promise((resolve, reject) => { - const tmpFile = join(dir, rndName()); + const tmpFile = join(dir, rndName() + ext); fs.writeFile(tmpFile, contents, (error) => { if (error) { return reject(error); -- GitLab