@pie-lib/graphing 4.0.23 → 4.0.24-beta.10
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 -92
- package/lib/__tests__/bg.test.js +282 -0
- package/lib/__tests__/coordinates-label.test.js +276 -0
- package/lib/__tests__/graph-with-controls.test.js +275 -0
- package/lib/__tests__/graph.test.js +927 -0
- package/lib/__tests__/grid-setup.test.js +729 -0
- package/lib/__tests__/grid.test.js +29 -0
- package/lib/__tests__/key-legend.test.js +321 -0
- package/lib/__tests__/label-svg-icon.test.js +373 -0
- package/lib/__tests__/labels.test.js +61 -0
- package/lib/__tests__/mark-label.test.js +133 -0
- package/lib/__tests__/toggle-bar.test.js +197 -0
- package/lib/__tests__/tool-menu.test.js +151 -0
- package/lib/__tests__/undo-redo.test.js +31 -0
- package/lib/__tests__/use-debounce.test.js +24 -0
- package/lib/__tests__/utils.js +70 -0
- package/lib/__tests__/utils.test.js +123 -0
- package/lib/axis/__tests__/arrow.test.js +60 -0
- package/lib/axis/__tests__/axes.test.js +195 -0
- package/lib/container/__tests__/actions.test.js +108 -0
- package/lib/container/__tests__/index.test.js +503 -0
- package/lib/container/__tests__/marks.test.js +259 -0
- package/lib/container/__tests__/middleware.test.js +244 -0
- package/lib/container/__tests__/reducer.test.js +450 -0
- package/lib/mark-label.js +7 -197
- package/lib/mark-label.js.map +1 -1
- package/lib/tools/absolute/__tests__/component.test.js +65 -0
- package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
- package/lib/tools/circle/__tests__/component.test.js +615 -0
- package/lib/tools/circle/__tests__/index.test.js +576 -0
- package/lib/tools/circle/component.js +3 -34
- package/lib/tools/circle/component.js.map +1 -1
- package/lib/tools/exponential/__tests__/component.test.js +64 -0
- package/lib/tools/exponential/__tests__/index.test.js +828 -0
- package/lib/tools/line/__tests__/component.test.js +45 -0
- package/lib/tools/parabola/__tests__/component.test.js +64 -0
- package/lib/tools/parabola/__tests__/index.test.js +564 -0
- package/lib/tools/point/__tests__/component.test.js +434 -0
- package/lib/tools/point/__tests__/index.test.js +262 -0
- package/lib/tools/point/component.js +8 -29
- package/lib/tools/point/component.js.map +1 -1
- package/lib/tools/polygon/__tests__/component.test.js +485 -0
- package/lib/tools/polygon/__tests__/index.test.js +303 -0
- package/lib/tools/polygon/__tests__/line.test.js +50 -0
- package/lib/tools/polygon/__tests__/polygon.test.js +85 -0
- package/lib/tools/polygon/component.js +6 -31
- package/lib/tools/polygon/component.js.map +1 -1
- package/lib/tools/ray/__tests__/component.test.js +35 -0
- package/lib/tools/segment/__tests__/component.test.js +35 -0
- package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
- package/lib/tools/shared/line/__tests__/index.test.js +124 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js +90 -0
- package/lib/tools/shared/line/index.js +3 -34
- package/lib/tools/shared/line/index.js.map +1 -1
- package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
- package/lib/tools/sine/__tests__/component.test.js +72 -0
- package/lib/tools/vector/__tests__/component.test.js +32 -0
- package/package.json +17 -17
- package/src/__tests__/graph.test.jsx +1 -76
- package/src/__tests__/mark-label.test.jsx +1 -375
- package/src/mark-label.jsx +8 -209
- package/src/tools/circle/component.jsx +3 -26
- package/src/tools/point/__tests__/component.test.jsx +1 -127
- package/src/tools/point/component.jsx +8 -21
- package/src/tools/polygon/component.jsx +6 -24
- package/src/tools/shared/line/index.jsx +3 -26
- package/LICENSE.md +0 -5
|
@@ -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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
|