1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012 |
- import { KEYS } from "@excalidraw/common";
- import {
- actionAlignVerticallyCentered,
- actionAlignHorizontallyCentered,
- actionGroup,
- actionAlignTop,
- actionAlignBottom,
- actionAlignLeft,
- actionAlignRight,
- } from "@excalidraw/excalidraw/actions";
- import { defaultLang, setLanguage } from "@excalidraw/excalidraw/i18n";
- import { Excalidraw } from "@excalidraw/excalidraw";
- import { API } from "@excalidraw/excalidraw/tests/helpers/api";
- import { UI, Pointer, Keyboard } from "@excalidraw/excalidraw/tests/helpers/ui";
- import {
- act,
- unmountComponent,
- render,
- } from "@excalidraw/excalidraw/tests/test-utils";
- const mouse = new Pointer("mouse");
- const 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.moveTo(10, 0);
- mouse.click();
- });
- };
- const 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.moveTo(10, 0);
- mouse.click();
- });
- };
- describe("aligning", () => {
- beforeEach(async () => {
- unmountComponent();
- mouse.reset();
- await act(() => {
- return setLanguage(defaultLang);
- });
- await render(<Excalidraw handleKeyboardGlobally={true} />);
- });
- 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);
- API.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);
- API.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);
- });
- const 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.moveTo(10, 0);
- mouse.click();
- });
- API.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.moveTo(10, 0);
- 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);
- API.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);
- API.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);
- API.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);
- API.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);
- API.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);
- API.executeAction(actionAlignHorizontallyCentered);
- expect(API.getSelectedElements()[0].x).toEqual(50);
- expect(API.getSelectedElements()[1].x).toEqual(150);
- expect(API.getSelectedElements()[2].x).toEqual(100);
- });
- const 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.moveTo(10, 0);
- mouse.click();
- });
- API.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(210, 200);
- Keyboard.withModifierKeys({ shift: true }, () => {
- mouse.click();
- });
- API.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.moveTo(10, 0);
- 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);
- API.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);
- API.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);
- API.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);
- API.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);
- API.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);
- API.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);
- });
- const 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.moveTo(10, 0);
- mouse.click();
- });
- // Create first group of rectangles
- API.executeAction(actionGroup);
- mouse.reset();
- UI.clickTool("rectangle");
- mouse.down(200, 200);
- mouse.up(100, 100);
- // Add group to current selection
- mouse.restorePosition(10, 0);
- Keyboard.withModifierKeys({ shift: true }, () => {
- mouse.click();
- });
- // Create the nested group
- API.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.moveTo(10, 0);
- 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);
- API.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);
- API.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);
- API.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);
- API.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);
- API.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);
- API.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);
- });
- const createGroupAndSelectInEditGroupMode = () => {
- 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.moveTo(10, 0);
- mouse.click();
- });
- API.executeAction(actionGroup);
- mouse.reset();
- mouse.moveTo(10, 0);
- mouse.doubleClick();
- Keyboard.withModifierKeys({ shift: true }, () => {
- mouse.click();
- mouse.moveTo(100, 100);
- mouse.click();
- });
- };
- it("aligns elements within a group while in group edit mode correctly to the top", () => {
- createGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- API.executeAction(actionAlignTop);
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(0);
- });
- it("aligns elements within a group while in group edit mode correctly to the bottom", () => {
- createGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- API.executeAction(actionAlignBottom);
- expect(API.getSelectedElements()[0].y).toEqual(100);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- });
- it("aligns elements within a group while in group edit mode correctly to the left", () => {
- createGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- API.executeAction(actionAlignLeft);
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(0);
- });
- it("aligns elements within a group while in group edit mode correctly to the right", () => {
- createGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- API.executeAction(actionAlignRight);
- expect(API.getSelectedElements()[0].x).toEqual(100);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- });
- it("aligns elements within a group while in group edit mode correctly to the vertical center", () => {
- createGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- API.executeAction(actionAlignVerticallyCentered);
- expect(API.getSelectedElements()[0].y).toEqual(50);
- expect(API.getSelectedElements()[1].y).toEqual(50);
- });
- it("aligns elements within a group while in group edit mode correctly to the horizontal center", () => {
- createGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- API.executeAction(actionAlignHorizontallyCentered);
- expect(API.getSelectedElements()[0].x).toEqual(50);
- expect(API.getSelectedElements()[1].x).toEqual(50);
- });
- const createNestedGroupAndSelectInEditGroupMode = () => {
- 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.moveTo(10, 0);
- mouse.click();
- });
- API.executeAction(actionGroup);
- mouse.reset();
- mouse.moveTo(200, 200);
- // create third element
- UI.clickTool("rectangle");
- mouse.down(0, 0);
- mouse.up(100, 100);
- // third element is already selected, select the initial group and group together
- mouse.reset();
- Keyboard.withModifierKeys({ shift: true }, () => {
- mouse.moveTo(10, 0);
- mouse.click();
- });
- API.executeAction(actionGroup);
- // double click to enter edit mode
- mouse.doubleClick();
- // select nested group and other element within the group
- Keyboard.withModifierKeys({ shift: true }, () => {
- mouse.moveTo(200, 200);
- mouse.click();
- });
- };
- it("aligns element and nested group while in group edit mode correctly to the top", () => {
- createNestedGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- expect(API.getSelectedElements()[2].y).toEqual(200);
- API.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 element and nested group while in group edit mode correctly to the bottom", () => {
- createNestedGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- expect(API.getSelectedElements()[2].y).toEqual(200);
- API.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 element and nested group while in group edit mode correctly to the left", () => {
- createNestedGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- API.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 element and nested group while in group edit mode correctly to the right", () => {
- createNestedGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- API.executeAction(actionAlignRight);
- expect(API.getSelectedElements()[0].x).toEqual(100);
- expect(API.getSelectedElements()[1].x).toEqual(200);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- });
- it("aligns element and nested group while in group edit mode correctly to the vertical center", () => {
- createNestedGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- expect(API.getSelectedElements()[2].y).toEqual(200);
- API.executeAction(actionAlignVerticallyCentered);
- expect(API.getSelectedElements()[0].y).toEqual(50);
- expect(API.getSelectedElements()[1].y).toEqual(150);
- expect(API.getSelectedElements()[2].y).toEqual(100);
- });
- it("aligns elements and nested group within a group while in group edit mode correctly to the horizontal center", () => {
- createNestedGroupAndSelectInEditGroupMode();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- API.executeAction(actionAlignHorizontallyCentered);
- expect(API.getSelectedElements()[0].x).toEqual(50);
- expect(API.getSelectedElements()[1].x).toEqual(150);
- expect(API.getSelectedElements()[2].x).toEqual(100);
- });
- const createAndSelectSingleGroup = () => {
- 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.moveTo(10, 0);
- mouse.click();
- });
- API.executeAction(actionGroup);
- };
- it("aligns elements within a single-selected group correctly to the top", () => {
- createAndSelectSingleGroup();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- API.executeAction(actionAlignTop);
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(0);
- });
- it("aligns elements within a single-selected group correctly to the bottom", () => {
- createAndSelectSingleGroup();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- API.executeAction(actionAlignBottom);
- expect(API.getSelectedElements()[0].y).toEqual(100);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- });
- it("aligns elements within a single-selected group correctly to the left", () => {
- createAndSelectSingleGroup();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- API.executeAction(actionAlignLeft);
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(0);
- });
- it("aligns elements within a single-selected group correctly to the right", () => {
- createAndSelectSingleGroup();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- API.executeAction(actionAlignRight);
- expect(API.getSelectedElements()[0].x).toEqual(100);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- });
- it("aligns elements within a single-selected group correctly to the vertical center", () => {
- createAndSelectSingleGroup();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- API.executeAction(actionAlignVerticallyCentered);
- expect(API.getSelectedElements()[0].y).toEqual(50);
- expect(API.getSelectedElements()[1].y).toEqual(50);
- });
- it("aligns elements within a single-selected group correctly to the horizontal center", () => {
- createAndSelectSingleGroup();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- API.executeAction(actionAlignHorizontallyCentered);
- expect(API.getSelectedElements()[0].x).toEqual(50);
- expect(API.getSelectedElements()[1].x).toEqual(50);
- });
- const createAndSelectSingleGroupWithNestedGroup = () => {
- 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.moveTo(10, 0);
- mouse.click();
- });
- API.executeAction(actionGroup);
- mouse.reset();
- UI.clickTool("rectangle");
- mouse.down(200, 200);
- mouse.up(100, 100);
- // Add group to current selection
- mouse.restorePosition(10, 0);
- Keyboard.withModifierKeys({ shift: true }, () => {
- mouse.click();
- });
- // Create the nested group
- API.executeAction(actionGroup);
- };
- it("aligns elements within a single-selected group containing a nested group correctly to the top", () => {
- createAndSelectSingleGroupWithNestedGroup();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- expect(API.getSelectedElements()[2].y).toEqual(200);
- API.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 elements within a single-selected group containing a nested group correctly to the bottom", () => {
- createAndSelectSingleGroupWithNestedGroup();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- expect(API.getSelectedElements()[2].y).toEqual(200);
- API.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 elements within a single-selected group containing a nested group correctly to the left", () => {
- createAndSelectSingleGroupWithNestedGroup();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- API.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 elements within a single-selected group containing a nested group correctly to the right", () => {
- createAndSelectSingleGroupWithNestedGroup();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- API.executeAction(actionAlignRight);
- expect(API.getSelectedElements()[0].x).toEqual(100);
- expect(API.getSelectedElements()[1].x).toEqual(200);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- });
- it("aligns elements within a single-selected group containing a nested group correctly to the vertical center", () => {
- createAndSelectSingleGroupWithNestedGroup();
- expect(API.getSelectedElements()[0].y).toEqual(0);
- expect(API.getSelectedElements()[1].y).toEqual(100);
- expect(API.getSelectedElements()[2].y).toEqual(200);
- API.executeAction(actionAlignVerticallyCentered);
- expect(API.getSelectedElements()[0].y).toEqual(50);
- expect(API.getSelectedElements()[1].y).toEqual(150);
- expect(API.getSelectedElements()[2].y).toEqual(100);
- });
- it("aligns elements within a single-selected group containing a nested group correctly to the horizontal center", () => {
- createAndSelectSingleGroupWithNestedGroup();
- expect(API.getSelectedElements()[0].x).toEqual(0);
- expect(API.getSelectedElements()[1].x).toEqual(100);
- expect(API.getSelectedElements()[2].x).toEqual(200);
- API.executeAction(actionAlignHorizontallyCentered);
- expect(API.getSelectedElements()[0].x).toEqual(50);
- expect(API.getSelectedElements()[1].x).toEqual(150);
- expect(API.getSelectedElements()[2].x).toEqual(100);
- });
- });
|