import ReactDOM from "react-dom"; import { render } from "./test-utils"; import { reseed } from "../random"; import { UI } from "./helpers/ui"; import { Excalidraw } from "../index"; import { expect } from "vitest"; ReactDOM.unmountComponentAtNode(document.getElementById("root")!); beforeEach(() => { localStorage.clear(); reseed(7); }); test("unselected bound arrow updates when rotating its target element", async () => { await render(); const rectangle = UI.createElement("rectangle", { width: 200, height: 100, }); const arrow = UI.createElement("arrow", { x: -80, y: 50, width: 70, height: 0, }); expect(arrow.endBinding?.elementId).toEqual(rectangle.id); UI.rotate(rectangle, [60, 36], { shift: true }); expect(arrow.endBinding?.elementId).toEqual(rectangle.id); expect(arrow.x).toBeCloseTo(-80); expect(arrow.y).toBeCloseTo(50); expect(arrow.width).toBeCloseTo(110.7, 1); expect(arrow.height).toBeCloseTo(0); }); test("unselected bound arrows update when rotating their target elements", async () => { await render(); const ellipse = UI.createElement("ellipse", { x: 0, y: 80, width: 300, height: 120, }); const ellipseArrow = UI.createElement("arrow", { position: 0, width: 40, height: 80, }); const text = UI.createElement("text", { position: 220, }); await UI.editText(text, "test"); const textArrow = UI.createElement("arrow", { x: 360, y: 300, width: -100, height: -40, }); expect(ellipseArrow.endBinding?.elementId).toEqual(ellipse.id); expect(textArrow.endBinding?.elementId).toEqual(text.id); UI.rotate([ellipse, text], [-82, 23], { shift: true }); expect(ellipseArrow.endBinding?.elementId).toEqual(ellipse.id); expect(ellipseArrow.x).toEqual(0); expect(ellipseArrow.y).toEqual(0); expect(ellipseArrow.points[0]).toEqual([0, 0]); expect(ellipseArrow.points[1][0]).toBeCloseTo(48.5, 1); expect(ellipseArrow.points[1][1]).toBeCloseTo(126.5, 1); expect(textArrow.endBinding?.elementId).toEqual(text.id); expect(textArrow.x).toEqual(360); expect(textArrow.y).toEqual(300); expect(textArrow.points[0]).toEqual([0, 0]); expect(textArrow.points[1][0]).toBeCloseTo(-94, 1); expect(textArrow.points[1][1]).toBeCloseTo(-116.1, 1); });