Files
2026-07-13 13:39:12 +08:00

44 lines
1.5 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import { smartTruncate } from "../../../open-sse/services/compression/engines/rtk/smartTruncate.ts";
describe("RTK smart truncate", () => {
it("leaves short text unchanged", () => {
const result = smartTruncate("short\ntext", { maxLines: 10 });
assert.equal(result.truncated, false);
assert.equal(result.text, "short\ntext");
});
it("preserves head, tail and priority lines", () => {
const text = Array.from({ length: 20 }, (_, index) =>
index === 10 ? "ERROR important failure" : `line ${index}`
).join("\n");
const result = smartTruncate(text, {
maxLines: 8,
preserveHead: 2,
preserveTail: 2,
priorityPatterns: [/ERROR/],
});
assert.equal(result.truncated, true);
assert.ok(result.text.includes("line 0"));
assert.ok(result.text.includes("ERROR important failure"));
assert.ok(result.text.includes("line 19"));
assert.ok(result.text.includes("[rtk:truncated"));
});
it("respects maxChars as alternate limit", () => {
const result = smartTruncate("x".repeat(500), { maxChars: 80 });
assert.equal(result.truncated, true);
assert.ok(result.text.length <= 80);
});
it("respects maxChars when the marker consumes the full char budget", () => {
const result = smartTruncate("x".repeat(500), { maxChars: 10 });
assert.equal(result.truncated, true);
assert.ok(result.text.length <= 10);
});
});