104 lines
2.7 KiB
TypeScript
104 lines
2.7 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { mergeFileData } from "../src/merge.js";
|
|
|
|
describe("mergeFileData", () => {
|
|
it("collapses multi-line parameters into single-line func signatures", () => {
|
|
const result = mergeFileData(
|
|
"api.ts",
|
|
{ purpose: "API helpers", exports: [], deps: [] },
|
|
{
|
|
exports: ["shouldReinjectForEvent"],
|
|
deps: [],
|
|
classes: [],
|
|
functions: [
|
|
{
|
|
name: "shouldReinjectForEvent",
|
|
params: [
|
|
"event: {\n\t\tmessages?: Array<{ content?: unknown; text?: string }>;\n\t\ttype?: string;\n\t\tpayload?: unknown;\n\t}",
|
|
"mode: PromptInjectionMode",
|
|
],
|
|
returns: "ReinjectDecision",
|
|
calls: ["outgoingMessagesHaveMarker"],
|
|
raises: [],
|
|
},
|
|
],
|
|
},
|
|
);
|
|
|
|
const funcExport = result.exports.find((e) =>
|
|
e.startsWith("func:shouldReinjectForEvent"),
|
|
);
|
|
expect(funcExport).toBeDefined();
|
|
expect(funcExport).not.toContain("\n");
|
|
expect(funcExport).not.toContain("\t");
|
|
expect(funcExport).toBe(
|
|
"func:shouldReinjectForEvent(event: { messages?: Array<{ content?: unknown; text?: string }>; type?: string; payload?: unknown; }, mode: PromptInjectionMode) → ReinjectDecision",
|
|
);
|
|
});
|
|
|
|
it("collapses multi-line return types into single-line func signatures", () => {
|
|
const result = mergeFileData(
|
|
"types.ts",
|
|
{ purpose: "Types", exports: [], deps: [] },
|
|
{
|
|
exports: ["complexReturn"],
|
|
deps: [],
|
|
classes: [],
|
|
functions: [
|
|
{
|
|
name: "complexReturn",
|
|
params: ["x: number"],
|
|
returns: "{\n a: string;\n b: number;\n}",
|
|
calls: [],
|
|
raises: [],
|
|
},
|
|
],
|
|
},
|
|
);
|
|
|
|
const funcExport = result.exports.find((e) =>
|
|
e.startsWith("func:complexReturn"),
|
|
);
|
|
expect(funcExport).toBeDefined();
|
|
expect(funcExport).not.toContain("\n");
|
|
expect(funcExport).toBe(
|
|
"func:complexReturn(x: number) → { a: string; b: number; }",
|
|
);
|
|
});
|
|
|
|
it("collapses multi-line method parameters into single-line method signatures", () => {
|
|
const result = mergeFileData(
|
|
"class.ts",
|
|
{ purpose: "Class file", exports: [], deps: [] },
|
|
{
|
|
exports: ["MyClass"],
|
|
deps: [],
|
|
classes: [
|
|
{
|
|
name: "MyClass",
|
|
methods: [
|
|
{
|
|
name: "doThing",
|
|
params: ["opts: {\n a: string;\n b: number;\n}"],
|
|
returns: "void",
|
|
calls: [],
|
|
raises: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
functions: [],
|
|
},
|
|
);
|
|
|
|
const methodExport = result.exports.find((e) =>
|
|
e.startsWith("method:doThing"),
|
|
);
|
|
expect(methodExport).toBeDefined();
|
|
expect(methodExport).not.toContain("\n");
|
|
expect(methodExport).toBe(
|
|
"method:doThing(opts: { a: string; b: number; }) → void",
|
|
);
|
|
});
|
|
});
|