diff --git a/src/main.ts b/src/main.ts index ce88d47a..d21c487c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -21,21 +21,21 @@ export async function activate(context: vscode.ExtensionContext) { testExplorerExtension.exports.registerTestAdapter(adapter); } } + context.subscriptions.push( + vscode.workspace.onDidChangeWorkspaceFolders(event => { + for (const workspaceFolder of event.removed) { + const adapter = registeredAdapters.get(workspaceFolder); + if (adapter) { + testExplorerExtension.exports.unregisterTestAdapter(adapter); + registeredAdapters.delete(workspaceFolder); + } + } - vscode.workspace.onDidChangeWorkspaceFolders(event => { - for (const workspaceFolder of event.removed) { - const adapter = registeredAdapters.get(workspaceFolder); - if (adapter) { - testExplorerExtension.exports.unregisterTestAdapter(adapter); - registeredAdapters.delete(workspaceFolder); - } - } - - for (const workspaceFolder of event.added) { - const adapter = new C2TestAdapter(workspaceFolder); - registeredAdapters.set(workspaceFolder, adapter); - testExplorerExtension.exports.registerTestAdapter(adapter); - } - }); + for (const workspaceFolder of event.added) { + const adapter = new C2TestAdapter(workspaceFolder); + registeredAdapters.set(workspaceFolder, adapter); + testExplorerExtension.exports.registerTestAdapter(adapter); + } + })); } } diff --git a/src/test/C2TestAdapter.test.ts b/src/test/C2TestAdapter.test.ts index c5250203..8f588d77 100644 --- a/src/test/C2TestAdapter.test.ts +++ b/src/test/C2TestAdapter.test.ts @@ -112,12 +112,12 @@ describe('C2TestAdapter', function() { } async function waitFor( - test: Mocha.Context, condition: Function, + context: Mocha.Context, condition: Function, timeout: number = 1000): Promise { const start = Date.now(); let c = await condition(); while (!(c = await condition()) && - (Date.now() - start < timeout || !test.enableTimeouts())) + (Date.now() - start < timeout || !context.enableTimeouts())) await promisify(setTimeout)(32); assert.ok(c); } @@ -137,8 +137,14 @@ describe('C2TestAdapter', function() { return e.suite!; } - function disposeAdapterAndSubscribers(check: boolean = true) { - adapter && adapter.dispose(); + async function disposeAdapterAndSubscribers( + context: Mocha.Context, check: boolean = true) { + if (adapter) { + adapter.dispose(); + await waitFor(context, () => { + return (adapter)._allTasks._count == 0; + }); + } testsEventsConnection && testsEventsConnection.dispose(); testStatesEventsConnection && testStatesEventsConnection.dispose(); testStatesEvents = []; @@ -206,9 +212,9 @@ describe('C2TestAdapter', function() { await resetConfig(); }) - afterEach(function() { + afterEach(async function() { this.timeout(8000); - disposeAdapterAndSubscribers(); + await disposeAdapterAndSubscribers(this); }) describe('detect config change', function() { @@ -1783,6 +1789,7 @@ describe('C2TestAdapter', function() { }) specify('variable substitution with executables={...}', async function() { + this.timeout(8000); this.slow(500); const wsPath = workspaceFolderUri.fsPath; const execPath2CopyRelPath = path.normalize('foo/bar/base.second.first');