import { describe, expect, it } from "vitest"; import { parseSvgSource } from "../../src/document/source-parser"; import { createSelectedSvgSource, createSymbolSpriteSource, } from "../../src/export/derived-svg-export"; function semantic(source: string) { const parsed = parseSvgSource(source, 1); if (!parsed.semantic) throw new Error("Fixture did not parse"); return parsed.semantic; } describe("derived SVG exports", () => { it("retains selected ancestry and definitions while using a safe projection", () => { const document = semantic(` `); const selected = document.order.find( (key) => document.nodes.get(key)?.id === "keep", )!; const result = createSelectedSvgSource(document, [selected]); expect(result.source).toContain("translate(2 3)"); expect(result.source).toContain("linearGradient"); expect(result.source).toContain('id="keep"'); expect(result.source).not.toContain('id="remove"'); expect(result.source).not.toContain("script"); expect(result.source).not.toContain("data-svg-tools-node"); }); it("exports existing symbols and shared definitions as a sprite", () => { const document = semantic(` `); const result = createSymbolSpriteSource(document, []); expect(result.source).toContain(' { const document = semantic(` `); const selected = document.order.find( (key) => document.nodes.get(key)?.id === "arrow", )!; const result = createSymbolSpriteSource(document, [selected]); expect(result.source).toContain('id="symbol-arrow"'); expect(result.source).toContain('id="arrow"'); }); });