diff --git a/extensions/typescript-language-features/src/test/completions.test.ts b/extensions/typescript-language-features/src/test/completions.test.ts index 46617dc32bb..5a0a8b8d9c7 100644 --- a/extensions/typescript-language-features/src/test/completions.test.ts +++ b/extensions/typescript-language-features/src/test/completions.test.ts @@ -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(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[]) {