@pie-lib/graphing-solution-set 4.0.20 → 4.0.22-beta.1
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.
- package/CHANGELOG.md +0 -74
- package/package.json +18 -18
- package/LICENSE.md +0 -5
- package/src/__tests__/bg.test.jsx +0 -250
- package/src/__tests__/coordinates-label.test.jsx +0 -243
- package/src/__tests__/graph-with-controls.test.jsx +0 -184
- package/src/__tests__/graph.test.jsx +0 -93
- package/src/__tests__/grid-setup.test.jsx +0 -645
- package/src/__tests__/grid.test.jsx +0 -23
- package/src/__tests__/labels.test.jsx +0 -41
- package/src/__tests__/mark-label.test.jsx +0 -66
- package/src/__tests__/toggle-bar.test.jsx +0 -106
- package/src/__tests__/tool-menu.test.jsx +0 -453
- package/src/__tests__/undo-redo.test.jsx +0 -26
- package/src/__tests__/use-debounce.test.js +0 -21
- package/src/__tests__/utils.js +0 -41
- package/src/__tests__/utils.test.js +0 -105
- package/src/axis/__tests__/arrow.test.jsx +0 -43
- package/src/axis/__tests__/axes.test.jsx +0 -182
- package/src/container/__tests__/actions.test.js +0 -105
- package/src/container/__tests__/index.test.jsx +0 -227
- package/src/container/__tests__/marks.test.js +0 -172
- package/src/container/__tests__/middleware.test.js +0 -235
- package/src/container/__tests__/reducer.test.js +0 -324
- package/src/tools/line/__tests__/component.test.jsx +0 -37
- package/src/tools/polygon/__tests__/component.test.jsx +0 -487
- package/src/tools/polygon/__tests__/index.test.js +0 -65
- package/src/tools/polygon/__tests__/line.test.jsx +0 -23
- package/src/tools/polygon/__tests__/polygon.test.jsx +0 -44
- package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -33
- package/src/tools/shared/line/__tests__/index.test.jsx +0 -553
- package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -56
- package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -488
- package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
- package/src/tools/shared/point/__tests__/arrow.test.jsx +0 -469
- package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
|
@@ -1,487 +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
|
-
// Pure function tests - keep as-is
|
|
13
|
-
describe('buildLines', () => {
|
|
14
|
-
const defaultPoints = [xy(0, 0), xy(1, 1), xy(1, 0)];
|
|
15
|
-
|
|
16
|
-
const assertBuildLines = (points, closed, expected) => {
|
|
17
|
-
it(`builds points and lines for ${points} = ${expected}`, () => {
|
|
18
|
-
const result = buildLines(points);
|
|
19
|
-
expect(result).toMatchObject([
|
|
20
|
-
{ from: xy(0, 0, 0), to: xy(1, 1, 1) },
|
|
21
|
-
{ from: xy(1, 1, 1), to: xy(1, 0, 2) },
|
|
22
|
-
]);
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
assertBuildLines(defaultPoints, true, []);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('swap', () => {
|
|
30
|
-
it('swaps pairs', () => {
|
|
31
|
-
const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(0, 0, 0), xy(3, 3, 0));
|
|
32
|
-
expect(result).toEqual([xy(3, 3, 0), xy(1, 1, 1), xy(2, 2, 2)]);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('swaps first element', () => {
|
|
36
|
-
const result = swap([xy(0, 0, 0), xy(1, 1, 1)], xy(0, 0, 0), xy(5, 5, 0));
|
|
37
|
-
expect(result).toEqual([xy(5, 5, 0), xy(1, 1, 1)]);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('swaps last element', () => {
|
|
41
|
-
const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(2, 2, 2), xy(3, 3, 2));
|
|
42
|
-
expect(result).toEqual([xy(0, 0, 0), xy(1, 1, 1), xy(3, 3, 2)]);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('swaps middle element', () => {
|
|
46
|
-
const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(1, 1, 1), xy(3, 3, 1));
|
|
47
|
-
expect(result).toEqual([xy(0, 0, 0), xy(3, 3, 1), xy(2, 2, 2)]);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
// Note: Instance method tests have been removed. Component behavior should be tested
|
|
52
|
-
// through user interactions and integration tests.
|
|
53
|
-
describe('RawBaseComponent', () => {
|
|
54
|
-
let onChange;
|
|
55
|
-
let onChangeProps;
|
|
56
|
-
let onClosePolygon;
|
|
57
|
-
|
|
58
|
-
beforeEach(() => {
|
|
59
|
-
onChange = jest.fn();
|
|
60
|
-
onChangeProps = jest.fn();
|
|
61
|
-
onClosePolygon = jest.fn();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
const renderComponent = (extras) => {
|
|
65
|
-
const defaults = {
|
|
66
|
-
className: 'className',
|
|
67
|
-
onChange,
|
|
68
|
-
onChangeProps,
|
|
69
|
-
onClosePolygon,
|
|
70
|
-
graphProps: graphProps(),
|
|
71
|
-
points: [],
|
|
72
|
-
};
|
|
73
|
-
const props = { ...defaults, ...extras };
|
|
74
|
-
return render(<RawBaseComponent {...props} />);
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
// used to test items that have labels attached to points
|
|
78
|
-
const labelNode = document.createElement('foreignObject');
|
|
79
|
-
const points = [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B'), xyLabel(0, 2, 2, 'C')];
|
|
80
|
-
const renderWithLabels = (extras) =>
|
|
81
|
-
renderComponent({
|
|
82
|
-
labelNode: labelNode,
|
|
83
|
-
points: points,
|
|
84
|
-
...extras,
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
describe('rendering', () => {
|
|
88
|
-
it('renders without crashing', () => {
|
|
89
|
-
const { container } = renderComponent();
|
|
90
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('renders with labels', () => {
|
|
94
|
-
const { container } = renderWithLabels();
|
|
95
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('renders with multiple points', () => {
|
|
99
|
-
const { container } = renderComponent({
|
|
100
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
101
|
-
});
|
|
102
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('renders with closed polygon', () => {
|
|
106
|
-
const { container } = renderComponent({
|
|
107
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
108
|
-
closed: true,
|
|
109
|
-
});
|
|
110
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('renders with single point', () => {
|
|
114
|
-
const { container } = renderComponent({
|
|
115
|
-
points: [xy(0, 0, 0)],
|
|
116
|
-
});
|
|
117
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('renders with two points', () => {
|
|
121
|
-
const { container } = renderComponent({
|
|
122
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
123
|
-
});
|
|
124
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
it('renders empty polygon', () => {
|
|
128
|
-
const { container } = renderComponent({ points: [] });
|
|
129
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('renders with negative coordinates', () => {
|
|
133
|
-
const { container } = renderComponent({
|
|
134
|
-
points: [xy(-5, -5, 0), xy(-1, -1, 1), xy(-3, -2, 2)],
|
|
135
|
-
});
|
|
136
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it('renders with decimal coordinates', () => {
|
|
140
|
-
const { container } = renderComponent({
|
|
141
|
-
points: [xy(0.5, 0.5, 0), xy(1.5, 1.5, 1), xy(2.5, 0.5, 2)],
|
|
142
|
-
});
|
|
143
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('renders with large coordinate values', () => {
|
|
147
|
-
const { container } = renderComponent({
|
|
148
|
-
points: [xy(100, 100, 0), xy(200, 200, 1), xy(150, 250, 2)],
|
|
149
|
-
});
|
|
150
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
describe('states', () => {
|
|
155
|
-
it('renders in disabled state', () => {
|
|
156
|
-
const { container } = renderComponent({
|
|
157
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
158
|
-
disabled: true,
|
|
159
|
-
});
|
|
160
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('renders in enabled state', () => {
|
|
164
|
-
const { container } = renderComponent({
|
|
165
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
166
|
-
disabled: false,
|
|
167
|
-
});
|
|
168
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('renders with correctness correct', () => {
|
|
172
|
-
const { container } = renderComponent({
|
|
173
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
174
|
-
correctness: 'correct',
|
|
175
|
-
});
|
|
176
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
it('renders with correctness incorrect', () => {
|
|
180
|
-
const { container } = renderComponent({
|
|
181
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
182
|
-
correctness: 'incorrect',
|
|
183
|
-
});
|
|
184
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('renders with building state', () => {
|
|
188
|
-
const { container } = renderComponent({
|
|
189
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
190
|
-
building: true,
|
|
191
|
-
});
|
|
192
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it('renders with fill property', () => {
|
|
196
|
-
const { container } = renderComponent({
|
|
197
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
198
|
-
fill: '#ff0000',
|
|
199
|
-
});
|
|
200
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
describe('labels', () => {
|
|
205
|
-
it('renders with all points labeled', () => {
|
|
206
|
-
const { container } = renderWithLabels();
|
|
207
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
it('renders with partial labels', () => {
|
|
211
|
-
const partialLabels = [xyLabel(0, 0, 0, 'A'), xy(2, 2, 1), xyLabel(0, 2, 2, 'C')];
|
|
212
|
-
const { container } = renderComponent({
|
|
213
|
-
labelNode,
|
|
214
|
-
points: partialLabels,
|
|
215
|
-
});
|
|
216
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
it('renders with empty string labels', () => {
|
|
220
|
-
const emptyLabels = [xyLabel(0, 0, 0, ''), xyLabel(2, 2, 1, ''), xyLabel(0, 2, 2, '')];
|
|
221
|
-
const { container } = renderComponent({
|
|
222
|
-
labelNode,
|
|
223
|
-
points: emptyLabels,
|
|
224
|
-
});
|
|
225
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
it('renders without labelNode', () => {
|
|
229
|
-
const { container } = renderComponent({
|
|
230
|
-
points: [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B')],
|
|
231
|
-
});
|
|
232
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it('renders with labelModeEnabled', () => {
|
|
236
|
-
const { container } = renderWithLabels({ labelModeEnabled: true });
|
|
237
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
it('renders with labelModeEnabled disabled', () => {
|
|
241
|
-
const { container } = renderWithLabels({ labelModeEnabled: false });
|
|
242
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
it('renders with long labels', () => {
|
|
246
|
-
const longLabels = [
|
|
247
|
-
xyLabel(0, 0, 0, 'Very Long Label Text'),
|
|
248
|
-
xyLabel(2, 2, 1, 'Another Long Label'),
|
|
249
|
-
xyLabel(0, 2, 2, 'Yet Another Long Label'),
|
|
250
|
-
];
|
|
251
|
-
const { container } = renderComponent({
|
|
252
|
-
labelNode,
|
|
253
|
-
points: longLabels,
|
|
254
|
-
});
|
|
255
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
describe('polygon shapes', () => {
|
|
260
|
-
it('renders triangle', () => {
|
|
261
|
-
const { container } = renderComponent({
|
|
262
|
-
points: [xy(0, 0, 0), xy(2, 0, 1), xy(1, 2, 2)],
|
|
263
|
-
closed: true,
|
|
264
|
-
});
|
|
265
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it('renders square', () => {
|
|
269
|
-
const { container } = renderComponent({
|
|
270
|
-
points: [xy(0, 0, 0), xy(2, 0, 1), xy(2, 2, 2), xy(0, 2, 3)],
|
|
271
|
-
closed: true,
|
|
272
|
-
});
|
|
273
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
it('renders pentagon', () => {
|
|
277
|
-
const { container } = renderComponent({
|
|
278
|
-
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)],
|
|
279
|
-
closed: true,
|
|
280
|
-
});
|
|
281
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
it('renders irregular polygon', () => {
|
|
285
|
-
const { container } = renderComponent({
|
|
286
|
-
points: [xy(0, 0, 0), xy(3, 1, 1), xy(2, 4, 2), xy(-1, 3, 3)],
|
|
287
|
-
closed: true,
|
|
288
|
-
});
|
|
289
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
describe('props', () => {
|
|
294
|
-
it('passes onChange callback', () => {
|
|
295
|
-
const customOnChange = jest.fn();
|
|
296
|
-
const { container } = renderComponent({
|
|
297
|
-
onChange: customOnChange,
|
|
298
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
299
|
-
});
|
|
300
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
it('passes onChangeProps callback', () => {
|
|
304
|
-
const customOnChangeProps = jest.fn();
|
|
305
|
-
const { container } = renderComponent({
|
|
306
|
-
onChangeProps: customOnChangeProps,
|
|
307
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
308
|
-
});
|
|
309
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
it('passes onClick callback', () => {
|
|
313
|
-
const onClick = jest.fn();
|
|
314
|
-
const { container } = renderComponent({
|
|
315
|
-
onClick,
|
|
316
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
317
|
-
});
|
|
318
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
it('passes onClosePolygon callback', () => {
|
|
322
|
-
const customOnClosePolygon = jest.fn();
|
|
323
|
-
const { container } = renderComponent({
|
|
324
|
-
onClosePolygon: customOnClosePolygon,
|
|
325
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
326
|
-
});
|
|
327
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
it('passes onDragStart callback', () => {
|
|
331
|
-
const onDragStart = jest.fn();
|
|
332
|
-
const { container } = renderComponent({
|
|
333
|
-
onDragStart,
|
|
334
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
335
|
-
});
|
|
336
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
it('passes onDragStop callback', () => {
|
|
340
|
-
const onDragStop = jest.fn();
|
|
341
|
-
const { container } = renderComponent({
|
|
342
|
-
onDragStop,
|
|
343
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
344
|
-
});
|
|
345
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
it('passes coordinatesOnHover', () => {
|
|
349
|
-
const { container } = renderComponent({
|
|
350
|
-
coordinatesOnHover: true,
|
|
351
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
352
|
-
});
|
|
353
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
it('passes graphProps', () => {
|
|
357
|
-
const customGraphProps = graphProps(0, 10, 0, 10);
|
|
358
|
-
const { container } = renderComponent({
|
|
359
|
-
graphProps: customGraphProps,
|
|
360
|
-
points: [xy(5, 5, 0), xy(7, 7, 1)],
|
|
361
|
-
});
|
|
362
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
it('passes gssLineData', () => {
|
|
366
|
-
const gssLineData = { selectedTool: 'solutionSet' };
|
|
367
|
-
const { container } = renderComponent({
|
|
368
|
-
gssLineData,
|
|
369
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
|
|
370
|
-
});
|
|
371
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
372
|
-
});
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
describe('edge cases', () => {
|
|
376
|
-
it('handles points with same coordinates', () => {
|
|
377
|
-
const { container } = renderComponent({
|
|
378
|
-
points: [xy(1, 1, 0), xy(1, 1, 1), xy(1, 1, 2)],
|
|
379
|
-
});
|
|
380
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
it('handles collinear points', () => {
|
|
384
|
-
const { container } = renderComponent({
|
|
385
|
-
points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)],
|
|
386
|
-
});
|
|
387
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
it('handles very close points', () => {
|
|
391
|
-
const { container } = renderComponent({
|
|
392
|
-
points: [xy(1, 1, 0), xy(1.001, 1.001, 1), xy(1.002, 1.002, 2)],
|
|
393
|
-
});
|
|
394
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
it('handles mixed positive and negative coordinates', () => {
|
|
398
|
-
const { container } = renderComponent({
|
|
399
|
-
points: [xy(-5, 5, 0), xy(5, 5, 1), xy(5, -5, 2), xy(-5, -5, 3)],
|
|
400
|
-
closed: true,
|
|
401
|
-
});
|
|
402
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
403
|
-
});
|
|
404
|
-
|
|
405
|
-
it('handles points without explicit index', () => {
|
|
406
|
-
const { container } = renderComponent({
|
|
407
|
-
points: [
|
|
408
|
-
{ x: 0, y: 0 },
|
|
409
|
-
{ x: 1, y: 1 },
|
|
410
|
-
{ x: 2, y: 0 },
|
|
411
|
-
],
|
|
412
|
-
});
|
|
413
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
414
|
-
});
|
|
415
|
-
|
|
416
|
-
it('handles undefined properties', () => {
|
|
417
|
-
const { container } = renderComponent({
|
|
418
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
419
|
-
disabled: undefined,
|
|
420
|
-
correctness: undefined,
|
|
421
|
-
building: undefined,
|
|
422
|
-
fill: undefined,
|
|
423
|
-
});
|
|
424
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
425
|
-
});
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
describe('integration', () => {
|
|
429
|
-
it('renders complete closed polygon with all features', () => {
|
|
430
|
-
const { container } = renderComponent({
|
|
431
|
-
points: points,
|
|
432
|
-
closed: true,
|
|
433
|
-
labelNode,
|
|
434
|
-
labelModeEnabled: true,
|
|
435
|
-
coordinatesOnHover: true,
|
|
436
|
-
correctness: 'correct',
|
|
437
|
-
disabled: false,
|
|
438
|
-
fill: '#00ff00',
|
|
439
|
-
gssLineData: { selectedTool: 'solutionSet' },
|
|
440
|
-
onChange: jest.fn(),
|
|
441
|
-
onChangeProps: jest.fn(),
|
|
442
|
-
onClosePolygon: jest.fn(),
|
|
443
|
-
onClick: jest.fn(),
|
|
444
|
-
onDragStart: jest.fn(),
|
|
445
|
-
onDragStop: jest.fn(),
|
|
446
|
-
});
|
|
447
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
448
|
-
});
|
|
449
|
-
|
|
450
|
-
it('renders building polygon', () => {
|
|
451
|
-
const { container } = renderComponent({
|
|
452
|
-
points: [xy(0, 0, 0), xy(1, 1, 1)],
|
|
453
|
-
building: true,
|
|
454
|
-
closed: false,
|
|
455
|
-
});
|
|
456
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
457
|
-
});
|
|
458
|
-
|
|
459
|
-
it('renders disabled polygon with labels', () => {
|
|
460
|
-
const { container } = renderComponent({
|
|
461
|
-
points: points,
|
|
462
|
-
labelNode,
|
|
463
|
-
disabled: true,
|
|
464
|
-
closed: true,
|
|
465
|
-
});
|
|
466
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
it('renders polygon in solution set mode', () => {
|
|
470
|
-
const { container } = renderComponent({
|
|
471
|
-
points: points,
|
|
472
|
-
closed: true,
|
|
473
|
-
gssLineData: { selectedTool: 'solutionSet' },
|
|
474
|
-
});
|
|
475
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
476
|
-
});
|
|
477
|
-
|
|
478
|
-
it('renders polygon with incorrect correctness', () => {
|
|
479
|
-
const { container } = renderComponent({
|
|
480
|
-
points: points,
|
|
481
|
-
closed: true,
|
|
482
|
-
correctness: 'incorrect',
|
|
483
|
-
});
|
|
484
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
485
|
-
});
|
|
486
|
-
});
|
|
487
|
-
});
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { addPointToArray, tool } from '../index';
|
|
2
|
-
|
|
3
|
-
const xy = (x, y) => ({ x, y });
|
|
4
|
-
|
|
5
|
-
describe('polygon', () => {
|
|
6
|
-
describe('addPointToArray', () => {
|
|
7
|
-
const assertAddPoint = (point, arr, expected) => {
|
|
8
|
-
it(`returns ${expected} when adding ${point} to ${arr}`, () => {
|
|
9
|
-
const result = addPointToArray(point, arr);
|
|
10
|
-
expect(result).toEqual(expected);
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
assertAddPoint(xy(0, 0), [], { closed: false, points: [xy(0, 0)] });
|
|
14
|
-
assertAddPoint(xy(0, 0), [xy(0, 0)], { closed: false, points: [xy(0, 0)] });
|
|
15
|
-
assertAddPoint(xy(1, 1), [xy(0, 0)], {
|
|
16
|
-
closed: false,
|
|
17
|
-
points: [xy(0, 0), xy(1, 1)],
|
|
18
|
-
});
|
|
19
|
-
assertAddPoint(xy(1, 1), [xy(0, 0)], {
|
|
20
|
-
closed: false,
|
|
21
|
-
points: [xy(0, 0), xy(1, 1)],
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
describe('tool', () => {
|
|
27
|
-
let t;
|
|
28
|
-
beforeEach(() => {
|
|
29
|
-
t = tool();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('creates polygon type', () => {
|
|
33
|
-
expect(t.type).toEqual('polygon');
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe('complete', () => {
|
|
37
|
-
it('closes polygon', () => {
|
|
38
|
-
expect(t.complete()).toEqual({ building: false, closed: true });
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
describe('addPoint', () => {
|
|
43
|
-
it('creates new point', () => {
|
|
44
|
-
const mark = t.addPoint({ x: 0, y: 0 });
|
|
45
|
-
expect(mark).toEqual({
|
|
46
|
-
type: 'polygon',
|
|
47
|
-
points: [{ x: 0, y: 0 }],
|
|
48
|
-
closed: false,
|
|
49
|
-
building: true,
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('adds the point', () => {
|
|
54
|
-
const mark = t.addPoint({ x: 0, y: 0 }, { points: [{ x: 1, y: 1 }] });
|
|
55
|
-
expect(mark).toEqual({
|
|
56
|
-
building: true,
|
|
57
|
-
closed: false,
|
|
58
|
-
points: [
|
|
59
|
-
{ x: 1, y: 1 },
|
|
60
|
-
{ x: 0, y: 0 },
|
|
61
|
-
],
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { render } from '@pie-lib/test-utils';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Line } from '../line';
|
|
4
|
-
import { graphProps } from '../../../__tests__/utils';
|
|
5
|
-
|
|
6
|
-
describe('Line', () => {
|
|
7
|
-
let onChange = jest.fn();
|
|
8
|
-
const renderComponent = (extras) => {
|
|
9
|
-
const defaults = {
|
|
10
|
-
classes: {},
|
|
11
|
-
className: 'className',
|
|
12
|
-
graphProps: graphProps(),
|
|
13
|
-
};
|
|
14
|
-
const props = { ...defaults, ...extras };
|
|
15
|
-
return render(<Line {...props} />);
|
|
16
|
-
};
|
|
17
|
-
describe('rendering', () => {
|
|
18
|
-
it('renders without crashing', () => {
|
|
19
|
-
const { container } = renderComponent();
|
|
20
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
});
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { render } from '@pie-lib/test-utils';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { getPointString, Polygon } from '../polygon';
|
|
4
|
-
import { graphProps } from '../../../__tests__/utils';
|
|
5
|
-
|
|
6
|
-
const xy = (x, y) => ({ x, y });
|
|
7
|
-
|
|
8
|
-
describe('Polygon', () => {
|
|
9
|
-
const renderComponent = (extras) => {
|
|
10
|
-
const defaults = {
|
|
11
|
-
classes: {},
|
|
12
|
-
className: 'className',
|
|
13
|
-
graphProps: graphProps(),
|
|
14
|
-
closed: false,
|
|
15
|
-
};
|
|
16
|
-
const props = { ...defaults, ...extras };
|
|
17
|
-
return render(<Polygon {...props} />);
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
describe('rendering', () => {
|
|
21
|
-
it('renders without crashing', () => {
|
|
22
|
-
const { container } = renderComponent({ points: [{ x: 1, y: 1 }] });
|
|
23
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// Pure function tests - keep as-is
|
|
29
|
-
describe('getPointString', () => {
|
|
30
|
-
const assertString = (arr, expected) => {
|
|
31
|
-
it('creates: ', () => {
|
|
32
|
-
const result = getPointString(arr, {
|
|
33
|
-
x: jest.fn((n) => n),
|
|
34
|
-
y: jest.fn((n) => n),
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
expect(result).toEqual(expected);
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
assertString([xy(1, 1)], '1,1');
|
|
42
|
-
assertString([xy(1, 1), xy(2, 1)], '1,1 2,1');
|
|
43
|
-
assertString([xy(1, 1), xy(2, 1), xy(4, 4)], '1,1 2,1 4,4');
|
|
44
|
-
});
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { render } from '@pie-lib/test-utils';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { ArrowHead, ArrowMarker } from '../arrow-head';
|
|
4
|
-
|
|
5
|
-
describe('ArrowHead', () => {
|
|
6
|
-
const renderComponent = (extras) => {
|
|
7
|
-
const defaults = { size: 10, transform: '' };
|
|
8
|
-
const props = { ...defaults, ...extras };
|
|
9
|
-
return render(<ArrowHead {...props} />);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
describe('rendering', () => {
|
|
13
|
-
it('renders without crashing', () => {
|
|
14
|
-
const { container } = renderComponent();
|
|
15
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
describe('ArrowMarker', () => {
|
|
21
|
-
const renderComponent = (extras) => {
|
|
22
|
-
const defaults = { id: 'id', size: 10, className: 'className' };
|
|
23
|
-
const props = { ...defaults, ...extras };
|
|
24
|
-
return render(<ArrowMarker {...props} />);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
describe('rendering', () => {
|
|
28
|
-
it('renders without crashing', () => {
|
|
29
|
-
const { container } = renderComponent();
|
|
30
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
});
|