Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to use custom runsettings for tests #3573

Merged
merged 2 commits into from
Mar 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 23 additions & 10 deletions src/features/dotnetTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<protocol.V2.DotNetTestResult[]> {
private async _runTest(fileName: string, testMethod: string, runSettings: string, testFrameworkName: string, targetFrameworkVersion: string): Promise<protocol.V2.DotNetTestResult[]> {
const request: protocol.V2.RunTestRequest = {
FileName: fileName,
MethodName: testMethod,
RunSettings: runSettings,
TestFrameworkName: testFrameworkName,
TargetFrameworkVersion: targetFrameworkVersion
};
Expand Down Expand Up @@ -163,9 +164,10 @@ export default class TestManager extends AbstractProvider {
});

let targetFrameworkVersion = await this._recordRunAndGetFrameworkVersion(fileName, testFrameworkName);
let runSettings = vscode.workspace.getConfiguration('omnisharp').get<string>('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) {
Expand All @@ -186,9 +188,10 @@ export default class TestManager extends AbstractProvider {
});

let targetFrameworkVersion = await this._recordRunAndGetFrameworkVersion(fileName, testFrameworkName);
let runSettings = vscode.workspace.getConfiguration('omnisharp').get<string>('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) {
Expand All @@ -199,9 +202,10 @@ export default class TestManager extends AbstractProvider {
}
}

private async _runTestsInClass(fileName: string, testFrameworkName: string, targetFrameworkVersion: string, methodsToRun: string[]): Promise<protocol.V2.DotNetTestResult[]> {
private async _runTestsInClass(fileName: string, runSettings: string, testFrameworkName: string, targetFrameworkVersion: string, methodsToRun: string[]): Promise<protocol.V2.DotNetTestResult[]> {
const request: protocol.V2.RunTestsInClassRequest = {
FileName: fileName,
RunSettings: runSettings,
TestFrameworkName: testFrameworkName,
TargetFrameworkVersion: targetFrameworkVersion,
MethodNames: methodsToRun
Expand Down Expand Up @@ -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<LaunchConfiguration> {
Expand All @@ -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
};
Expand All @@ -270,7 +276,7 @@ export default class TestManager extends AbstractProvider {
}
}

private async _getLaunchConfigurationForLegacy(fileName: string, testMethod: string, testFrameworkName: string, targetFrameworkVersion: string): Promise<LaunchConfiguration> {
private async _getLaunchConfigurationForLegacy(fileName: string, testMethod: string, runSettings: string, testFrameworkName: string, targetFrameworkVersion: string): Promise<LaunchConfiguration> {

// Listen for test messages while getting start info.
const listener = this._server.onTestMessage(e => {
Expand All @@ -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
};
Expand All @@ -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<LaunchConfiguration> {
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}`);
Expand Down Expand Up @@ -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<string>('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);
}
Expand All @@ -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<string>('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);
}
Expand All @@ -387,18 +397,20 @@ export default class TestManager extends AbstractProvider {
debugType: string,
fileName: string,
methodsToRun: string[],
runSettings: string,
testFrameworkName: string,
targetFrameworkVersion: string,
debugEventListener: DebugEventListener): Promise<LaunchConfiguration> {
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}`);
}

private async _getLaunchConfigurationForVSTestClass(
fileName: string,
methodsToRun: string[],
runSettings: string,
testFrameworkName: string,
targetFrameworkVersion: string,
debugEventListener: DebugEventListener): Promise<LaunchConfiguration> {
Expand All @@ -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
};
Expand Down
27 changes: 13 additions & 14 deletions src/omnisharp/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -559,18 +559,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;
Expand All @@ -591,10 +599,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 {
Expand All @@ -603,16 +608,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 {
Expand Down