Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586import assert from "node:assert/strict";import test from "node:test";import { advanceGraphCamera } from "../apps/platform-web/src/screens/spatial/graph/camera.ts";
const viewport = { width: 800, height: 600 };
function wheel(overrides = {}) { return { deltaX: 0, deltaY: 0, deltaMode: 0, shiftKey: false, zoom: false, x: 0, y: 0, ...overrides, };}
test("pans along both axes in graph-space units at the current scale", () => { const next = advanceGraphCamera( { center: { x: 3, y: -2 }, scale: 2 }, wheel({ deltaX: 20, deltaY: -10 }), viewport, );
assert.deepEqual(next, { center: { x: 13, y: -7 }, scale: 2 });});
test("converts line-mode wheel deltas using sixteen pixels per line", () => { const next = advanceGraphCamera( { center: { x: 0, y: 0 }, scale: 1 }, wheel({ deltaX: 2, deltaY: 3, deltaMode: 1 }), viewport, );
assert.deepEqual(next, { center: { x: 32, y: 48 }, scale: 1 });});
test("shift-wheel maps a vertical delta to horizontal panning", () => { const next = advanceGraphCamera( { center: { x: 8, y: 4 }, scale: 2 }, wheel({ deltaY: 12, shiftKey: true }), viewport, );
assert.deepEqual(next, { center: { x: 14, y: 4 }, scale: 2 });});
test("zoom keeps the graph point beneath the pointer fixed", () => { const camera = { center: { x: 40, y: -12 }, scale: 1.25 }; const input = wheel({ deltaY: -80, zoom: true, x: 180, y: 260 }); const size = { width: 600, height: 500 }; const before = { x: camera.center.x + (input.x - size.width / 2) / camera.scale, y: camera.center.y + (input.y - size.height / 2) / camera.scale, };
const next = advanceGraphCamera(camera, input, size); const after = { x: next.center.x + (input.x - size.width / 2) / next.scale, y: next.center.y + (input.y - size.height / 2) / next.scale, };
assert.ok(Math.abs(after.x - before.x) < 1e-10); assert.ok(Math.abs(after.y - before.y) < 1e-10);});
test("clamps zoom to the configured minimum and viewport maximum", () => { const camera = { center: { x: 0, y: 0 }, scale: 1 }; const size = { width: 800, height: 600 }; const zoomIn = advanceGraphCamera( camera, wheel({ deltaY: -10_000, zoom: true, x: 400, y: 300 }), size, ); const zoomOut = advanceGraphCamera( camera, wheel({ deltaY: 10_000, zoom: true, x: 400, y: 300 }), size, );
assert.equal(zoomIn.scale, 2.4); assert.equal(zoomOut.scale, 0.22);});