Files
openclaw/scripts/test-planner/vitest-args.mjs
Tak Hoffman ab37d8810d test: introduce planner-backed test runner, stabilize local builds (#54650)
* 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
2026-03-25 18:11:58 -05:00

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;