@@ -23,9 +23,29 @@ describe("diagram grammar", () => {
|
||||
parseDiagram("classDiagram\nclass A\nA : +field\nA <|-- B").nodes[0]
|
||||
?.members,
|
||||
).toEqual(["+field"]);
|
||||
expect(parseDiagram("stateDiagram-v2\nIdle --> Ready : go").mode).toBe(
|
||||
"state",
|
||||
const state = parseDiagram(
|
||||
'stateDiagram-v2\n[*] --> Idle\nstate "Working" as Ready\nIdle --> Ready : go\nReady --> [*]',
|
||||
);
|
||||
expect(state.mode).toBe("state");
|
||||
expect(state.diagnostics).toEqual([]);
|
||||
expect(state.edges.map((edge) => edge.label)).toContain("go");
|
||||
expect(state.nodes.map((node) => node.id)).toEqual([
|
||||
"__start",
|
||||
"Idle",
|
||||
"Ready",
|
||||
"__end",
|
||||
]);
|
||||
});
|
||||
it("supports bounded class member blocks and reports unclosed blocks", () => {
|
||||
const diagram = parseDiagram(
|
||||
"classDiagram\nclass Account {\n +String id\n +close()\n}\nAccount --> Ledger",
|
||||
);
|
||||
expect(diagram.diagnostics).toEqual([]);
|
||||
expect(diagram.nodes[0]?.members).toEqual(["+String id", "+close()"]);
|
||||
expect(
|
||||
parseDiagram("classDiagram\nclass Account {\n +String id").diagnostics[0]
|
||||
?.message,
|
||||
).toMatch(/no closing/iu);
|
||||
});
|
||||
it("diagnoses directives without executing", () => {
|
||||
const d = parseDiagram(
|
||||
@@ -34,4 +54,23 @@ describe("diagram grammar", () => {
|
||||
expect(d.diagnostics).toHaveLength(2);
|
||||
expect(renderSvg(d)).not.toContain("bad.test");
|
||||
});
|
||||
it("supports ER attributes, mind maps, timelines and sequence notes", () => {
|
||||
const er = parseDiagram(
|
||||
"erDiagram\nUSER {\n string id PK\n}\nUSER ||--o{ ORDER : places",
|
||||
);
|
||||
expect(er.mode).toBe("er");
|
||||
expect(er.nodes.find((node) => node.id === "USER")?.members).toEqual([
|
||||
"string id PK",
|
||||
]);
|
||||
expect(er.edges[0]?.label).toContain("places");
|
||||
expect(parseDiagram("mindmap\n Root\n Child").edges).toHaveLength(1);
|
||||
expect(
|
||||
parseDiagram("timeline\nsection Build\n2026 : Release").nodes,
|
||||
).toHaveLength(2);
|
||||
expect(
|
||||
parseDiagram(
|
||||
"sequenceDiagram\nparticipant A\nparticipant B\nNote over A,B: inert",
|
||||
).edges[0],
|
||||
).toMatchObject({ arrow: false, dashed: true });
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user