@pie-lib/graphing 4.1.0-beta.7 → 4.1.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/package.json +3 -3
  2. package/lib/__tests__/bg.test.js +0 -282
  3. package/lib/__tests__/bg.test.js.map +0 -1
  4. package/lib/__tests__/coordinates-label.test.js +0 -276
  5. package/lib/__tests__/coordinates-label.test.js.map +0 -1
  6. package/lib/__tests__/graph-with-controls.test.js +0 -275
  7. package/lib/__tests__/graph-with-controls.test.js.map +0 -1
  8. package/lib/__tests__/graph.test.js +0 -927
  9. package/lib/__tests__/graph.test.js.map +0 -1
  10. package/lib/__tests__/grid-setup.test.js +0 -729
  11. package/lib/__tests__/grid-setup.test.js.map +0 -1
  12. package/lib/__tests__/grid.test.js +0 -29
  13. package/lib/__tests__/grid.test.js.map +0 -1
  14. package/lib/__tests__/key-legend.test.js +0 -321
  15. package/lib/__tests__/key-legend.test.js.map +0 -1
  16. package/lib/__tests__/label-svg-icon.test.js +0 -373
  17. package/lib/__tests__/label-svg-icon.test.js.map +0 -1
  18. package/lib/__tests__/labels.test.js +0 -61
  19. package/lib/__tests__/labels.test.js.map +0 -1
  20. package/lib/__tests__/mark-label.test.js +0 -133
  21. package/lib/__tests__/mark-label.test.js.map +0 -1
  22. package/lib/__tests__/toggle-bar.test.js +0 -197
  23. package/lib/__tests__/toggle-bar.test.js.map +0 -1
  24. package/lib/__tests__/tool-menu.test.js +0 -151
  25. package/lib/__tests__/tool-menu.test.js.map +0 -1
  26. package/lib/__tests__/undo-redo.test.js +0 -31
  27. package/lib/__tests__/undo-redo.test.js.map +0 -1
  28. package/lib/__tests__/use-debounce.test.js +0 -24
  29. package/lib/__tests__/use-debounce.test.js.map +0 -1
  30. package/lib/__tests__/utils.js +0 -70
  31. package/lib/__tests__/utils.js.map +0 -1
  32. package/lib/__tests__/utils.test.js +0 -123
  33. package/lib/__tests__/utils.test.js.map +0 -1
  34. package/lib/axis/__tests__/arrow.test.js +0 -60
  35. package/lib/axis/__tests__/arrow.test.js.map +0 -1
  36. package/lib/axis/__tests__/axes.test.js +0 -195
  37. package/lib/axis/__tests__/axes.test.js.map +0 -1
  38. package/lib/container/__tests__/actions.test.js +0 -108
  39. package/lib/container/__tests__/actions.test.js.map +0 -1
  40. package/lib/container/__tests__/index.test.js +0 -503
  41. package/lib/container/__tests__/index.test.js.map +0 -1
  42. package/lib/container/__tests__/marks.test.js +0 -259
  43. package/lib/container/__tests__/marks.test.js.map +0 -1
  44. package/lib/container/__tests__/middleware.test.js +0 -244
  45. package/lib/container/__tests__/middleware.test.js.map +0 -1
  46. package/lib/container/__tests__/reducer.test.js +0 -450
  47. package/lib/container/__tests__/reducer.test.js.map +0 -1
  48. package/lib/tools/absolute/__tests__/component.test.js +0 -65
  49. package/lib/tools/absolute/__tests__/component.test.js.map +0 -1
  50. package/lib/tools/circle/__tests__/bg-circle.test.js +0 -33
  51. package/lib/tools/circle/__tests__/bg-circle.test.js.map +0 -1
  52. package/lib/tools/circle/__tests__/component.test.js +0 -615
  53. package/lib/tools/circle/__tests__/component.test.js.map +0 -1
  54. package/lib/tools/circle/__tests__/index.test.js +0 -576
  55. package/lib/tools/circle/__tests__/index.test.js.map +0 -1
  56. package/lib/tools/exponential/__tests__/component.test.js +0 -64
  57. package/lib/tools/exponential/__tests__/component.test.js.map +0 -1
  58. package/lib/tools/exponential/__tests__/index.test.js +0 -828
  59. package/lib/tools/exponential/__tests__/index.test.js.map +0 -1
  60. package/lib/tools/line/__tests__/component.test.js +0 -45
  61. package/lib/tools/line/__tests__/component.test.js.map +0 -1
  62. package/lib/tools/parabola/__tests__/component.test.js +0 -64
  63. package/lib/tools/parabola/__tests__/component.test.js.map +0 -1
  64. package/lib/tools/parabola/__tests__/index.test.js +0 -564
  65. package/lib/tools/parabola/__tests__/index.test.js.map +0 -1
  66. package/lib/tools/point/__tests__/component.test.js +0 -434
  67. package/lib/tools/point/__tests__/component.test.js.map +0 -1
  68. package/lib/tools/point/__tests__/index.test.js +0 -262
  69. package/lib/tools/point/__tests__/index.test.js.map +0 -1
  70. package/lib/tools/polygon/__tests__/component.test.js +0 -485
  71. package/lib/tools/polygon/__tests__/component.test.js.map +0 -1
  72. package/lib/tools/polygon/__tests__/index.test.js +0 -303
  73. package/lib/tools/polygon/__tests__/index.test.js.map +0 -1
  74. package/lib/tools/polygon/__tests__/line.test.js +0 -50
  75. package/lib/tools/polygon/__tests__/line.test.js.map +0 -1
  76. package/lib/tools/polygon/__tests__/polygon.test.js +0 -85
  77. package/lib/tools/polygon/__tests__/polygon.test.js.map +0 -1
  78. package/lib/tools/ray/__tests__/component.test.js +0 -35
  79. package/lib/tools/ray/__tests__/component.test.js.map +0 -1
  80. package/lib/tools/segment/__tests__/component.test.js +0 -35
  81. package/lib/tools/segment/__tests__/component.test.js.map +0 -1
  82. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
  83. package/lib/tools/shared/__tests__/arrow-head.test.js.map +0 -1
  84. package/lib/tools/shared/line/__tests__/index.test.js +0 -124
  85. package/lib/tools/shared/line/__tests__/index.test.js.map +0 -1
  86. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -62
  87. package/lib/tools/shared/line/__tests__/line-path.test.js.map +0 -1
  88. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -90
  89. package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +0 -1
  90. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
  91. package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +0 -1
  92. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
  93. package/lib/tools/shared/point/__tests__/base-point.test.js.map +0 -1
  94. package/lib/tools/sine/__tests__/component.test.js +0 -72
  95. package/lib/tools/sine/__tests__/component.test.js.map +0 -1
  96. package/lib/tools/vector/__tests__/component.test.js +0 -32
  97. package/lib/tools/vector/__tests__/component.test.js.map +0 -1
  98. package/src/__tests__/bg.test.jsx +0 -250
  99. package/src/__tests__/coordinates-label.test.jsx +0 -243
  100. package/src/__tests__/graph-with-controls.test.jsx +0 -198
  101. package/src/__tests__/graph.test.jsx +0 -721
  102. package/src/__tests__/grid-setup.test.jsx +0 -645
  103. package/src/__tests__/grid.test.jsx +0 -22
  104. package/src/__tests__/key-legend.test.jsx +0 -260
  105. package/src/__tests__/label-svg-icon.test.jsx +0 -278
  106. package/src/__tests__/labels.test.jsx +0 -55
  107. package/src/__tests__/mark-label.test.jsx +0 -63
  108. package/src/__tests__/toggle-bar.test.jsx +0 -146
  109. package/src/__tests__/tool-menu.test.jsx +0 -115
  110. package/src/__tests__/undo-redo.test.jsx +0 -24
  111. package/src/__tests__/use-debounce.test.js +0 -21
  112. package/src/__tests__/utils.js +0 -41
  113. package/src/__tests__/utils.test.js +0 -105
  114. package/src/axis/__tests__/arrow.test.jsx +0 -38
  115. package/src/axis/__tests__/axes.test.jsx +0 -216
  116. package/src/container/__tests__/actions.test.js +0 -105
  117. package/src/container/__tests__/index.test.jsx +0 -319
  118. package/src/container/__tests__/marks.test.js +0 -172
  119. package/src/container/__tests__/middleware.test.js +0 -235
  120. package/src/container/__tests__/reducer.test.js +0 -324
  121. package/src/tools/absolute/__tests__/component.test.jsx +0 -53
  122. package/src/tools/circle/__tests__/bg-circle.test.jsx +0 -26
  123. package/src/tools/circle/__tests__/component.test.jsx +0 -494
  124. package/src/tools/circle/__tests__/index.test.js +0 -480
  125. package/src/tools/exponential/__tests__/component.test.jsx +0 -53
  126. package/src/tools/exponential/__tests__/index.test.js +0 -729
  127. package/src/tools/line/__tests__/component.test.jsx +0 -37
  128. package/src/tools/parabola/__tests__/component.test.jsx +0 -48
  129. package/src/tools/parabola/__tests__/index.test.js +0 -470
  130. package/src/tools/point/__tests__/component.test.jsx +0 -349
  131. package/src/tools/point/__tests__/index.test.js +0 -241
  132. package/src/tools/polygon/__tests__/component.test.jsx +0 -471
  133. package/src/tools/polygon/__tests__/index.test.js +0 -294
  134. package/src/tools/polygon/__tests__/line.test.jsx +0 -35
  135. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -61
  136. package/src/tools/ray/__tests__/component.test.jsx +0 -29
  137. package/src/tools/segment/__tests__/component.test.jsx +0 -28
  138. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -31
  139. package/src/tools/shared/line/__tests__/index.test.jsx +0 -109
  140. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -53
  141. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -73
  142. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  143. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  144. package/src/tools/sine/__tests__/component.test.jsx +0 -51
  145. package/src/tools/vector/__tests__/component.test.jsx +0 -25
