openclaw / src /agents /cli-runner /execute-output-buffer.test.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
e249c6d verified
Raw
History Blame Contribute Delete
1.36 kB
import { describe, expect, it } from "vitest";
import { appendCliOutputTail } from "./execute-output-buffer.js";
const CLI_RUNNER_OUTPUT_TAIL_BYTES = 64 * 1024;
const REPLACEMENT_CHARACTER = String.fromCharCode(0xfffd);
const MULTIBYTE_CHARACTER = String.fromCodePoint(0x1f642);
describe("appendCliOutputTail", () => {
it("keeps large chunk tails UTF-8 safe when truncation starts inside a character", () => {
const chunk = `${"x".repeat(10)}${MULTIBYTE_CHARACTER}${"y".repeat(
CLI_RUNNER_OUTPUT_TAIL_BYTES - 3,
)}`;
const output = appendCliOutputTail("", chunk);
expect(Buffer.byteLength(output)).toBeLessThanOrEqual(CLI_RUNNER_OUTPUT_TAIL_BYTES);
expect(output).not.toContain(REPLACEMENT_CHARACTER);
expect(output).toBe("y".repeat(CLI_RUNNER_OUTPUT_TAIL_BYTES - 3));
});
it("keeps appended tails UTF-8 safe when rolling overflow starts inside a character", () => {
const existingTail = `${"x".repeat(10)}${MULTIBYTE_CHARACTER}${"y".repeat(
CLI_RUNNER_OUTPUT_TAIL_BYTES - 14,
)}`;
const output = appendCliOutputTail(existingTail, "z".repeat(11));
expect(Buffer.byteLength(output)).toBeLessThanOrEqual(CLI_RUNNER_OUTPUT_TAIL_BYTES);
expect(output).not.toContain(REPLACEMENT_CHARACTER);
expect(output).toBe(`${"y".repeat(CLI_RUNNER_OUTPUT_TAIL_BYTES - 14)}${"z".repeat(11)}`);
});
});