aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/tests/rotate.test.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/tests/rotate.test.tsx')
-rw-r--r--packages/excalidraw/tests/rotate.test.tsx81
1 files changed, 81 insertions, 0 deletions
diff --git a/packages/excalidraw/tests/rotate.test.tsx b/packages/excalidraw/tests/rotate.test.tsx
new file mode 100644
index 0000000..367313e
--- /dev/null
+++ b/packages/excalidraw/tests/rotate.test.tsx
@@ -0,0 +1,81 @@
+import React from "react";
+import { render, unmountComponent } from "./test-utils";
+import { reseed } from "../random";
+import { UI } from "./helpers/ui";
+import { Excalidraw } from "../index";
+import { expect } from "vitest";
+
+unmountComponent();
+
+beforeEach(() => {
+ localStorage.clear();
+ reseed(7);
+});
+
+test("unselected bound arrow updates when rotating its target element", async () => {
+ await render(<Excalidraw />);
+ 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(116.7, 1);
+ expect(arrow.height).toBeCloseTo(0);
+});
+
+test("unselected bound arrows update when rotating their target elements", async () => {
+ await render(<Excalidraw />);
+ 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.98, 1);
+ expect(ellipseArrow.points[1][1]).toBeCloseTo(125.79, 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, 0);
+ expect(textArrow.points[1][1]).toBeCloseTo(-116.1, 0);
+});