import { describe, expect, test } from "bun:test"; import { doubleClickPlugin } from "../plugins/doubleClickPlugin"; import { filterElements } from "../utils/elementUtils"; import { createPointerEvent, createTestCanvas } from "./canvasTestUtils"; describe("doubleClick plugin", () => { test("invokes handler on double click", () => { const element = { id: "a", rect: { x: 0, y: 0, width: 50, height: 50 } }; const handleDoubleClickCalls: { elementId: string }[] = []; const harness = createTestCanvas( (canvas) => canvas.addPlugins(doubleClickPlugin()), { contextProperties: { getElementId: (item: typeof element) => item.id, filterElements: (options) => filterElements([element], options), handleDoubleClick: (options: { elementId: string }) => { handleDoubleClickCalls.push(options); }, }, } ); const originalNow = Date.now; let currentTime = 0; Date.now = () => currentTime; harness.handlers.onPointerDown?.(createPointerEvent({ x: 10, y: 10 })); harness.handlers.onPointerUp?.(createPointerEvent({ x: 10, y: 10 })); currentTime = 100; harness.handlers.onPointerDown?.(createPointerEvent({ x: 10, y: 10 })); Date.now = originalNow; expect(handleDoubleClickCalls).toEqual([{ elementId: "a" }]); }); test("ignores single click and clicks outside elements", () => { const element = { id: "a", rect: { x: 0, y: 0, width: 50, height: 50 } }; let called = 0; const harness = createTestCanvas((canvas) => canvas.addPlugins(doubleClickPlugin()), { contextProperties: { getElementId: (item: typeof element) => item.id, filterElements: (options) => filterElements([element], options), handleDoubleClick: () => { called += 1; }, }, }); harness.handlers.onPointerDown?.(createPointerEvent({ x: 100, y: 100 })); harness.handlers.onPointerDown?.(createPointerEvent({ x: 100, y: 100 })); harness.handlers.onPointerDown?.(createPointerEvent({ x: 10, y: 10 })); expect(called).toBe(0); }); });