Skip to content
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
9 changes: 6 additions & 3 deletions src/client/testing/common/managers/baseTestManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ export abstract class BaseTestManager implements ITestManager {
private createDiagnostics(message: ITestNonPassingMessage): Diagnostic {
const stackStart = message.locationStack[0];
const diagMsg = this.getDiagnosticMessage(message);
const severity = this.unitTestDiagnosticService.getSeverity(message.severity)!;
const severity = this.unitTestDiagnosticService.getSeverity(message.severity);
const diagnostic = new Diagnostic(stackStart.location.range, diagMsg, severity);
diagnostic.code = message.code;
diagnostic.source = message.provider;
Expand All @@ -552,8 +552,11 @@ export abstract class BaseTestManager implements ITestManager {
}

private getDiagnosticMessage(message: ITestNonPassingMessage): string {
const diagPrefix = this.unitTestDiagnosticService.getMessagePrefix(message.status);
const diagMsg = message.message ? message.message.split('\n')[0] : '';
return `${diagPrefix ? `${diagPrefix}: ` : 'Ok'}${diagMsg}`;
const diagPrefix = this.unitTestDiagnosticService.getMessagePrefix(message.status);
if (diagMsg === '') {
return diagPrefix;
}
return `${diagPrefix}: ${diagMsg}`;
}
}
26 changes: 19 additions & 7 deletions src/client/testing/common/services/unitTestDiagnosticService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,27 @@ export class UnitTestDiagnosticService implements ITestDiagnosticService {
this.MessagePrefixes.set(DiagnosticMessageType.Skipped, localize.Testing.testSkippedDiagnosticMessage());
}

public getMessagePrefix(status: NonPassingTestStatus): string | undefined {
public getMessagePrefix(status: NonPassingTestStatus): string {
// If `msgType` ends up `undefined` then it means we've added
// a new failing test status but forgot to support it here
// (or it means elsewhere we asserted a bogus value, like
// `undefined`). The same goes for `msgPrefix`.
const msgType = this.MessageTypes.get(status);
// If `msgType` is `undefined` then it means we've added a new
// failing test status but forgot to support it here (or it means
// elsewhere we asserted a bogus value, like `undefined`).
return msgType !== undefined ? this.MessagePrefixes.get(msgType) : undefined;
if (msgType === undefined) {
throw Error(`unsupported status (${status})`);
}
const msgPrefix = this.MessagePrefixes.get(msgType);
if (msgType === undefined || msgPrefix === undefined) {
throw Error(`unsupported message type (${msgType})`);
}
return msgPrefix;
}

public getSeverity(unitTestSeverity: NonPassingTestSeverity): DiagnosticSeverity | undefined {
return this.MessageSeverities.get(unitTestSeverity);
public getSeverity(unitTestSeverity: NonPassingTestSeverity): DiagnosticSeverity {
const severity = this.MessageSeverities.get(unitTestSeverity);
if (severity === undefined) {
throw Error(`unsupported severity (${unitTestSeverity})`);
}
return severity;
}
}
4 changes: 2 additions & 2 deletions src/client/testing/common/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -522,8 +522,8 @@ export interface ITestsStatusUpdaterService {

export const ITestDiagnosticService = Symbol('ITestDiagnosticService');
export interface ITestDiagnosticService {
getMessagePrefix(status: TestStatus): string | undefined;
getSeverity(unitTestSeverity: PythonTestMessageSeverity): DiagnosticSeverity | undefined;
getMessagePrefix(status: TestStatus): string;
getSeverity(unitTestSeverity: PythonTestMessageSeverity): DiagnosticSeverity;
}

export const IArgumentsService = Symbol('IArgumentsService');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ suite('UnitTestDiagnosticService: unittest', () => {
let expectedPrefix: string;
let expectedSeverity: DiagnosticSeverity;
suiteSetup(() => {
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Error)!;
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Error)!;
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Error);
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Error);
expectedPrefix = localize.Testing.testErrorDiagnosticMessage();
expectedSeverity = DiagnosticSeverity.Error;
});
Expand All @@ -39,8 +39,8 @@ suite('UnitTestDiagnosticService: unittest', () => {
let expectedPrefix: string;
let expectedSeverity: DiagnosticSeverity;
suiteSetup(() => {
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Fail)!;
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Failure)!;
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Fail);
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Failure);
expectedPrefix = localize.Testing.testFailDiagnosticMessage();
expectedSeverity = DiagnosticSeverity.Error;
});
Expand All @@ -57,8 +57,8 @@ suite('UnitTestDiagnosticService: unittest', () => {
let expectedPrefix: string;
let expectedSeverity: DiagnosticSeverity;
suiteSetup(() => {
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Skipped)!;
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Skip)!;
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Skipped);
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Skip);
expectedPrefix = localize.Testing.testSkippedDiagnosticMessage();
expectedSeverity = DiagnosticSeverity.Information;
});
Expand Down