mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 03:54:24 +01:00
add api tests for #1800
This commit is contained in:
@@ -7,26 +7,67 @@
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { join } from 'path';
|
||||
import {
|
||||
languages, workspace, commands, Uri, Diagnostic, Range, Command, Disposable, CancellationToken,
|
||||
CompletionList, CompletionItem, CompletionItemKind, TextDocument, Position
|
||||
} from 'vscode';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { createRandomFile } from '../utils';
|
||||
|
||||
suite('languages namespace tests', () => {
|
||||
|
||||
test('setTextDocumentLanguage -> close/open event', async function () {
|
||||
const file = await createRandomFile('foo\nbar\nbar');
|
||||
const doc = await vscode.workspace.openTextDocument(file);
|
||||
const langIdNow = doc.languageId;
|
||||
let clock = 0;
|
||||
|
||||
let close = new Promise(resolve => {
|
||||
vscode.workspace.onDidCloseTextDocument(e => {
|
||||
if (e === doc) {
|
||||
assert.equal(doc.languageId, langIdNow);
|
||||
assert.equal(clock, 0);
|
||||
clock += 1;
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
let open = new Promise(resolve => {
|
||||
vscode.workspace.onDidOpenTextDocument(e => {
|
||||
if (e === doc) { // same instance!
|
||||
assert.equal(doc.languageId, 'json');
|
||||
assert.equal(clock, 1);
|
||||
clock += 1;
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
let change = vscode.languages.setTextDocumentLanguage(doc, 'json');
|
||||
await Promise.all([change, close, open]);
|
||||
assert.equal(clock, 2);
|
||||
assert.equal(doc.languageId, 'json');
|
||||
});
|
||||
|
||||
test('setTextDocumentLanguage -> error when language does not exist', async function () {
|
||||
const file = await createRandomFile('foo\nbar\nbar');
|
||||
const doc = await vscode.workspace.openTextDocument(file);
|
||||
|
||||
try {
|
||||
await vscode.languages.setTextDocumentLanguage(doc, 'fooLangDoesNotExist');
|
||||
assert.ok(false);
|
||||
} catch (err) {
|
||||
assert.ok(err);
|
||||
}
|
||||
});
|
||||
|
||||
test('diagnostics, read & event', function () {
|
||||
let uri = Uri.file('/foo/bar.txt');
|
||||
let col1 = languages.createDiagnosticCollection('foo1');
|
||||
col1.set(uri, [new Diagnostic(new Range(0, 0, 0, 12), 'error1')]);
|
||||
let uri = vscode.Uri.file('/foo/bar.txt');
|
||||
let col1 = vscode.languages.createDiagnosticCollection('foo1');
|
||||
col1.set(uri, [new vscode.Diagnostic(new vscode.Range(0, 0, 0, 12), 'error1')]);
|
||||
|
||||
let col2 = languages.createDiagnosticCollection('foo2');
|
||||
col2.set(uri, [new Diagnostic(new Range(0, 0, 0, 12), 'error1')]);
|
||||
let col2 = vscode.languages.createDiagnosticCollection('foo2');
|
||||
col2.set(uri, [new vscode.Diagnostic(new vscode.Range(0, 0, 0, 12), 'error1')]);
|
||||
|
||||
let diag = languages.getDiagnostics(uri);
|
||||
let diag = vscode.languages.getDiagnostics(uri);
|
||||
assert.equal(diag.length, 2);
|
||||
|
||||
let tuples = languages.getDiagnostics();
|
||||
let tuples = vscode.languages.getDiagnostics();
|
||||
let found = false;
|
||||
for (let [thisUri,] of tuples) {
|
||||
if (thisUri.toString() === uri.toString()) {
|
||||
@@ -40,21 +81,21 @@ suite('languages namespace tests', () => {
|
||||
|
||||
test('diagnostics & CodeActionProvider', function () {
|
||||
|
||||
class D2 extends Diagnostic {
|
||||
class D2 extends vscode.Diagnostic {
|
||||
customProp = { complex() { } };
|
||||
constructor() {
|
||||
super(new Range(0, 2, 0, 7), 'sonntag');
|
||||
super(new vscode.Range(0, 2, 0, 7), 'sonntag');
|
||||
}
|
||||
}
|
||||
|
||||
let diag1 = new Diagnostic(new Range(0, 0, 0, 5), 'montag');
|
||||
let diag1 = new vscode.Diagnostic(new vscode.Range(0, 0, 0, 5), 'montag');
|
||||
let diag2 = new D2();
|
||||
|
||||
let ran = false;
|
||||
let uri = Uri.parse('ttt:path.far');
|
||||
let uri = vscode.Uri.parse('ttt:path.far');
|
||||
|
||||
let r1 = languages.registerCodeActionsProvider({ pattern: '*.far', scheme: 'ttt' }, {
|
||||
provideCodeActions(document, range, ctx): Command[] {
|
||||
let r1 = vscode.languages.registerCodeActionsProvider({ pattern: '*.far', scheme: 'ttt' }, {
|
||||
provideCodeActions(document, range, ctx): vscode.Command[] {
|
||||
|
||||
assert.equal(ctx.diagnostics.length, 2);
|
||||
let [first, second] = ctx.diagnostics;
|
||||
@@ -66,44 +107,44 @@ suite('languages namespace tests', () => {
|
||||
}
|
||||
});
|
||||
|
||||
let r2 = workspace.registerTextDocumentContentProvider('ttt', {
|
||||
let r2 = vscode.workspace.registerTextDocumentContentProvider('ttt', {
|
||||
provideTextDocumentContent() {
|
||||
return 'this is some text';
|
||||
}
|
||||
});
|
||||
|
||||
let r3 = languages.createDiagnosticCollection();
|
||||
let r3 = vscode.languages.createDiagnosticCollection();
|
||||
r3.set(uri, [diag1]);
|
||||
|
||||
let r4 = languages.createDiagnosticCollection();
|
||||
let r4 = vscode.languages.createDiagnosticCollection();
|
||||
r4.set(uri, [diag2]);
|
||||
|
||||
return workspace.openTextDocument(uri).then(doc => {
|
||||
return commands.executeCommand('vscode.executeCodeActionProvider', uri, new Range(0, 0, 0, 10));
|
||||
return vscode.workspace.openTextDocument(uri).then(doc => {
|
||||
return vscode.commands.executeCommand('vscode.executeCodeActionProvider', uri, new vscode.Range(0, 0, 0, 10));
|
||||
}).then(commands => {
|
||||
assert.ok(ran);
|
||||
Disposable.from(r1, r2, r3, r4).dispose();
|
||||
vscode.Disposable.from(r1, r2, r3, r4).dispose();
|
||||
});
|
||||
});
|
||||
|
||||
test('completions with document filters', function () {
|
||||
let ran = false;
|
||||
let uri = Uri.file(join(workspace.rootPath || '', './bower.json'));
|
||||
let uri = vscode.Uri.file(join(vscode.workspace.rootPath || '', './bower.json'));
|
||||
|
||||
let jsonDocumentFilter = [{ language: 'json', pattern: '**/package.json' }, { language: 'json', pattern: '**/bower.json' }, { language: 'json', pattern: '**/.bower.json' }];
|
||||
|
||||
let r1 = languages.registerCompletionItemProvider(jsonDocumentFilter, {
|
||||
provideCompletionItems: (document: TextDocument, position: Position, token: CancellationToken): CompletionItem[] => {
|
||||
let proposal = new CompletionItem('foo');
|
||||
proposal.kind = CompletionItemKind.Property;
|
||||
let r1 = vscode.languages.registerCompletionItemProvider(jsonDocumentFilter, {
|
||||
provideCompletionItems: (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.CompletionItem[] => {
|
||||
let proposal = new vscode.CompletionItem('foo');
|
||||
proposal.kind = vscode.CompletionItemKind.Property;
|
||||
ran = true;
|
||||
return [proposal];
|
||||
}
|
||||
});
|
||||
|
||||
return workspace.openTextDocument(uri).then(doc => {
|
||||
return commands.executeCommand<CompletionList>('vscode.executeCompletionItemProvider', uri, new Position(1, 0));
|
||||
}).then((result: CompletionList | undefined) => {
|
||||
return vscode.workspace.openTextDocument(uri).then(doc => {
|
||||
return vscode.commands.executeCommand<vscode.CompletionList>('vscode.executeCompletionItemProvider', uri, new vscode.Position(1, 0));
|
||||
}).then((result: vscode.CompletionList | undefined) => {
|
||||
r1.dispose();
|
||||
assert.ok(ran);
|
||||
console.log(result!.items);
|
||||
|
||||
Reference in New Issue
Block a user