Files
PBandDev 2d094554f7 Bundle the pure core API for Node consumers (#6)
* feat: extract pure core api

* refactor: centralize core api helpers

* build: bundle core api output
2026-03-24 12:41:54 -05:00

67 lines
1.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { createLayoutAlgorithm } from "../../src/layout/algorithm-factory";
import type { LayoutInput, LayoutNode } from "../../src/layout/types";
describe("createLayoutAlgorithm", () => {
it("creates a horizontal algorithm using horizontalGap", () => {
const algorithm = createLayoutAlgorithm("horizontal", {
horizontalGap: 123,
verticalGap: 77,
});
const positions = algorithm.layout({
nodes: [
{ id: "a", width: 10, height: 10 },
{ id: "b", width: 10, height: 10 },
],
edges: [],
}).positions;
expect(algorithm.name).toBe("horizontal");
expect(positions.get("b")?.x).toBe(133);
});
it("creates a vertical algorithm using verticalGap", () => {
const algorithm = createLayoutAlgorithm("vertical", {
horizontalGap: 123,
verticalGap: 77,
});
const positions = algorithm.layout({
nodes: [
{ id: "a", width: 10, height: 10 },
{ id: "b", width: 10, height: 10 },
],
edges: [],
}).positions;
expect(algorithm.name).toBe("vertical");
expect(positions.get("b")?.y).toBe(87);
});
it("creates a sugiyama algorithm using both spacing values", () => {
const algorithm = createLayoutAlgorithm("sugiyama", {
horizontalGap: 123,
verticalGap: 77,
});
const input: LayoutInput = {
nodes: [
{ id: "left-a", width: 10, height: 10 },
{ id: "left-b", width: 10, height: 10 },
{ id: "right", width: 10, height: 10 },
] satisfies LayoutNode[],
edges: [
{ source: "left-a", target: "right" },
{ source: "left-b", target: "right" },
],
};
const positions = algorithm.layout(input).positions;
expect(algorithm.name).toBe("sugiyama");
expect(positions.get("right")?.x).toBe(133);
expect(positions.get("left-b")?.y).toBe(87);
});
});