@pie-lib/graphing-solution-set 4.0.22-beta.6 → 4.0.22-beta.8

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 (67) hide show
  1. package/lib/__tests__/bg.test.js +282 -0
  2. package/lib/__tests__/coordinates-label.test.js +276 -0
  3. package/lib/__tests__/graph-with-controls.test.js +256 -0
  4. package/lib/__tests__/graph.test.js +113 -0
  5. package/lib/__tests__/grid-setup.test.js +729 -0
  6. package/lib/__tests__/grid.test.js +29 -0
  7. package/lib/__tests__/labels.test.js +45 -0
  8. package/lib/__tests__/mark-label.test.js +133 -0
  9. package/lib/__tests__/toggle-bar.test.js +146 -0
  10. package/lib/__tests__/tool-menu.test.js +540 -0
  11. package/lib/__tests__/undo-redo.test.js +31 -0
  12. package/lib/__tests__/use-debounce.test.js +24 -0
  13. package/lib/__tests__/utils.js +70 -0
  14. package/lib/__tests__/utils.test.js +123 -0
  15. package/lib/axis/__tests__/arrow.test.js +60 -0
  16. package/lib/axis/__tests__/axes.test.js +160 -0
  17. package/lib/container/__tests__/actions.test.js +108 -0
  18. package/lib/container/__tests__/index.test.js +346 -0
  19. package/lib/container/__tests__/marks.test.js +259 -0
  20. package/lib/container/__tests__/middleware.test.js +244 -0
  21. package/lib/container/__tests__/reducer.test.js +450 -0
  22. package/lib/tools/line/__tests__/component.test.js +45 -0
  23. package/lib/tools/polygon/__tests__/component.test.js +501 -0
  24. package/lib/tools/polygon/__tests__/index.test.js +92 -0
  25. package/lib/tools/polygon/__tests__/line.test.js +30 -0
  26. package/lib/tools/polygon/__tests__/polygon.test.js +61 -0
  27. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  28. package/lib/tools/shared/line/__tests__/index.test.js +725 -0
  29. package/lib/tools/shared/line/__tests__/line-path.test.js +64 -0
  30. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +618 -0
  31. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  32. package/lib/tools/shared/point/__tests__/arrow.test.js +619 -0
  33. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  34. package/package.json +3 -3
  35. package/src/__tests__/bg.test.jsx +250 -0
  36. package/src/__tests__/coordinates-label.test.jsx +243 -0
  37. package/src/__tests__/graph-with-controls.test.jsx +184 -0
  38. package/src/__tests__/graph.test.jsx +93 -0
  39. package/src/__tests__/grid-setup.test.jsx +645 -0
  40. package/src/__tests__/grid.test.jsx +23 -0
  41. package/src/__tests__/labels.test.jsx +41 -0
  42. package/src/__tests__/mark-label.test.jsx +66 -0
  43. package/src/__tests__/toggle-bar.test.jsx +106 -0
  44. package/src/__tests__/tool-menu.test.jsx +453 -0
  45. package/src/__tests__/undo-redo.test.jsx +26 -0
  46. package/src/__tests__/use-debounce.test.js +21 -0
  47. package/src/__tests__/utils.js +41 -0
  48. package/src/__tests__/utils.test.js +105 -0
  49. package/src/axis/__tests__/arrow.test.jsx +43 -0
  50. package/src/axis/__tests__/axes.test.jsx +182 -0
  51. package/src/container/__tests__/actions.test.js +105 -0
  52. package/src/container/__tests__/index.test.jsx +227 -0
  53. package/src/container/__tests__/marks.test.js +172 -0
  54. package/src/container/__tests__/middleware.test.js +235 -0
  55. package/src/container/__tests__/reducer.test.js +324 -0
  56. package/src/tools/line/__tests__/component.test.jsx +37 -0
  57. package/src/tools/polygon/__tests__/component.test.jsx +487 -0
  58. package/src/tools/polygon/__tests__/index.test.js +65 -0
  59. package/src/tools/polygon/__tests__/line.test.jsx +23 -0
  60. package/src/tools/polygon/__tests__/polygon.test.jsx +44 -0
  61. package/src/tools/shared/__tests__/arrow-head.test.jsx +33 -0
  62. package/src/tools/shared/line/__tests__/index.test.jsx +553 -0
  63. package/src/tools/shared/line/__tests__/line-path.test.jsx +56 -0
  64. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +488 -0
  65. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +91 -0
  66. package/src/tools/shared/point/__tests__/arrow.test.jsx +469 -0
  67. package/src/tools/shared/point/__tests__/base-point.test.jsx +87 -0
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
+ var _reducer = _interopRequireDefault(require("../reducer"));
6
+ var _actions = require("../actions");
7
+ describe('container reducer', function () {
8
+ describe('reducer creation', function () {
9
+ it('creates a reducer function', function () {
10
+ var rootReducer = (0, _reducer["default"])();
11
+ expect((0, _typeof2["default"])(rootReducer)).toBe('function');
12
+ });
13
+ it('returns an object with marks property', function () {
14
+ var rootReducer = (0, _reducer["default"])();
15
+ var state = rootReducer(undefined, {
16
+ type: 'INIT'
17
+ });
18
+ expect(state).toHaveProperty('marks');
19
+ });
20
+ it('wraps marks reducer with undoable', function () {
21
+ var rootReducer = (0, _reducer["default"])();
22
+ var state = rootReducer(undefined, {
23
+ type: 'INIT'
24
+ });
25
+ expect(state.marks).toHaveProperty('past');
26
+ expect(state.marks).toHaveProperty('present');
27
+ expect(state.marks).toHaveProperty('future');
28
+ });
29
+ });
30
+ describe('initial state', function () {
31
+ it('initializes with empty past', function () {
32
+ var rootReducer = (0, _reducer["default"])();
33
+ var state = rootReducer(undefined, {
34
+ type: 'INIT'
35
+ });
36
+ expect(state.marks.past).toEqual([]);
37
+ });
38
+ it('initializes with empty present', function () {
39
+ var rootReducer = (0, _reducer["default"])();
40
+ var state = rootReducer(undefined, {
41
+ type: 'INIT'
42
+ });
43
+ expect(state.marks.present).toEqual([]);
44
+ });
45
+ it('initializes with empty future', function () {
46
+ var rootReducer = (0, _reducer["default"])();
47
+ var state = rootReducer(undefined, {
48
+ type: 'INIT'
49
+ });
50
+ expect(state.marks.future).toEqual([]);
51
+ });
52
+ });
53
+ describe('CHANGE_MARKS action', function () {
54
+ it('updates present with new marks', function () {
55
+ var rootReducer = (0, _reducer["default"])();
56
+ var newMarks = [{
57
+ id: 1,
58
+ type: 'point',
59
+ x: 5,
60
+ y: 10
61
+ }];
62
+ var action = (0, _actions.changeMarks)(newMarks);
63
+ var state = rootReducer(undefined, {
64
+ type: '@@INIT'
65
+ });
66
+ state = rootReducer(state, action);
67
+ expect(state.marks.present).toEqual(newMarks);
68
+ });
69
+ it('adds previous state to past', function () {
70
+ var rootReducer = (0, _reducer["default"])();
71
+ var firstMarks = [{
72
+ id: 1,
73
+ type: 'point'
74
+ }];
75
+ var secondMarks = [{
76
+ id: 2,
77
+ type: 'line'
78
+ }];
79
+ var state = rootReducer(undefined, {
80
+ type: '@@INIT'
81
+ });
82
+ state = rootReducer(state, (0, _actions.changeMarks)(firstMarks));
83
+ state = rootReducer(state, (0, _actions.changeMarks)(secondMarks));
84
+ expect(state.marks.past.length).toBeGreaterThan(0);
85
+ expect(state.marks.present).toEqual(secondMarks);
86
+ });
87
+ it('clears future on new action', function () {
88
+ var rootReducer = (0, _reducer["default"])();
89
+ var firstMarks = [{
90
+ id: 1,
91
+ type: 'point'
92
+ }];
93
+ var secondMarks = [{
94
+ id: 2,
95
+ type: 'line'
96
+ }];
97
+ var thirdMarks = [{
98
+ id: 3,
99
+ type: 'circle'
100
+ }];
101
+ var state = rootReducer(undefined, {
102
+ type: '@@INIT'
103
+ });
104
+ state = rootReducer(state, (0, _actions.changeMarks)(firstMarks));
105
+ state = rootReducer(state, (0, _actions.changeMarks)(secondMarks));
106
+ state = rootReducer(state, {
107
+ type: '@@redux-undo/UNDO'
108
+ });
109
+ expect(state.marks.future.length).toBeGreaterThan(0);
110
+ state = rootReducer(state, (0, _actions.changeMarks)(thirdMarks));
111
+ expect(state.marks.future).toEqual([]);
112
+ });
113
+ it('handles empty marks array', function () {
114
+ var rootReducer = (0, _reducer["default"])();
115
+ var action = (0, _actions.changeMarks)([]);
116
+ var state = rootReducer(undefined, {
117
+ type: '@@INIT'
118
+ });
119
+ state = rootReducer(state, action);
120
+ expect(state.marks.present).toEqual([]);
121
+ });
122
+ it('handles multiple marks', function () {
123
+ var rootReducer = (0, _reducer["default"])();
124
+ var marks = [{
125
+ id: 1,
126
+ type: 'point',
127
+ x: 1,
128
+ y: 2
129
+ }, {
130
+ id: 2,
131
+ type: 'line',
132
+ from: {
133
+ x: 0,
134
+ y: 0
135
+ },
136
+ to: {
137
+ x: 5,
138
+ y: 5
139
+ }
140
+ }, {
141
+ id: 3,
142
+ type: 'circle',
143
+ center: {
144
+ x: 3,
145
+ y: 3
146
+ },
147
+ radius: 2
148
+ }];
149
+ var action = (0, _actions.changeMarks)(marks);
150
+ var state = rootReducer(undefined, {
151
+ type: '@@INIT'
152
+ });
153
+ state = rootReducer(state, action);
154
+ expect(state.marks.present).toEqual(marks);
155
+ expect(state.marks.present.length).toBe(3);
156
+ });
157
+ });
158
+ describe('undo functionality', function () {
159
+ it('supports undo action', function () {
160
+ var rootReducer = (0, _reducer["default"])();
161
+ var firstMarks = [{
162
+ id: 1,
163
+ type: 'point'
164
+ }];
165
+ var secondMarks = [{
166
+ id: 2,
167
+ type: 'line'
168
+ }];
169
+ var state = rootReducer(undefined, {
170
+ type: '@@INIT'
171
+ });
172
+ state = rootReducer(state, (0, _actions.changeMarks)(firstMarks));
173
+ state = rootReducer(state, (0, _actions.changeMarks)(secondMarks));
174
+ state = rootReducer(state, {
175
+ type: '@@redux-undo/UNDO'
176
+ });
177
+ expect(state.marks.present).toEqual(firstMarks);
178
+ });
179
+ it('moves present to future on undo', function () {
180
+ var rootReducer = (0, _reducer["default"])();
181
+ var firstMarks = [{
182
+ id: 1,
183
+ type: 'point'
184
+ }];
185
+ var secondMarks = [{
186
+ id: 2,
187
+ type: 'line'
188
+ }];
189
+ var state = rootReducer(undefined, {
190
+ type: '@@INIT'
191
+ });
192
+ state = rootReducer(state, (0, _actions.changeMarks)(firstMarks));
193
+ state = rootReducer(state, (0, _actions.changeMarks)(secondMarks));
194
+ state = rootReducer(state, {
195
+ type: '@@redux-undo/UNDO'
196
+ });
197
+ expect(state.marks.future.length).toBeGreaterThan(0);
198
+ });
199
+ it('handles multiple undos', function () {
200
+ var rootReducer = (0, _reducer["default"])();
201
+ var marks1 = [{
202
+ id: 1
203
+ }];
204
+ var marks2 = [{
205
+ id: 2
206
+ }];
207
+ var marks3 = [{
208
+ id: 3
209
+ }];
210
+ var state = rootReducer(undefined, {
211
+ type: '@@INIT'
212
+ });
213
+ state = rootReducer(state, (0, _actions.changeMarks)(marks1));
214
+ state = rootReducer(state, (0, _actions.changeMarks)(marks2));
215
+ state = rootReducer(state, (0, _actions.changeMarks)(marks3));
216
+ state = rootReducer(state, {
217
+ type: '@@redux-undo/UNDO'
218
+ });
219
+ state = rootReducer(state, {
220
+ type: '@@redux-undo/UNDO'
221
+ });
222
+ expect(state.marks.present).toEqual(marks1);
223
+ });
224
+ it('does not undo beyond initial state', function () {
225
+ var rootReducer = (0, _reducer["default"])();
226
+ var marks = [{
227
+ id: 1,
228
+ type: 'point'
229
+ }];
230
+ var state = rootReducer(undefined, {
231
+ type: '@@INIT'
232
+ });
233
+ state = rootReducer(state, (0, _actions.changeMarks)(marks));
234
+ state = rootReducer(state, {
235
+ type: '@@redux-undo/UNDO'
236
+ });
237
+ state = rootReducer(state, {
238
+ type: '@@redux-undo/UNDO'
239
+ });
240
+ state = rootReducer(state, {
241
+ type: '@@redux-undo/UNDO'
242
+ });
243
+ expect(state.marks.present).toEqual([]);
244
+ expect(state.marks.past).toEqual([]);
245
+ });
246
+ });
247
+ describe('redo functionality', function () {
248
+ it('supports redo action', function () {
249
+ var rootReducer = (0, _reducer["default"])();
250
+ var firstMarks = [{
251
+ id: 1,
252
+ type: 'point'
253
+ }];
254
+ var secondMarks = [{
255
+ id: 2,
256
+ type: 'line'
257
+ }];
258
+ var state = rootReducer(undefined, {
259
+ type: '@@INIT'
260
+ });
261
+ state = rootReducer(state, (0, _actions.changeMarks)(firstMarks));
262
+ state = rootReducer(state, (0, _actions.changeMarks)(secondMarks));
263
+ state = rootReducer(state, {
264
+ type: '@@redux-undo/UNDO'
265
+ });
266
+
267
+ // Redo
268
+ state = rootReducer(state, {
269
+ type: '@@redux-undo/REDO'
270
+ });
271
+ expect(state.marks.present).toEqual(secondMarks);
272
+ });
273
+ it('moves future to past on redo', function () {
274
+ var rootReducer = (0, _reducer["default"])();
275
+ var firstMarks = [{
276
+ id: 1,
277
+ type: 'point'
278
+ }];
279
+ var secondMarks = [{
280
+ id: 2,
281
+ type: 'line'
282
+ }];
283
+ var state = rootReducer(undefined, {
284
+ type: '@@INIT'
285
+ });
286
+ state = rootReducer(state, (0, _actions.changeMarks)(firstMarks));
287
+ state = rootReducer(state, (0, _actions.changeMarks)(secondMarks));
288
+ state = rootReducer(state, {
289
+ type: '@@redux-undo/UNDO'
290
+ });
291
+ var futureBeforeRedo = state.marks.future.length;
292
+ state = rootReducer(state, {
293
+ type: '@@redux-undo/REDO'
294
+ });
295
+ expect(state.marks.future.length).toBe(futureBeforeRedo - 1);
296
+ });
297
+ it('handles multiple redos', function () {
298
+ var rootReducer = (0, _reducer["default"])();
299
+ var marks1 = [{
300
+ id: 1
301
+ }];
302
+ var marks2 = [{
303
+ id: 2
304
+ }];
305
+ var marks3 = [{
306
+ id: 3
307
+ }];
308
+ var state = rootReducer(undefined, {
309
+ type: '@@INIT'
310
+ });
311
+ state = rootReducer(state, (0, _actions.changeMarks)(marks1));
312
+ state = rootReducer(state, (0, _actions.changeMarks)(marks2));
313
+ state = rootReducer(state, (0, _actions.changeMarks)(marks3));
314
+
315
+ // undo twice, then redo twice
316
+ state = rootReducer(state, {
317
+ type: '@@redux-undo/UNDO'
318
+ });
319
+ state = rootReducer(state, {
320
+ type: '@@redux-undo/UNDO'
321
+ });
322
+ state = rootReducer(state, {
323
+ type: '@@redux-undo/REDO'
324
+ });
325
+ state = rootReducer(state, {
326
+ type: '@@redux-undo/REDO'
327
+ });
328
+ expect(state.marks.present).toEqual(marks3);
329
+ });
330
+ it('does not redo beyond last state', function () {
331
+ var rootReducer = (0, _reducer["default"])();
332
+ var marks = [{
333
+ id: 1,
334
+ type: 'point'
335
+ }];
336
+ var state = rootReducer(undefined, {
337
+ type: '@@INIT'
338
+ });
339
+ state = rootReducer(state, (0, _actions.changeMarks)(marks));
340
+ state = rootReducer(state, {
341
+ type: '@@redux-undo/UNDO'
342
+ });
343
+ state = rootReducer(state, {
344
+ type: '@@redux-undo/REDO'
345
+ });
346
+
347
+ // try to redo beyond the end
348
+ state = rootReducer(state, {
349
+ type: '@@redux-undo/REDO'
350
+ });
351
+ state = rootReducer(state, {
352
+ type: '@@redux-undo/REDO'
353
+ });
354
+ expect(state.marks.present).toEqual(marks);
355
+ expect(state.marks.future).toEqual([]);
356
+ });
357
+ });
358
+ describe('state structure', function () {
359
+ it('maintains correct undoable structure', function () {
360
+ var rootReducer = (0, _reducer["default"])();
361
+ var state = rootReducer(undefined, {
362
+ type: 'INIT'
363
+ });
364
+ expect(state.marks).toHaveProperty('past');
365
+ expect(state.marks).toHaveProperty('present');
366
+ expect(state.marks).toHaveProperty('future');
367
+ expect(Array.isArray(state.marks.past)).toBe(true);
368
+ expect(Array.isArray(state.marks.future)).toBe(true);
369
+ });
370
+ it('preserves mark properties through undo/redo', function () {
371
+ var rootReducer = (0, _reducer["default"])();
372
+ var marks = [{
373
+ id: 1,
374
+ type: 'point',
375
+ x: 10,
376
+ y: 20,
377
+ label: 'A',
378
+ correctness: {
379
+ value: 'correct'
380
+ }
381
+ }];
382
+ var state = rootReducer(undefined, {
383
+ type: 'INIT'
384
+ });
385
+ state = rootReducer(state, (0, _actions.changeMarks)(marks));
386
+ state = rootReducer(state, (0, _actions.changeMarks)([]));
387
+ state = rootReducer(state, {
388
+ type: '@@redux-undo/UNDO'
389
+ });
390
+ expect(state.marks.present).toEqual(marks);
391
+ expect(state.marks.present[0]).toBeDefined();
392
+ if (state.marks.present[0]) {
393
+ expect(state.marks.present[0]).toEqual(marks[0]);
394
+ expect(state.marks.present[0].correctness).toBeDefined();
395
+ }
396
+ });
397
+ });
398
+ describe('integration', function () {
399
+ it('handles complex undo/redo sequences', function () {
400
+ var rootReducer = (0, _reducer["default"])();
401
+ var marks1 = [{
402
+ id: 1
403
+ }];
404
+ var marks2 = [{
405
+ id: 2
406
+ }];
407
+ var marks3 = [{
408
+ id: 3
409
+ }];
410
+ var marks4 = [{
411
+ id: 4
412
+ }];
413
+ var state = rootReducer(undefined, {
414
+ type: '@@INIT'
415
+ });
416
+ state = rootReducer(state, (0, _actions.changeMarks)(marks1));
417
+ state = rootReducer(state, (0, _actions.changeMarks)(marks2));
418
+ state = rootReducer(state, (0, _actions.changeMarks)(marks3));
419
+ state = rootReducer(state, {
420
+ type: '@@redux-undo/UNDO'
421
+ }); // back to marks2
422
+ state = rootReducer(state, {
423
+ type: '@@redux-undo/UNDO'
424
+ }); // back to marks1
425
+ state = rootReducer(state, {
426
+ type: '@@redux-undo/REDO'
427
+ }); // forward to marks2
428
+ state = rootReducer(state, (0, _actions.changeMarks)(marks4));
429
+ expect(state.marks.present).toEqual(marks4);
430
+ expect(state.marks.future).toEqual([]);
431
+ });
432
+ it('works with empty state transitions', function () {
433
+ var rootReducer = (0, _reducer["default"])();
434
+ var marks = [{
435
+ id: 1
436
+ }];
437
+ var state = rootReducer(undefined, {
438
+ type: '@@INIT'
439
+ });
440
+ state = rootReducer(state, (0, _actions.changeMarks)([]));
441
+ state = rootReducer(state, (0, _actions.changeMarks)(marks));
442
+ state = rootReducer(state, (0, _actions.changeMarks)([]));
443
+ state = rootReducer(state, {
444
+ type: '@@redux-undo/UNDO'
445
+ });
446
+ expect(state.marks.present).toEqual(marks);
447
+ });
448
+ });
449
+ });
450
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkdWNlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FjdGlvbnMiLCJkZXNjcmliZSIsIml0Iiwicm9vdFJlZHVjZXIiLCJyZWR1Y2VyIiwiZXhwZWN0IiwiX3R5cGVvZjIiLCJ0b0JlIiwic3RhdGUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwidG9IYXZlUHJvcGVydHkiLCJtYXJrcyIsInBhc3QiLCJ0b0VxdWFsIiwicHJlc2VudCIsImZ1dHVyZSIsIm5ld01hcmtzIiwiaWQiLCJ4IiwieSIsImFjdGlvbiIsImNoYW5nZU1hcmtzIiwiZmlyc3RNYXJrcyIsInNlY29uZE1hcmtzIiwibGVuZ3RoIiwidG9CZUdyZWF0ZXJUaGFuIiwidGhpcmRNYXJrcyIsImZyb20iLCJ0byIsImNlbnRlciIsInJhZGl1cyIsIm1hcmtzMSIsIm1hcmtzMiIsIm1hcmtzMyIsImZ1dHVyZUJlZm9yZVJlZG8iLCJBcnJheSIsImlzQXJyYXkiLCJsYWJlbCIsImNvcnJlY3RuZXNzIiwidmFsdWUiLCJ0b0JlRGVmaW5lZCIsIm1hcmtzNCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250YWluZXIvX190ZXN0c19fL3JlZHVjZXIudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVkdWNlciBmcm9tICcuLi9yZWR1Y2VyJztcbmltcG9ydCB7IGNoYW5nZU1hcmtzIH0gZnJvbSAnLi4vYWN0aW9ucyc7XG5cbmRlc2NyaWJlKCdjb250YWluZXIgcmVkdWNlcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3JlZHVjZXIgY3JlYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NyZWF0ZXMgYSByZWR1Y2VyIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBleHBlY3QodHlwZW9mIHJvb3RSZWR1Y2VyKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgYW4gb2JqZWN0IHdpdGggbWFya3MgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdJTklUJyB9KTtcbiAgICAgIGV4cGVjdChzdGF0ZSkudG9IYXZlUHJvcGVydHkoJ21hcmtzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnd3JhcHMgbWFya3MgcmVkdWNlciB3aXRoIHVuZG9hYmxlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnSU5JVCcgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcykudG9IYXZlUHJvcGVydHkoJ3Bhc3QnKTtcbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcykudG9IYXZlUHJvcGVydHkoJ3ByZXNlbnQnKTtcbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcykudG9IYXZlUHJvcGVydHkoJ2Z1dHVyZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaW5pdGlhbCBzdGF0ZScsICgpID0+IHtcbiAgICBpdCgnaW5pdGlhbGl6ZXMgd2l0aCBlbXB0eSBwYXN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnSU5JVCcgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5wYXN0KS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbml0aWFsaXplcyB3aXRoIGVtcHR5IHByZXNlbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdJTklUJyB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2luaXRpYWxpemVzIHdpdGggZW1wdHkgZnV0dXJlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnSU5JVCcgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5mdXR1cmUpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ0hBTkdFX01BUktTIGFjdGlvbicsICgpID0+IHtcbiAgICBpdCgndXBkYXRlcyBwcmVzZW50IHdpdGggbmV3IG1hcmtzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBuZXdNYXJrcyA9IFt7IGlkOiAxLCB0eXBlOiAncG9pbnQnLCB4OiA1LCB5OiAxMCB9XTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGNoYW5nZU1hcmtzKG5ld01hcmtzKTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnQpLnRvRXF1YWwobmV3TWFya3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHMgcHJldmlvdXMgc3RhdGUgdG8gcGFzdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3QgZmlyc3RNYXJrcyA9IFt7IGlkOiAxLCB0eXBlOiAncG9pbnQnIH1dO1xuICAgICAgY29uc3Qgc2Vjb25kTWFya3MgPSBbeyBpZDogMiwgdHlwZTogJ2xpbmUnIH1dO1xuXG4gICAgICBsZXQgc3RhdGUgPSByb290UmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogJ0BASU5JVCcgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhmaXJzdE1hcmtzKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhzZWNvbmRNYXJrcykpO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucGFzdC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5wcmVzZW50KS50b0VxdWFsKHNlY29uZE1hcmtzKTtcbiAgICB9KTtcblxuICAgIGl0KCdjbGVhcnMgZnV0dXJlIG9uIG5ldyBhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IGZpcnN0TWFya3MgPSBbeyBpZDogMSwgdHlwZTogJ3BvaW50JyB9XTtcbiAgICAgIGNvbnN0IHNlY29uZE1hcmtzID0gW3sgaWQ6IDIsIHR5cGU6ICdsaW5lJyB9XTtcbiAgICAgIGNvbnN0IHRoaXJkTWFya3MgPSBbeyBpZDogMywgdHlwZTogJ2NpcmNsZScgfV07XG5cbiAgICAgIGxldCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnQEBJTklUJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKGZpcnN0TWFya3MpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKHNlY29uZE1hcmtzKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5mdXR1cmUubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKHRoaXJkTWFya3MpKTtcbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5mdXR1cmUpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgZW1wdHkgbWFya3MgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGNoYW5nZU1hcmtzKFtdKTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbXVsdGlwbGUgbWFya3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IG1hcmtzID0gW1xuICAgICAgICB7IGlkOiAxLCB0eXBlOiAncG9pbnQnLCB4OiAxLCB5OiAyIH0sXG4gICAgICAgIHsgaWQ6IDIsIHR5cGU6ICdsaW5lJywgZnJvbTogeyB4OiAwLCB5OiAwIH0sIHRvOiB7IHg6IDUsIHk6IDUgfSB9LFxuICAgICAgICB7IGlkOiAzLCB0eXBlOiAnY2lyY2xlJywgY2VudGVyOiB7IHg6IDMsIHk6IDMgfSwgcmFkaXVzOiAyIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgYWN0aW9uID0gY2hhbmdlTWFya3MobWFya3MpO1xuXG4gICAgICBsZXQgc3RhdGUgPSByb290UmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogJ0BASU5JVCcgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucHJlc2VudCkudG9FcXVhbChtYXJrcyk7XG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucHJlc2VudC5sZW5ndGgpLnRvQmUoMyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1bmRvIGZ1bmN0aW9uYWxpdHknLCAoKSA9PiB7XG4gICAgaXQoJ3N1cHBvcnRzIHVuZG8gYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBmaXJzdE1hcmtzID0gW3sgaWQ6IDEsIHR5cGU6ICdwb2ludCcgfV07XG4gICAgICBjb25zdCBzZWNvbmRNYXJrcyA9IFt7IGlkOiAyLCB0eXBlOiAnbGluZScgfV07XG5cbiAgICAgIGxldCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnQEBJTklUJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKGZpcnN0TWFya3MpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKHNlY29uZE1hcmtzKSk7XG5cbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9VTkRPJyB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnQpLnRvRXF1YWwoZmlyc3RNYXJrcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbW92ZXMgcHJlc2VudCB0byBmdXR1cmUgb24gdW5kbycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3QgZmlyc3RNYXJrcyA9IFt7IGlkOiAxLCB0eXBlOiAncG9pbnQnIH1dO1xuICAgICAgY29uc3Qgc2Vjb25kTWFya3MgPSBbeyBpZDogMiwgdHlwZTogJ2xpbmUnIH1dO1xuXG4gICAgICBsZXQgc3RhdGUgPSByb290UmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogJ0BASU5JVCcgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhmaXJzdE1hcmtzKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhzZWNvbmRNYXJrcykpO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgeyB0eXBlOiAnQEByZWR1eC11bmRvL1VORE8nIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MuZnV0dXJlLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbXVsdGlwbGUgdW5kb3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IG1hcmtzMSA9IFt7IGlkOiAxIH1dO1xuICAgICAgY29uc3QgbWFya3MyID0gW3sgaWQ6IDIgfV07XG4gICAgICBjb25zdCBtYXJrczMgPSBbeyBpZDogMyB9XTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MobWFya3MxKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhtYXJrczIpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKG1hcmtzMykpO1xuXG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5wcmVzZW50KS50b0VxdWFsKG1hcmtzMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdW5kbyBiZXlvbmQgaW5pdGlhbCBzdGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3QgbWFya3MgPSBbeyBpZDogMSwgdHlwZTogJ3BvaW50JyB9XTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MobWFya3MpKTtcblxuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgeyB0eXBlOiAnQEByZWR1eC11bmRvL1VORE8nIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgeyB0eXBlOiAnQEByZWR1eC11bmRvL1VORE8nIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgeyB0eXBlOiAnQEByZWR1eC11bmRvL1VORE8nIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucHJlc2VudCkudG9FcXVhbChbXSk7XG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucGFzdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWRvIGZ1bmN0aW9uYWxpdHknLCAoKSA9PiB7XG4gICAgaXQoJ3N1cHBvcnRzIHJlZG8gYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBmaXJzdE1hcmtzID0gW3sgaWQ6IDEsIHR5cGU6ICdwb2ludCcgfV07XG4gICAgICBjb25zdCBzZWNvbmRNYXJrcyA9IFt7IGlkOiAyLCB0eXBlOiAnbGluZScgfV07XG5cbiAgICAgIGxldCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnQEBJTklUJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKGZpcnN0TWFya3MpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKHNlY29uZE1hcmtzKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG5cbiAgICAgIC8vIFJlZG9cbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9SRURPJyB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnQpLnRvRXF1YWwoc2Vjb25kTWFya3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21vdmVzIGZ1dHVyZSB0byBwYXN0IG9uIHJlZG8nLCAoKSA9PiB7XG4gICAgICBjb25zdCByb290UmVkdWNlciA9IHJlZHVjZXIoKTtcbiAgICAgIGNvbnN0IGZpcnN0TWFya3MgPSBbeyBpZDogMSwgdHlwZTogJ3BvaW50JyB9XTtcbiAgICAgIGNvbnN0IHNlY29uZE1hcmtzID0gW3sgaWQ6IDIsIHR5cGU6ICdsaW5lJyB9XTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MoZmlyc3RNYXJrcykpO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3Moc2Vjb25kTWFya3MpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9VTkRPJyB9KTtcblxuICAgICAgY29uc3QgZnV0dXJlQmVmb3JlUmVkbyA9IHN0YXRlLm1hcmtzLmZ1dHVyZS5sZW5ndGg7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vUkVETycgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5mdXR1cmUubGVuZ3RoKS50b0JlKGZ1dHVyZUJlZm9yZVJlZG8gLSAxKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG11bHRpcGxlIHJlZG9zJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBtYXJrczEgPSBbeyBpZDogMSB9XTtcbiAgICAgIGNvbnN0IG1hcmtzMiA9IFt7IGlkOiAyIH1dO1xuICAgICAgY29uc3QgbWFya3MzID0gW3sgaWQ6IDMgfV07XG5cbiAgICAgIGxldCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnQEBJTklUJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKG1hcmtzMSkpO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MobWFya3MyKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhtYXJrczMpKTtcblxuICAgICAgLy8gdW5kbyB0d2ljZSwgdGhlbiByZWRvIHR3aWNlXG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vUkVETycgfSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vUkVETycgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5wcmVzZW50KS50b0VxdWFsKG1hcmtzMyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgcmVkbyBiZXlvbmQgbGFzdCBzdGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3QgbWFya3MgPSBbeyBpZDogMSwgdHlwZTogJ3BvaW50JyB9XTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MobWFya3MpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9VTkRPJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9SRURPJyB9KTtcblxuICAgICAgLy8gdHJ5IHRvIHJlZG8gYmV5b25kIHRoZSBlbmRcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9SRURPJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9SRURPJyB9KTtcblxuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnQpLnRvRXF1YWwobWFya3MpO1xuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLmZ1dHVyZSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdGF0ZSBzdHJ1Y3R1cmUnLCAoKSA9PiB7XG4gICAgaXQoJ21haW50YWlucyBjb3JyZWN0IHVuZG9hYmxlIHN0cnVjdHVyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3Qgc3RhdGUgPSByb290UmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogJ0lOSVQnIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MpLnRvSGF2ZVByb3BlcnR5KCdwYXN0Jyk7XG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MpLnRvSGF2ZVByb3BlcnR5KCdwcmVzZW50Jyk7XG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MpLnRvSGF2ZVByb3BlcnR5KCdmdXR1cmUnKTtcbiAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KHN0YXRlLm1hcmtzLnBhc3QpKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KEFycmF5LmlzQXJyYXkoc3RhdGUubWFya3MuZnV0dXJlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVzZXJ2ZXMgbWFyayBwcm9wZXJ0aWVzIHRocm91Z2ggdW5kby9yZWRvJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlZHVjZXIgPSByZWR1Y2VyKCk7XG4gICAgICBjb25zdCBtYXJrcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAxLFxuICAgICAgICAgIHR5cGU6ICdwb2ludCcsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgeTogMjAsXG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBsZXQgc3RhdGUgPSByb290UmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogJ0lOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MobWFya3MpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKFtdKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCB7IHR5cGU6ICdAQHJlZHV4LXVuZG8vVU5ETycgfSk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5wcmVzZW50KS50b0VxdWFsKG1hcmtzKTtcbiAgICAgIGV4cGVjdChzdGF0ZS5tYXJrcy5wcmVzZW50WzBdKS50b0JlRGVmaW5lZCgpO1xuICAgICAgaWYgKHN0YXRlLm1hcmtzLnByZXNlbnRbMF0pIHtcbiAgICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLnByZXNlbnRbMF0pLnRvRXF1YWwobWFya3NbMF0pO1xuICAgICAgICBleHBlY3Qoc3RhdGUubWFya3MucHJlc2VudFswXS5jb3JyZWN0bmVzcykudG9CZURlZmluZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ludGVncmF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdoYW5kbGVzIGNvbXBsZXggdW5kby9yZWRvIHNlcXVlbmNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3QgbWFya3MxID0gW3sgaWQ6IDEgfV07XG4gICAgICBjb25zdCBtYXJrczIgPSBbeyBpZDogMiB9XTtcbiAgICAgIGNvbnN0IG1hcmtzMyA9IFt7IGlkOiAzIH1dO1xuICAgICAgY29uc3QgbWFya3M0ID0gW3sgaWQ6IDQgfV07XG5cbiAgICAgIGxldCBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiAnQEBJTklUJyB9KTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKG1hcmtzMSkpO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MobWFya3MyKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhtYXJrczMpKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9VTkRPJyB9KTsgLy8gYmFjayB0byBtYXJrczJcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9VTkRPJyB9KTsgLy8gYmFjayB0byBtYXJrczFcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIHsgdHlwZTogJ0BAcmVkdXgtdW5kby9SRURPJyB9KTsgLy8gZm9yd2FyZCB0byBtYXJrczJcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKG1hcmtzNCkpO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucHJlc2VudCkudG9FcXVhbChtYXJrczQpO1xuICAgICAgZXhwZWN0KHN0YXRlLm1hcmtzLmZ1dHVyZSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnd29ya3Mgd2l0aCBlbXB0eSBzdGF0ZSB0cmFuc2l0aW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZWR1Y2VyID0gcmVkdWNlcigpO1xuICAgICAgY29uc3QgbWFya3MgPSBbeyBpZDogMSB9XTtcblxuICAgICAgbGV0IHN0YXRlID0gcm9vdFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdAQElOSVQnIH0pO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgY2hhbmdlTWFya3MoW10pKTtcbiAgICAgIHN0YXRlID0gcm9vdFJlZHVjZXIoc3RhdGUsIGNoYW5nZU1hcmtzKG1hcmtzKSk7XG4gICAgICBzdGF0ZSA9IHJvb3RSZWR1Y2VyKHN0YXRlLCBjaGFuZ2VNYXJrcyhbXSkpO1xuICAgICAgc3RhdGUgPSByb290UmVkdWNlcihzdGF0ZSwgeyB0eXBlOiAnQEByZWR1eC11bmRvL1VORE8nIH0pO1xuXG4gICAgICBleHBlY3Qoc3RhdGUubWFya3MucHJlc2VudCkudG9FcXVhbChtYXJrcyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQUUsUUFBUSxDQUFDLG1CQUFtQixFQUFFLFlBQU07RUFDbENBLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxZQUFNO0lBQ2pDQyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsWUFBTTtNQUNyQyxJQUFNQyxXQUFXLEdBQUcsSUFBQUMsbUJBQU8sRUFBQyxDQUFDO01BQzdCQyxNQUFNLEtBQUFDLFFBQUEsYUFBUUgsV0FB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
@@ -0,0 +1,45 @@
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 _component = require("../component");
8
+ var _utils = require("../../../__tests__/utils");
9
+ 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; }
10
+ 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; }
11
+ jest.mock('@pie-lib/plot', function () {
12
+ var a = jest.requireActual('@pie-lib/plot');
13
+ return {
14
+ types: a.types,
15
+ gridDraggable: a.gridDraggable,
16
+ utils: a.utils,
17
+ trig: {
18
+ edges: jest.fn(function () {
19
+ return jest.fn().mockReturnValue([0, 0]);
20
+ })
21
+ }
22
+ };
23
+ });
24
+ describe('ArrowedLine', function () {
25
+ var onChange = jest.fn();
26
+ var renderComponent = function renderComponent(extras) {
27
+ var defaults = {
28
+ classes: {},
29
+ className: 'className',
30
+ onChange: onChange,
31
+ markerId: '1',
32
+ graphProps: (0, _utils.graphProps)()
33
+ };
34
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
35
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_component.ArrowedLine, props));
36
+ };
37
+ describe('rendering', function () {
38
+ it('renders without crashing', function () {
39
+ var _renderComponent = renderComponent(),
40
+ container = _renderComponent.container;
41
+ expect(container.firstChild).toBeInTheDocument();
42
+ });
43
+ });
44
+ });
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29tcG9uZW50IiwiX3V0aWxzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJqZXN0IiwibW9jayIsImEiLCJyZXF1aXJlQWN0dWFsIiwidHlwZXMiLCJncmlkRHJhZ2dhYmxlIiwidXRpbHMiLCJ0cmlnIiwiZWRnZXMiLCJmbiIsIm1vY2tSZXR1cm5WYWx1ZSIsImRlc2NyaWJlIiwib25DaGFuZ2UiLCJyZW5kZXJDb21wb25lbnQiLCJleHRyYXMiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJtYXJrZXJJZCIsImdyYXBoUHJvcHMiLCJnZXRHcmFwaFByb3BzIiwicHJvcHMiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiQXJyb3dlZExpbmUiLCJpdCIsIl9yZW5kZXJDb21wb25lbnQiLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbHMvbGluZS9fX3Rlc3RzX18vY29tcG9uZW50LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEFycm93ZWRMaW5lIH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IGdyYXBoUHJvcHMgYXMgZ2V0R3JhcGhQcm9wcyB9IGZyb20gJy4uLy4uLy4uL19fdGVzdHNfXy91dGlscyc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvcGxvdCcsICgpID0+IHtcbiAgY29uc3QgYSA9IGplc3QucmVxdWlyZUFjdHVhbCgnQHBpZS1saWIvcGxvdCcpO1xuICByZXR1cm4ge1xuICAgIHR5cGVzOiBhLnR5cGVzLFxuICAgIGdyaWREcmFnZ2FibGU6IGEuZ3JpZERyYWdnYWJsZSxcbiAgICB1dGlsczogYS51dGlscyxcbiAgICB0cmlnOiB7XG4gICAgICBlZGdlczogamVzdC5mbigoKSA9PiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKFswLCAwXSkpLFxuICAgIH0sXG4gIH07XG59KTtcblxuZGVzY3JpYmUoJ0Fycm93ZWRMaW5lJywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbWFya2VySWQ6ICcxJyxcbiAgICAgIGdyYXBoUHJvcHM6IGdldEdyYXBoUHJvcHMoKSxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cywgLi4uZXh0cmFzIH07XG4gICAgcmV0dXJuIHJlbmRlcig8QXJyb3dlZExpbmUgey4uLnByb3BzfSAvPik7XG4gIH07XG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUlu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