Skip to content

Commit df3d6c7

Browse files
author
Eric Snow
authored
Fix the "Problem" messages for pytest failures when debugging. (#15434)
fixes #14866 In #14311 we worked around a bug in a way that caused the strange message reported in #14866 (pytest with debugger). This change fixes that one without regressing the previous fix.
1 parent ddf3b3f commit df3d6c7

File tree

4 files changed

+33
-18
lines changed

4 files changed

+33
-18
lines changed

src/client/testing/common/managers/baseTestManager.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ export abstract class BaseTestManager implements ITestManager {
538538
private createDiagnostics(message: ITestNonPassingMessage): Diagnostic {
539539
const stackStart = message.locationStack[0];
540540
const diagMsg = this.getDiagnosticMessage(message);
541-
const severity = this.unitTestDiagnosticService.getSeverity(message.severity)!;
541+
const severity = this.unitTestDiagnosticService.getSeverity(message.severity);
542542
const diagnostic = new Diagnostic(stackStart.location.range, diagMsg, severity);
543543
diagnostic.code = message.code;
544544
diagnostic.source = message.provider;
@@ -552,8 +552,11 @@ export abstract class BaseTestManager implements ITestManager {
552552
}
553553

554554
private getDiagnosticMessage(message: ITestNonPassingMessage): string {
555-
const diagPrefix = this.unitTestDiagnosticService.getMessagePrefix(message.status);
556555
const diagMsg = message.message ? message.message.split('\n')[0] : '';
557-
return `${diagPrefix ? `${diagPrefix}: ` : 'Ok'}${diagMsg}`;
556+
const diagPrefix = this.unitTestDiagnosticService.getMessagePrefix(message.status);
557+
if (diagMsg === '') {
558+
return diagPrefix;
559+
}
560+
return `${diagPrefix}: ${diagMsg}`;
558561
}
559562
}

src/client/testing/common/services/unitTestDiagnosticService.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,27 @@ export class UnitTestDiagnosticService implements ITestDiagnosticService {
3636
this.MessagePrefixes.set(DiagnosticMessageType.Skipped, localize.Testing.testSkippedDiagnosticMessage());
3737
}
3838

39-
public getMessagePrefix(status: NonPassingTestStatus): string | undefined {
39+
public getMessagePrefix(status: NonPassingTestStatus): string {
40+
// If `msgType` ends up `undefined` then it means we've added
41+
// a new failing test status but forgot to support it here
42+
// (or it means elsewhere we asserted a bogus value, like
43+
// `undefined`). The same goes for `msgPrefix`.
4044
const msgType = this.MessageTypes.get(status);
41-
// If `msgType` is `undefined` then it means we've added a new
42-
// failing test status but forgot to support it here (or it means
43-
// elsewhere we asserted a bogus value, like `undefined`).
44-
return msgType !== undefined ? this.MessagePrefixes.get(msgType) : undefined;
45+
if (msgType === undefined) {
46+
throw Error(`unsupported status (${status})`);
47+
}
48+
const msgPrefix = this.MessagePrefixes.get(msgType);
49+
if (msgType === undefined || msgPrefix === undefined) {
50+
throw Error(`unsupported message type (${msgType})`);
51+
}
52+
return msgPrefix;
4553
}
4654

47-
public getSeverity(unitTestSeverity: NonPassingTestSeverity): DiagnosticSeverity | undefined {
48-
return this.MessageSeverities.get(unitTestSeverity);
55+
public getSeverity(unitTestSeverity: NonPassingTestSeverity): DiagnosticSeverity {
56+
const severity = this.MessageSeverities.get(unitTestSeverity);
57+
if (severity === undefined) {
58+
throw Error(`unsupported severity (${unitTestSeverity})`);
59+
}
60+
return severity;
4961
}
5062
}

src/client/testing/common/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,8 +522,8 @@ export interface ITestsStatusUpdaterService {
522522

523523
export const ITestDiagnosticService = Symbol('ITestDiagnosticService');
524524
export interface ITestDiagnosticService {
525-
getMessagePrefix(status: TestStatus): string | undefined;
526-
getSeverity(unitTestSeverity: PythonTestMessageSeverity): DiagnosticSeverity | undefined;
525+
getMessagePrefix(status: TestStatus): string;
526+
getSeverity(unitTestSeverity: PythonTestMessageSeverity): DiagnosticSeverity;
527527
}
528528

529529
export const IArgumentsService = Symbol('IArgumentsService');

src/test/testing/unittest/unittest.diagnosticService.unit.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ suite('UnitTestDiagnosticService: unittest', () => {
2121
let expectedPrefix: string;
2222
let expectedSeverity: DiagnosticSeverity;
2323
suiteSetup(() => {
24-
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Error)!;
25-
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Error)!;
24+
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Error);
25+
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Error);
2626
expectedPrefix = localize.Testing.testErrorDiagnosticMessage();
2727
expectedSeverity = DiagnosticSeverity.Error;
2828
});
@@ -39,8 +39,8 @@ suite('UnitTestDiagnosticService: unittest', () => {
3939
let expectedPrefix: string;
4040
let expectedSeverity: DiagnosticSeverity;
4141
suiteSetup(() => {
42-
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Fail)!;
43-
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Failure)!;
42+
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Fail);
43+
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Failure);
4444
expectedPrefix = localize.Testing.testFailDiagnosticMessage();
4545
expectedSeverity = DiagnosticSeverity.Error;
4646
});
@@ -57,8 +57,8 @@ suite('UnitTestDiagnosticService: unittest', () => {
5757
let expectedPrefix: string;
5858
let expectedSeverity: DiagnosticSeverity;
5959
suiteSetup(() => {
60-
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Skipped)!;
61-
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Skip)!;
60+
actualPrefix = diagnosticService.getMessagePrefix(TestStatus.Skipped);
61+
actualSeverity = diagnosticService.getSeverity(PythonTestMessageSeverity.Skip);
6262
expectedPrefix = localize.Testing.testSkippedDiagnosticMessage();
6363
expectedSeverity = DiagnosticSeverity.Information;
6464
});

0 commit comments

Comments
 (0)