move.test.tsx 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. import { render, fireEvent } from "./test-utils";
  4. import { App } from "../components/App";
  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. const { __TEST__: h } = window;
  14. describe("move element", () => {
  15. it("rectangle", () => {
  16. const { getByToolName, container } = render(<App />);
  17. const canvas = container.querySelector("canvas")!;
  18. {
  19. // create element
  20. const tool = getByToolName("rectangle");
  21. fireEvent.click(tool);
  22. fireEvent.pointerDown(canvas, { clientX: 30, clientY: 20 });
  23. fireEvent.pointerMove(canvas, { clientX: 60, clientY: 70 });
  24. fireEvent.pointerUp(canvas);
  25. expect(renderScene).toHaveBeenCalledTimes(4);
  26. expect(h.appState.selectionElement).toBeNull();
  27. expect(h.elements.length).toEqual(1);
  28. expect(h.appState.selectedElementIds[h.elements[0].id]).toBeTruthy();
  29. expect([h.elements[0].x, h.elements[0].y]).toEqual([30, 20]);
  30. renderScene.mockClear();
  31. }
  32. fireEvent.pointerDown(canvas, { clientX: 50, clientY: 20 });
  33. fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40 });
  34. fireEvent.pointerUp(canvas);
  35. expect(renderScene).toHaveBeenCalledTimes(3);
  36. expect(h.appState.selectionElement).toBeNull();
  37. expect(h.elements.length).toEqual(1);
  38. expect([h.elements[0].x, h.elements[0].y]).toEqual([0, 40]);
  39. });
  40. });
  41. describe("duplicate element on move when ALT is clicked", () => {
  42. it("rectangle", () => {
  43. const { getByToolName, container } = render(<App />);
  44. const canvas = container.querySelector("canvas")!;
  45. {
  46. // create element
  47. const tool = getByToolName("rectangle");
  48. fireEvent.click(tool);
  49. fireEvent.pointerDown(canvas, { clientX: 30, clientY: 20 });
  50. fireEvent.pointerMove(canvas, { clientX: 60, clientY: 70 });
  51. fireEvent.pointerUp(canvas);
  52. expect(renderScene).toHaveBeenCalledTimes(4);
  53. expect(h.appState.selectionElement).toBeNull();
  54. expect(h.elements.length).toEqual(1);
  55. expect(h.appState.selectedElementIds[h.elements[0].id]).toBeTruthy();
  56. expect([h.elements[0].x, h.elements[0].y]).toEqual([30, 20]);
  57. renderScene.mockClear();
  58. }
  59. fireEvent.pointerDown(canvas, { clientX: 50, clientY: 20, altKey: true });
  60. fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40 });
  61. fireEvent.pointerUp(canvas);
  62. expect(renderScene).toHaveBeenCalledTimes(3);
  63. expect(h.appState.selectionElement).toBeNull();
  64. expect(h.elements.length).toEqual(2);
  65. // previous element should stay intact
  66. expect([h.elements[0].x, h.elements[0].y]).toEqual([30, 20]);
  67. expect([h.elements[1].x, h.elements[1].y]).toEqual([0, 40]);
  68. });
  69. });