From 1f82a5b025ae4ab25afd01661e845417c100bb87 Mon Sep 17 00:00:00 2001 From: Pine Wu Date: Fri, 21 Jun 2019 14:26:09 +0800 Subject: [PATCH 1/2] New test runner API for #74555 --- .../api/node/extHostExtensionService.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 69d976b10d0..90e59f4f245 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -36,7 +36,11 @@ import { RemoteAuthorityResolverError, ExtensionExecutionContext, ExtensionKind import { IURITransformer } from 'vs/base/common/uriIpc'; interface ITestRunner { + // Old test runner spec, shipped in vscode/lib/testrunner run(testsRoot: string, clb: (error: Error, failures?: number) => void): void; + + // New test runner spec + runTests(): Promise; } export interface IHostUtils { @@ -534,7 +538,26 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { requireError = error; } - // Execute the runner if it follows our spec + // Execute the runner following the new `runTests` spec + if (testRunner && typeof testRunner.runTests === 'function') { + return new Promise((c, e) => { + testRunner!.runTests() + .then((succeeded) => { + if (succeeded) { + c(undefined); + this._gracefulExit(0); + } else { + this._gracefulExit(1); + } + }) + .catch(err => { + e(err); + this._gracefulExit(1); + }); + }); + } + + // Execute the runner if it follows the old `run` spec if (testRunner && typeof testRunner.run === 'function') { return new Promise((c, e) => { testRunner!.run(extensionTestsPath, (error, failures) => { From a559a2142d7ae8dd6a3eeafef3d945346064eebd Mon Sep 17 00:00:00 2001 From: Pine Wu Date: Mon, 24 Jun 2019 01:33:25 -0700 Subject: [PATCH 2/2] Update API --- .../api/node/extHostExtensionService.ts | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 90e59f4f245..9d506fc112f 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -36,11 +36,13 @@ import { RemoteAuthorityResolverError, ExtensionExecutionContext, ExtensionKind import { IURITransformer } from 'vs/base/common/uriIpc'; interface ITestRunner { - // Old test runner spec, shipped in vscode/lib/testrunner + /** Old test runner API, as exported from `vscode/lib/testrunner` */ run(testsRoot: string, clb: (error: Error, failures?: number) => void): void; +} - // New test runner spec - runTests(): Promise; +interface INewTestRunner { + /** New test runner API, as explained in the extension test doc */ + run(): Promise; } export interface IHostUtils { @@ -530,7 +532,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { const extensionTestsPath = originalFSPath(extensionTestsLocationURI); // Require the test runner via node require from the provided path - let testRunner: ITestRunner | undefined; + let testRunner: ITestRunner | INewTestRunner | undefined; let requireError: Error | undefined; try { testRunner = require.__$__nodeRequire(extensionTestsPath); @@ -538,29 +540,10 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { requireError = error; } - // Execute the runner following the new `runTests` spec - if (testRunner && typeof testRunner.runTests === 'function') { - return new Promise((c, e) => { - testRunner!.runTests() - .then((succeeded) => { - if (succeeded) { - c(undefined); - this._gracefulExit(0); - } else { - this._gracefulExit(1); - } - }) - .catch(err => { - e(err); - this._gracefulExit(1); - }); - }); - } - // Execute the runner if it follows the old `run` spec if (testRunner && typeof testRunner.run === 'function') { return new Promise((c, e) => { - testRunner!.run(extensionTestsPath, (error, failures) => { + const oldTestRunnerCallback = (error: Error, failures: number | undefined) => { if (error) { e(error.toString()); } else { @@ -569,7 +552,22 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { // after tests have run, we shutdown the host this._gracefulExit(error || (typeof failures === 'number' && failures > 0) ? 1 /* ERROR */ : 0 /* OK */); - }); + }; + + const runResult = testRunner!.run(extensionTestsPath, oldTestRunnerCallback); + + // Using the new API `run(): Promise` + if (runResult && runResult.then) { + runResult + .then(() => { + c(); + this._gracefulExit(0); + }) + .catch((err) => { + e(err); + this._gracefulExit(1); + }); + } }); }