import { expect, test } from "vitest" import { Prompt, emptyLine, orderedListItem, scopeContent, text, unorderedListItem, } from "#Source/aio/index.ts" test("text creates a plain text prompt block", () => { expect(text("hello")).toEqual({ type: "text", content: "hello", }) }) test("emptyLine creates an empty-line prompt block", () => { expect(emptyLine()).toEqual({ type: "empty-line", }) }) test("scopeContent wraps content with triple-quote boundaries", () => { expect(scopeContent("context")).toEqual({ type: "scope-content", content: '"""\ncontext\n"""', }) }) test("orderedListItem creates an ordered-list prompt block", () => { expect(orderedListItem("first")).toEqual({ type: "ordered-list-item", content: "first", }) }) test("unorderedListItem creates an unordered-list prompt block", () => { expect(unorderedListItem("first")).toEqual({ type: "unordered-list-item", content: "first", }) }) test("Prompt.addBlock appends a block produced by helpers and returns the same instance", async () => { const prompt = new Prompt({}) expect(prompt.addBlock((helpers) => helpers.text("from-helper"))).toBe(prompt) await expect(prompt.getPromptInString()).resolves.toBe("from-helper") }) test("Prompt.addText appends a text block", async () => { const prompt = new Prompt({}) expect(prompt.addText("alpha")).toBe(prompt) await expect(prompt.getPromptInString()).resolves.toBe("alpha") }) test("Prompt.addEmptyLine appends an empty line block", async () => { const prompt = new Prompt({}) expect(prompt.addEmptyLine()).toBe(prompt) await expect(prompt.getPromptInString()).resolves.toBe("\r\n") }) test("Prompt.addScopeContent appends a scoped content block", async () => { const prompt = new Prompt({}) expect(prompt.addScopeContent("body")).toBe(prompt) await expect(prompt.getPromptInString()).resolves.toBe('"""\nbody\n"""') }) test("Prompt.addOrderedListItem appends an ordered list block", async () => { const prompt = new Prompt({}) expect(prompt.addOrderedListItem("step")).toBe(prompt) await expect(prompt.getPromptInString()).resolves.toBe("1. step") }) test("Prompt.addUnorderedListItem appends an unordered list block", async () => { const prompt = new Prompt({}) expect(prompt.addUnorderedListItem("item")).toBe(prompt) await expect(prompt.getPromptInString()).resolves.toBe("- item") }) test("Prompt.getPromptInString renders prompt blocks with list numbering and resets between block groups", async () => { const prompt = new Prompt({}) prompt .addText("Intro") .addOrderedListItem("First") .addOrderedListItem("Second") .addText("Break") .addOrderedListItem("Reset") .addUnorderedListItem("One") .addUnorderedListItem("Two") .addScopeContent("body") await expect(prompt.getPromptInString()).resolves.toBe( [ "Intro", "1. First", "2. Second", "Break", "1. Reset", "- One", "- Two", '"""\nbody\n"""', ].join("\r\n"), ) })