2024-01-01 14:58:21 -05:00
|
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2024-02-12 21:05:10 -05:00
|
|
|
import { partition } from "@std/collections/partition.ts";
|
|
|
|
import { join } from "@std/path/mod.ts";
|
|
|
|
import * as JSONC from "@std/jsonc/mod.ts";
|
2023-02-17 09:58:52 -05:00
|
|
|
/**
|
|
|
|
* The test suite matches the folders inside the `test` folder inside the
|
|
|
|
* node repo
|
|
|
|
*
|
|
|
|
* Each test suite contains a list of files (which can be paths
|
|
|
|
* or a regex to match) that will be pulled from the node repo
|
|
|
|
*/
|
|
|
|
type TestSuites = Record<string, string[]>;
|
|
|
|
|
|
|
|
interface Config {
|
|
|
|
nodeVersion: string;
|
|
|
|
/** Ignored files won't regenerated by the update script */
|
|
|
|
ignore: TestSuites;
|
|
|
|
/**
|
|
|
|
* The files that will be run by the test suite
|
|
|
|
*
|
|
|
|
* The files to be generated with the update script must be listed here as well,
|
|
|
|
* but they won't be regenerated if they are listed in the `ignore` configuration
|
|
|
|
*/
|
|
|
|
tests: TestSuites;
|
|
|
|
windowsIgnore: TestSuites;
|
|
|
|
darwinIgnore: TestSuites;
|
|
|
|
}
|
|
|
|
|
2023-04-18 18:32:21 -04:00
|
|
|
export const config: Config = JSONC.parse(
|
|
|
|
await Deno.readTextFile(new URL("./config.jsonc", import.meta.url)),
|
|
|
|
) as unknown as Config;
|
2023-02-17 09:58:52 -05:00
|
|
|
|
|
|
|
export const ignoreList = Object.entries(config.ignore).reduce(
|
|
|
|
(total: RegExp[], [suite, paths]) => {
|
|
|
|
paths.forEach((path) => total.push(new RegExp(join(suite, path))));
|
|
|
|
return total;
|
|
|
|
},
|
2023-03-21 09:38:07 -04:00
|
|
|
[/package\.json/],
|
2023-02-17 09:58:52 -05:00
|
|
|
);
|
|
|
|
|
|
|
|
export function getPathsFromTestSuites(suites: TestSuites): string[] {
|
|
|
|
const testPaths: string[] = [];
|
|
|
|
for (const [dir, paths] of Object.entries(suites)) {
|
|
|
|
if (
|
|
|
|
["parallel", "internet", "pummel", "sequential", "pseudo-tty"].includes(
|
|
|
|
dir,
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
for (const path of paths) {
|
|
|
|
testPaths.push(join(dir, path));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return testPaths;
|
|
|
|
}
|
2023-03-14 03:56:06 -04:00
|
|
|
|
2023-04-14 18:50:58 -04:00
|
|
|
const PARALLEL_PATTERN = /^parallel[\/\\]/;
|
2023-03-14 03:56:06 -04:00
|
|
|
|
|
|
|
export function partitionParallelTestPaths(
|
|
|
|
testPaths: string[],
|
|
|
|
): { parallel: string[]; sequential: string[] } {
|
|
|
|
const partitions = partition(testPaths, (p) => !!p.match(PARALLEL_PATTERN));
|
|
|
|
return { parallel: partitions[0], sequential: partitions[1] };
|
|
|
|
}
|