mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 09:21:35 +07:00
* test: stabilize ci and local vitest workers * test: introduce planner-backed test runner * test: address planner review follow-ups * test: derive planner budgets from host capabilities * test: restore planner filter helper import * test: align planner explain output with execution * test: keep low profile as serial alias * test: restrict explicit planner file targets * test: clean planner exits and pnpm launch * test: tighten wrapper flag validation * ci: gate heavy fanout on check * test: key shard assignments by unit identity * ci(bun): shard vitest lanes further * test: restore ci overlap and stabilize planner tests * test: relax planner output worker assertions * test: reset plugin runtime state in optional tools suite * ci: split macos node and swift jobs * test: honor no-isolate top-level concurrency budgets * ci: fix macos swift format lint * test: cap max-profile top-level concurrency * ci: shard macos node checks * ci: use four macos node shards * test: normalize explain targets before classification
75 lines
1.6 KiB
JavaScript
75 lines
1.6 KiB
JavaScript
export const OPTION_TAKES_VALUE = new Set([
|
|
"-t",
|
|
"-c",
|
|
"-r",
|
|
"--testNamePattern",
|
|
"--config",
|
|
"--root",
|
|
"--dir",
|
|
"--reporter",
|
|
"--outputFile",
|
|
"--pool",
|
|
"--execArgv",
|
|
"--vmMemoryLimit",
|
|
"--maxWorkers",
|
|
"--environment",
|
|
"--shard",
|
|
"--changed",
|
|
"--sequence",
|
|
"--inspect",
|
|
"--inspectBrk",
|
|
"--testTimeout",
|
|
"--hookTimeout",
|
|
"--bail",
|
|
"--retry",
|
|
"--diff",
|
|
"--exclude",
|
|
"--project",
|
|
"--slowTestThreshold",
|
|
"--teardownTimeout",
|
|
"--attachmentsDir",
|
|
"--mode",
|
|
"--api",
|
|
"--browser",
|
|
"--maxConcurrency",
|
|
"--mergeReports",
|
|
"--configLoader",
|
|
"--experimental",
|
|
]);
|
|
|
|
export const SINGLE_RUN_ONLY_FLAGS = new Set(["--coverage", "--outputFile", "--mergeReports"]);
|
|
|
|
export const parsePassthroughArgs = (args = []) => {
|
|
const fileFilters = [];
|
|
const optionArgs = [];
|
|
let consumeNextAsOptionValue = false;
|
|
|
|
for (const arg of args) {
|
|
if (consumeNextAsOptionValue) {
|
|
optionArgs.push(arg);
|
|
consumeNextAsOptionValue = false;
|
|
continue;
|
|
}
|
|
if (arg === "--") {
|
|
optionArgs.push(arg);
|
|
continue;
|
|
}
|
|
if (typeof arg === "string" && arg.startsWith("-")) {
|
|
optionArgs.push(arg);
|
|
consumeNextAsOptionValue = !arg.includes("=") && OPTION_TAKES_VALUE.has(arg);
|
|
continue;
|
|
}
|
|
fileFilters.push(arg);
|
|
}
|
|
|
|
return { fileFilters, optionArgs };
|
|
};
|
|
|
|
export const countExplicitEntryFilters = (entryArgs) => {
|
|
const { fileFilters } = parsePassthroughArgs(entryArgs.slice(2));
|
|
return fileFilters.length > 0 ? fileFilters.length : null;
|
|
};
|
|
|
|
export const getExplicitEntryFilters = (entryArgs) =>
|
|
parsePassthroughArgs(entryArgs.slice(2)).fileFilters;
|