1import assert from 'node:assert/strict';2import test from 'node:test';3import {fitView, zoomView} from '../src/components/DiagramExample/viewMath.mjs';4import {httpRendererUrlFor} from '../src/components/DiagramExample/rendererRouting.mjs';5import {canonicalizeHttpRendererSvg, rendererVersionFromHeaders} from '../src/components/DiagramExample/httpSvg.mjs';6import {materializeSvg} from '../../../shared/svg/index.js';78test('routes HTTP examples to their dedicated renderer unit', () => {9 assert.equal(httpRendererUrlFor('graphviz'), 'https://graphviz.render.diagram.zip/v1/svg');10 assert.equal(httpRendererUrlFor('mermaid'), 'https://mermaid.render.diagram.zip/v1/svg');11 assert.equal(httpRendererUrlFor('bpmn'), 'https://bpmn.render.diagram.zip/v1/svg');12 assert.equal(httpRendererUrlFor('excalidraw'), 'https://excalidraw.render.diagram.zip/v1/svg');13 assert.equal(httpRendererUrlFor('diagramsnet'), 'https://diagramsnet.render.diagram.zip/v1/svg');14 assert.equal(httpRendererUrlFor('tikz'), 'https://tikz.render.diagram.zip/v1/svg');15});1617test('canonicalizes raw HTTP renderer SVG before docs appearance materialization', () => {18 const headers = new Headers({19 'X-Diagram-Engine-Version': '3.4.2',20 'X-Renderer-Build': 'blockdiag-3.4.2-family-python-1',21 });22 const raw = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 20"><rect x="2" y="2" width="36" height="16" fill="white" stroke="black"></rect><text x="8" y="14" fill="black">block</text></svg>';23 const canonical = canonicalizeHttpRendererSvg(raw, 'blockdiag', headers);2425 assert.equal(rendererVersionFromHeaders(headers), '3.4.2 blockdiag-3.4.2-family-python-1');26 assert.match(canonical, /data-dz-schema="1"/);27 assert.match(canonical, /data-dz-profile="neutral-svg-semantic-2"/);28 assert.match(materializeSvg(canonical, 'auto-transparent'), /data-dz-appearance="auto-transparent"/);29});3031test('fits a wide diagram without assuming a fixed aspect ratio', () => {32 assert.deepEqual(fitView(800, 400, 1600, 200, 40), {scale: 0.45, x: 40, y: 155});33});3435test('fits a tall diagram without assuming a fixed aspect ratio', () => {36 assert.deepEqual(fitView(800, 400, 200, 1600, 40), {scale: 0.2, x: 380, y: 40});37});3839test('keeps the diagram point below the pointer while zooming', () => {40 const next = zoomView({scale: 1, x: 10, y: 20}, 2, 110, 220);41 assert.deepEqual(next, {scale: 2, x: -90, y: -180});42});