44 lines
1.5 KiB
TypeScript
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);
|
|
});
|
|
});
|