@pie-lib/graphing-solution-set 4.0.12 → 4.1.0-beta
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 -40
- package/lib/__tests__/bg.test.js +282 -0
- package/lib/__tests__/bg.test.js.map +1 -0
- package/lib/__tests__/coordinates-label.test.js +276 -0
- package/lib/__tests__/coordinates-label.test.js.map +1 -0
- package/lib/__tests__/graph-with-controls.test.js +256 -0
- package/lib/__tests__/graph-with-controls.test.js.map +1 -0
- package/lib/__tests__/graph.test.js +113 -0
- package/lib/__tests__/graph.test.js.map +1 -0
- package/lib/__tests__/grid-setup.test.js +729 -0
- package/lib/__tests__/grid-setup.test.js.map +1 -0
- package/lib/__tests__/grid.test.js +29 -0
- package/lib/__tests__/grid.test.js.map +1 -0
- package/lib/__tests__/labels.test.js +45 -0
- package/lib/__tests__/labels.test.js.map +1 -0
- package/lib/__tests__/mark-label.test.js +133 -0
- package/lib/__tests__/mark-label.test.js.map +1 -0
- package/lib/__tests__/toggle-bar.test.js +146 -0
- package/lib/__tests__/toggle-bar.test.js.map +1 -0
- package/lib/__tests__/tool-menu.test.js +540 -0
- package/lib/__tests__/tool-menu.test.js.map +1 -0
- package/lib/__tests__/undo-redo.test.js +31 -0
- package/lib/__tests__/undo-redo.test.js.map +1 -0
- package/lib/__tests__/use-debounce.test.js +24 -0
- package/lib/__tests__/use-debounce.test.js.map +1 -0
- package/lib/__tests__/utils.js +70 -0
- package/lib/__tests__/utils.js.map +1 -0
- package/lib/__tests__/utils.test.js +123 -0
- package/lib/__tests__/utils.test.js.map +1 -0
- package/lib/axis/__tests__/arrow.test.js +60 -0
- package/lib/axis/__tests__/arrow.test.js.map +1 -0
- package/lib/axis/__tests__/axes.test.js +160 -0
- package/lib/axis/__tests__/axes.test.js.map +1 -0
- package/lib/container/__tests__/actions.test.js +108 -0
- package/lib/container/__tests__/actions.test.js.map +1 -0
- package/lib/container/__tests__/index.test.js +346 -0
- package/lib/container/__tests__/index.test.js.map +1 -0
- package/lib/container/__tests__/marks.test.js +259 -0
- package/lib/container/__tests__/marks.test.js.map +1 -0
- package/lib/container/__tests__/middleware.test.js +244 -0
- package/lib/container/__tests__/middleware.test.js.map +1 -0
- package/lib/container/__tests__/reducer.test.js +450 -0
- package/lib/container/__tests__/reducer.test.js.map +1 -0
- package/lib/tools/line/__tests__/component.test.js +45 -0
- package/lib/tools/line/__tests__/component.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/component.test.js +501 -0
- package/lib/tools/polygon/__tests__/component.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/index.test.js +92 -0
- package/lib/tools/polygon/__tests__/index.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/line.test.js +30 -0
- package/lib/tools/polygon/__tests__/line.test.js.map +1 -0
- package/lib/tools/polygon/__tests__/polygon.test.js +61 -0
- package/lib/tools/polygon/__tests__/polygon.test.js.map +1 -0
- package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
- package/lib/tools/shared/__tests__/arrow-head.test.js.map +1 -0
- package/lib/tools/shared/line/__tests__/index.test.js +725 -0
- package/lib/tools/shared/line/__tests__/index.test.js.map +1 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js +64 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js.map +1 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js +618 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +1 -0
- package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
- package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +1 -0
- package/lib/tools/shared/point/__tests__/arrow.test.js +619 -0
- package/lib/tools/shared/point/__tests__/arrow.test.js.map +1 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js.map +1 -0
- package/package.json +7 -7
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
5
|
+
var _testUtils = require("@pie-lib/test-utils");
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _arrow = _interopRequireDefault(require("../arrow"));
|
|
8
|
+
var _utils = require("../../../../__tests__/utils");
|
|
9
|
+
var _utils2 = require("../../../../utils");
|
|
10
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
jest.mock('../../../../utils', function () {
|
|
13
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('../../../../utils')), {}, {
|
|
14
|
+
thinnerShapesNeeded: jest.fn(function () {
|
|
15
|
+
return false;
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('Arrow', function () {
|
|
20
|
+
var onChange = jest.fn();
|
|
21
|
+
var renderComponent = function renderComponent(extras) {
|
|
22
|
+
var defaults = {
|
|
23
|
+
classes: {},
|
|
24
|
+
className: 'arrow-class',
|
|
25
|
+
onChange: onChange,
|
|
26
|
+
graphProps: (0, _utils.graphProps)(),
|
|
27
|
+
x: 5,
|
|
28
|
+
y: 10,
|
|
29
|
+
angle: 45
|
|
30
|
+
};
|
|
31
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
32
|
+
return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_arrow["default"], props));
|
|
33
|
+
};
|
|
34
|
+
beforeEach(function () {
|
|
35
|
+
onChange = jest.fn();
|
|
36
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(false);
|
|
37
|
+
});
|
|
38
|
+
describe('rendering', function () {
|
|
39
|
+
it('renders without crashing', function () {
|
|
40
|
+
var _renderComponent = renderComponent(),
|
|
41
|
+
container = _renderComponent.container;
|
|
42
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
43
|
+
});
|
|
44
|
+
it('renders a g element with correct class names', function () {
|
|
45
|
+
var _renderComponent2 = renderComponent({
|
|
46
|
+
classes: {
|
|
47
|
+
point: 'point-class'
|
|
48
|
+
},
|
|
49
|
+
className: 'custom-class'
|
|
50
|
+
}),
|
|
51
|
+
container = _renderComponent2.container;
|
|
52
|
+
var gElement = container.querySelector('g');
|
|
53
|
+
expect(gElement).toBeInTheDocument();
|
|
54
|
+
expect(gElement).toHaveClass('point-class');
|
|
55
|
+
expect(gElement).toHaveClass('custom-class');
|
|
56
|
+
});
|
|
57
|
+
it('renders ArrowHead component', function () {
|
|
58
|
+
var _renderComponent3 = renderComponent(),
|
|
59
|
+
container = _renderComponent3.container;
|
|
60
|
+
var polygon = container.querySelector('polygon');
|
|
61
|
+
expect(polygon).toBeInTheDocument();
|
|
62
|
+
});
|
|
63
|
+
it('applies disabled class when disabled is true', function () {
|
|
64
|
+
var _renderComponent4 = renderComponent({
|
|
65
|
+
classes: {
|
|
66
|
+
point: 'point-class',
|
|
67
|
+
disabled: 'disabled-class'
|
|
68
|
+
},
|
|
69
|
+
disabled: true
|
|
70
|
+
}),
|
|
71
|
+
container = _renderComponent4.container;
|
|
72
|
+
var gElement = container.querySelector('g');
|
|
73
|
+
expect(gElement).toHaveClass('disabled-class');
|
|
74
|
+
});
|
|
75
|
+
it('does not apply disabled class when disabled is false', function () {
|
|
76
|
+
var _renderComponent5 = renderComponent({
|
|
77
|
+
classes: {
|
|
78
|
+
point: 'point-class',
|
|
79
|
+
disabled: 'disabled-class'
|
|
80
|
+
},
|
|
81
|
+
disabled: false
|
|
82
|
+
}),
|
|
83
|
+
container = _renderComponent5.container;
|
|
84
|
+
var gElement = container.querySelector('g');
|
|
85
|
+
expect(gElement).not.toHaveClass('disabled-class');
|
|
86
|
+
});
|
|
87
|
+
it('applies correctness class when provided', function () {
|
|
88
|
+
var _renderComponent6 = renderComponent({
|
|
89
|
+
classes: {
|
|
90
|
+
point: 'point-class',
|
|
91
|
+
correct: 'correct-class'
|
|
92
|
+
},
|
|
93
|
+
correctness: 'correct'
|
|
94
|
+
}),
|
|
95
|
+
container = _renderComponent6.container;
|
|
96
|
+
var gElement = container.querySelector('g');
|
|
97
|
+
expect(gElement).toHaveClass('correct-class');
|
|
98
|
+
});
|
|
99
|
+
it('applies incorrect correctness class', function () {
|
|
100
|
+
var _renderComponent7 = renderComponent({
|
|
101
|
+
classes: {
|
|
102
|
+
point: 'point-class',
|
|
103
|
+
incorrect: 'incorrect-class'
|
|
104
|
+
},
|
|
105
|
+
correctness: 'incorrect'
|
|
106
|
+
}),
|
|
107
|
+
container = _renderComponent7.container;
|
|
108
|
+
var gElement = container.querySelector('g');
|
|
109
|
+
expect(gElement).toHaveClass('incorrect-class');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('size calculation', function () {
|
|
113
|
+
it('uses size 14 when thinnerShapesNeeded returns false', function () {
|
|
114
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(false);
|
|
115
|
+
var _renderComponent8 = renderComponent({
|
|
116
|
+
x: 0,
|
|
117
|
+
y: 0
|
|
118
|
+
}),
|
|
119
|
+
container = _renderComponent8.container;
|
|
120
|
+
var polygon = container.querySelector('polygon');
|
|
121
|
+
|
|
122
|
+
// Expected points: "0,0 -14,-7 -14,7"
|
|
123
|
+
expect(polygon).toHaveAttribute('points');
|
|
124
|
+
var points = polygon.getAttribute('points');
|
|
125
|
+
expect(points).toContain('-14');
|
|
126
|
+
});
|
|
127
|
+
it('uses size 12 when thinnerShapesNeeded returns true', function () {
|
|
128
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(true);
|
|
129
|
+
var _renderComponent9 = renderComponent({
|
|
130
|
+
x: 0,
|
|
131
|
+
y: 0
|
|
132
|
+
}),
|
|
133
|
+
container = _renderComponent9.container;
|
|
134
|
+
var polygon = container.querySelector('polygon');
|
|
135
|
+
|
|
136
|
+
// Expected points: "0,0 -12,-6 -12,6"
|
|
137
|
+
expect(polygon).toHaveAttribute('points');
|
|
138
|
+
var points = polygon.getAttribute('points');
|
|
139
|
+
expect(points).toContain('-12');
|
|
140
|
+
});
|
|
141
|
+
it('calls thinnerShapesNeeded with graphProps', function () {
|
|
142
|
+
var gp = (0, _utils.graphProps)();
|
|
143
|
+
renderComponent({
|
|
144
|
+
graphProps: gp
|
|
145
|
+
});
|
|
146
|
+
expect(_utils2.thinnerShapesNeeded).toHaveBeenCalledWith(gp);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe('coordinate scaling', function () {
|
|
150
|
+
it('scales x and y coordinates using graphProps.scale', function () {
|
|
151
|
+
var mockScale = {
|
|
152
|
+
x: jest.fn(function (n) {
|
|
153
|
+
return n * 10;
|
|
154
|
+
}),
|
|
155
|
+
y: jest.fn(function (n) {
|
|
156
|
+
return n * 20;
|
|
157
|
+
})
|
|
158
|
+
};
|
|
159
|
+
var gp = _objectSpread(_objectSpread({}, (0, _utils.graphProps)()), {}, {
|
|
160
|
+
scale: mockScale
|
|
161
|
+
});
|
|
162
|
+
renderComponent({
|
|
163
|
+
x: 5,
|
|
164
|
+
y: 10,
|
|
165
|
+
graphProps: gp
|
|
166
|
+
});
|
|
167
|
+
expect(mockScale.x).toHaveBeenCalledWith(5);
|
|
168
|
+
expect(mockScale.y).toHaveBeenCalledWith(10);
|
|
169
|
+
});
|
|
170
|
+
it('renders arrow with scaled coordinates', function () {
|
|
171
|
+
var mockScale = {
|
|
172
|
+
x: jest.fn(function (n) {
|
|
173
|
+
return n * 2;
|
|
174
|
+
}),
|
|
175
|
+
y: jest.fn(function (n) {
|
|
176
|
+
return n * 3;
|
|
177
|
+
})
|
|
178
|
+
};
|
|
179
|
+
var gp = _objectSpread(_objectSpread({}, (0, _utils.graphProps)()), {}, {
|
|
180
|
+
scale: mockScale
|
|
181
|
+
});
|
|
182
|
+
var _renderComponent0 = renderComponent({
|
|
183
|
+
x: 5,
|
|
184
|
+
y: 10,
|
|
185
|
+
graphProps: gp,
|
|
186
|
+
angle: 0
|
|
187
|
+
}),
|
|
188
|
+
container = _renderComponent0.container;
|
|
189
|
+
var polygon = container.querySelector('polygon');
|
|
190
|
+
|
|
191
|
+
// scaledX = 5 * 2 = 10, scaledY = 10 * 3 = 30
|
|
192
|
+
// Expected points: "10,30 -4,23 -4,37" (with size 14)
|
|
193
|
+
var points = polygon.getAttribute('points');
|
|
194
|
+
expect(points).toContain('10');
|
|
195
|
+
expect(points).toContain('30');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('angle rotation', function () {
|
|
199
|
+
it('applies rotation transform with negative angle', function () {
|
|
200
|
+
var _renderComponent1 = renderComponent({
|
|
201
|
+
x: 5,
|
|
202
|
+
y: 10,
|
|
203
|
+
angle: 45
|
|
204
|
+
}),
|
|
205
|
+
container = _renderComponent1.container;
|
|
206
|
+
var polygon = container.querySelector('polygon');
|
|
207
|
+
var transform = polygon.getAttribute('transform');
|
|
208
|
+
|
|
209
|
+
// Angle should be negated: rotate(-45, 5, 10)
|
|
210
|
+
expect(transform).toContain('rotate(-45');
|
|
211
|
+
expect(transform).toContain('5');
|
|
212
|
+
expect(transform).toContain('10');
|
|
213
|
+
});
|
|
214
|
+
it('handles zero angle', function () {
|
|
215
|
+
var _renderComponent10 = renderComponent({
|
|
216
|
+
x: 3,
|
|
217
|
+
y: 7,
|
|
218
|
+
angle: 0
|
|
219
|
+
}),
|
|
220
|
+
container = _renderComponent10.container;
|
|
221
|
+
var polygon = container.querySelector('polygon');
|
|
222
|
+
var transform = polygon.getAttribute('transform');
|
|
223
|
+
|
|
224
|
+
// will convert -0 to 0
|
|
225
|
+
expect(transform).toMatch(/rotate\((-)?0/);
|
|
226
|
+
expect(transform).toContain('3');
|
|
227
|
+
expect(transform).toContain('7');
|
|
228
|
+
});
|
|
229
|
+
it('handles negative angle', function () {
|
|
230
|
+
var _renderComponent11 = renderComponent({
|
|
231
|
+
x: 2,
|
|
232
|
+
y: 4,
|
|
233
|
+
angle: -30
|
|
234
|
+
}),
|
|
235
|
+
container = _renderComponent11.container;
|
|
236
|
+
var polygon = container.querySelector('polygon');
|
|
237
|
+
var transform = polygon.getAttribute('transform');
|
|
238
|
+
|
|
239
|
+
// -(-30) = 30
|
|
240
|
+
expect(transform).toContain('rotate(30');
|
|
241
|
+
expect(transform).toContain('2');
|
|
242
|
+
expect(transform).toContain('4');
|
|
243
|
+
});
|
|
244
|
+
it('handles 360 degree angle', function () {
|
|
245
|
+
var _renderComponent12 = renderComponent({
|
|
246
|
+
x: 1,
|
|
247
|
+
y: 1,
|
|
248
|
+
angle: 360
|
|
249
|
+
}),
|
|
250
|
+
container = _renderComponent12.container;
|
|
251
|
+
var polygon = container.querySelector('polygon');
|
|
252
|
+
var transform = polygon.getAttribute('transform');
|
|
253
|
+
expect(transform).toContain('rotate(-360');
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
describe('arrow points calculation', function () {
|
|
257
|
+
it('calculates correct points for arrow head', function () {
|
|
258
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(false);
|
|
259
|
+
var _renderComponent13 = renderComponent({
|
|
260
|
+
x: 0,
|
|
261
|
+
y: 0,
|
|
262
|
+
angle: 0
|
|
263
|
+
}),
|
|
264
|
+
container = _renderComponent13.container;
|
|
265
|
+
var polygon = container.querySelector('polygon');
|
|
266
|
+
|
|
267
|
+
// size = 14
|
|
268
|
+
// points = "0,0 -14,-7 -14, 7" (note the space after comma in the template literal)
|
|
269
|
+
var points = polygon.getAttribute('points');
|
|
270
|
+
expect(points).toContain('0,0');
|
|
271
|
+
expect(points).toContain('-14,-7');
|
|
272
|
+
expect(points).toMatch(/-14,\s*7/);
|
|
273
|
+
});
|
|
274
|
+
it('calculates points with scaled coordinates', function () {
|
|
275
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(false);
|
|
276
|
+
var mockScale = {
|
|
277
|
+
x: jest.fn(function (n) {
|
|
278
|
+
return n;
|
|
279
|
+
}),
|
|
280
|
+
y: jest.fn(function (n) {
|
|
281
|
+
return n;
|
|
282
|
+
})
|
|
283
|
+
};
|
|
284
|
+
var gp = _objectSpread(_objectSpread({}, (0, _utils.graphProps)()), {}, {
|
|
285
|
+
scale: mockScale
|
|
286
|
+
});
|
|
287
|
+
var _renderComponent14 = renderComponent({
|
|
288
|
+
x: 10,
|
|
289
|
+
y: 20,
|
|
290
|
+
graphProps: gp
|
|
291
|
+
}),
|
|
292
|
+
container = _renderComponent14.container;
|
|
293
|
+
var polygon = container.querySelector('polygon');
|
|
294
|
+
|
|
295
|
+
// scaledX = 10, scaledY = 20, size = 14
|
|
296
|
+
// points = "10,20 -4,13 -4, 27" (note the space after comma in the template literal)
|
|
297
|
+
var points = polygon.getAttribute('points');
|
|
298
|
+
expect(points).toContain('10,20');
|
|
299
|
+
expect(points).toContain('-4,13');
|
|
300
|
+
expect(points).toMatch(/-4,\s*27/);
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
describe('props handling', function () {
|
|
304
|
+
it('passes through additional props to g element', function () {
|
|
305
|
+
var _renderComponent15 = renderComponent({
|
|
306
|
+
'data-test': 'arrow-test',
|
|
307
|
+
role: 'graphics-symbol'
|
|
308
|
+
}),
|
|
309
|
+
container = _renderComponent15.container;
|
|
310
|
+
var gElement = container.querySelector('g');
|
|
311
|
+
expect(gElement).toHaveAttribute('data-test', 'arrow-test');
|
|
312
|
+
expect(gElement).toHaveAttribute('role', 'graphics-symbol');
|
|
313
|
+
});
|
|
314
|
+
it('excludes filtered props from g element', function () {
|
|
315
|
+
var _renderComponent16 = renderComponent({
|
|
316
|
+
x: 5,
|
|
317
|
+
y: 10,
|
|
318
|
+
angle: 45,
|
|
319
|
+
disabled: false,
|
|
320
|
+
correctness: 'correct',
|
|
321
|
+
graphProps: (0, _utils.graphProps)()
|
|
322
|
+
}),
|
|
323
|
+
container = _renderComponent16.container;
|
|
324
|
+
var gElement = container.querySelector('g');
|
|
325
|
+
|
|
326
|
+
// These props should not be passed to the g element
|
|
327
|
+
expect(gElement).not.toHaveAttribute('x');
|
|
328
|
+
expect(gElement).not.toHaveAttribute('y');
|
|
329
|
+
expect(gElement).not.toHaveAttribute('angle');
|
|
330
|
+
expect(gElement).not.toHaveAttribute('disabled');
|
|
331
|
+
expect(gElement).not.toHaveAttribute('correctness');
|
|
332
|
+
expect(gElement).not.toHaveAttribute('graphProps');
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
describe('edge cases', function () {
|
|
336
|
+
it('handles zero coordinates', function () {
|
|
337
|
+
var _renderComponent17 = renderComponent({
|
|
338
|
+
x: 0,
|
|
339
|
+
y: 0,
|
|
340
|
+
angle: 0
|
|
341
|
+
}),
|
|
342
|
+
container = _renderComponent17.container;
|
|
343
|
+
var polygon = container.querySelector('polygon');
|
|
344
|
+
expect(polygon).toBeInTheDocument();
|
|
345
|
+
expect(polygon.getAttribute('points')).toBeTruthy();
|
|
346
|
+
expect(polygon.getAttribute('transform')).toBeTruthy();
|
|
347
|
+
});
|
|
348
|
+
it('handles negative coordinates', function () {
|
|
349
|
+
var _renderComponent18 = renderComponent({
|
|
350
|
+
x: -5,
|
|
351
|
+
y: -10,
|
|
352
|
+
angle: 0
|
|
353
|
+
}),
|
|
354
|
+
container = _renderComponent18.container;
|
|
355
|
+
var polygon = container.querySelector('polygon');
|
|
356
|
+
expect(polygon).toBeInTheDocument();
|
|
357
|
+
expect(polygon.getAttribute('points')).toBeTruthy();
|
|
358
|
+
expect(polygon.getAttribute('transform')).toBeTruthy();
|
|
359
|
+
});
|
|
360
|
+
it('handles large coordinates', function () {
|
|
361
|
+
var _renderComponent19 = renderComponent({
|
|
362
|
+
x: 1000,
|
|
363
|
+
y: 2000,
|
|
364
|
+
angle: 0
|
|
365
|
+
}),
|
|
366
|
+
container = _renderComponent19.container;
|
|
367
|
+
var polygon = container.querySelector('polygon');
|
|
368
|
+
expect(polygon).toBeInTheDocument();
|
|
369
|
+
});
|
|
370
|
+
it('handles fractional coordinates', function () {
|
|
371
|
+
var _renderComponent20 = renderComponent({
|
|
372
|
+
x: 3.5,
|
|
373
|
+
y: 7.25,
|
|
374
|
+
angle: 22.5
|
|
375
|
+
}),
|
|
376
|
+
container = _renderComponent20.container;
|
|
377
|
+
var polygon = container.querySelector('polygon');
|
|
378
|
+
expect(polygon).toBeInTheDocument();
|
|
379
|
+
expect(polygon.getAttribute('transform')).toContain('rotate(-22.5');
|
|
380
|
+
});
|
|
381
|
+
it('renders with empty classes prop', function () {
|
|
382
|
+
var _render = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_arrow["default"], {
|
|
383
|
+
x: 5,
|
|
384
|
+
y: 10,
|
|
385
|
+
angle: 45,
|
|
386
|
+
graphProps: (0, _utils.graphProps)(),
|
|
387
|
+
classes: {}
|
|
388
|
+
})),
|
|
389
|
+
container = _render.container;
|
|
390
|
+
var gElement = container.querySelector('g');
|
|
391
|
+
expect(gElement).toBeInTheDocument();
|
|
392
|
+
});
|
|
393
|
+
it('renders without className prop', function () {
|
|
394
|
+
var _render2 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_arrow["default"], {
|
|
395
|
+
x: 5,
|
|
396
|
+
y: 10,
|
|
397
|
+
angle: 45,
|
|
398
|
+
graphProps: (0, _utils.graphProps)(),
|
|
399
|
+
classes: {}
|
|
400
|
+
})),
|
|
401
|
+
container = _render2.container;
|
|
402
|
+
var gElement = container.querySelector('g');
|
|
403
|
+
expect(gElement).toBeInTheDocument();
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
describe('graphProps integration', function () {
|
|
407
|
+
it('works with different domain and range values', function () {
|
|
408
|
+
var gp = (0, _utils.graphProps)(-10, 10, -20, 20);
|
|
409
|
+
var _renderComponent21 = renderComponent({
|
|
410
|
+
graphProps: gp
|
|
411
|
+
}),
|
|
412
|
+
container = _renderComponent21.container;
|
|
413
|
+
expect(container.querySelector('polygon')).toBeInTheDocument();
|
|
414
|
+
expect(_utils2.thinnerShapesNeeded).toHaveBeenCalledWith(gp);
|
|
415
|
+
});
|
|
416
|
+
it('works with custom size in graphProps', function () {
|
|
417
|
+
var gp = _objectSpread(_objectSpread({}, (0, _utils.graphProps)()), {}, {
|
|
418
|
+
size: {
|
|
419
|
+
width: 800,
|
|
420
|
+
height: 600
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
var _renderComponent22 = renderComponent({
|
|
424
|
+
graphProps: gp
|
|
425
|
+
}),
|
|
426
|
+
container = _renderComponent22.container;
|
|
427
|
+
expect(container.querySelector('polygon')).toBeInTheDocument();
|
|
428
|
+
});
|
|
429
|
+
it('handles graphProps with small step values', function () {
|
|
430
|
+
var gp = _objectSpread(_objectSpread({}, (0, _utils.graphProps)()), {}, {
|
|
431
|
+
domain: {
|
|
432
|
+
min: 0,
|
|
433
|
+
max: 10,
|
|
434
|
+
step: 0.1
|
|
435
|
+
},
|
|
436
|
+
range: {
|
|
437
|
+
min: 0,
|
|
438
|
+
max: 10,
|
|
439
|
+
step: 0.1
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(true);
|
|
443
|
+
var _renderComponent23 = renderComponent({
|
|
444
|
+
graphProps: gp
|
|
445
|
+
}),
|
|
446
|
+
container = _renderComponent23.container;
|
|
447
|
+
var polygon = container.querySelector('polygon');
|
|
448
|
+
|
|
449
|
+
// Should use size 12 for thinner shapes
|
|
450
|
+
expect(polygon).toBeInTheDocument();
|
|
451
|
+
expect(_utils2.thinnerShapesNeeded).toHaveBeenCalledWith(gp);
|
|
452
|
+
});
|
|
453
|
+
});
|
|
454
|
+
describe('multiple correctness states', function () {
|
|
455
|
+
it('handles partial correctness', function () {
|
|
456
|
+
var _renderComponent24 = renderComponent({
|
|
457
|
+
classes: {
|
|
458
|
+
point: 'point-class',
|
|
459
|
+
partial: 'partial-class'
|
|
460
|
+
},
|
|
461
|
+
correctness: 'partial'
|
|
462
|
+
}),
|
|
463
|
+
container = _renderComponent24.container;
|
|
464
|
+
var gElement = container.querySelector('g');
|
|
465
|
+
expect(gElement).toHaveClass('partial-class');
|
|
466
|
+
});
|
|
467
|
+
it('handles undefined correctness', function () {
|
|
468
|
+
var _renderComponent25 = renderComponent({
|
|
469
|
+
classes: {
|
|
470
|
+
point: 'point-class'
|
|
471
|
+
},
|
|
472
|
+
correctness: undefined
|
|
473
|
+
}),
|
|
474
|
+
container = _renderComponent25.container;
|
|
475
|
+
var gElement = container.querySelector('g');
|
|
476
|
+
expect(gElement).toHaveClass('point-class');
|
|
477
|
+
});
|
|
478
|
+
it('handles null correctness', function () {
|
|
479
|
+
var _renderComponent26 = renderComponent({
|
|
480
|
+
classes: {
|
|
481
|
+
point: 'point-class'
|
|
482
|
+
},
|
|
483
|
+
correctness: null
|
|
484
|
+
}),
|
|
485
|
+
container = _renderComponent26.container;
|
|
486
|
+
var gElement = container.querySelector('g');
|
|
487
|
+
expect(gElement).toHaveClass('point-class');
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
describe('combined states', function () {
|
|
491
|
+
it('handles disabled and correct states together', function () {
|
|
492
|
+
var _renderComponent27 = renderComponent({
|
|
493
|
+
classes: {
|
|
494
|
+
point: 'point-class',
|
|
495
|
+
disabled: 'disabled-class',
|
|
496
|
+
correct: 'correct-class'
|
|
497
|
+
},
|
|
498
|
+
disabled: true,
|
|
499
|
+
correctness: 'correct'
|
|
500
|
+
}),
|
|
501
|
+
container = _renderComponent27.container;
|
|
502
|
+
var gElement = container.querySelector('g');
|
|
503
|
+
expect(gElement).toHaveClass('point-class');
|
|
504
|
+
expect(gElement).toHaveClass('disabled-class');
|
|
505
|
+
expect(gElement).toHaveClass('correct-class');
|
|
506
|
+
});
|
|
507
|
+
it('handles disabled and incorrect states together', function () {
|
|
508
|
+
var _renderComponent28 = renderComponent({
|
|
509
|
+
classes: {
|
|
510
|
+
point: 'point-class',
|
|
511
|
+
disabled: 'disabled-class',
|
|
512
|
+
incorrect: 'incorrect-class'
|
|
513
|
+
},
|
|
514
|
+
disabled: true,
|
|
515
|
+
correctness: 'incorrect'
|
|
516
|
+
}),
|
|
517
|
+
container = _renderComponent28.container;
|
|
518
|
+
var gElement = container.querySelector('g');
|
|
519
|
+
expect(gElement).toHaveClass('point-class');
|
|
520
|
+
expect(gElement).toHaveClass('disabled-class');
|
|
521
|
+
expect(gElement).toHaveClass('incorrect-class');
|
|
522
|
+
});
|
|
523
|
+
});
|
|
524
|
+
describe('re-rendering', function () {
|
|
525
|
+
it('updates when x coordinate changes', function () {
|
|
526
|
+
var _renderComponent29 = renderComponent({
|
|
527
|
+
x: 5,
|
|
528
|
+
y: 10,
|
|
529
|
+
angle: 0
|
|
530
|
+
}),
|
|
531
|
+
container = _renderComponent29.container,
|
|
532
|
+
rerender = _renderComponent29.rerender;
|
|
533
|
+
var polygon = container.querySelector('polygon');
|
|
534
|
+
var initialPoints = polygon.getAttribute('points');
|
|
535
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_arrow["default"], {
|
|
536
|
+
x: 15,
|
|
537
|
+
y: 10,
|
|
538
|
+
angle: 0,
|
|
539
|
+
graphProps: (0, _utils.graphProps)(),
|
|
540
|
+
classes: {},
|
|
541
|
+
className: "arrow-class"
|
|
542
|
+
}));
|
|
543
|
+
polygon = container.querySelector('polygon');
|
|
544
|
+
var newPoints = polygon.getAttribute('points');
|
|
545
|
+
expect(newPoints).not.toBe(initialPoints);
|
|
546
|
+
});
|
|
547
|
+
it('updates when y coordinate changes', function () {
|
|
548
|
+
var _renderComponent30 = renderComponent({
|
|
549
|
+
x: 5,
|
|
550
|
+
y: 10,
|
|
551
|
+
angle: 0
|
|
552
|
+
}),
|
|
553
|
+
container = _renderComponent30.container,
|
|
554
|
+
rerender = _renderComponent30.rerender;
|
|
555
|
+
var polygon = container.querySelector('polygon');
|
|
556
|
+
var initialPoints = polygon.getAttribute('points');
|
|
557
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_arrow["default"], {
|
|
558
|
+
x: 5,
|
|
559
|
+
y: 20,
|
|
560
|
+
angle: 0,
|
|
561
|
+
graphProps: (0, _utils.graphProps)(),
|
|
562
|
+
classes: {},
|
|
563
|
+
className: "arrow-class"
|
|
564
|
+
}));
|
|
565
|
+
polygon = container.querySelector('polygon');
|
|
566
|
+
var newPoints = polygon.getAttribute('points');
|
|
567
|
+
expect(newPoints).not.toBe(initialPoints);
|
|
568
|
+
});
|
|
569
|
+
it('updates when angle changes', function () {
|
|
570
|
+
var _renderComponent31 = renderComponent({
|
|
571
|
+
x: 5,
|
|
572
|
+
y: 10,
|
|
573
|
+
angle: 0
|
|
574
|
+
}),
|
|
575
|
+
container = _renderComponent31.container,
|
|
576
|
+
rerender = _renderComponent31.rerender;
|
|
577
|
+
var polygon = container.querySelector('polygon');
|
|
578
|
+
var initialTransform = polygon.getAttribute('transform');
|
|
579
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_arrow["default"], {
|
|
580
|
+
x: 5,
|
|
581
|
+
y: 10,
|
|
582
|
+
angle: 90,
|
|
583
|
+
graphProps: (0, _utils.graphProps)(),
|
|
584
|
+
classes: {},
|
|
585
|
+
className: "arrow-class"
|
|
586
|
+
}));
|
|
587
|
+
polygon = container.querySelector('polygon');
|
|
588
|
+
var newTransform = polygon.getAttribute('transform');
|
|
589
|
+
expect(newTransform).not.toBe(initialTransform);
|
|
590
|
+
expect(newTransform).toContain('rotate(-90');
|
|
591
|
+
});
|
|
592
|
+
it('updates when thinnerShapesNeeded result changes', function () {
|
|
593
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(false);
|
|
594
|
+
var _renderComponent32 = renderComponent({
|
|
595
|
+
x: 0,
|
|
596
|
+
y: 0,
|
|
597
|
+
angle: 0
|
|
598
|
+
}),
|
|
599
|
+
container = _renderComponent32.container,
|
|
600
|
+
rerender = _renderComponent32.rerender;
|
|
601
|
+
var polygon = container.querySelector('polygon');
|
|
602
|
+
var initialPoints = polygon.getAttribute('points');
|
|
603
|
+
_utils2.thinnerShapesNeeded.mockReturnValue(true);
|
|
604
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_arrow["default"], {
|
|
605
|
+
x: 0,
|
|
606
|
+
y: 0,
|
|
607
|
+
angle: 0,
|
|
608
|
+
graphProps: (0, _utils.graphProps)(),
|
|
609
|
+
classes: {},
|
|
610
|
+
className: "arrow-class"
|
|
611
|
+
}));
|
|
612
|
+
polygon = container.querySelector('polygon');
|
|
613
|
+
var newPoints = polygon.getAttribute('points');
|
|
614
|
+
// Points should change due to size change (14 vs 12)
|
|
615
|
+
expect(newPoints).not.toBe(initialPoints);
|
|
616
|
+
});
|
|
617
|
+
});
|
|
618
|
+
});
|
|
619
|
+
//# sourceMappingURL=arrow.test.js.map
|