From d14c7b4114e3eb7308eba7ef04940e765f701f20 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Wed, 28 Feb 2024 10:47:29 +0100 Subject: [PATCH] Show test results for tests with warnings --- extensions/ql-vscode/src/codeql-cli/cli.ts | 14 ++++-- .../src/query-testing/test-manager.ts | 48 ++++++++++++------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/extensions/ql-vscode/src/codeql-cli/cli.ts b/extensions/ql-vscode/src/codeql-cli/cli.ts index fd93fd79a..7c0b75ae7 100644 --- a/extensions/ql-vscode/src/codeql-cli/cli.ts +++ b/extensions/ql-vscode/src/codeql-cli/cli.ts @@ -156,9 +156,17 @@ type ResolvedQueries = string[]; type ResolvedTests = string[]; /** - * A compilation message for a test message (either an error or a warning) + * The severity of a compilation message for a test message. */ -interface CompilationMessage { +export enum CompilationMessageSeverity { + Error = "ERROR", + Warning = "WARNING", +} + +/** + * A compilation message for a test message (either an error or a warning). + */ +export interface CompilationMessage { /** * The text of the message */ @@ -170,7 +178,7 @@ interface CompilationMessage { /** * The severity of the message */ - severity: number; + severity: CompilationMessageSeverity; } /** diff --git a/extensions/ql-vscode/src/query-testing/test-manager.ts b/extensions/ql-vscode/src/query-testing/test-manager.ts index ff1a91d88..b7eb7139d 100644 --- a/extensions/ql-vscode/src/query-testing/test-manager.ts +++ b/extensions/ql-vscode/src/query-testing/test-manager.ts @@ -21,7 +21,8 @@ import { } from "vscode"; import { DisposableObject } from "../common/disposable-object"; import { QLTestDiscovery } from "./qltest-discovery"; -import type { CodeQLCliServer } from "../codeql-cli/cli"; +import type { CodeQLCliServer, CompilationMessage } from "../codeql-cli/cli"; +import { CompilationMessageSeverity } from "../codeql-cli/cli"; import { getErrorMessage } from "../common/helpers-pure"; import type { BaseLogger, LogOptions } from "../common/logging"; import type { TestRunner } from "./test-runner"; @@ -66,6 +67,23 @@ function changeExtension(p: string, ext: string): string { return p.slice(0, -extname(p).length) + ext; } +function compilationMessageToTestMessage( + compilationMessage: CompilationMessage, +): TestMessage { + const location = new Location( + Uri.file(compilationMessage.position.fileName), + new Range( + compilationMessage.position.line - 1, + compilationMessage.position.column - 1, + compilationMessage.position.endLine - 1, + compilationMessage.position.endColumn - 1, + ), + ); + const testMessage = new TestMessage(compilationMessage.message); + testMessage.location = location; + return testMessage; +} + /** * Returns the complete text content of the specified file. If there is an error reading the file, * an error message is added to `testMessages` and this function returns undefined. @@ -398,23 +416,15 @@ export class TestManager extends DisposableObject { ); } } - if (event.messages?.length > 0) { + const errorMessages = event.messages.filter( + (m) => m.severity === CompilationMessageSeverity.Error, + ); + if (errorMessages.length > 0) { // The test didn't make it far enough to produce results. Transform any error messages // into `TestMessage`s and report the test as "errored". - const testMessages = event.messages.map((m) => { - const location = new Location( - Uri.file(m.position.fileName), - new Range( - m.position.line - 1, - m.position.column - 1, - m.position.endLine - 1, - m.position.endColumn - 1, - ), - ); - const testMessage = new TestMessage(m.message); - testMessage.location = location; - return testMessage; - }); + const testMessages = event.messages.map( + compilationMessageToTestMessage, + ); testRun.errored(testItem, testMessages, duration); } else { // Results didn't match expectations. Report the test as "failed". @@ -423,6 +433,12 @@ export class TestManager extends DisposableObject { // here. Any failed test needs at least one message. testMessages.push(new TestMessage("Test failed")); } + + // Add any warnings produced by the test to the test messages. + testMessages.push( + ...event.messages.map(compilationMessageToTestMessage), + ); + testRun.failed(testItem, testMessages, duration); } }