rotate.test.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import ReactDOM from "react-dom";
  2. import { render } from "./test-utils";
  3. import { reseed } from "../random";
  4. import { UI } from "./helpers/ui";
  5. import { Excalidraw } from "../index";
  6. import { expect } from "vitest";
  7. ReactDOM.unmountComponentAtNode(document.getElementById("root")!);
  8. beforeEach(() => {
  9. localStorage.clear();
  10. reseed(7);
  11. });
  12. test("unselected bound arrow updates when rotating its target element", async () => {
  13. await render(<Excalidraw />);
  14. const rectangle = UI.createElement("rectangle", {
  15. width: 200,
  16. height: 100,
  17. });
  18. const arrow = UI.createElement("arrow", {
  19. x: -80,
  20. y: 50,
  21. width: 70,
  22. height: 0,
  23. });
  24. expect(arrow.endBinding?.elementId).toEqual(rectangle.id);
  25. UI.rotate(rectangle, [60, 36], { shift: true });
  26. expect(arrow.endBinding?.elementId).toEqual(rectangle.id);
  27. expect(arrow.x).toBeCloseTo(-80);
  28. expect(arrow.y).toBeCloseTo(50);
  29. expect(arrow.width).toBeCloseTo(110.7, 1);
  30. expect(arrow.height).toBeCloseTo(0);
  31. });
  32. test("unselected bound arrows update when rotating their target elements", async () => {
  33. await render(<Excalidraw />);
  34. const ellipse = UI.createElement("ellipse", {
  35. x: 0,
  36. y: 80,
  37. width: 300,
  38. height: 120,
  39. });
  40. const ellipseArrow = UI.createElement("arrow", {
  41. position: 0,
  42. width: 40,
  43. height: 80,
  44. });
  45. const text = UI.createElement("text", {
  46. position: 220,
  47. });
  48. await UI.editText(text, "test");
  49. const textArrow = UI.createElement("arrow", {
  50. x: 360,
  51. y: 300,
  52. width: -100,
  53. height: -40,
  54. });
  55. expect(ellipseArrow.endBinding?.elementId).toEqual(ellipse.id);
  56. expect(textArrow.endBinding?.elementId).toEqual(text.id);
  57. UI.rotate([ellipse, text], [-82, 23], { shift: true });
  58. expect(ellipseArrow.endBinding?.elementId).toEqual(ellipse.id);
  59. expect(ellipseArrow.x).toEqual(0);
  60. expect(ellipseArrow.y).toEqual(0);
  61. expect(ellipseArrow.points[0]).toEqual([0, 0]);
  62. expect(ellipseArrow.points[1][0]).toBeCloseTo(48.5, 1);
  63. expect(ellipseArrow.points[1][1]).toBeCloseTo(126.5, 1);
  64. expect(textArrow.endBinding?.elementId).toEqual(text.id);
  65. expect(textArrow.x).toEqual(360);
  66. expect(textArrow.y).toEqual(300);
  67. expect(textArrow.points[0]).toEqual([0, 0]);
  68. expect(textArrow.points[1][0]).toBeCloseTo(-94, 1);
  69. expect(textArrow.points[1][1]).toBeCloseTo(-116.1, 1);
  70. });