test: fix flipping tests

This commit is contained in:
Alex Kim 2023-04-18 12:26:08 +05:00
parent a87004918c
commit 9a7a01cb11
No known key found for this signature in database
GPG key ID: CEE74CFA44D238D7

View file

@ -190,10 +190,8 @@ const checkElementsBoundingBox = async (
debugger; debugger;
await waitFor(() => { await waitFor(() => {
// Check if width and height did not change // Check if width and height did not change
expect(x1 - toleranceInPx <= x12 && x12 <= x1 + toleranceInPx).toBeTruthy(); expect(x2 - x1).toBeCloseTo(x22 - x12, -1);
expect(y1 - toleranceInPx <= y12 && y12 <= y1 + toleranceInPx).toBeTruthy(); expect(y2 - y1).toBeCloseTo(y22 - y12, -1);
expect(x2 - toleranceInPx <= x22 && x22 <= x2 + toleranceInPx).toBeTruthy();
expect(y2 - toleranceInPx <= y22 && y22 <= y2 + toleranceInPx).toBeTruthy();
}); });
}; };
@ -211,14 +209,22 @@ const checkTwoPointsLineHorizontalFlip = async () => {
h.app.actionManager.executeAction(actionFlipHorizontal); h.app.actionManager.executeAction(actionFlipHorizontal);
const newElement = h.elements[0] as ExcalidrawLinearElement; const newElement = h.elements[0] as ExcalidrawLinearElement;
await waitFor(() => { await waitFor(() => {
expect(originalElement.points[0][0]).toEqual( expect(originalElement.points[0][0]).toBeCloseTo(
newElement.points[0][0] !== 0 ? -newElement.points[0][0] : 0, -newElement.points[0][0],
5,
); );
expect(originalElement.points[0][1]).toEqual(newElement.points[0][1]); expect(originalElement.points[0][1]).toBeCloseTo(
expect(originalElement.points[1][0]).toEqual( newElement.points[0][1],
newElement.points[1][0] !== 0 ? -newElement.points[1][0] : 0, 5,
);
expect(originalElement.points[1][0]).toBeCloseTo(
-newElement.points[1][0],
5,
);
expect(originalElement.points[1][1]).toBeCloseTo(
newElement.points[1][1],
5,
); );
expect(originalElement.points[1][1]).toEqual(newElement.points[1][1]);
}); });
}; };
@ -229,14 +235,22 @@ const checkTwoPointsLineVerticalFlip = async () => {
h.app.actionManager.executeAction(actionFlipVertical); h.app.actionManager.executeAction(actionFlipVertical);
const newElement = h.elements[0] as ExcalidrawLinearElement; const newElement = h.elements[0] as ExcalidrawLinearElement;
await waitFor(() => { await waitFor(() => {
expect(originalElement.points[0][0]).toEqual( expect(originalElement.points[0][0]).toBeCloseTo(
newElement.points[0][0] !== 0 ? -newElement.points[0][0] : 0, newElement.points[0][0],
5,
); );
expect(originalElement.points[0][1]).toEqual(newElement.points[0][1]); expect(originalElement.points[0][1]).toBeCloseTo(
expect(originalElement.points[1][0]).toEqual( -newElement.points[0][1],
newElement.points[1][0] !== 0 ? -newElement.points[1][0] : 0, 5,
);
expect(originalElement.points[1][0]).toBeCloseTo(
newElement.points[1][0],
5,
);
expect(originalElement.points[1][1]).toBeCloseTo(
-newElement.points[1][1],
5,
); );
expect(originalElement.points[1][1]).toEqual(newElement.points[1][1]);
}); });
}; };
@ -313,7 +327,7 @@ describe("rectangle", () => {
it("flips a rotated rectangle vertically correctly", async () => { it("flips a rotated rectangle vertically correctly", async () => {
const originalAngle = (3 * Math.PI) / 4; const originalAngle = (3 * Math.PI) / 4;
const expectedAgnle = Math.PI / 4; const expectedAgnle = (5 * Math.PI) / 4;
createAndSelectOneRectangle(originalAngle); createAndSelectOneRectangle(originalAngle);
@ -346,7 +360,7 @@ describe("diamond", () => {
it("flips a rotated diamond vertically correctly", async () => { it("flips a rotated diamond vertically correctly", async () => {
const originalAngle = (5 * Math.PI) / 4; const originalAngle = (5 * Math.PI) / 4;
const expectedAngle = (7 * Math.PI) / 4; const expectedAngle = (3 * Math.PI) / 4;
createAndSelectOneDiamond(originalAngle); createAndSelectOneDiamond(originalAngle);
@ -379,7 +393,7 @@ describe("ellipse", () => {
it("flips a rotated ellipse vertically correctly", async () => { it("flips a rotated ellipse vertically correctly", async () => {
const originalAngle = (7 * Math.PI) / 4; const originalAngle = (7 * Math.PI) / 4;
const expectedAngle = (5 * Math.PI) / 4; const expectedAngle = Math.PI / 4;
createAndSelectOneEllipse(originalAngle); createAndSelectOneEllipse(originalAngle);
@ -424,7 +438,7 @@ describe("arrow", () => {
it("flips a rotated arrow vertically with line inside min/max points bounds", async () => { it("flips a rotated arrow vertically with line inside min/max points bounds", async () => {
const originalAngle = Math.PI / 4; const originalAngle = Math.PI / 4;
const expectedAngle = (3 * Math.PI) / 4; const expectedAngle = (7 * Math.PI) / 4;
const line = createLinearElementWithCurveInsideMinMaxPoints("arrow"); const line = createLinearElementWithCurveInsideMinMaxPoints("arrow");
h.app.scene.replaceAllElements([line]); h.app.scene.replaceAllElements([line]);
h.app.state.selectedElementIds[line.id] = true; h.app.state.selectedElementIds[line.id] = true;
@ -476,7 +490,7 @@ describe("arrow", () => {
//TODO: elements with curve outside minMax points have a wrong bounding box!!! //TODO: elements with curve outside minMax points have a wrong bounding box!!!
it.skip("flips a rotated arrow vertically with line outside min/max points bounds", async () => { it.skip("flips a rotated arrow vertically with line outside min/max points bounds", async () => {
const originalAngle = Math.PI / 4; const originalAngle = Math.PI / 4;
const expectedAngle = (3 * Math.PI) / 4; const expectedAngle = (7 * Math.PI) / 4;
const line = createLinearElementsWithCurveOutsideMinMaxPoints("arrow"); const line = createLinearElementsWithCurveOutsideMinMaxPoints("arrow");
mutateElement(line, { angle: originalAngle }); mutateElement(line, { angle: originalAngle });
h.app.scene.replaceAllElements([line]); h.app.scene.replaceAllElements([line]);
@ -507,7 +521,6 @@ describe("arrow", () => {
it("flips a two points arrow vertically correctly", async () => { it("flips a two points arrow vertically correctly", async () => {
createAndSelectOneArrow(); createAndSelectOneArrow();
await checkTwoPointsLineVerticalFlip(); await checkTwoPointsLineVerticalFlip();
}); });
}); });
@ -576,7 +589,7 @@ describe("line", () => {
//TODO: elements with curve outside minMax points have a wrong bounding box //TODO: elements with curve outside minMax points have a wrong bounding box
it.skip("flips a rotated line vertically with line outside min/max points bounds", async () => { it.skip("flips a rotated line vertically with line outside min/max points bounds", async () => {
const originalAngle = Math.PI / 4; const originalAngle = Math.PI / 4;
const expectedAngle = (3 * Math.PI) / 4; const expectedAngle = (7 * Math.PI) / 4;
const line = createLinearElementsWithCurveOutsideMinMaxPoints("line"); const line = createLinearElementsWithCurveOutsideMinMaxPoints("line");
mutateElement(line, { angle: originalAngle }); mutateElement(line, { angle: originalAngle });
h.app.scene.replaceAllElements([line]); h.app.scene.replaceAllElements([line]);
@ -611,7 +624,7 @@ describe("line", () => {
it("flips a rotated line vertically with line inside min/max points bounds", async () => { it("flips a rotated line vertically with line inside min/max points bounds", async () => {
const originalAngle = Math.PI / 4; const originalAngle = Math.PI / 4;
const expectedAngle = (3 * Math.PI) / 4; const expectedAngle = (7 * Math.PI) / 4;
const line = createLinearElementWithCurveInsideMinMaxPoints("line"); const line = createLinearElementWithCurveInsideMinMaxPoints("line");
h.app.scene.replaceAllElements([line]); h.app.scene.replaceAllElements([line]);
h.app.state.selectedElementIds[line.id] = true; h.app.state.selectedElementIds[line.id] = true;
@ -665,7 +678,7 @@ describe("freedraw", () => {
it("flips a rotated drawing vertically correctly", async () => { it("flips a rotated drawing vertically correctly", async () => {
const originalAngle = Math.PI / 4; const originalAngle = Math.PI / 4;
const expectedAngle = (3 * Math.PI) / 4; const expectedAngle = (7 * Math.PI) / 4;
const draw = createAndReturnOneDraw(originalAngle); const draw = createAndReturnOneDraw(originalAngle);
// select draw, since not done automatically // select draw, since not done automatically
@ -725,8 +738,8 @@ describe("image", () => {
}); });
await checkVerticalFlip(); await checkVerticalFlip();
expect((h.elements[0] as ExcalidrawImageElement).scale).toEqual([-1, 1]); expect((h.elements[0] as ExcalidrawImageElement).scale).toEqual([1, -1]);
expect(h.elements[0].angle).toBeCloseTo(Math.PI); expect(h.elements[0].angle).toBeCloseTo(0);
}); });
it("flips an rotated image horizontally correctly", async () => { it("flips an rotated image horizontally correctly", async () => {
@ -749,7 +762,7 @@ describe("image", () => {
it("flips an rotated image vertically correctly", async () => { it("flips an rotated image vertically correctly", async () => {
const originalAngle = Math.PI / 4; const originalAngle = Math.PI / 4;
const expectedAngle = (3 * Math.PI) / 4; const expectedAngle = (7 * Math.PI) / 4;
//paste image //paste image
await createImage(); await createImage();
await waitFor(() => { await waitFor(() => {
@ -764,7 +777,7 @@ describe("image", () => {
}); });
await checkRotatedVerticalFlip(expectedAngle); await checkRotatedVerticalFlip(expectedAngle);
expect((h.elements[0] as ExcalidrawImageElement).scale).toEqual([-1, 1]); expect((h.elements[0] as ExcalidrawImageElement).scale).toEqual([1, -1]);
expect(h.elements[0].angle).toBeCloseTo(expectedAngle); expect(h.elements[0].angle).toBeCloseTo(expectedAngle);
}); });
@ -779,7 +792,7 @@ describe("image", () => {
}); });
await checkVerticalHorizontalFlip(); await checkVerticalHorizontalFlip();
expect((h.elements[0] as ExcalidrawImageElement).scale).toEqual([1, 1]); expect((h.elements[0] as ExcalidrawImageElement).scale).toEqual([-1, -1]);
expect(h.elements[0].angle).toBeCloseTo(Math.PI); expect(h.elements[0].angle).toBeCloseTo(0);
}); });
}); });