Add pinning test for bracket completions

This commit is contained in:
Matt Bierner
2018-11-29 16:42:08 -08:00
parent c5afb50a5b
commit a3378e4342

View File

@@ -18,27 +18,37 @@ suite('TypeScript Completions', () => {
return vscode.commands.executeCommand('workbench.action.closeAllEditors');
});
test('Should insert backets when completing dot properties with spaces in name', async () => {
await wait(100);
await createTestEditor(testDocumentUri,
'const x = { "hello world": 1 };',
'x.$0'
);
const document = await acceptFirstSuggestion(testDocumentUri, _disposables);
assert.strictEqual(
document.getText(),
joinLines(
'const x = { "hello world": 1 };',
'x["hello world"]'
));
});
test('Should not prioritize bracket accessor completions. #63100', async () => {
await wait(100);
// 'a' should be first entry in completion list
await createTestEditor(joinLines(
await createTestEditor(testDocumentUri,
'const x = { "z-z": 1, a: 1 };',
'x.'
));
'x.$0'
);
const didChangeDocument = onChangedDocument(testDocumentUri, _disposables);
const didSuggest = onDidSuggest(_disposables);
await vscode.commands.executeCommand('editor.action.triggerSuggest');
await didSuggest;
await vscode.commands.executeCommand('acceptSelectedSuggestion');
const document = await didChangeDocument;
const document = await acceptFirstSuggestion(testDocumentUri, _disposables);
assert.strictEqual(
document.getText(),
joinLines(
'const x = { "a": 1, "z-z": 2 };',
'const x = { "z-z": 1, a: 1 };',
'x.a'
));
});
@@ -48,6 +58,15 @@ const joinLines = (...args: string[]) => args.join('\n');
const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
async function acceptFirstSuggestion(uri: vscode.Uri, _disposables: vscode.Disposable[]) {
const didChangeDocument = onChangedDocument(uri, _disposables);
const didSuggest = onDidSuggest(_disposables);
await vscode.commands.executeCommand('editor.action.triggerSuggest');
await didSuggest;
await vscode.commands.executeCommand('acceptSelectedSuggestion');
return await didChangeDocument;
}
function onChangedDocument(documentUri: vscode.Uri, disposables: vscode.Disposable[]) {
return new Promise<vscode.TextDocument>(resolve => vscode.workspace.onDidChangeTextDocument(e => {
if (e.document.uri.toString() === documentUri.toString()) {
@@ -56,15 +75,15 @@ function onChangedDocument(documentUri: vscode.Uri, disposables: vscode.Disposab
}, undefined, disposables));
}
async function createTestEditor(contents: string) {
const document = await vscode.workspace.openTextDocument(testDocumentUri);
async function createTestEditor(uri: vscode.Uri, ...lines: string[]) {
const document = await vscode.workspace.openTextDocument(uri);
await vscode.window.showTextDocument(document);
const activeEditor = vscode.window.activeTextEditor;
if (!activeEditor) {
throw new Error('no active editor');
}
await activeEditor.insertSnippet(new vscode.SnippetString(contents));
await activeEditor.insertSnippet(new vscode.SnippetString(joinLines(...lines)));
}
function onDidSuggest(disposables: vscode.Disposable[]) {