Files

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",
);
});
});