Преглед изворни кода

Add test for getElementBounds (#1395)

* fix calc diamond bounds

* Add test for getElementBounds

* use toEqual
Daishi Kato пре 5 година
родитељ
комит
e77e2255bd
1 измењених фајлова са 73 додато и 4 уклоњено
  1. 73 4
      src/element/bounds.test.ts

+ 73 - 4
src/element/bounds.test.ts

@@ -1,9 +1,23 @@
-import { getElementAbsoluteCoords } from "./bounds";
-import { ExcalidrawElement } from "./types";
+import { getElementAbsoluteCoords, getElementBounds } from "./bounds";
+import { ExcalidrawElement, ExcalidrawLinearElement } from "./types";
 
-const _ce = ({ x, y, w, h }: { x: number; y: number; w: number; h: number }) =>
+const _ce = ({
+  x,
+  y,
+  w,
+  h,
+  a,
+  t,
+}: {
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  a?: number;
+  t?: string;
+}) =>
   ({
-    type: "rectangle",
+    type: t || "rectangle",
     strokeColor: "#000",
     backgroundColor: "#000",
     fillStyle: "solid",
@@ -14,6 +28,7 @@ const _ce = ({ x, y, w, h }: { x: number; y: number; w: number; h: number }) =>
     y,
     width: w,
     height: h,
+    angle: a,
   } as ExcalidrawElement);
 
 describe("getElementAbsoluteCoords", () => {
@@ -41,3 +56,57 @@ describe("getElementAbsoluteCoords", () => {
     expect(y2).toEqual(20);
   });
 });
+
+describe("getElementBounds", () => {
+  it("rectangle", () => {
+    const [x1, y1, x2, y2] = getElementBounds(
+      _ce({ x: 40, y: 30, w: 20, h: 10, a: Math.PI / 4, t: "rectangle" }),
+    );
+    expect(x1).toEqual(39.39339828220179);
+    expect(y1).toEqual(24.393398282201787);
+    expect(x2).toEqual(60.60660171779821);
+    expect(y2).toEqual(45.60660171779821);
+  });
+
+  it("diamond", () => {
+    const [x1, y1, x2, y2] = getElementBounds(
+      _ce({ x: 40, y: 30, w: 20, h: 10, a: Math.PI / 4, t: "diamond" }),
+    );
+    expect(x1).toEqual(42.928932188134524);
+    expect(y1).toEqual(27.928932188134524);
+    expect(x2).toEqual(57.071067811865476);
+    expect(y2).toEqual(42.071067811865476);
+  });
+
+  it("ellipse", () => {
+    const [x1, y1, x2, y2] = getElementBounds(
+      _ce({ x: 40, y: 30, w: 20, h: 10, a: Math.PI / 4, t: "ellipse" }),
+    );
+    expect(x1).toEqual(42.09430584957905);
+    expect(y1).toEqual(27.09430584957905);
+    expect(x2).toEqual(57.90569415042095);
+    expect(y2).toEqual(42.90569415042095);
+  });
+
+  it("curved line", () => {
+    const [x1, y1, x2, y2] = getElementBounds({
+      ..._ce({
+        t: "line",
+        x: 449.58203125,
+        y: 186.0625,
+        w: 170.12890625,
+        h: 92.48828125,
+        a: 0.6447741904932416,
+      }),
+      points: [
+        [0, 0] as [number, number],
+        [67.33984375, 92.48828125] as [number, number],
+        [-102.7890625, 52.15625] as [number, number],
+      ],
+    } as ExcalidrawLinearElement);
+    expect(x1).toEqual(360.3176068760539);
+    expect(y1).toEqual(185.90654264413516);
+    expect(x2).toEqual(473.8171188951176);
+    expect(y2).toEqual(320.391865303557);
+  });
+});