Files
Rune-Spec/tests/core/prompt-builder.test.ts

79 lines
2.5 KiB
TypeScript

import { describe, it, expect } from "bun:test";
import { PromptBuilder } from "../../src/core/prompt-builder";
describe("PromptBuilder", () => {
it("空 builder build 返回空字符串", () => {
const builder = new PromptBuilder();
expect(builder.build()).toBe("");
});
it("单段输出", () => {
const result = new PromptBuilder().head("# 标题").build();
expect(result).toBe("# 标题");
});
it("多段按序渲染", () => {
const result = new PromptBuilder()
.head("# 阶段")
.context("状态信息")
.prompt("核心引导")
.guide("操作指令")
.warn("警告信息")
.build();
const headPos = result.indexOf("# 阶段");
const contextPos = result.indexOf("状态信息");
const promptPos = result.indexOf("核心引导");
const guidePos = result.indexOf("操作指令");
const warnPos = result.indexOf("警告信息");
expect(headPos).toBeLessThan(contextPos);
expect(contextPos).toBeLessThan(promptPos);
expect(promptPos).toBeLessThan(guidePos);
expect(guidePos).toBeLessThan(warnPos);
});
it("空段跳过", () => {
const result = new PromptBuilder().head("# 标题").prompt("内容").guide("指引").build();
expect(result).toContain("# 标题");
expect(result).toContain("内容");
expect(result).toContain("指引");
});
it("同 kind 多次追加拼接", () => {
const result = new PromptBuilder()
.head("# 阶段")
.context("信息一")
.context("信息二")
.prompt("prompt")
.build();
expect(result).toContain("信息一\n\n信息二");
});
it("head 重复设值覆盖", () => {
const result = new PromptBuilder().head("# 旧标题").head("# 新标题").build();
expect(result).toBe("# 新标题");
expect(result).not.toContain("旧标题");
});
it("prompt 重复设值覆盖", () => {
const result = new PromptBuilder().prompt("旧 prompt").prompt("新 prompt").build();
expect(result).toContain("新 prompt");
expect(result).not.toContain("旧 prompt");
});
it("空字符串段被跳过", () => {
const result = new PromptBuilder().head("# 标题").context("").prompt("内容").build();
expect(result).toBe("# 标题\n---\n内容");
});
it("链式调用返回 this", () => {
const builder = new PromptBuilder();
expect(builder.head("x")).toBe(builder);
expect(builder.context("x")).toBe(builder);
expect(builder.prompt("x")).toBe(builder);
expect(builder.guide("x")).toBe(builder);
expect(builder.warn("x")).toBe(builder);
});
});