|
@@ -0,0 +1,579 @@
|
|
|
|
+import React from "react";
|
|
|
|
+import ReactDOM from "react-dom";
|
|
|
|
+import { render } from "./test-utils";
|
|
|
|
+import App from "../components/App";
|
|
|
|
+import { setLanguage } from "../i18n";
|
|
|
|
+import { UI, Pointer, Keyboard } from "./helpers/ui";
|
|
|
|
+import { API } from "./helpers/api";
|
|
|
|
+import { KEYS } from "../keys";
|
|
|
|
+import {
|
|
|
|
+ actionAlignVerticallyCentered,
|
|
|
|
+ actionAlignHorizontallyCentered,
|
|
|
|
+ actionGroup,
|
|
|
|
+ actionAlignTop,
|
|
|
|
+ actionAlignBottom,
|
|
|
|
+ actionAlignLeft,
|
|
|
|
+ actionAlignRight,
|
|
|
|
+} from "../actions";
|
|
|
|
+
|
|
|
|
+const { h } = window;
|
|
|
|
+
|
|
|
|
+const mouse = new Pointer("mouse");
|
|
|
|
+
|
|
|
|
+beforeEach(async () => {
|
|
|
|
+ // Unmount ReactDOM from root
|
|
|
|
+ ReactDOM.unmountComponentAtNode(document.getElementById("root")!);
|
|
|
|
+ mouse.reset();
|
|
|
|
+
|
|
|
|
+ await setLanguage("en.json");
|
|
|
|
+ render(<App />);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+function createAndSelectTwoRectangles() {
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down();
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(10, 10);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Select the first element.
|
|
|
|
+ // The second rectangle is already reselected because it was the last element created
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function createAndSelectTwoRectanglesWithDifferentSizes() {
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down();
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(10, 10);
|
|
|
|
+ mouse.up(110, 110);
|
|
|
|
+
|
|
|
|
+ // Select the first element.
|
|
|
|
+ // The second rectangle is already reselected because it was the last element created
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+it("aligns two objects correctly to the top", () => {
|
|
|
|
+ createAndSelectTwoRectangles();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+
|
|
|
|
+ Keyboard.withModifierKeys({ ctrl: true, shift: true }, () => {
|
|
|
|
+ Keyboard.keyPress(KEYS.ARROW_UP);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // Check if x position did not change
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(0);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns two objects correctly to the bottom", () => {
|
|
|
|
+ createAndSelectTwoRectangles();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+
|
|
|
|
+ Keyboard.withModifierKeys({ ctrl: true, shift: true }, () => {
|
|
|
|
+ Keyboard.keyPress(KEYS.ARROW_DOWN);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // Check if x position did not change
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(110);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns two objects correctly to the left", () => {
|
|
|
|
+ createAndSelectTwoRectangles();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+
|
|
|
|
+ Keyboard.withModifierKeys({ ctrl: true, shift: true }, () => {
|
|
|
|
+ Keyboard.keyPress(KEYS.ARROW_LEFT);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(0);
|
|
|
|
+
|
|
|
|
+ // Check if y position did not change
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns two objects correctly to the right", () => {
|
|
|
|
+ createAndSelectTwoRectangles();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+
|
|
|
|
+ Keyboard.withModifierKeys({ ctrl: true, shift: true }, () => {
|
|
|
|
+ Keyboard.keyPress(KEYS.ARROW_RIGHT);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(110);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ // Check if y position did not change
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers two objects with different sizes correctly vertically", () => {
|
|
|
|
+ createAndSelectTwoRectanglesWithDifferentSizes();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignVerticallyCentered);
|
|
|
|
+
|
|
|
|
+ // Check if x position did not change
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(60);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(55);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers two objects with different sizes correctly horizontally", () => {
|
|
|
|
+ createAndSelectTwoRectanglesWithDifferentSizes();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(110);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignHorizontallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(60);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(55);
|
|
|
|
+
|
|
|
|
+ // Check if y position did not change
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(110);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+function createAndSelectGroupAndRectangle() {
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down();
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(0, 0);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Select the first element.
|
|
|
|
+ // The second rectangle is already reselected because it was the last element created
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionGroup);
|
|
|
|
+
|
|
|
|
+ mouse.reset();
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(200, 200);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Add the created group to the current selection
|
|
|
|
+ mouse.restorePosition(0, 0);
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+it("aligns a group with another element correctly to the top", () => {
|
|
|
|
+ createAndSelectGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignTop);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(0);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns a group with another element correctly to the bottom", () => {
|
|
|
|
+ createAndSelectGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignBottom);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns a group with another element correctly to the left", () => {
|
|
|
|
+ createAndSelectGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignLeft);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(0);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns a group with another element correctly to the right", () => {
|
|
|
|
+ createAndSelectGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignRight);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers a group with another element correctly vertically", () => {
|
|
|
|
+ createAndSelectGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignVerticallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(50);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(150);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(100);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers a group with another element correctly horizontally", () => {
|
|
|
|
+ createAndSelectGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignHorizontallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(50);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(150);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(100);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+function createAndSelectTwoGroups() {
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down();
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(0, 0);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Select the first element.
|
|
|
|
+ // The second rectangle is already selected because it was the last element created
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionGroup);
|
|
|
|
+
|
|
|
|
+ mouse.reset();
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(200, 200);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down();
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ mouse.restorePosition(200, 200);
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionGroup);
|
|
|
|
+
|
|
|
|
+ // Select the first group.
|
|
|
|
+ // The second group is already selected because it was the last group created
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+it("aligns two groups correctly to the top", () => {
|
|
|
|
+ createAndSelectTwoGroups();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignTop);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(100);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns two groups correctly to the bottom", () => {
|
|
|
|
+ createAndSelectTwoGroups();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignBottom);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(300);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns two groups correctly to the left", () => {
|
|
|
|
+ createAndSelectTwoGroups();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignLeft);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(100);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns two groups correctly to the right", () => {
|
|
|
|
+ createAndSelectTwoGroups();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignRight);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(300);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers two groups correctly vertically", () => {
|
|
|
|
+ createAndSelectTwoGroups();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignVerticallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(200);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers two groups correctly horizontally", () => {
|
|
|
|
+ createAndSelectTwoGroups();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignHorizontallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(200);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+function createAndSelectNestedGroupAndRectangle() {
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down();
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(0, 0);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Select the first element.
|
|
|
|
+ // The second rectangle is already reselected because it was the last element created
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // Create first group of rectangles
|
|
|
|
+ h.app.actionManager.executeAction(actionGroup);
|
|
|
|
+
|
|
|
|
+ mouse.reset();
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(200, 200);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Add group to current selection
|
|
|
|
+ mouse.restorePosition(0, 0);
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // Create the nested group
|
|
|
|
+ h.app.actionManager.executeAction(actionGroup);
|
|
|
|
+
|
|
|
|
+ mouse.reset();
|
|
|
|
+ UI.clickTool("rectangle");
|
|
|
|
+ mouse.down(300, 300);
|
|
|
|
+ mouse.up(100, 100);
|
|
|
|
+
|
|
|
|
+ // Select the nested group, the rectangle is already selected
|
|
|
|
+ mouse.reset();
|
|
|
|
+ Keyboard.withModifierKeys({ shift: true }, () => {
|
|
|
|
+ mouse.click();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+it("aligns nested group and other element correctly to the top", () => {
|
|
|
|
+ createAndSelectNestedGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignTop);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(0);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns nested group and other element correctly to the bottom", () => {
|
|
|
|
+ createAndSelectNestedGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignBottom);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(300);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns nested group and other element correctly to the left", () => {
|
|
|
|
+ createAndSelectNestedGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignLeft);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(0);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("aligns nested group and other element correctly to the right", () => {
|
|
|
|
+ createAndSelectNestedGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignRight);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(300);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers nested group and other element correctly vertically", () => {
|
|
|
|
+ createAndSelectNestedGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignVerticallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].y).toEqual(50);
|
|
|
|
+ expect(API.getSelectedElements()[1].y).toEqual(150);
|
|
|
|
+ expect(API.getSelectedElements()[2].y).toEqual(250);
|
|
|
|
+ expect(API.getSelectedElements()[3].y).toEqual(150);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+it("centers nested group and other element correctly horizontally", () => {
|
|
|
|
+ createAndSelectNestedGroupAndRectangle();
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(0);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(100);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(200);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(300);
|
|
|
|
+
|
|
|
|
+ h.app.actionManager.executeAction(actionAlignHorizontallyCentered);
|
|
|
|
+
|
|
|
|
+ expect(API.getSelectedElements()[0].x).toEqual(50);
|
|
|
|
+ expect(API.getSelectedElements()[1].x).toEqual(150);
|
|
|
|
+ expect(API.getSelectedElements()[2].x).toEqual(250);
|
|
|
|
+ expect(API.getSelectedElements()[3].x).toEqual(150);
|
|
|
|
+});
|