@pie-lib/graphing 4.0.14 → 4.1.0-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.
Files changed (99) hide show
  1. package/CHANGELOG.md +0 -46
  2. package/lib/__tests__/bg.test.js +282 -0
  3. package/lib/__tests__/bg.test.js.map +1 -0
  4. package/lib/__tests__/coordinates-label.test.js +276 -0
  5. package/lib/__tests__/coordinates-label.test.js.map +1 -0
  6. package/lib/__tests__/graph-with-controls.test.js +275 -0
  7. package/lib/__tests__/graph-with-controls.test.js.map +1 -0
  8. package/lib/__tests__/graph.test.js +927 -0
  9. package/lib/__tests__/graph.test.js.map +1 -0
  10. package/lib/__tests__/grid-setup.test.js +729 -0
  11. package/lib/__tests__/grid-setup.test.js.map +1 -0
  12. package/lib/__tests__/grid.test.js +29 -0
  13. package/lib/__tests__/grid.test.js.map +1 -0
  14. package/lib/__tests__/key-legend.test.js +321 -0
  15. package/lib/__tests__/key-legend.test.js.map +1 -0
  16. package/lib/__tests__/label-svg-icon.test.js +373 -0
  17. package/lib/__tests__/label-svg-icon.test.js.map +1 -0
  18. package/lib/__tests__/labels.test.js +61 -0
  19. package/lib/__tests__/labels.test.js.map +1 -0
  20. package/lib/__tests__/mark-label.test.js +133 -0
  21. package/lib/__tests__/mark-label.test.js.map +1 -0
  22. package/lib/__tests__/toggle-bar.test.js +197 -0
  23. package/lib/__tests__/toggle-bar.test.js.map +1 -0
  24. package/lib/__tests__/tool-menu.test.js +151 -0
  25. package/lib/__tests__/tool-menu.test.js.map +1 -0
  26. package/lib/__tests__/undo-redo.test.js +31 -0
  27. package/lib/__tests__/undo-redo.test.js.map +1 -0
  28. package/lib/__tests__/use-debounce.test.js +24 -0
  29. package/lib/__tests__/use-debounce.test.js.map +1 -0
  30. package/lib/__tests__/utils.js +70 -0
  31. package/lib/__tests__/utils.js.map +1 -0
  32. package/lib/__tests__/utils.test.js +123 -0
  33. package/lib/__tests__/utils.test.js.map +1 -0
  34. package/lib/axis/__tests__/arrow.test.js +60 -0
  35. package/lib/axis/__tests__/arrow.test.js.map +1 -0
  36. package/lib/axis/__tests__/axes.test.js +195 -0
  37. package/lib/axis/__tests__/axes.test.js.map +1 -0
  38. package/lib/container/__tests__/actions.test.js +108 -0
  39. package/lib/container/__tests__/actions.test.js.map +1 -0
  40. package/lib/container/__tests__/index.test.js +503 -0
  41. package/lib/container/__tests__/index.test.js.map +1 -0
  42. package/lib/container/__tests__/marks.test.js +259 -0
  43. package/lib/container/__tests__/marks.test.js.map +1 -0
  44. package/lib/container/__tests__/middleware.test.js +244 -0
  45. package/lib/container/__tests__/middleware.test.js.map +1 -0
  46. package/lib/container/__tests__/reducer.test.js +450 -0
  47. package/lib/container/__tests__/reducer.test.js.map +1 -0
  48. package/lib/tools/absolute/__tests__/component.test.js +65 -0
  49. package/lib/tools/absolute/__tests__/component.test.js.map +1 -0
  50. package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
  51. package/lib/tools/circle/__tests__/bg-circle.test.js.map +1 -0
  52. package/lib/tools/circle/__tests__/component.test.js +615 -0
  53. package/lib/tools/circle/__tests__/component.test.js.map +1 -0
  54. package/lib/tools/circle/__tests__/index.test.js +576 -0
  55. package/lib/tools/circle/__tests__/index.test.js.map +1 -0
  56. package/lib/tools/exponential/__tests__/component.test.js +64 -0
  57. package/lib/tools/exponential/__tests__/component.test.js.map +1 -0
  58. package/lib/tools/exponential/__tests__/index.test.js +828 -0
  59. package/lib/tools/exponential/__tests__/index.test.js.map +1 -0
  60. package/lib/tools/line/__tests__/component.test.js +45 -0
  61. package/lib/tools/line/__tests__/component.test.js.map +1 -0
  62. package/lib/tools/parabola/__tests__/component.test.js +64 -0
  63. package/lib/tools/parabola/__tests__/component.test.js.map +1 -0
  64. package/lib/tools/parabola/__tests__/index.test.js +564 -0
  65. package/lib/tools/parabola/__tests__/index.test.js.map +1 -0
  66. package/lib/tools/point/__tests__/component.test.js +434 -0
  67. package/lib/tools/point/__tests__/component.test.js.map +1 -0
  68. package/lib/tools/point/__tests__/index.test.js +262 -0
  69. package/lib/tools/point/__tests__/index.test.js.map +1 -0
  70. package/lib/tools/polygon/__tests__/component.test.js +485 -0
  71. package/lib/tools/polygon/__tests__/component.test.js.map +1 -0
  72. package/lib/tools/polygon/__tests__/index.test.js +303 -0
  73. package/lib/tools/polygon/__tests__/index.test.js.map +1 -0
  74. package/lib/tools/polygon/__tests__/line.test.js +50 -0
  75. package/lib/tools/polygon/__tests__/line.test.js.map +1 -0
  76. package/lib/tools/polygon/__tests__/polygon.test.js +85 -0
  77. package/lib/tools/polygon/__tests__/polygon.test.js.map +1 -0
  78. package/lib/tools/ray/__tests__/component.test.js +35 -0
  79. package/lib/tools/ray/__tests__/component.test.js.map +1 -0
  80. package/lib/tools/segment/__tests__/component.test.js +35 -0
  81. package/lib/tools/segment/__tests__/component.test.js.map +1 -0
  82. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  83. package/lib/tools/shared/__tests__/arrow-head.test.js.map +1 -0
  84. package/lib/tools/shared/line/__tests__/index.test.js +124 -0
  85. package/lib/tools/shared/line/__tests__/index.test.js.map +1 -0
  86. package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
  87. package/lib/tools/shared/line/__tests__/line-path.test.js.map +1 -0
  88. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +90 -0
  89. package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +1 -0
  90. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  91. package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +1 -0
  92. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  93. package/lib/tools/shared/point/__tests__/base-point.test.js.map +1 -0
  94. package/lib/tools/sine/__tests__/component.test.js +72 -0
  95. package/lib/tools/sine/__tests__/component.test.js.map +1 -0
  96. package/lib/tools/vector/__tests__/component.test.js +32 -0
  97. package/lib/tools/vector/__tests__/component.test.js.map +1 -0
  98. package/package.json +6 -6
  99. package/LICENSE.md +0 -5
