Skip to content

Commit acdd5ca

Browse files
Merge pull request #4820 from microsoft/mimatias/test-timeout-fix
Fix integration tests timeouts and events
2 parents cb31a0d + 09ba872 commit acdd5ca

File tree

6 files changed

+52
-43
lines changed

6 files changed

+52
-43
lines changed

Extension/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1762,7 +1762,7 @@
17621762
"mkdirp": "^0.5.1",
17631763
"plist": "^3.0.1",
17641764
"tmp": "^0.1.0",
1765-
"vscode-cpptools": "3.0.1",
1765+
"vscode-cpptools": "^3.1.0",
17661766
"vscode-debugadapter": "^1.35.0",
17671767
"vscode-debugprotocol": "^1.35.0",
17681768
"vscode-extension-telemetry": "^0.1.2",

Extension/src/LanguageServer/client.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
RequestType, ErrorAction, CloseAction, DidOpenTextDocumentParams, Range, Position, DocumentFilter
1212
} from 'vscode-languageclient';
1313
import { SourceFileConfigurationItem, WorkspaceBrowseConfiguration, SourceFileConfiguration, Version } from 'vscode-cpptools';
14-
import { Status } from 'vscode-cpptools/out/testApi';
14+
import { Status, IntelliSenseStatus } from 'vscode-cpptools/out/testApi';
1515
import * as util from '../common';
1616
import * as configs from './configurations';
1717
import { CppSettings, OtherSettings } from './settings';
@@ -1681,11 +1681,13 @@ export class DefaultClient implements Client {
16811681
let testHook: TestHook = getTestHook();
16821682
if (message.endsWith("Indexing...")) {
16831683
this.model.isTagParsing.Value = true;
1684-
testHook.updateStatus(Status.TagParsingBegun);
1684+
let status: IntelliSenseStatus = { status: Status.TagParsingBegun };
1685+
testHook.updateStatus(status);
16851686
} else if (message.endsWith("Updating IntelliSense...")) {
16861687
timeStamp = Date.now();
16871688
this.model.isUpdatingIntelliSense.Value = true;
1688-
testHook.updateStatus(Status.IntelliSenseCompiling);
1689+
let status: IntelliSenseStatus = { status: Status.IntelliSenseCompiling };
1690+
testHook.updateStatus(status);
16891691
} else if (message.endsWith("IntelliSense Ready")) {
16901692
let settings: CppSettings = new CppSettings(this.RootUri);
16911693
if (settings.loggingLevel === "Debug") {
@@ -1694,11 +1696,18 @@ export class DefaultClient implements Client {
16941696
out.appendLine(localize("update.intellisense.time", "Update IntelliSense time (sec): {0}", duration / 1000));
16951697
}
16961698
this.model.isUpdatingIntelliSense.Value = false;
1697-
testHook.updateStatus(Status.IntelliSenseReady);
1699+
let status: IntelliSenseStatus = { status: Status.IntelliSenseReady };
1700+
testHook.updateStatus(status);
16981701
} else if (message.endsWith("Ready")) { // Tag Parser Ready
16991702
this.model.isTagParsing.Value = false;
1700-
testHook.updateStatus(Status.TagParsingDone);
1703+
let status: IntelliSenseStatus = { status: Status.TagParsingDone };
1704+
testHook.updateStatus(status);
17011705
util.setProgress(util.getProgressParseRootSuccess());
1706+
} else if (message.includes("Squiggles Finished - File name:")) {
1707+
let index: number = message.lastIndexOf(":");
1708+
let name: string = message.substring(index + 2);
1709+
let status: IntelliSenseStatus = { status: Status.IntelliSenseReady, filename: name, };
1710+
testHook.updateStatus(status);
17021711
} else if (message.endsWith("No Squiggles")) {
17031712
util.setIntelliSenseProgress(util.getProgressIntelliSenseNoSquiggles());
17041713
} else if (message.endsWith("Unresolved Headers") && this.configuration.CurrentConfiguration.configurationProvider === undefined) {

Extension/src/testHook.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,33 @@
44
* ------------------------------------------------------------------------------------------ */
55
'use strict';
66

7-
import { CppToolsTestHook, Status } from 'vscode-cpptools/out/testApi';
7+
import { CppToolsTestHook, Status, IntelliSenseStatus } from 'vscode-cpptools/out/testApi';
88
import * as vscode from 'vscode';
99

1010
export class TestHook implements CppToolsTestHook {
11+
private intelliSenseStatusChangedEvent: vscode.EventEmitter<IntelliSenseStatus> = new vscode.EventEmitter<IntelliSenseStatus>();
1112
private statusChangedEvent: vscode.EventEmitter<Status> = new vscode.EventEmitter<Status>();
1213

14+
// The StatusChanged event is deprecated in CppToolsTestHook API.
1315
public get StatusChanged(): vscode.Event<Status> {
1416
return this.statusChangedEvent.event;
1517
}
1618

19+
public get IntelliSenseStatusChanged(): vscode.Event<IntelliSenseStatus> {
20+
return this.intelliSenseStatusChangedEvent.event;
21+
}
22+
1723
public get valid(): boolean {
18-
return !!this.statusChangedEvent;
24+
return !!this.intelliSenseStatusChangedEvent;
1925
}
2026

21-
public updateStatus(status: Status): void {
22-
this.statusChangedEvent.fire(status);
27+
public updateStatus(status: IntelliSenseStatus): void {
28+
this.intelliSenseStatusChangedEvent.fire(status);
2329
}
2430

2531
public dispose(): void {
32+
this.intelliSenseStatusChangedEvent.dispose();
33+
this.intelliSenseStatusChangedEvent = null;
2634
this.statusChangedEvent.dispose();
2735
this.statusChangedEvent = null;
2836
}

Extension/test/integrationTests/languageServer/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ testRunner.configure({
2828
ui: 'tdd', // the TDD UI is being used in *.test.ts (suite, test, etc.)
2929
useColors: true, // colored output from test results
3030
fullStackTrace: true,
31-
timeout: 60000
31+
timeout: 120000
3232
});
3333

3434
const logFolder: string = path.join(__dirname, ".logs");

Extension/test/integrationTests/languageServer/languageServer.integration.test.ts

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@ import * as util from '../../../src/common';
1010
import * as api from 'vscode-cpptools';
1111
import * as apit from 'vscode-cpptools/out/testApi';
1212
import * as config from '../../../src/LanguageServer/configurations';
13-
import { getActiveClient } from '../../../src/LanguageServer/extension';
14-
import { initializeTemporaryCommandRegistrar } from '../../../src/commands';
1513

16-
const defaultTimeout: number = 60000;
14+
const defaultTimeout: number = 100000;
1715

1816
suite("multiline comment setting tests", function(): void {
1917
suiteSetup(async function(): Promise<void> {
2018
let extension: vscode.Extension<any> = vscode.extensions.getExtension("ms-vscode.cpptools");
21-
util.setExtensionPath(extension.extensionPath);
22-
initializeTemporaryCommandRegistrar();
2319
if (!extension.isActive) {
2420
await extension.activate();
2521
}
@@ -93,20 +89,12 @@ function cppPropertiesPath(): string {
9389
}
9490

9591
async function changeCppProperties(cppProperties: config.ConfigurationJson, disposables: vscode.Disposable[]): Promise<void> {
96-
let promise: Promise<void> = new Promise<void>((resolve, reject) => {
97-
disposables.push(getActiveClient().ActiveConfigChanged(name => {
98-
if (name === cppProperties.configurations[0].name) {
99-
resolve();
100-
}
101-
}));
102-
103-
// Can't trust the file watcher, so we need to allocate additional time for the backup watcher to fire.
104-
setTimeout(() => { reject(new Error("timeout")); }, 4000);
105-
});
10692
await util.writeFileText(cppPropertiesPath(), JSON.stringify(cppProperties));
10793
let contents: string = await util.readFileText(cppPropertiesPath());
10894
console.log(" wrote c_cpp_properties.json: " + contents);
109-
return promise;
95+
96+
// Sleep for 4000ms for file watcher
97+
return new Promise(r => setTimeout(r, 4000));
11098
}
11199

112100
/******************************************************************************/
@@ -188,15 +176,16 @@ suite("extensibility tests v3", function(): void {
188176
disposables.forEach(d => d.dispose());
189177
});
190178

191-
test("Check provider", async () => {
179+
test("Check provider - main3.cpp", async () => {
192180
// Open a c++ file to start the language server.
193181
let path: string = vscode.workspace.workspaceFolders[0].uri.fsPath + "/main3.cpp";
194182
let uri: vscode.Uri = vscode.Uri.file(path);
195183

196184
let testHook: apit.CppToolsTestHook = cpptools.getTestHook();
197185
let testResult: any = new Promise<void>((resolve, reject) => {
198-
disposables.push(testHook.StatusChanged(status => {
199-
if (status === apit.Status.IntelliSenseReady) {
186+
disposables.push(testHook.IntelliSenseStatusChanged(result => {
187+
result = result as apit.IntelliSenseStatus;
188+
if (result.filename === "main3.cpp" && result.status === apit.Status.IntelliSenseReady) {
200189
let expected: api.SourceFileConfigurationItem[] = [ {uri: uri.toString(), configuration: defaultConfig} ];
201190
assert.deepEqual(lastResult, expected);
202191
assert.deepEqual(lastBrowseResult, defaultFolderBrowseConfig);
@@ -280,15 +269,16 @@ suite("extensibility tests v2", function(): void {
280269
disposables.forEach(d => d.dispose());
281270
});
282271

283-
test("Check provider", async () => {
272+
test("Check provider - main2.cpp", async () => {
284273
// Open a c++ file to start the language server.
285274
let path: string = vscode.workspace.workspaceFolders[0].uri.fsPath + "/main2.cpp";
286275
let uri: vscode.Uri = vscode.Uri.file(path);
287276

288277
let testHook: apit.CppToolsTestHook = cpptools.getTestHook();
289278
let testResult: any = new Promise<void>((resolve, reject) => {
290-
disposables.push(testHook.StatusChanged(status => {
291-
if (status === apit.Status.IntelliSenseReady) {
279+
disposables.push(testHook.IntelliSenseStatusChanged(result => {
280+
result = result as apit.IntelliSenseStatus;
281+
if (result.filename === "main2.cpp" && result.status === apit.Status.IntelliSenseReady) {
292282
let expected: api.SourceFileConfigurationItem[] = [ {uri: uri.toString(), configuration: defaultConfig} ];
293283
assert.deepEqual(lastResult, expected);
294284
assert.deepEqual(lastBrowseResult, defaultBrowseConfig);
@@ -357,15 +347,16 @@ suite("extensibility tests v1", function(): void {
357347
disposables.forEach(d => d.dispose());
358348
});
359349

360-
test("Check provider", async () => {
350+
test("Check provider - main1.cpp", async () => {
361351
// Open a c++ file to start the language server.
362352
let path: string = vscode.workspace.workspaceFolders[0].uri.fsPath + "/main1.cpp";
363353
let uri: vscode.Uri = vscode.Uri.file(path);
364354

365355
let testHook: apit.CppToolsTestHook = cpptools.getTestHook();
366356
let testResult: any = new Promise<void>((resolve, reject) => {
367-
disposables.push(testHook.StatusChanged(status => {
368-
if (status === apit.Status.IntelliSenseReady) {
357+
disposables.push(testHook.IntelliSenseStatusChanged(result => {
358+
result = result as apit.IntelliSenseStatus;
359+
if (result.filename === "main1.cpp" && result.status === apit.Status.IntelliSenseReady) {
369360
let expected: api.SourceFileConfigurationItem[] = [ {uri: uri.toString(), configuration: defaultConfig} ];
370361
assert.deepEqual(lastResult, expected);
371362
resolve();
@@ -430,15 +421,16 @@ suite("extensibility tests v0", function(): void {
430421
await util.deleteFile(cppPropertiesPath());
431422
});
432423

433-
test("Check provider", async () => {
424+
test("Check provider - main.cpp", async () => {
434425
// Open a C++ file to start the language server.
435426
let path: string = vscode.workspace.workspaceFolders[0].uri.fsPath + "/main.cpp";
436427
let uri: vscode.Uri = vscode.Uri.file(path);
437428

438429
let testHook: apit.CppToolsTestHook = cpptools.getTestHook();
439430
let testResult: any = new Promise<void>((resolve, reject) => {
440-
disposables.push(testHook.StatusChanged(status => {
441-
if (status === apit.Status.IntelliSenseReady) {
431+
disposables.push(testHook.IntelliSenseStatusChanged(result => {
432+
result = result as apit.IntelliSenseStatus;
433+
if (result.filename === "main.cpp" && result.status === apit.Status.IntelliSenseReady) {
442434
let expected: api.SourceFileConfigurationItem[] = [ {uri: uri.toString(), configuration: defaultConfig} ];
443435
assert.deepEqual(lastResult, expected);
444436
resolve();

Extension/yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5160,10 +5160,10 @@ vrsource-tslint-rules@^6.0.0:
51605160
resolved "https://registry.yarnpkg.com/vrsource-tslint-rules/-/vrsource-tslint-rules-6.0.0.tgz#a4e25e8f3fdd487684174f423c090c35d60f37a9"
51615161
integrity sha512-pmcnJdIVziZTk1V0Cqehmh3gIabBRkBYXkv9vx+1CZDNEa41kNGUBFwQLzw21erYOd2QnD8jJeZhBGqnlT1HWw==
51625162

5163-
vscode-cpptools@3.0.1:
5164-
version "3.0.1"
5165-
resolved "https://registry.yarnpkg.com/vscode-cpptools/-/vscode-cpptools-3.0.1.tgz#35ea986a48ac14eda85f3989ba5eedc64886c0c2"
5166-
integrity sha512-KAbwWhG36Ahnug9frcCOvWI3dUb3mzWeTqB6NQjIkzAazRTJWT/PiZ7gxpY/+jQIUylbbiU9ezWmzIIm8nP+TQ==
5163+
vscode-cpptools@^3.1.0:
5164+
version "3.1.0"
5165+
resolved "https://registry.yarnpkg.com/vscode-cpptools/-/vscode-cpptools-3.1.0.tgz#fbc0e493e81a05baf01702ea8b9467c39fba257d"
5166+
integrity sha512-z4W/A1TQMEtqTEWNY3Hb4HJcJ2J3HeaLHp3TyqCotoRkLU8ovH4jmDb5tNTyh3DgIiaAAnDalO03A4wm5IvNBg==
51675167

51685168
vscode-debugadapter@^1.35.0:
51695169
version "1.37.1"

0 commit comments

Comments
 (0)