move.test.tsx 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. import { render, fireEvent } from "./test-utils";
  4. import { App } from "../index";
  5. import * as Renderer from "../renderer/renderScene";
  6. // Unmount ReactDOM from root
  7. ReactDOM.unmountComponentAtNode(document.getElementById("root")!);
  8. const renderScene = jest.spyOn(Renderer, "renderScene");
  9. beforeEach(() => {
  10. localStorage.clear();
  11. renderScene.mockClear();
  12. });
  13. describe("move element", () => {
  14. it("rectangle", () => {
  15. const { getByToolName, container } = render(<App />);
  16. const canvas = container.querySelector("canvas")!;
  17. {
  18. // create element
  19. const tool = getByToolName("rectangle");
  20. fireEvent.click(tool);
  21. fireEvent.mouseDown(canvas, { clientX: 30, clientY: 20 });
  22. fireEvent.mouseMove(canvas, { clientX: 60, clientY: 70 });
  23. fireEvent.mouseUp(canvas);
  24. expect(renderScene).toHaveBeenCalledTimes(4);
  25. const elements = renderScene.mock.calls[3][0];
  26. const selectionElement = renderScene.mock.calls[3][1];
  27. expect(selectionElement).toBeNull();
  28. expect(elements.length).toEqual(1);
  29. expect(elements[0].isSelected).toBeTruthy();
  30. expect([elements[0].x, elements[0].y]).toEqual([30, 20]);
  31. renderScene.mockClear();
  32. }
  33. fireEvent.mouseDown(canvas, { clientX: 50, clientY: 20 });
  34. fireEvent.mouseMove(canvas, { clientX: 20, clientY: 40 });
  35. fireEvent.mouseUp(canvas);
  36. expect(renderScene).toHaveBeenCalledTimes(3);
  37. const elements = renderScene.mock.calls[2][0];
  38. expect(renderScene.mock.calls[2][1]).toBeNull();
  39. expect(elements.length).toEqual(1);
  40. expect([elements[0].x, elements[0].y]).toEqual([0, 40]);
  41. });
  42. });
  43. describe("duplicate element on move when ALT is clicked", () => {
  44. it("rectangle", () => {
  45. const { getByToolName, container } = render(<App />);
  46. const canvas = container.querySelector("canvas")!;
  47. {
  48. // create element
  49. const tool = getByToolName("rectangle");
  50. fireEvent.click(tool);
  51. fireEvent.mouseDown(canvas, { clientX: 30, clientY: 20 });
  52. fireEvent.mouseMove(canvas, { clientX: 60, clientY: 70 });
  53. fireEvent.mouseUp(canvas);
  54. expect(renderScene).toHaveBeenCalledTimes(4);
  55. const elements = renderScene.mock.calls[3][0];
  56. const selectionElement = renderScene.mock.calls[3][1];
  57. expect(selectionElement).toBeNull();
  58. expect(elements.length).toEqual(1);
  59. expect(elements[0].isSelected).toBeTruthy();
  60. expect([elements[0].x, elements[0].y]).toEqual([30, 20]);
  61. renderScene.mockClear();
  62. }
  63. fireEvent.mouseDown(canvas, { clientX: 50, clientY: 20, altKey: true });
  64. fireEvent.mouseMove(canvas, { clientX: 20, clientY: 40 });
  65. fireEvent.mouseUp(canvas);
  66. expect(renderScene).toHaveBeenCalledTimes(3);
  67. const elements = renderScene.mock.calls[2][0];
  68. expect(renderScene.mock.calls[2][1]).toBeNull();
  69. expect(elements.length).toEqual(2);
  70. // previous element should stay intact
  71. expect([elements[0].x, elements[0].y]).toEqual([30, 20]);
  72. expect([elements[1].x, elements[1].y]).toEqual([0, 40]);
  73. });
  74. });