fix(scripts): bound control UI i18n process output

This commit is contained in:
Vincent Koc
2026-05-28 16:44:00 +02:00
parent 79e733cc34
commit e707b452c0
4 changed files with 104 additions and 7 deletions

View File

@@ -0,0 +1,40 @@
import process from "node:process";
import { describe, expect, it } from "vitest";
import { appendBoundedProcessOutput, runProcess } from "../../scripts/control-ui-i18n.ts";
describe("control-ui-i18n process runner", () => {
it("keeps a bounded process output tail", () => {
const first = appendBoundedProcessOutput({ text: "", truncatedChars: 0 }, "abcdef", 5);
const second = appendBoundedProcessOutput(first, "ghij", 5);
expect(first).toEqual({ text: "bcdef", truncatedChars: 1 });
expect(second).toEqual({ text: "fghij", truncatedChars: 5 });
});
it("bounds failure diagnostics to the newest output", async () => {
await expect(
runProcess(
process.execPath,
[
"-e",
[
"process.stderr.write('stderr-begin-' + 'x'.repeat(128) + '-stderr-end', () => process.exit(2));",
].join(" "),
],
{ maxOutputChars: 64, rejectOnFailure: true },
),
).rejects.toThrow(/output truncated[\s\S]*stderr-end/u);
});
it("rejects successful commands before returning truncated stdout", async () => {
await expect(
runProcess(
process.execPath,
["-e", "process.stdout.write('x'.repeat(128), () => process.exit(0));"],
{
maxOutputChars: 12,
},
),
).rejects.toThrow("produced more than 12 stdout chars");
});
});

View File

@@ -207,6 +207,13 @@ describe("scripts/test-projects changed-target routing", () => {
});
});
it("routes control UI i18n script changes through its regression test", () => {
expect(resolveChangedTestTargetPlan(["scripts/control-ui-i18n.ts"])).toEqual({
mode: "targets",
targets: ["test/scripts/control-ui-i18n.test.ts"],
});
});
it("routes group visible reply config changes through channel delivery regressions", () => {
expect(
resolveChangedTestTargetPlan([