From ae1916bbbedd034b1404a72349f1fbe4686b9ca6 Mon Sep 17 00:00:00 2001 From: Joshua Brooks Date: Mon, 10 Feb 2020 18:12:10 -0500 Subject: [PATCH] Add option to set custom runsettings for tests --- src/features/dotnetTest.ts | 33 +++++++++++++++++++++++---------- src/omnisharp/protocol.ts | 27 +++++++++++++-------------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/features/dotnetTest.ts b/src/features/dotnetTest.ts index e9dc008be..aa6edc9f2 100644 --- a/src/features/dotnetTest.ts +++ b/src/features/dotnetTest.ts @@ -110,10 +110,11 @@ export default class TestManager extends AbstractProvider { vscode.workspace.saveAll(/*includeUntitled*/ false)); } - private async _runTest(fileName: string, testMethod: string, testFrameworkName: string, targetFrameworkVersion: string): Promise { + private async _runTest(fileName: string, testMethod: string, runSettings: string, testFrameworkName: string, targetFrameworkVersion: string): Promise { const request: protocol.V2.RunTestRequest = { FileName: fileName, MethodName: testMethod, + RunSettings: runSettings, TestFrameworkName: testFrameworkName, TargetFrameworkVersion: targetFrameworkVersion }; @@ -163,9 +164,10 @@ export default class TestManager extends AbstractProvider { }); let targetFrameworkVersion = await this._recordRunAndGetFrameworkVersion(fileName, testFrameworkName); + let runSettings = vscode.workspace.getConfiguration('omnisharp').get('testRunSettings'); try { - let results = await this._runTest(fileName, testMethod, testFrameworkName, targetFrameworkVersion); + let results = await this._runTest(fileName, testMethod, runSettings, testFrameworkName, targetFrameworkVersion); this._eventStream.post(new ReportDotNetTestResults(results)); } catch (reason) { @@ -186,9 +188,10 @@ export default class TestManager extends AbstractProvider { }); let targetFrameworkVersion = await this._recordRunAndGetFrameworkVersion(fileName, testFrameworkName); + let runSettings = vscode.workspace.getConfiguration('omnisharp').get('testRunSettings'); try { - let results = await this._runTestsInClass(fileName, testFrameworkName, targetFrameworkVersion, methodsInClass); + let results = await this._runTestsInClass(fileName, runSettings, testFrameworkName, targetFrameworkVersion, methodsInClass); this._eventStream.post(new ReportDotNetTestResults(results)); } catch (reason) { @@ -199,9 +202,10 @@ export default class TestManager extends AbstractProvider { } } - private async _runTestsInClass(fileName: string, testFrameworkName: string, targetFrameworkVersion: string, methodsToRun: string[]): Promise { + private async _runTestsInClass(fileName: string, runSettings: string, testFrameworkName: string, targetFrameworkVersion: string, methodsToRun: string[]): Promise { const request: protocol.V2.RunTestsInClassRequest = { FileName: fileName, + RunSettings: runSettings, TestFrameworkName: testFrameworkName, TargetFrameworkVersion: targetFrameworkVersion, MethodNames: methodsToRun @@ -241,6 +245,7 @@ export default class TestManager extends AbstractProvider { private async _getLaunchConfigurationForVSTest( fileName: string, testMethod: string, + runSettings: string, testFrameworkName: string, targetFrameworkVersion: string, debugEventListener: DebugEventListener): Promise { @@ -253,6 +258,7 @@ export default class TestManager extends AbstractProvider { const request: protocol.V2.DebugTestGetStartInfoRequest = { FileName: fileName, MethodName: testMethod, + RunSettings: runSettings, TestFrameworkName: testFrameworkName, TargetFrameworkVersion: targetFrameworkVersion }; @@ -270,7 +276,7 @@ export default class TestManager extends AbstractProvider { } } - private async _getLaunchConfigurationForLegacy(fileName: string, testMethod: string, testFrameworkName: string, targetFrameworkVersion: string): Promise { + private async _getLaunchConfigurationForLegacy(fileName: string, testMethod: string, runSettings: string, testFrameworkName: string, targetFrameworkVersion: string): Promise { // Listen for test messages while getting start info. const listener = this._server.onTestMessage(e => { @@ -280,6 +286,7 @@ export default class TestManager extends AbstractProvider { const request: protocol.V2.GetTestStartInfoRequest = { FileName: fileName, MethodName: testMethod, + RunSettings: runSettings, TestFrameworkName: testFrameworkName, TargetFrameworkVersion: targetFrameworkVersion }; @@ -297,14 +304,15 @@ export default class TestManager extends AbstractProvider { debugType: string, fileName: string, testMethod: string, + runSettings: string, testFrameworkName: string, targetFrameworkVersion: string, debugEventListener: DebugEventListener): Promise { switch (debugType) { case 'legacy': - return this._getLaunchConfigurationForLegacy(fileName, testMethod, testFrameworkName, targetFrameworkVersion); + return this._getLaunchConfigurationForLegacy(fileName, testMethod, runSettings, testFrameworkName, targetFrameworkVersion); case 'vstest': - return this._getLaunchConfigurationForVSTest(fileName, testMethod, testFrameworkName, targetFrameworkVersion, debugEventListener); + return this._getLaunchConfigurationForVSTest(fileName, testMethod, runSettings, testFrameworkName, targetFrameworkVersion, debugEventListener); default: throw new Error(`Unexpected debug type: ${debugType}`); @@ -350,9 +358,10 @@ export default class TestManager extends AbstractProvider { this._eventStream.post(new DotNetTestDebugStart(testMethod)); let { debugType, debugEventListener, targetFrameworkVersion } = await this._recordDebugAndGetDebugValues(fileName, testFrameworkName); + let runSettings = vscode.workspace.getConfiguration('omnisharp').get('testRunSettings'); try { - let config = await this._getLaunchConfiguration(debugType, fileName, testMethod, testFrameworkName, targetFrameworkVersion, debugEventListener); + let config = await this._getLaunchConfiguration(debugType, fileName, testMethod, runSettings, testFrameworkName, targetFrameworkVersion, debugEventListener); const workspaceFolder = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(fileName)); return vscode.debug.startDebugging(workspaceFolder, config); } @@ -369,9 +378,10 @@ export default class TestManager extends AbstractProvider { this._eventStream.post(new DotNetTestsInClassDebugStart(className)); let { debugType, debugEventListener, targetFrameworkVersion } = await this._recordDebugAndGetDebugValues(fileName, testFrameworkName); + let runSettings = vscode.workspace.getConfiguration('omnisharp').get('testRunSettings'); try { - let config = await this._getLaunchConfigurationForClass(debugType, fileName, methodsToRun, testFrameworkName, targetFrameworkVersion, debugEventListener); + let config = await this._getLaunchConfigurationForClass(debugType, fileName, methodsToRun, runSettings, testFrameworkName, targetFrameworkVersion, debugEventListener); const workspaceFolder = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(fileName)); return vscode.debug.startDebugging(workspaceFolder, config); } @@ -387,11 +397,12 @@ export default class TestManager extends AbstractProvider { debugType: string, fileName: string, methodsToRun: string[], + runSettings: string, testFrameworkName: string, targetFrameworkVersion: string, debugEventListener: DebugEventListener): Promise { if (debugType == 'vstest') { - return this._getLaunchConfigurationForVSTestClass(fileName, methodsToRun, testFrameworkName, targetFrameworkVersion, debugEventListener); + return this._getLaunchConfigurationForVSTestClass(fileName, methodsToRun, runSettings, testFrameworkName, targetFrameworkVersion, debugEventListener); } throw new Error(`Unexpected debug type: ${debugType}`); } @@ -399,6 +410,7 @@ export default class TestManager extends AbstractProvider { private async _getLaunchConfigurationForVSTestClass( fileName: string, methodsToRun: string[], + runSettings: string, testFrameworkName: string, targetFrameworkVersion: string, debugEventListener: DebugEventListener): Promise { @@ -410,6 +422,7 @@ export default class TestManager extends AbstractProvider { const request: protocol.V2.DebugTestClassGetStartInfoRequest = { FileName: fileName, MethodNames: methodsToRun, + RunSettings: runSettings, TestFrameworkName: testFrameworkName, TargetFrameworkVersion: targetFrameworkVersion }; diff --git a/src/omnisharp/protocol.ts b/src/omnisharp/protocol.ts index 2b86ba1a3..1d37d30dd 100644 --- a/src/omnisharp/protocol.ts +++ b/src/omnisharp/protocol.ts @@ -556,18 +556,26 @@ export namespace V2 { } // dotnet-test endpoints - export interface DebugTestGetStartInfoRequest extends Request { + interface SingleTestRequest extends Request { MethodName: string; + RunSettings: string; TestFrameworkName: string; TargetFrameworkVersion: string; } - export interface DebugTestClassGetStartInfoRequest extends Request { + interface MultiTestRequest extends Request { MethodNames: string[]; + RunSettings: string; TestFrameworkName: string; TargetFrameworkVersion: string; } + export interface DebugTestGetStartInfoRequest extends SingleTestRequest { + } + + export interface DebugTestClassGetStartInfoRequest extends MultiTestRequest { + } + export interface DebugTestGetStartInfoResponse { FileName: string; Arguments: string; @@ -588,10 +596,7 @@ export namespace V2 { export interface DebugTestStopResponse { } - export interface GetTestStartInfoRequest extends Request { - MethodName: string; - TestFrameworkName: string; - TargetFrameworkVersion: string; + export interface GetTestStartInfoRequest extends SingleTestRequest { } export interface GetTestStartInfoResponse { @@ -600,16 +605,10 @@ export namespace V2 { WorkingDirectory: string; } - export interface RunTestRequest extends Request { - MethodName: string; - TestFrameworkName: string; - TargetFrameworkVersion: string; + export interface RunTestRequest extends SingleTestRequest { } - export interface RunTestsInClassRequest extends Request { - MethodNames: string[]; - TestFrameworkName: string; - TargetFrameworkVersion: string; + export interface RunTestsInClassRequest extends MultiTestRequest { } export module TestOutcomes {