import { describe, expect, test } from "bun:test"; import { scalePlugin } from "../plugins/scalePlugin"; import { createPointerEvent, createTestCanvas } from "./canvasTestUtils"; describe("scale plugin", () => { test("sets hover handle and scales elements", () => { const selectionRect = { x: 0, y: 0, width: 10, height: 10 }; const scaled: any[] = []; const harness = createTestCanvas( (canvas) => canvas.addPlugins( scalePlugin<{ rect: typeof selectionRect }, { snapshot: string }>({ movementThreshold: 0, }) ), { data: { selectedElementIds: ["a"], zoom: 1, dragHandleSize: 8 }, contextProperties: { getSelectionRect: () => selectionRect, getElementId: (_: { rect: typeof selectionRect }) => "a", isScalable: () => true, filterElements: () => [], getStateSnapshot: () => ({ snapshot: "state" }), scaleElements: (params) => scaled.push(params), adjustScaleDelta: (_event, params) => ({ x: params.delta.x * 2, y: params.delta.y * 2, }), }, } ); harness.handlers.onPointerMove?.(createPointerEvent({ x: 0, y: 0 })); expect(harness.getData().hoveredDragHandleDirection).toBeDefined(); harness.handlers.onPointerDown?.(createPointerEvent({ x: 0, y: 0 })); harness.handlers.onPointerMove?.(createPointerEvent({ x: 10, y: 0 })); expect(harness.getMode()).toMatchObject({ type: "scaling", delta: { x: 20, y: 0 }, }); harness.handlers.onPointerMove?.(createPointerEvent({ x: 12, y: 0 })); expect(scaled[0]).toMatchObject({ delta: { x: 24, y: 0 }, snapshot: { snapshot: "state" }, }); harness.handlers.onPointerUp?.(createPointerEvent({ x: 12, y: 0 })); expect(harness.getMode().type).toBe("none"); }); });