Simplify custom Jest test runner
The custom Jest test runner was originally written to install the required extensions for the CLI integration tests. This is no longer necessary as of https://github.com/github/vscode-codeql/pull/3232, so we can remove all code that deals with downloading VS Code and installing extensions. The download of VS Code will now be handled by the base `VSCodeTestRunner`.
This commit is contained in:
Родитель
b67efeeacd
Коммит
0534cb7514
|
@ -9,7 +9,7 @@ function ignoreFile(file: string): boolean {
|
|||
containsPath(".storybook", file) ||
|
||||
containsPath(join("src", "stories"), file) ||
|
||||
pathsEqual(
|
||||
join("test", "vscode-tests", "jest-runner-installed-extensions.ts"),
|
||||
join("test", "vscode-tests", "jest-runner-vscode-codeql-cli.ts"),
|
||||
file,
|
||||
) ||
|
||||
basename(file) === "jest.config.ts" ||
|
||||
|
|
|
@ -4,7 +4,7 @@ import baseConfig from "../jest.config.base";
|
|||
|
||||
const config: Config = {
|
||||
...baseConfig,
|
||||
runner: "<rootDir>/../jest-runner-installed-extensions.ts",
|
||||
runner: "<rootDir>/../jest-runner-vscode-codeql-cli.ts",
|
||||
setupFilesAfterEnv: ["<rootDir>/jest.setup.ts"],
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import baseConfig from "../jest.config.base";
|
|||
|
||||
const config: Config = {
|
||||
...baseConfig,
|
||||
runner: "<rootDir>/../jest-runner-installed-extensions.ts",
|
||||
runner: "<rootDir>/../jest-runner-vscode-codeql-cli.ts",
|
||||
setupFilesAfterEnv: ["<rootDir>/jest.setup.ts"],
|
||||
// CLI integration tests call into the CLI and execute queries, so these are expected to take a lot longer
|
||||
// than the default 5 seconds.
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
import { spawnSync } from "child_process";
|
||||
import { dirname } from "path";
|
||||
|
||||
import type * as JestRunner from "jest-runner";
|
||||
import type { RunnerOptions } from "jest-runner-vscode";
|
||||
import VSCodeTestRunner from "jest-runner-vscode";
|
||||
import { cosmiconfig } from "cosmiconfig";
|
||||
import {
|
||||
downloadAndUnzipVSCode,
|
||||
resolveCliArgsFromVSCodeExecutablePath,
|
||||
} from "@vscode/test-electron";
|
||||
import { ensureCli } from "./ensureCli";
|
||||
|
||||
export default class JestRunnerInstalledExtensions extends VSCodeTestRunner {
|
||||
async runTests(
|
||||
tests: JestRunner.Test[],
|
||||
watcher: JestRunner.TestWatcher,
|
||||
onStart: JestRunner.OnTestStart,
|
||||
onResult: JestRunner.OnTestSuccess,
|
||||
onFailure: JestRunner.OnTestFailure,
|
||||
): Promise<void> {
|
||||
// The CLI integration tests require certain extensions to be installed, which needs to happen before the tests are
|
||||
// actually run. The below code will resolve the path to the VSCode executable, and then use that to install the
|
||||
// required extensions.
|
||||
|
||||
const installedOnVsCodeVersions =
|
||||
new Set<`${RunnerOptions["version"]}-${RunnerOptions["platform"]}`>();
|
||||
|
||||
for (const test of tests) {
|
||||
const testDir = dirname(test.path);
|
||||
|
||||
const options: RunnerOptions =
|
||||
((await cosmiconfig("jest-runner-vscode").search(testDir))
|
||||
?.config as RunnerOptions) ?? {};
|
||||
|
||||
const { version, platform } = options;
|
||||
const versionKey = `${version}-${platform}` as const;
|
||||
|
||||
if (installedOnVsCodeVersions.has(versionKey)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const vscodeExecutablePath = await downloadAndUnzipVSCode(
|
||||
version,
|
||||
platform,
|
||||
);
|
||||
|
||||
console.log(`Installing required extensions for ${vscodeExecutablePath}`);
|
||||
|
||||
const [cli, ...args] =
|
||||
resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath);
|
||||
|
||||
spawnSync(cli, args, {
|
||||
encoding: "utf-8",
|
||||
stdio: "inherit",
|
||||
});
|
||||
|
||||
installedOnVsCodeVersions.add(versionKey);
|
||||
}
|
||||
|
||||
await ensureCli(true);
|
||||
|
||||
return super.runTests(tests, watcher, onStart, onResult, onFailure);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
import type * as JestRunner from "jest-runner";
|
||||
import VSCodeTestRunner from "jest-runner-vscode";
|
||||
import { ensureCli } from "./ensureCli";
|
||||
|
||||
export default class JestRunnerVscodeCodeqlCli extends VSCodeTestRunner {
|
||||
async runTests(
|
||||
tests: JestRunner.Test[],
|
||||
watcher: JestRunner.TestWatcher,
|
||||
onStart: JestRunner.OnTestStart,
|
||||
onResult: JestRunner.OnTestSuccess,
|
||||
onFailure: JestRunner.OnTestFailure,
|
||||
): Promise<void> {
|
||||
// The CLI integration tests require the CLI to be available. We do not want to install the CLI
|
||||
// when VS Code is already running because this will not give any feedback to the test runner. Instead,
|
||||
// we'll download the CLI now and pass the path to the CLI to VS Code.
|
||||
await ensureCli(true);
|
||||
|
||||
return super.runTests(tests, watcher, onStart, onResult, onFailure);
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче