test(linear): cover line snapping interactions
This commit is contained in:
@@ -155,6 +155,24 @@ describe("Test Linear Elements", () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const dragMove = (startPoint: GlobalPoint, endPoint: GlobalPoint) => {
|
||||||
|
fireEvent.pointerDown(interactiveCanvas, {
|
||||||
|
clientX: startPoint[0],
|
||||||
|
clientY: startPoint[1],
|
||||||
|
});
|
||||||
|
fireEvent.pointerMove(interactiveCanvas, {
|
||||||
|
clientX: endPoint[0],
|
||||||
|
clientY: endPoint[1],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const dragEnd = (endPoint: GlobalPoint) => {
|
||||||
|
fireEvent.pointerUp(interactiveCanvas, {
|
||||||
|
clientX: endPoint[0],
|
||||||
|
clientY: endPoint[1],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const deletePoint = (point: GlobalPoint) => {
|
const deletePoint = (point: GlobalPoint) => {
|
||||||
fireEvent.pointerDown(interactiveCanvas, {
|
fireEvent.pointerDown(interactiveCanvas, {
|
||||||
clientX: point[0],
|
clientX: point[0],
|
||||||
@@ -258,6 +276,43 @@ describe("Test Linear Elements", () => {
|
|||||||
expect(h.state.selectedLinearElement?.elementId).toEqual(h.elements[0].id);
|
expect(h.state.selectedLinearElement?.elementId).toEqual(h.elements[0].id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("shows snap lines and snaps the endpoint when creating a line", () => {
|
||||||
|
const rect = API.createElement({
|
||||||
|
type: "rectangle",
|
||||||
|
x: 100,
|
||||||
|
y: 100,
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
});
|
||||||
|
API.setElements([rect]);
|
||||||
|
API.setAppState({ objectsSnapModeEnabled: true });
|
||||||
|
|
||||||
|
UI.clickTool("line");
|
||||||
|
|
||||||
|
const startPoint = pointFrom<GlobalPoint>(20, 20);
|
||||||
|
const pointerNearCorner = pointFrom<GlobalPoint>(95, 95);
|
||||||
|
|
||||||
|
dragMove(startPoint, pointerNearCorner);
|
||||||
|
|
||||||
|
expect(h.state.snapLines.length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
dragEnd(pointerNearCorner);
|
||||||
|
|
||||||
|
const line = h.elements.find(
|
||||||
|
(element): element is ExcalidrawLinearElement => element.type === "line",
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(line).toBeDefined();
|
||||||
|
|
||||||
|
const endpoint = LinearElementEditor.getPointGlobalCoordinates(
|
||||||
|
line!,
|
||||||
|
line!.points[line!.points.length - 1],
|
||||||
|
h.app.scene.getNonDeletedElementsMap(),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(endpoint).toEqual(pointFrom<GlobalPoint>(100, 100));
|
||||||
|
});
|
||||||
|
|
||||||
it("should enter line editor via enter (line)", () => {
|
it("should enter line editor via enter (line)", () => {
|
||||||
createTwoPointerLinearElement("line");
|
createTwoPointerLinearElement("line");
|
||||||
expect(h.state.selectedLinearElement?.isEditing).toBe(false);
|
expect(h.state.selectedLinearElement?.isEditing).toBe(false);
|
||||||
@@ -401,6 +456,39 @@ describe("Test Linear Elements", () => {
|
|||||||
`);
|
`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("shows snap lines when dragging a point to another line point axis", () => {
|
||||||
|
const line = API.createElement({
|
||||||
|
type: "line",
|
||||||
|
x: 20,
|
||||||
|
y: 20,
|
||||||
|
width: 100,
|
||||||
|
height: 50,
|
||||||
|
roughness: 0,
|
||||||
|
points: [
|
||||||
|
pointFrom<LocalPoint>(0, 0),
|
||||||
|
pointFrom<LocalPoint>(50, 50),
|
||||||
|
pointFrom<LocalPoint>(100, 0),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
API.setElements([line]);
|
||||||
|
API.setAppState({ objectsSnapModeEnabled: true });
|
||||||
|
enterLineEditingMode(line);
|
||||||
|
|
||||||
|
const middlePoint = pointFrom<GlobalPoint>(70, 70);
|
||||||
|
const pointerNearEndPointX = pointFrom<GlobalPoint>(117, 65);
|
||||||
|
|
||||||
|
dragMove(middlePoint, pointerNearEndPointX);
|
||||||
|
|
||||||
|
expect(h.state.snapLines.length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
dragEnd(pointerNearEndPointX);
|
||||||
|
|
||||||
|
expect(API.getElement(line).points[1]).toEqual(
|
||||||
|
pointFrom<LocalPoint>(100, 45),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("should update the midpoints when element roundness changed", async () => {
|
it("should update the midpoints when element roundness changed", async () => {
|
||||||
createThreePointerLinearElement("line");
|
createThreePointerLinearElement("line");
|
||||||
|
|
||||||
@@ -548,7 +636,7 @@ describe("Test Linear Elements", () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(
|
expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(
|
||||||
`16`,
|
`15`,
|
||||||
);
|
);
|
||||||
expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`9`);
|
expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`9`);
|
||||||
|
|
||||||
@@ -746,7 +834,7 @@ describe("Test Linear Elements", () => {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(
|
expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(
|
||||||
`16`,
|
`15`,
|
||||||
);
|
);
|
||||||
expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`9`);
|
expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`9`);
|
||||||
expect(line.points.length).toEqual(5);
|
expect(line.points.length).toEqual(5);
|
||||||
|
|||||||
Reference in New Issue
Block a user