import { describe, expect, test } from "bun:test"; import { BaseCanvasData } from "../plugins/baseCanvas"; import { setZoom } from "../plugins/zoomPlugin"; import { Zoom } from "../utils/zoomUtils"; const canvasSize = { width: 1000, height: 1000 }; describe("setZoom*", () => { test("zoom 2x", () => { const data: BaseCanvasData = { zoom: 1, size: canvasSize, origin: { x: 0, y: 0 }, }; const updated = setZoom(data, 2, Zoom.range, "multiplyDiscrete"); expect(updated).toEqual({ zoom: 2, size: canvasSize, origin: { x: -500, y: -500 }, }); }); test("zoom 4x", () => { const data: BaseCanvasData = { zoom: 2, size: canvasSize, origin: { x: -500, y: -500 }, }; const updated = setZoom(data, 2, Zoom.range, "multiplyDiscrete"); expect(updated).toEqual({ zoom: 4, size: canvasSize, origin: { x: -1500, y: -1500 }, }); }); test("zoom 0.5x", () => { const data: BaseCanvasData = { zoom: 2, size: canvasSize, origin: { x: -500, y: -500 }, }; const updated = setZoom(data, 1 / 2, Zoom.range, "multiplyDiscrete"); expect(updated).toEqual({ zoom: 1, size: canvasSize, origin: { x: 0, y: 0 }, }); }); test("zoom 0.5x with range", () => { const data: BaseCanvasData = { zoom: 1, size: canvasSize, origin: { x: 0, y: 0 }, }; const updated = setZoom(data, 1 / 2, [0.8, 2], "multiplyDiscrete"); expect(updated).toEqual({ zoom: 0.8, size: canvasSize, origin: { x: 100, y: 100 }, }); }); test("smooth zoom in 1.5x", () => { const data: BaseCanvasData = { zoom: 1, size: canvasSize, origin: { x: 0, y: 0 }, }; const updated = setZoom(data, 1.5, Zoom.range, "multiply"); expect(updated).toEqual({ zoom: 1.5, size: canvasSize, origin: { x: -250, y: -250 }, }); }); test("smooth zoom out 0.75x", () => { const data: BaseCanvasData = { zoom: 2, size: canvasSize, origin: { x: -500, y: -500 }, }; const updated = setZoom(data, 0.75, Zoom.range, "multiply"); expect(updated).toEqual({ zoom: 1.5, size: canvasSize, origin: { x: -250, y: -250 }, }); }); test("smooth zoom respects range constraints", () => { const data: BaseCanvasData = { zoom: 0.9, size: canvasSize, origin: { x: 0, y: 0 }, }; const updated = setZoom(data, 0.8, [0.8, 4], "multiply"); expect(updated).toEqual({ zoom: 0.8, // Should be clamped to minimum size: canvasSize, origin: { x: 56, y: 56 }, // Actual calculated value from roundPoint }); }); test("smooth zoom with non-integer result", () => { const data: BaseCanvasData = { zoom: 1, size: canvasSize, origin: { x: 0, y: 0 }, }; const updated = setZoom(data, 1.23, Zoom.range, "multiply"); expect(updated).toEqual({ zoom: 1.23, size: canvasSize, origin: { x: -115, y: -115 }, // -1000 * (1.23-1)/2 = -115 }); }); });