Files
openclaw/src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.streams-soft-chunks-paragraph-preference.e2e.test.ts
2026-02-16 14:59:30 +00:00

47 lines
1.5 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import {
createParagraphChunkedBlockReplyHarness,
emitAssistantTextDeltaAndEnd,
} from "./pi-embedded-subscribe.e2e-harness.js";
describe("subscribeEmbeddedPiSession", () => {
it("streams soft chunks with paragraph preference", () => {
const onBlockReply = vi.fn();
const { emit, subscription } = createParagraphChunkedBlockReplyHarness({
onBlockReply,
chunking: {
minChars: 5,
maxChars: 25,
},
});
const text = "First block line\n\nSecond block line";
emitAssistantTextDeltaAndEnd({ emit, text });
expect(onBlockReply).toHaveBeenCalledTimes(2);
expect(onBlockReply.mock.calls[0][0].text).toBe("First block line");
expect(onBlockReply.mock.calls[1][0].text).toBe("Second block line");
expect(subscription.assistantTexts).toEqual(["First block line", "Second block line"]);
});
it("avoids splitting inside fenced code blocks", () => {
const onBlockReply = vi.fn();
const { emit } = createParagraphChunkedBlockReplyHarness({
onBlockReply,
chunking: {
minChars: 5,
maxChars: 25,
},
});
const text = "Intro\n\n```bash\nline1\nline2\n```\n\nOutro";
emitAssistantTextDeltaAndEnd({ emit, text });
expect(onBlockReply).toHaveBeenCalledTimes(3);
expect(onBlockReply.mock.calls[0][0].text).toBe("Intro");
expect(onBlockReply.mock.calls[1][0].text).toBe("```bash\nline1\nline2\n```");
expect(onBlockReply.mock.calls[2][0].text).toBe("Outro");
});
});