


























@@ -287,6 +287,11 @@ const TOOLING_ISOLATED_VITEST_CONFIG = "test/vitest/vitest.tooling-isolated.conf
287287const TOOLING_VITEST_CONFIG = "test/vitest/vitest.tooling.config.ts";
288288const TOOLING_DOCKER_TEST_TARGET = "test/scripts/docker-build-helper.test.ts";
289289const TOOLING_ISOLATED_TEST_TARGET = "test/scripts/openclaw-e2e-instance.test.ts";
290+const BROAD_TOOLING_SCRIPT_TEST_PATTERNS = new Set([
291+"test/scripts/**/*.test.ts",
292+"test/scripts/*.test.ts",
293+]);
294+const BROAD_TOOLING_SCRIPT_TEST_TARGET_CHUNK_SIZE = 60;
290295const TUI_VITEST_CONFIG = "test/vitest/vitest.tui.config.ts";
291296const TUI_PTY_VITEST_CONFIG = "test/vitest/vitest.tui-pty.config.ts";
292297const UI_VITEST_CONFIG = "test/vitest/vitest.ui.config.ts";
@@ -1465,6 +1470,64 @@ function splitTargetChunks(targets, chunkCount) {
14651470return chunks;
14661471}
146714721473+function listBroadScriptTestTargets(pattern, cwd) {
1474+const root = path.join(cwd, "test/scripts");
1475+if (!fs.existsSync(root)) {
1476+return [];
1477+}
1478+return listRepoFilesRecursive(root, cwd)
1479+.filter((file) => file.endsWith(".test.ts") && path.matchesGlob(file, pattern))
1480+.toSorted((left, right) => left.localeCompare(right));
1481+}
1482+1483+function listBroadToolingScriptTestTargets(pattern, cwd) {
1484+return listBroadScriptTestTargets(pattern, cwd).filter(
1485+(file) => classifyTarget(file, cwd) === "tooling",
1486+);
1487+}
1488+1489+function createBroadToolingScriptPlans({ config, forwardedArgs, includePatterns, watchMode, cwd }) {
1490+if (watchMode || config !== TOOLING_VITEST_CONFIG || !includePatterns) {
1491+return null;
1492+}
1493+const [pattern] = includePatterns;
1494+const targets =
1495+includePatterns.length === 1 && BROAD_TOOLING_SCRIPT_TEST_PATTERNS.has(pattern)
1496+ ? listBroadToolingScriptTestTargets(pattern, cwd)
1497+ : includePatterns.every((target) => target.startsWith("test/scripts/"))
1498+ ? includePatterns
1499+ : [];
1500+if (targets.length <= BROAD_TOOLING_SCRIPT_TEST_TARGET_CHUNK_SIZE) {
1501+return null;
1502+}
1503+const chunkCount = Math.ceil(targets.length / BROAD_TOOLING_SCRIPT_TEST_TARGET_CHUNK_SIZE);
1504+const chunks = splitTargetChunks(targets, chunkCount);
1505+return chunks.length > 0
1506+ ? chunks.map((chunk) => ({
1507+ config,
1508+ forwardedArgs,
1509+includePatterns: chunk,
1510+ watchMode,
1511+}))
1512+ : null;
1513+}
1514+1515+function expandBroadToolingScriptTargets(targetArgs, cwd, watchMode) {
1516+if (watchMode) {
1517+return targetArgs;
1518+}
1519+return uniqueOrdered(
1520+targetArgs.flatMap((targetArg) => {
1521+const pattern = toScopedIncludePattern(targetArg, cwd);
1522+if (!BROAD_TOOLING_SCRIPT_TEST_PATTERNS.has(pattern)) {
1523+return [targetArg];
1524+}
1525+const targets = listBroadScriptTestTargets(pattern, cwd);
1526+return targets.length > 0 ? targets : [targetArg];
1527+}),
1528+);
1529+}
1530+14681531function isExistingPathTarget(arg, cwd) {
14691532return fs.existsSync(path.resolve(cwd, arg));
14701533}
@@ -2755,7 +2818,11 @@ export function buildVitestRunPlans(
27552818const changedTargetArgs =
27562819targetArgs.length === 0 ? resolveChangedTargetArgs(args, cwd, listChangedPaths, options) : null;
27572820const requestedTargetArgs = changedTargetArgs ?? targetArgs;
2758-const activeTargetArgs = expandExplicitSourceTestTargets(requestedTargetArgs, cwd);
2821+const activeTargetArgs = expandBroadToolingScriptTargets(
2822+expandExplicitSourceTestTargets(requestedTargetArgs, cwd),
2823+cwd,
2824+watchMode,
2825+);
27592826const activeForwardedArgs =
27602827changedTargetArgs !== null ? stripChangedArgs(forwardedArgs) : forwardedArgs;
27612828if (changedTargetArgs !== null && activeTargetArgs.length === 0) {
@@ -2964,9 +3031,21 @@ export function buildVitestRunPlans(
29643031}),
29653032);
29663033const scopedTargetArgs = useCliTargetArgs ? uniqueOrdered(grouped) : [];
3034+const forwardedPlanArgs = [...nonTargetArgs, ...scopedTargetArgs];
3035+const broadToolingScriptPlans = createBroadToolingScriptPlans({
3036+ config,
3037+ cwd,
3038+forwardedArgs: forwardedPlanArgs,
3039+ includePatterns,
3040+ watchMode,
3041+});
3042+if (broadToolingScriptPlans) {
3043+plans.push(...broadToolingScriptPlans);
3044+continue;
3045+}
29673046plans.push({
29683047 config,
2969-forwardedArgs: [...nonTargetArgs, ...scopedTargetArgs],
3048+forwardedArgs: forwardedPlanArgs,
29703049 includePatterns,
29713050 watchMode,
29723051});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。