import { describe, expect, test } from "bun:test"; import { eraserPlugin } from "../plugins/eraserPlugin"; import { filterElements } from "../utils/elementUtils"; import { createPointerEvent, createTestCanvas } from "./canvasTestUtils"; describe("eraser plugin", () => { test("marks elements for erasure while dragging", () => { const elements = [ { id: "a", rect: { x: 0, y: 0, width: 10, height: 10 } }, { id: "b", rect: { x: 15, y: 0, width: 10, height: 10 } }, ]; let erased: string[] | undefined; const harness = createTestCanvas( (canvas) => canvas.addPlugins(eraserPlugin<(typeof elements)[number]>()), { contextProperties: { getElementId: (item: (typeof elements)[number]) => item.id, filterElements: (options) => filterElements(elements, options), onEraseElements: (ids) => { erased = ids; }, }, } ); harness.handlers.onPointerDown?.(createPointerEvent({ x: 1, y: 1 })); expect(harness.getMode().type).toBe("erasing"); expect(harness.getData().markedForErasureElementIds).toEqual(["a"]); harness.handlers.onPointerMove?.(createPointerEvent({ x: 16, y: 1 })); expect(harness.getData().markedForErasureElementIds).toEqual(["a", "b"]); harness.handlers.onPointerUp?.(createPointerEvent({ x: 16, y: 1 })); expect(harness.getMode().type).toBe("none"); expect(harness.getData().markedForErasureElementIds).toEqual([]); expect(erased).toEqual(["a", "b"]); }); test("respects canErase and adjustErasePoint", () => { const elements = [{ id: "a", rect: { x: 5, y: 5, width: 5, height: 5 } }]; let erased: string[] | undefined; const harness = createTestCanvas((canvas) => canvas.addPlugins(eraserPlugin()), { contextProperties: { getElementId: (item: typeof elements[number]) => item.id, canErase: () => false, adjustErasePoint: (_event, point) => ({ ...point, x: point.x + 10 }), filterElements: (options) => filterElements(elements, options), onEraseElements: (ids) => { erased = ids; }, }, }); harness.handlers.onPointerDown?.(createPointerEvent({ x: 5, y: 5 })); expect(harness.getMode().type).toBe("none"); harness.handlers.onPointerMove?.(createPointerEvent({ x: 5, y: 5 })); harness.handlers.onPointerUp?.(createPointerEvent({ x: 5, y: 5 })); expect(erased).toBeUndefined(); }); });