@@ -0,0 +1,564 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _index = require("../index");
5
+ var _component = _interopRequireDefault(require("../component"));
6
+ describe('parabola tool', function () {
7
+ var parabolaTool;
8
+ beforeEach(function () {
9
+ parabolaTool = (0, _index.tool)();
10
+ });
11
+ describe('tool structure', function () {
12
+ it('returns an object with required properties', function () {
13
+ expect(parabolaTool).toHaveProperty('type', 'parabola');
14
+ expect(parabolaTool).toHaveProperty('Component', _component["default"]);
15
+ expect(parabolaTool).toHaveProperty('complete');
16
+ expect(parabolaTool).toHaveProperty('addPoint');
17
+ });
18
+ it('has correct type', function () {
19
+ expect(parabolaTool.type).toBe('parabola');
20
+ });
21
+ it('uses Parabola component', function () {
22
+ expect(parabolaTool.Component).toBe(_component["default"]);
23
+ });
24
+ });
25
+ describe('addPoint', function () {
26
+ describe('no existing mark', function () {
27
+ it('creates new parabola with root point', function () {
28
+ var point = {
29
+ x: 1,
30
+ y: 2
31
+ };
32
+ var result = parabolaTool.addPoint(point, null);
33
+ expect(result).toEqual({
34
+ type: 'parabola',
35
+ root: point,
36
+ edge: undefined,
37
+ closed: false,
38
+ building: true
39
+ });
40
+ });
41
+ it('creates parabola with undefined argument', function () {
42
+ var point = {
43
+ x: 3,
44
+ y: 4
45
+ };
46
+ var result = parabolaTool.addPoint(point);
47
+ expect(result).toEqual({
48
+ type: 'parabola',
49
+ root: point,
50
+ edge: undefined,
51
+ closed: false,
52
+ building: true
53
+ });
54
+ });
55
+ it('marks parabola as building', function () {
56
+ var result = parabolaTool.addPoint({
57
+ x: 0,
58
+ y: 0
59
+ });
60
+ expect(result.building).toBe(true);
61
+ expect(result.closed).toBe(false);
62
+ });
63
+ it('initializes with undefined edge', function () {
64
+ var result = parabolaTool.addPoint({
65
+ x: 1,
66
+ y: 1
67
+ });
68
+ expect(result.edge).toBeUndefined();
69
+ });
70
+ });
71
+ describe('existing mark with root', function () {
72
+ it('adds edge point to complete parabola', function () {
73
+ var root = {
74
+ x: 1,
75
+ y: 2
76
+ };
77
+ var edge = {
78
+ x: 3,
79
+ y: 4
80
+ };
81
+ var mark = {
82
+ type: 'parabola',
83
+ root: root,
84
+ edge: undefined,
85
+ closed: false,
86
+ building: true
87
+ };
88
+ var result = parabolaTool.addPoint(edge, mark);
89
+ expect(result).toEqual({
90
+ type: 'parabola',
91
+ root: root,
92
+ edge: edge,
93
+ closed: true,
94
+ building: false
95
+ });
96
+ });
97
+ it('closes parabola when edge is added', function () {
98
+ var mark = {
99
+ type: 'parabola',
100
+ root: {
101
+ x: 0,
102
+ y: 0
103
+ },
104
+ edge: undefined,
105
+ closed: false,
106
+ building: true
107
+ };
108
+ var result = parabolaTool.addPoint({
109
+ x: 1,
110
+ y: 1
111
+ }, mark);
112
+ expect(result.closed).toBe(true);
113
+ expect(result.building).toBe(false);
114
+ });
115
+ it('preserves other mark properties when adding edge', function () {
116
+ var mark = {
117
+ type: 'parabola',
118
+ root: {
119
+ x: 1,
120
+ y: 2
121
+ },
122
+ edge: undefined,
123
+ closed: false,
124
+ building: true,
125
+ label: 'My Parabola',
126
+ color: 'blue'
127
+ };
128
+ var result = parabolaTool.addPoint({
129
+ x: 3,
130
+ y: 4
131
+ }, mark);
132
+ expect(result.label).toBe('My Parabola');
133
+ expect(result.color).toBe('blue');
134
+ });
135
+ });
136
+ describe('duplicate points', function () {
137
+ it('returns same mark when clicking root point again', function () {
138
+ var root = {
139
+ x: 1,
140
+ y: 2
141
+ };
142
+ var mark = {
143
+ type: 'parabola',
144
+ root: root,
145
+ edge: undefined,
146
+ closed: false,
147
+ building: true
148
+ };
149
+ var result = parabolaTool.addPoint(root, mark);
150
+ expect(result).toBe(mark);
151
+ });
152
+ it('returns same mark when clicking near root point', function () {
153
+ var root = {
154
+ x: 1.00001,
155
+ y: 2.00001
156
+ };
157
+ var nearRoot = {
158
+ x: 1.00002,
159
+ y: 2.00002
160
+ };
161
+ var mark = {
162
+ type: 'parabola',
163
+ root: root,
164
+ edge: undefined,
165
+ closed: false,
166
+ building: true
167
+ };
168
+ var result = parabolaTool.addPoint(nearRoot, mark);
169
+ expect(result).toBe(mark);
170
+ });
171
+ });
172
+ describe('same axes constraint', function () {
173
+ it('returns same mark when clicking on same x-axis as root', function () {
174
+ var root = {
175
+ x: 5,
176
+ y: 3
177
+ };
178
+ var sameXPoint = {
179
+ x: 5,
180
+ y: 7
181
+ };
182
+ var mark = {
183
+ type: 'parabola',
184
+ root: root,
185
+ edge: undefined,
186
+ closed: false,
187
+ building: true
188
+ };
189
+ var result = parabolaTool.addPoint(sameXPoint, mark);
190
+ expect(result).toBe(mark);
191
+ });
192
+ it('returns same mark when clicking on same y-axis as root', function () {
193
+ var root = {
194
+ x: 3,
195
+ y: 5
196
+ };
197
+ var sameYPoint = {
198
+ x: 7,
199
+ y: 5
200
+ };
201
+ var mark = {
202
+ type: 'parabola',
203
+ root: root,
204
+ edge: undefined,
205
+ closed: false,
206
+ building: true
207
+ };
208
+ var result = parabolaTool.addPoint(sameYPoint, mark);
209
+ expect(result).toBe(mark);
210
+ });
211
+ it('allows edge point on different axes', function () {
212
+ var root = {
213
+ x: 3,
214
+ y: 5
215
+ };
216
+ var edge = {
217
+ x: 7,
218
+ y: 9
219
+ };
220
+ var mark = {
221
+ type: 'parabola',
222
+ root: root,
223
+ edge: undefined,
224
+ closed: false,
225
+ building: true
226
+ };
227
+ var result = parabolaTool.addPoint(edge, mark);
228
+ expect(result).not.toBe(mark);
229
+ expect(result.edge).toEqual(edge);
230
+ });
231
+ it('handles points within rounding tolerance on same x-axis', function () {
232
+ var root = {
233
+ x: 5.00001,
234
+ y: 3
235
+ };
236
+ var nearSameX = {
237
+ x: 5.00002,
238
+ y: 7
239
+ };
240
+ var mark = {
241
+ type: 'parabola',
242
+ root: root,
243
+ edge: undefined,
244
+ closed: false,
245
+ building: true
246
+ };
247
+ var result = parabolaTool.addPoint(nearSameX, mark);
248
+ expect(result).toBe(mark);
249
+ });
250
+ it('handles points within rounding tolerance on same y-axis', function () {
251
+ var root = {
252
+ x: 3,
253
+ y: 5.00001
254
+ };
255
+ var nearSameY = {
256
+ x: 7,
257
+ y: 5.00002
258
+ };
259
+ var mark = {
260
+ type: 'parabola',
261
+ root: root,
262
+ edge: undefined,
263
+ closed: false,
264
+ building: true
265
+ };
266
+ var result = parabolaTool.addPoint(nearSameY, mark);
267
+ expect(result).toBe(mark);
268
+ });
269
+ });
270
+ describe('error handling', function () {
271
+ it('throws error when mark exists but has no root', function () {
272
+ var mark = {
273
+ type: 'parabola',
274
+ edge: undefined,
275
+ closed: false,
276
+ building: true
277
+ };
278
+ expect(function () {
279
+ parabolaTool.addPoint({
280
+ x: 1,
281
+ y: 2
282
+ }, mark);
283
+ }).toThrow('no root - should never happen');
284
+ });
285
+ it('throws error when mark has null root', function () {
286
+ var mark = {
287
+ type: 'parabola',
288
+ root: null,
289
+ edge: undefined,
290
+ closed: false,
291
+ building: true
292
+ };
293
+ expect(function () {
294
+ parabolaTool.addPoint({
295
+ x: 1,
296
+ y: 2
297
+ }, mark);
298
+ }).toThrow('no root - should never happen');
299
+ });
300
+ it('throws error when mark has undefined root', function () {
301
+ var mark = {
302
+ type: 'parabola',
303
+ root: undefined,
304
+ edge: undefined,
305
+ closed: false,
306
+ building: true
307
+ };
308
+ expect(function () {
309
+ parabolaTool.addPoint({
310
+ x: 1,
311
+ y: 2
312
+ }, mark);
313
+ }).toThrow('no root - should never happen');
314
+ });
315
+ });
316
+ describe('coordinates', function () {
317
+ it('handles negative coordinates', function () {
318
+ var root = {
319
+ x: -3,
320
+ y: -5
321
+ };
322
+ var result = parabolaTool.addPoint(root);
323
+ expect(result.root).toEqual(root);
324
+ });
325
+ it('handles zero coordinates', function () {
326
+ var root = {
327
+ x: 0,
328
+ y: 0
329
+ };
330
+ var result = parabolaTool.addPoint(root);
331
+ expect(result.root).toEqual(root);
332
+ });
333
+ it('handles decimal coordinates', function () {
334
+ var root = {
335
+ x: 1.5,
336
+ y: 2.75
337
+ };
338
+ var result = parabolaTool.addPoint(root);
339
+ expect(result.root).toEqual(root);
340
+ });
341
+ it('creates parabola with negative root and positive edge', function () {
342
+ var mark = parabolaTool.addPoint({
343
+ x: -2,
344
+ y: -3
345
+ });
346
+ var result = parabolaTool.addPoint({
347
+ x: 1,
348
+ y: 2
349
+ }, mark);
350
+ expect(result.root).toEqual({
351
+ x: -2,
352
+ y: -3
353
+ });
354
+ expect(result.edge).toEqual({
355
+ x: 1,
356
+ y: 2
357
+ });
358
+ });
359
+ });
360
+ });
361
+ describe('complete', function () {
362
+ it('marks parabola as complete and closed', function () {
363
+ var mark = {
364
+ type: 'parabola',
365
+ root: {
366
+ x: 1,
367
+ y: 2
368
+ },
369
+ edge: {
370
+ x: 3,
371
+ y: 4
372
+ },
373
+ closed: false,
374
+ building: true
375
+ };
376
+ var result = parabolaTool.complete(null, mark);
377
+ expect(result).toEqual({
378
+ type: 'parabola',
379
+ root: mark.root,
380
+ edge: mark.edge,
381
+ closed: true,
382
+ building: false
383
+ });
384
+ });
385
+ it('sets building to false', function () {
386
+ var mark = {
387
+ type: 'parabola',
388
+ root: {
389
+ x: 0,
390
+ y: 0
391
+ },
392
+ edge: undefined,
393
+ closed: false,
394
+ building: true
395
+ };
396
+ var result = parabolaTool.complete(null, mark);
397
+ expect(result.building).toBe(false);
398
+ });
399
+ it('sets closed to true', function () {
400
+ var mark = {
401
+ type: 'parabola',
402
+ root: {
403
+ x: 0,
404
+ y: 0
405
+ },
406
+ edge: undefined,
407
+ closed: false,
408
+ building: true
409
+ };
410
+ var result = parabolaTool.complete(null, mark);
411
+ expect(result.closed).toBe(true);
412
+ });
413
+ it('preserves all mark properties', function () {
414
+ var mark = {
415
+ type: 'parabola',
416
+ root: {
417
+ x: 1,
418
+ y: 2
419
+ },
420
+ edge: {
421
+ x: 3,
422
+ y: 4
423
+ },
424
+ closed: false,
425
+ building: true,
426
+ label: 'Test Parabola',
427
+ color: 'green',
428
+ id: 456
429
+ };
430
+ var result = parabolaTool.complete(null, mark);
431
+ expect(result.label).toBe('Test Parabola');
432
+ expect(result.color).toBe('green');
433
+ expect(result.id).toBe(456);
434
+ });
435
+ it('can force complete parabola with only root', function () {
436
+ var mark = {
437
+ type: 'parabola',
438
+ root: {
439
+ x: 1,
440
+ y: 2
441
+ },
442
+ edge: undefined,
443
+ closed: false,
444
+ building: true
445
+ };
446
+ var result = parabolaTool.complete(null, mark);
447
+ expect(result.closed).toBe(true);
448
+ expect(result.building).toBe(false);
449
+ expect(result.edge).toBeUndefined();
450
+ });
451
+ });
452
+ describe('integration scenarios', function () {
453
+ it('creates complete parabola with two clicks', function () {
454
+ var root = {
455
+ x: 0,
456
+ y: 0
457
+ };
458
+ var edge = {
459
+ x: 2,
460
+ y: 4
461
+ };
462
+ var mark = parabolaTool.addPoint(root);
463
+ expect(mark.building).toBe(true);
464
+ expect(mark.closed).toBe(false);
465
+ mark = parabolaTool.addPoint(edge, mark);
466
+ expect(mark.root).toEqual(root);
467
+ expect(mark.edge).toEqual(edge);
468
+ expect(mark.building).toBe(false);
469
+ expect(mark.closed).toBe(true);
470
+ });
471
+ it('ignores clicks on same axis during construction', function () {
472
+ var root = {
473
+ x: 0,
474
+ y: 0
475
+ };
476
+ var mark = parabolaTool.addPoint(root);
477
+
478
+ // Try to add point on same x-axis
479
+ var sameXMark = parabolaTool.addPoint({
480
+ x: 0,
481
+ y: 5
482
+ }, mark);
483
+ expect(sameXMark).toBe(mark);
484
+ expect(sameXMark.edge).toBeUndefined();
485
+
486
+ // Try to add point on same y-axis
487
+ var sameYMark = parabolaTool.addPoint({
488
+ x: 5,
489
+ y: 0
490
+ }, mark);
491
+ expect(sameYMark).toBe(mark);
492
+ expect(sameYMark.edge).toBeUndefined();
493
+
494
+ // Add valid edge point
495
+ var finalMark = parabolaTool.addPoint({
496
+ x: 2,
497
+ y: 4
498
+ }, mark);
499
+ expect(finalMark.edge).toEqual({
500
+ x: 2,
501
+ y: 4
502
+ });
503
+ expect(finalMark.closed).toBe(true);
504
+ });
505
+ it('ignores duplicate clicks on root', function () {
506
+ var root = {
507
+ x: 1,
508
+ y: 2
509
+ };
510
+ var mark = parabolaTool.addPoint(root);
511
+
512
+ // Click root again
513
+ var sameMark = parabolaTool.addPoint(root, mark);
514
+ expect(sameMark).toBe(mark);
515
+ expect(sameMark.edge).toBeUndefined();
516
+ });
517
+ it('handles typical parabola in different quadrants', function () {
518
+ // Quadrant 1
519
+ var mark1 = parabolaTool.addPoint({
520
+ x: 1,
521
+ y: 1
522
+ });
523
+ mark1 = parabolaTool.addPoint({
524
+ x: 2,
525
+ y: 3
526
+ }, mark1);
527
+ expect(mark1.closed).toBe(true);
528
+
529
+ // Quadrant 2
530
+ var mark2 = parabolaTool.addPoint({
531
+ x: -1,
532
+ y: 1
533
+ });
534
+ mark2 = parabolaTool.addPoint({
535
+ x: -2,
536
+ y: 3
537
+ }, mark2);
538
+ expect(mark2.closed).toBe(true);
539
+
540
+ // Quadrant 3
541
+ var mark3 = parabolaTool.addPoint({
542
+ x: -1,
543
+ y: -1
544
+ });
545
+ mark3 = parabolaTool.addPoint({
546
+ x: -2,
547
+ y: -3
548
+ }, mark3);
549
+ expect(mark3.closed).toBe(true);
550
+
551
+ // Quadrant 4
552
+ var mark4 = parabolaTool.addPoint({
553
+ x: 1,
554
+ y: -1
555
+ });
556
+ mark4 = parabolaTool.addPoint({
557
+ x: 2,
558
+ y: -3
559
+ }, mark4);
560
+ expect(mark4.closed).toBe(true);
561
+ });
562
+ });
563
+ });
564
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","names":["_index","require","_component","_interopRequireDefault","describe","parabolaTool","beforeEach","tool","it","expect","toHaveProperty","Parabola","type","toBe","Component","point","x","y","result","addPoint","toEqual","root","edge","undefined","closed","building","toBeUndefined","mark","label","color","nearRoot","sameXPoint","sameYPoint","not","nearSameX","nearSameY","toThrow","complete","id","sameXMark","sameYMark","finalMark","sameMark","mark1","mark2","mark3","mark4"],"sources":["../../../../src/tools/parabola/__tests__/index.test.js"],"sourcesContent":["import { tool } from '../index';\nimport Parabola from '../component';\n\ndescribe('parabola tool', () => {\n let parabolaTool;\n\n beforeEach(() => {\n parabolaTool = tool();\n });\n\n describe('tool structure', () => {\n it('returns an object with required properties', () => {\n expect(parabolaTool).toHaveProperty('type', 'parabola');\n expect(parabolaTool).toHaveProperty('Component', Parabola);\n expect(parabolaTool).toHaveProperty('complete');\n expect(parabolaTool).toHaveProperty('addPoint');\n });\n\n it('has correct type', () => {\n expect(parabolaTool.type).toBe('parabola');\n });\n\n it('uses Parabola component', () => {\n expect(parabolaTool.Component).toBe(Parabola);\n });\n });\n\n describe('addPoint', () => {\n describe('no existing mark', () => {\n it('creates new parabola with root point', () => {\n const point = { x: 1, y: 2 };\n const result = parabolaTool.addPoint(point, null);\n\n expect(result).toEqual({\n type: 'parabola',\n root: point,\n edge: undefined,\n closed: false,\n building: true,\n });\n });\n\n it('creates parabola with undefined argument', () => {\n const point = { x: 3, y: 4 };\n const result = parabolaTool.addPoint(point);\n\n expect(result).toEqual({\n type: 'parabola',\n root: point,\n edge: undefined,\n closed: false,\n building: true,\n });\n });\n\n it('marks parabola as building', () => {\n const result = parabolaTool.addPoint({ x: 0, y: 0 });\n\n expect(result.building).toBe(true);\n expect(result.closed).toBe(false);\n });\n\n it('initializes with undefined edge', () => {\n const result = parabolaTool.addPoint({ x: 1, y: 1 });\n\n expect(result.edge).toBeUndefined();\n });\n });\n\n describe('existing mark with root', () => {\n it('adds edge point to complete parabola', () => {\n const root = { x: 1, y: 2 };\n const edge = { x: 3, y: 4 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(edge, mark);\n\n expect(result).toEqual({\n type: 'parabola',\n root,\n edge,\n closed: true,\n building: false,\n });\n });\n\n it('closes parabola when edge is added', () => {\n const mark = {\n type: 'parabola',\n root: { x: 0, y: 0 },\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint({ x: 1, y: 1 }, mark);\n\n expect(result.closed).toBe(true);\n expect(result.building).toBe(false);\n });\n\n it('preserves other mark properties when adding edge', () => {\n const mark = {\n type: 'parabola',\n root: { x: 1, y: 2 },\n edge: undefined,\n closed: false,\n building: true,\n label: 'My Parabola',\n color: 'blue',\n };\n\n const result = parabolaTool.addPoint({ x: 3, y: 4 }, mark);\n\n expect(result.label).toBe('My Parabola');\n expect(result.color).toBe('blue');\n });\n });\n\n describe('duplicate points', () => {\n it('returns same mark when clicking root point again', () => {\n const root = { x: 1, y: 2 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(root, mark);\n\n expect(result).toBe(mark);\n });\n\n it('returns same mark when clicking near root point', () => {\n const root = { x: 1.00001, y: 2.00001 };\n const nearRoot = { x: 1.00002, y: 2.00002 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(nearRoot, mark);\n\n expect(result).toBe(mark);\n });\n });\n\n describe('same axes constraint', () => {\n it('returns same mark when clicking on same x-axis as root', () => {\n const root = { x: 5, y: 3 };\n const sameXPoint = { x: 5, y: 7 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(sameXPoint, mark);\n\n expect(result).toBe(mark);\n });\n\n it('returns same mark when clicking on same y-axis as root', () => {\n const root = { x: 3, y: 5 };\n const sameYPoint = { x: 7, y: 5 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(sameYPoint, mark);\n\n expect(result).toBe(mark);\n });\n\n it('allows edge point on different axes', () => {\n const root = { x: 3, y: 5 };\n const edge = { x: 7, y: 9 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(edge, mark);\n\n expect(result).not.toBe(mark);\n expect(result.edge).toEqual(edge);\n });\n\n it('handles points within rounding tolerance on same x-axis', () => {\n const root = { x: 5.00001, y: 3 };\n const nearSameX = { x: 5.00002, y: 7 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(nearSameX, mark);\n\n expect(result).toBe(mark);\n });\n\n it('handles points within rounding tolerance on same y-axis', () => {\n const root = { x: 3, y: 5.00001 };\n const nearSameY = { x: 7, y: 5.00002 };\n const mark = {\n type: 'parabola',\n root,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.addPoint(nearSameY, mark);\n\n expect(result).toBe(mark);\n });\n });\n\n describe('error handling', () => {\n it('throws error when mark exists but has no root', () => {\n const mark = {\n type: 'parabola',\n edge: undefined,\n closed: false,\n building: true,\n };\n\n expect(() => {\n parabolaTool.addPoint({ x: 1, y: 2 }, mark);\n }).toThrow('no root - should never happen');\n });\n\n it('throws error when mark has null root', () => {\n const mark = {\n type: 'parabola',\n root: null,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n expect(() => {\n parabolaTool.addPoint({ x: 1, y: 2 }, mark);\n }).toThrow('no root - should never happen');\n });\n\n it('throws error when mark has undefined root', () => {\n const mark = {\n type: 'parabola',\n root: undefined,\n edge: undefined,\n closed: false,\n building: true,\n };\n\n expect(() => {\n parabolaTool.addPoint({ x: 1, y: 2 }, mark);\n }).toThrow('no root - should never happen');\n });\n });\n\n describe('coordinates', () => {\n it('handles negative coordinates', () => {\n const root = { x: -3, y: -5 };\n const result = parabolaTool.addPoint(root);\n\n expect(result.root).toEqual(root);\n });\n\n it('handles zero coordinates', () => {\n const root = { x: 0, y: 0 };\n const result = parabolaTool.addPoint(root);\n\n expect(result.root).toEqual(root);\n });\n\n it('handles decimal coordinates', () => {\n const root = { x: 1.5, y: 2.75 };\n const result = parabolaTool.addPoint(root);\n\n expect(result.root).toEqual(root);\n });\n\n it('creates parabola with negative root and positive edge', () => {\n const mark = parabolaTool.addPoint({ x: -2, y: -3 });\n const result = parabolaTool.addPoint({ x: 1, y: 2 }, mark);\n\n expect(result.root).toEqual({ x: -2, y: -3 });\n expect(result.edge).toEqual({ x: 1, y: 2 });\n });\n });\n });\n\n describe('complete', () => {\n it('marks parabola as complete and closed', () => {\n const mark = {\n type: 'parabola',\n root: { x: 1, y: 2 },\n edge: { x: 3, y: 4 },\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.complete(null, mark);\n\n expect(result).toEqual({\n type: 'parabola',\n root: mark.root,\n edge: mark.edge,\n closed: true,\n building: false,\n });\n });\n\n it('sets building to false', () => {\n const mark = {\n type: 'parabola',\n root: { x: 0, y: 0 },\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.complete(null, mark);\n\n expect(result.building).toBe(false);\n });\n\n it('sets closed to true', () => {\n const mark = {\n type: 'parabola',\n root: { x: 0, y: 0 },\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.complete(null, mark);\n\n expect(result.closed).toBe(true);\n });\n\n it('preserves all mark properties', () => {\n const mark = {\n type: 'parabola',\n root: { x: 1, y: 2 },\n edge: { x: 3, y: 4 },\n closed: false,\n building: true,\n label: 'Test Parabola',\n color: 'green',\n id: 456,\n };\n\n const result = parabolaTool.complete(null, mark);\n\n expect(result.label).toBe('Test Parabola');\n expect(result.color).toBe('green');\n expect(result.id).toBe(456);\n });\n\n it('can force complete parabola with only root', () => {\n const mark = {\n type: 'parabola',\n root: { x: 1, y: 2 },\n edge: undefined,\n closed: false,\n building: true,\n };\n\n const result = parabolaTool.complete(null, mark);\n\n expect(result.closed).toBe(true);\n expect(result.building).toBe(false);\n expect(result.edge).toBeUndefined();\n });\n });\n\n describe('integration scenarios', () => {\n it('creates complete parabola with two clicks', () => {\n const root = { x: 0, y: 0 };\n const edge = { x: 2, y: 4 };\n\n let mark = parabolaTool.addPoint(root);\n expect(mark.building).toBe(true);\n expect(mark.closed).toBe(false);\n\n mark = parabolaTool.addPoint(edge, mark);\n expect(mark.root).toEqual(root);\n expect(mark.edge).toEqual(edge);\n expect(mark.building).toBe(false);\n expect(mark.closed).toBe(true);\n });\n\n it('ignores clicks on same axis during construction', () => {\n const root = { x: 0, y: 0 };\n let mark = parabolaTool.addPoint(root);\n\n // Try to add point on same x-axis\n const sameXMark = parabolaTool.addPoint({ x: 0, y: 5 }, mark);\n expect(sameXMark).toBe(mark);\n expect(sameXMark.edge).toBeUndefined();\n\n // Try to add point on same y-axis\n const sameYMark = parabolaTool.addPoint({ x: 5, y: 0 }, mark);\n expect(sameYMark).toBe(mark);\n expect(sameYMark.edge).toBeUndefined();\n\n // Add valid edge point\n const finalMark = parabolaTool.addPoint({ x: 2, y: 4 }, mark);\n expect(finalMark.edge).toEqual({ x: 2, y: 4 });\n expect(finalMark.closed).toBe(true);\n });\n\n it('ignores duplicate clicks on root', () => {\n const root = { x: 1, y: 2 };\n let mark = parabolaTool.addPoint(root);\n\n // Click root again\n const sameMark = parabolaTool.addPoint(root, mark);\n expect(sameMark).toBe(mark);\n expect(sameMark.edge).toBeUndefined();\n });\n\n it('handles typical parabola in different quadrants', () => {\n // Quadrant 1\n let mark1 = parabolaTool.addPoint({ x: 1, y: 1 });\n mark1 = parabolaTool.addPoint({ x: 2, y: 3 }, mark1);\n expect(mark1.closed).toBe(true);\n\n // Quadrant 2\n let mark2 = parabolaTool.addPoint({ x: -1, y: 1 });\n mark2 = parabolaTool.addPoint({ x: -2, y: 3 }, mark2);\n expect(mark2.closed).toBe(true);\n\n // Quadrant 3\n let mark3 = parabolaTool.addPoint({ x: -1, y: -1 });\n mark3 = parabolaTool.addPoint({ x: -2, y: -3 }, mark3);\n expect(mark3.closed).toBe(true);\n\n // Quadrant 4\n let mark4 = parabolaTool.addPoint({ x: 1, y: -1 });\n mark4 = parabolaTool.addPoint({ x: 2, y: -3 }, mark4);\n expect(mark4.closed).toBe(true);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}