返回 DeepSeek-Reasonix
windows-pr-contract-tests.mjs
根目录 / scripts / windows-pr-contract-tests.mjs
1 import { resolve } from "node:path";
2 import { fileURLToPath } from "node:url";
3 import { runGoTest } from "./go-test-groups.mjs";
4
5 export const windowsPRContractGroups = [
6 { package: "./internal/config", tests: ["TestConfigJunctionAccessAndLockNames",
7 "TestCredentialAccessRepairsLegacyDenyThroughLinkedHome", "TestCredentialSaveResetsDenyWithoutSandboxRecord"] },
8 {
9 package: "./internal/tool/builtin",
10 tests: [
11 "TestBashPowerShellExecuteDetailedContract",
12 "TestBashPowerShell51PreflightRejectsAndAndDetailed",
13 "TestBashPowerShellOutputIsUTF8",
14 "TestBashPowerShellSurfacesNonZeroExit",
15 "TestBashPowerShellRejectsChaining",
16 "TestBashSharesSessionTempAcrossCalls",
17 "TestWorkspacePassesBashTimeout",
18 "TestBashSchemaUnchangedWithSessionTemp",
19 "TestBashUnsupportedOSSandboxUsesToolLayerPermissionBoundary",
20 "TestBashPersistentWindowsUnicodeAndState",
21 ],
22 },
23 { package: "./internal/sandbox", tests: ["TestOSSandboxSupportedPerPlatform"] },
24 {
25 package: "./internal/acp",
26 tests: ["TestE2EApprovalRoundTrip", "TestE2ECancelMidTurn"],
27 },
28 {
29 package: "./internal/bot",
30 tests: [
31 "TestBotGatewayStopWaitsForDispatchHandler",
32 "TestBotGatewayStopWaitsForTurn",
33 "TestBotGatewayStopBeforeTurnCancelPublication",
34 ],
35 },
36 ];
37
38 export function windowsPRContractArgs(group, { fullBuiltin = false } = {}) {
39 if (fullBuiltin && group.package === "./internal/tool/builtin") {
40 return ["test", "-timeout=5m", group.package];
41 }
42 return ["test", "-timeout=3m", "-run", `^(?:${group.tests.join("|")})$`, group.package];
43 }
44
45 function main() {
46 for (const group of windowsPRContractGroups) {
47 const args = windowsPRContractArgs(group, { fullBuiltin: process.env.WINDOWS_BUILTIN_FULL === "true" });
48 const status = runGoTest(`Windows PR contract ${group.package}`, [group.package], args);
49 if (status !== 0) return status;
50 }
51 return 0;
52 }
53
54 if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
55 process.exitCode = main();
56 }
57
57 lines Plain Text