| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { describe, expect, test } from "bun:test";
- import { insertBlockAfterToolResults } from "../contentArray";
- describe("insertBlockAfterToolResults", () => {
- test("inserts after last tool_result", () => {
- const content: any[] = [
- { type: "tool_result", content: "r1" },
- { type: "text", text: "hello" },
- ];
- insertBlockAfterToolResults(content, { type: "text", text: "inserted" });
- expect(content[1]).toEqual({ type: "text", text: "inserted" });
- expect(content).toHaveLength(3);
- });
- test("inserts after last of multiple tool_results", () => {
- const content: any[] = [
- { type: "tool_result", content: "r1" },
- { type: "tool_result", content: "r2" },
- { type: "text", text: "end" },
- ];
- insertBlockAfterToolResults(content, { type: "text", text: "new" });
- expect(content[2]).toEqual({ type: "text", text: "new" });
- });
- test("appends continuation when inserted block would be last", () => {
- const content: any[] = [{ type: "tool_result", content: "r1" }];
- insertBlockAfterToolResults(content, { type: "text", text: "new" });
- expect(content).toHaveLength(3); // original + inserted + continuation
- expect(content[2]).toEqual({ type: "text", text: "." });
- });
- test("inserts before last block when no tool_results", () => {
- const content: any[] = [
- { type: "text", text: "a" },
- { type: "text", text: "b" },
- ];
- insertBlockAfterToolResults(content, { type: "text", text: "new" });
- expect(content[1]).toEqual({ type: "text", text: "new" });
- expect(content).toHaveLength(3);
- });
- test("handles empty array", () => {
- const content: any[] = [];
- insertBlockAfterToolResults(content, { type: "text", text: "new" });
- expect(content).toHaveLength(1);
- expect(content[0]).toEqual({ type: "text", text: "new" });
- });
- test("handles single element array with no tool_result", () => {
- const content: any[] = [{ type: "text", text: "only" }];
- insertBlockAfterToolResults(content, { type: "text", text: "new" });
- expect(content[0]).toEqual({ type: "text", text: "new" });
- expect(content[1]).toEqual({ type: "text", text: "only" });
- });
- test("inserts after last tool_result with mixed interleaving", () => {
- const content: any[] = [
- { type: "tool_result", content: "r1" },
- { type: "text", text: "mid1" },
- { type: "tool_result", content: "r2" },
- { type: "text", text: "mid2" },
- { type: "tool_result", content: "r3" },
- { type: "text", text: "end" },
- ];
- insertBlockAfterToolResults(content, { type: "text", text: "inserted" });
- // Inserted after r3 (index 4), so at index 5
- expect(content[5]).toEqual({ type: "text", text: "inserted" });
- // Original end text should shift to index 6
- expect(content[6]).toEqual({ type: "text", text: "end" });
- expect(content).toHaveLength(7);
- });
- });
|