clone

a browser-first diagram editor with live svg previews, local drafts and encrypted, accountless sharing

main
diagramzip / renderers / edge / test / umlet.test.ts
umlet.test.ts 2.0K
1import { describe, expect, it } from 'vitest'2import example from '../../../examples/diagrams/umlet.xml?raw'3import { parseUmlet, renderUmlet } from '../src/languages/umlet'45describe('bounded UMLet UXF translation', () => {6 it('covers every element in the repository fixture without Java or a browser', () => {7 const elements = parseUmlet(example)8 expect(elements).toHaveLength(28)9 const svg = renderUmlet(example)10 expect(svg).toContain('<svg')11 expect(svg).toContain('viewBox=')12 expect(svg).toContain('read boarding')13 expect(svg).toContain('>pass</text>')14 expect(svg).toContain('marker-start="url(#arrow)"')15 expect(svg).not.toContain('<foreignObject')16 })1718 it('renders the five repository custom classes explicitly', () => {19 const svg = renderUmlet(example)20 expect(svg).toContain('rx=')21 expect(svg).toContain('<circle')22 expect(svg).toContain('>H</text>')23 expect(svg).not.toContain('custom State')24 expect(svg).not.toContain('custom FinalState')25 })2627 it('keeps unknown custom elements visible as labeled bounded fallbacks', () => {28 const svg = renderUmlet(`<diagram><element><type>com.umlet.element.custom.Radar</type><coordinates><x>10</x><y>20</y><w>120</w><h>60</h></coordinates><panel_attributes>signal &amp; range</panel_attributes></element></diagram>`)29 expect(svg).toContain('custom Radar')30 expect(svg).toContain('signal &amp;')31 expect(svg).toContain('>range</text>')32 expect(svg).toContain('stroke-dasharray="5 4"')33 })3435 it('rejects active XML features, unbounded coordinates, and oversized sources', () => {36 expect(() => renderUmlet('<!DOCTYPE diagram [<!ENTITY x "y">]><diagram/>')).toThrow(/doctype/i)37 expect(() => renderUmlet('<diagram><?run x?><element/></diagram>')).toThrow(/processing|valid bounded/i)38 expect(() => renderUmlet('<diagram><element><id>UMLClass</id><coordinates><x>0</x><y>0</y><w>99999</w><h>10</h></coordinates></element></diagram>')).toThrow(/8192/i)39 expect(() => renderUmlet('x'.repeat(262_145))).toThrow(/256 KiB/i)40 })41})