@@ -1,471 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { graphProps, xy } from '../../../__tests__/utils';
4
-
5
- import { buildLines, RawBaseComponent, swap } from '../component';
6
-
7
- const xyLabel = (x, y, index, label) => ({
8
- ...xy(x, y, index),
9
- label,
10
- });
11
-
12
- describe('buildLines', () => {
13
- const defaultPoints = [xy(0, 0), xy(1, 1), xy(1, 0)];
14
-
15
- const assertBuildLines = (points, closed, expected) => {
16
- it(`builds points and lines for ${points} = ${expected}`, () => {
17
- const result = buildLines(points);
18
- expect(result).toMatchObject([
19
- { from: xy(0, 0, 0), to: xy(1, 1, 1) },
20
- { from: xy(1, 1, 1), to: xy(1, 0, 2) },
21
- ]);
22
- });
23
- };
24
-
25
- assertBuildLines(defaultPoints, true, []);
26
- });
27
-
28
- describe('swap', () => {
29
- it('swaps pairs', () => {
30
- const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(0, 0, 0), xy(3, 3, 0));
31
- expect(result).toEqual([xy(3, 3, 0), xy(1, 1, 1), xy(2, 2, 2)]);
32
- });
33
- });
34
-
35
- describe('RawBaseComponent', () => {
36
- let onChange = jest.fn();
37
- let onChangeProps = jest.fn();
38
- const renderComponent = (extras) => {
39
- const defaults = {
40
- classes: {},
41
- className: 'className',
42
- onChange,
43
- onChangeProps,
44
- onClosePolygon: jest.fn(),
45
- graphProps: graphProps(),
46
- points: [],
47
- };
48
- const props = { ...defaults, ...extras };
49
-
50
- return render(<RawBaseComponent {...props} />);
51
- };
52
-
53
- // used to test items that have labels attached to points
54
- const labelNode = document.createElement('foreignObject');
55
- const points = [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B'), xyLabel(0, 2, 2, 'C')];
56
- const renderWithLabels = (extras) =>
57
- renderComponent({
58
- labelNode: labelNode,
59
- points: points,
60
- ...extras,
61
- });
62
-
63
- describe('rendering', () => {
64
- it('renders without crashing', () => {
65
- const { container } = renderComponent();
66
- expect(container.firstChild).toBeInTheDocument();
67
- });
68
-
69
- it('renders with labels', () => {
70
- const { container } = renderWithLabels();
71
- expect(container.firstChild).toBeInTheDocument();
72
- });
73
-
74
- it('renders with multiple points', () => {
75
- const { container } = renderComponent({
76
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
77
- });
78
- expect(container.firstChild).toBeInTheDocument();
79
- });
80
-
81
- it('renders with closed polygon', () => {
82
- const { container } = renderComponent({
83
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
84
- closed: true,
85
- });
86
- expect(container.firstChild).toBeInTheDocument();
87
- });
88
-
89
- it('renders with single point', () => {
90
- const { container } = renderComponent({
91
- points: [xy(0, 0, 0)],
92
- });
93
- expect(container.firstChild).toBeInTheDocument();
94
- });
95
-
96
- it('renders with two points', () => {
97
- const { container } = renderComponent({
98
- points: [xy(0, 0, 0), xy(1, 1, 1)],
99
- });
100
- expect(container.firstChild).toBeInTheDocument();
101
- });
102
-
103
- it('renders with many points', () => {
104
- const manyPoints = Array.from({ length: 10 }, (_, i) => xy(i, i, i));
105
- const { container } = renderComponent({
106
- points: manyPoints,
107
- });
108
- expect(container.firstChild).toBeInTheDocument();
109
- });
110
-
111
- it('renders with negative coordinates', () => {
112
- const { container } = renderComponent({
113
- points: [xy(-5, -5, 0), xy(-1, -1, 1), xy(-3, -2, 2)],
114
- });
115
- expect(container.firstChild).toBeInTheDocument();
116
- });
117
-
118
- it('renders with decimal coordinates', () => {
119
- const { container } = renderComponent({
120
- points: [xy(0.5, 0.5, 0), xy(1.5, 1.5, 1), xy(2.5, 0.5, 2)],
121
- });
122
- expect(container.firstChild).toBeInTheDocument();
123
- });
124
-
125
- it('renders with zero coordinates', () => {
126
- const { container } = renderComponent({
127
- points: [xy(0, 0, 0), xy(0, 0, 1), xy(0, 0, 2)],
128
- });
129
- expect(container.firstChild).toBeInTheDocument();
130
- });
131
- });
132
-
133
- describe('states', () => {
134
- it('renders in disabled state', () => {
135
- const { container } = renderComponent({
136
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
137
- disabled: true,
138
- });
139
- expect(container.firstChild).toBeInTheDocument();
140
- });
141
-
142
- it('renders in enabled state', () => {
143
- const { container } = renderComponent({
144
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
145
- disabled: false,
146
- });
147
- expect(container.firstChild).toBeInTheDocument();
148
- });
149
-
150
- it('renders with correctness correct', () => {
151
- const { container } = renderComponent({
152
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
153
- correctness: 'correct',
154
- });
155
- expect(container.firstChild).toBeInTheDocument();
156
- });
157
-
158
- it('renders with correctness incorrect', () => {
159
- const { container } = renderComponent({
160
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
161
- correctness: 'incorrect',
162
- });
163
- expect(container.firstChild).toBeInTheDocument();
164
- });
165
-
166
- it('renders with correctness partial', () => {
167
- const { container } = renderComponent({
168
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
169
- correctness: 'partial',
170
- });
171
- expect(container.firstChild).toBeInTheDocument();
172
- });
173
-
174
- it('renders with building state', () => {
175
- const { container } = renderComponent({
176
- points: [xy(0, 0, 0), xy(1, 1, 1)],
177
- building: true,
178
- });
179
- expect(container.firstChild).toBeInTheDocument();
180
- });
181
- });
182
-
183
- describe('labels', () => {
184
- it('renders with all points labeled', () => {
185
- const { container } = renderWithLabels();
186
- expect(container.firstChild).toBeInTheDocument();
187
- });
188
-
189
- it('renders with some points labeled', () => {
190
- const partialLabels = [xyLabel(0, 0, 0, 'A'), xy(2, 2, 1), xyLabel(0, 2, 2, 'C')];
191
- const { container } = renderComponent({
192
- labelNode,
193
- points: partialLabels,
194
- });
195
- expect(container.firstChild).toBeInTheDocument();
196
- });
197
-
198
- it('renders with empty labels', () => {
199
- const emptyLabels = [xyLabel(0, 0, 0, ''), xyLabel(2, 2, 1, ''), xyLabel(0, 2, 2, '')];
200
- const { container } = renderComponent({
201
- labelNode,
202
- points: emptyLabels,
203
- });
204
- expect(container.firstChild).toBeInTheDocument();
205
- });
206
-
207
- it('renders with long labels', () => {
208
- const longLabels = [
209
- xyLabel(0, 0, 0, 'Very Long Label A'),
210
- xyLabel(2, 2, 1, 'Very Long Label B'),
211
- xyLabel(0, 2, 2, 'Very Long Label C'),
212
- ];
213
- const { container } = renderComponent({
214
- labelNode,
215
- points: longLabels,
216
- });
217
- expect(container.firstChild).toBeInTheDocument();
218
- });
219
-
220
- it('renders without labelNode', () => {
221
- const { container } = renderComponent({
222
- points: [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B')],
223
- });
224
- expect(container.firstChild).toBeInTheDocument();
225
- });
226
-
227
- it('renders with labelModeEnabled', () => {
228
- const { container } = renderWithLabels({ labelModeEnabled: true });
229
- expect(container.firstChild).toBeInTheDocument();
230
- });
231
-
232
- it('renders with labelModeEnabled disabled', () => {
233
- const { container } = renderWithLabels({ labelModeEnabled: false });
234
- expect(container.firstChild).toBeInTheDocument();
235
- });
236
- });
237
-
238
- describe('props', () => {
239
- it('passes onChange callback', () => {
240
- const customOnChange = jest.fn();
241
- const { container } = renderComponent({
242
- onChange: customOnChange,
243
- points: [xy(0, 0, 0), xy(1, 1, 1)],
244
- });
245
- expect(container.firstChild).toBeInTheDocument();
246
- });
247
-
248
- it('passes onChangeProps callback', () => {
249
- const customOnChangeProps = jest.fn();
250
- const { container } = renderComponent({
251
- onChangeProps: customOnChangeProps,
252
- points: [xy(0, 0, 0), xy(1, 1, 1)],
253
- });
254
- expect(container.firstChild).toBeInTheDocument();
255
- });
256
-
257
- it('passes onClick callback', () => {
258
- const onClick = jest.fn();
259
- const { container } = renderComponent({
260
- onClick,
261
- points: [xy(0, 0, 0), xy(1, 1, 1)],
262
- });
263
- expect(container.firstChild).toBeInTheDocument();
264
- });
265
-
266
- it('passes onClosePolygon callback', () => {
267
- const onClosePolygon = jest.fn();
268
- const { container } = renderComponent({
269
- onClosePolygon,
270
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
271
- });
272
- expect(container.firstChild).toBeInTheDocument();
273
- });
274
-
275
- it('passes onDragStart callback', () => {
276
- const onDragStart = jest.fn();
277
- const { container } = renderComponent({
278
- onDragStart,
279
- points: [xy(0, 0, 0), xy(1, 1, 1)],
280
- });
281
- expect(container.firstChild).toBeInTheDocument();
282
- });
283
-
284
- it('passes onDragStop callback', () => {
285
- const onDragStop = jest.fn();
286
- const { container } = renderComponent({
287
- onDragStop,
288
- points: [xy(0, 0, 0), xy(1, 1, 1)],
289
- });
290
- expect(container.firstChild).toBeInTheDocument();
291
- });
292
-
293
- it('passes coordinatesOnHover', () => {
294
- const { container } = renderComponent({
295
- coordinatesOnHover: true,
296
- points: [xy(0, 0, 0), xy(1, 1, 1)],
297
- });
298
- expect(container.firstChild).toBeInTheDocument();
299
- });
300
-
301
- it('passes graphProps', () => {
302
- const customGraphProps = graphProps(0, 10, 0, 10);
303
- const { container } = renderComponent({
304
- graphProps: customGraphProps,
305
- points: [xy(5, 5, 0), xy(7, 7, 1)],
306
- });
307
- expect(container.firstChild).toBeInTheDocument();
308
- });
309
- });
310
-
311
- describe('polygon shapes', () => {
312
- it('renders triangle', () => {
313
- const { container } = renderComponent({
314
- points: [xy(0, 0, 0), xy(2, 0, 1), xy(1, 2, 2)],
315
- closed: true,
316
- });
317
- expect(container.firstChild).toBeInTheDocument();
318
- });
319
-
320
- it('renders square', () => {
321
- const { container } = renderComponent({
322
- points: [xy(0, 0, 0), xy(2, 0, 1), xy(2, 2, 2), xy(0, 2, 3)],
323
- closed: true,
324
- });
325
- expect(container.firstChild).toBeInTheDocument();
326
- });
327
-
328
- it('renders pentagon', () => {
329
- const { container } = renderComponent({
330
- points: [xy(1, 0, 0), xy(2, 1, 1), xy(1.5, 2.5, 2), xy(0.5, 2.5, 3), xy(0, 1, 4)],
331
- closed: true,
332
- });
333
- expect(container.firstChild).toBeInTheDocument();
334
- });
335
-
336
- it('renders hexagon', () => {
337
- const { container } = renderComponent({
338
- points: [xy(1, 0, 0), xy(2, 0.5, 1), xy(2, 1.5, 2), xy(1, 2, 3), xy(0, 1.5, 4), xy(0, 0.5, 5)],
339
- closed: true,
340
- });
341
- expect(container.firstChild).toBeInTheDocument();
342
- });
343
-
344
- it('renders irregular polygon', () => {
345
- const { container } = renderComponent({
346
- points: [xy(0, 0, 0), xy(3, 1, 1), xy(2, 4, 2), xy(-1, 3, 3)],
347
- closed: true,
348
- });
349
- expect(container.firstChild).toBeInTheDocument();
350
- });
351
-
352
- it('renders concave polygon', () => {
353
- const { container } = renderComponent({
354
- points: [xy(0, 0, 0), xy(2, 0, 1), xy(2, 2, 2), xy(1, 1, 3), xy(0, 2, 4)],
355
- closed: true,
356
- });
357
- expect(container.firstChild).toBeInTheDocument();
358
- });
359
- });
360
-
361
- describe('edge cases', () => {
362
- it('handles empty points array', () => {
363
- const { container } = renderComponent({ points: [] });
364
- expect(container.firstChild).toBeInTheDocument();
365
- });
366
-
367
- it('handles points with same coordinates', () => {
368
- const { container } = renderComponent({
369
- points: [xy(1, 1, 0), xy(1, 1, 1), xy(1, 1, 2)],
370
- });
371
- expect(container.firstChild).toBeInTheDocument();
372
- });
373
-
374
- it('handles collinear points', () => {
375
- const { container } = renderComponent({
376
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)],
377
- });
378
- expect(container.firstChild).toBeInTheDocument();
379
- });
380
-
381
- it('handles very close points', () => {
382
- const { container } = renderComponent({
383
- points: [xy(1, 1, 0), xy(1.001, 1.001, 1), xy(1.002, 1.002, 2)],
384
- });
385
- expect(container.firstChild).toBeInTheDocument();
386
- });
387
-
388
- it('handles large coordinate values', () => {
389
- const { container } = renderComponent({
390
- points: [xy(1000, 1000, 0), xy(2000, 1000, 1), xy(1500, 2000, 2)],
391
- });
392
- expect(container.firstChild).toBeInTheDocument();
393
- });
394
-
395
- it('handles mixed positive and negative coordinates', () => {
396
- const { container } = renderComponent({
397
- points: [xy(-5, 5, 0), xy(5, 5, 1), xy(5, -5, 2), xy(-5, -5, 3)],
398
- closed: true,
399
- });
400
- expect(container.firstChild).toBeInTheDocument();
401
- });
402
-
403
- it('handles points without index', () => {
404
- const { container } = renderComponent({
405
- points: [
406
- { x: 0, y: 0 },
407
- { x: 1, y: 1 },
408
- { x: 2, y: 0 },
409
- ],
410
- });
411
- expect(container.firstChild).toBeInTheDocument();
412
- });
413
- });
414
-
415
- describe('integration', () => {
416
- it('renders complete closed polygon with all features', () => {
417
- const { container } = renderComponent({
418
- points: points,
419
- closed: true,
420
- labelNode,
421
- labelModeEnabled: true,
422
- coordinatesOnHover: true,
423
- correctness: 'correct',
424
- disabled: false,
425
- onChange: jest.fn(),
426
- onChangeProps: jest.fn(),
427
- onClosePolygon: jest.fn(),
428
- onClick: jest.fn(),
429
- onDragStart: jest.fn(),
430
- onDragStop: jest.fn(),
431
- });
432
- expect(container.firstChild).toBeInTheDocument();
433
- });
434
-
435
- it('renders building polygon', () => {
436
- const { container } = renderComponent({
437
- points: [xy(0, 0, 0), xy(1, 1, 1)],
438
- building: true,
439
- closed: false,
440
- });
441
- expect(container.firstChild).toBeInTheDocument();
442
- });
443
-
444
- it('renders disabled polygon with labels', () => {
445
- const { container } = renderComponent({
446
- points: points,
447
- labelNode,
448
- disabled: true,
449
- closed: true,
450
- });
451
- expect(container.firstChild).toBeInTheDocument();
452
- });
453
-
454
- it('renders polygon with incorrect correctness', () => {
455
- const { container } = renderComponent({
456
- points: points,
457
- closed: true,
458
- correctness: 'incorrect',
459
- });
460
- expect(container.firstChild).toBeInTheDocument();
461
- });
462
- });
463
-
464
- // Note: Instance method tests (dragPoint, dragLine, dragPoly, labelChange, clickPoint)
465
- // have been removed as they test internal implementation details.
466
- // These behaviors should be tested through:
467
- // 1. User interaction tests (drag-and-drop, clicks) - requires complex setup with @dnd-kit
468
- // 2. Integration/E2E tests
469
- // 3. Testing the pure logic functions (buildLines, swap) which are already tested above
470
- // The component's public API (onChange, onChangeProps callbacks) is what matters for RTL testing.
471
- });