@pie-element/hotspot 9.1.0 → 9.2.0-mui-update.0
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 +66 -0
- package/configure/CHANGELOG.md +66 -0
- package/configure/lib/DeleteWidget.js +31 -44
- package/configure/lib/DeleteWidget.js.map +1 -1
- package/configure/lib/__tests__/DeleteWidget.test.js +60 -0
- package/configure/lib/__tests__/hotspot-container.test.js +377 -0
- package/configure/lib/__tests__/hotspot-drawable.test.js +233 -0
- package/configure/lib/__tests__/index.test.js +211 -0
- package/configure/lib/__tests__/root.test.js +440 -0
- package/configure/lib/__tests__/utils.test.js +287 -0
- package/configure/lib/button.js +27 -46
- package/configure/lib/button.js.map +1 -1
- package/configure/lib/buttons/circle.js +21 -28
- package/configure/lib/buttons/circle.js.map +1 -1
- package/configure/lib/buttons/polygon.js +27 -34
- package/configure/lib/buttons/polygon.js.map +1 -1
- package/configure/lib/buttons/rectangle.js +27 -34
- package/configure/lib/buttons/rectangle.js.map +1 -1
- package/configure/lib/defaults.js +3 -4
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-circle.js +133 -199
- package/configure/lib/hotspot-circle.js.map +1 -1
- package/configure/lib/hotspot-container.js +251 -356
- package/configure/lib/hotspot-container.js.map +1 -1
- package/configure/lib/hotspot-drawable.js +361 -473
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +93 -140
- package/configure/lib/hotspot-palette.js.map +1 -1
- package/configure/lib/hotspot-polygon.js +213 -318
- package/configure/lib/hotspot-polygon.js.map +1 -1
- package/configure/lib/hotspot-rectangle.js +129 -193
- package/configure/lib/hotspot-rectangle.js.map +1 -1
- package/configure/lib/icons.js +1 -1
- package/configure/lib/icons.js.map +1 -1
- package/configure/lib/image-konva.js +47 -87
- package/configure/lib/image-konva.js.map +1 -1
- package/configure/lib/index.js +163 -223
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/root.js +302 -394
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/shapes/circle.js +70 -102
- package/configure/lib/shapes/circle.js.map +1 -1
- package/configure/lib/shapes/index.js +5 -13
- package/configure/lib/shapes/index.js.map +1 -1
- package/configure/lib/shapes/polygon.js +65 -97
- package/configure/lib/shapes/polygon.js.map +1 -1
- package/configure/lib/shapes/rectagle.js +70 -102
- package/configure/lib/shapes/rectagle.js.map +1 -1
- package/configure/lib/shapes/utils.js +3 -9
- package/configure/lib/shapes/utils.js.map +1 -1
- package/configure/lib/upload-control.js +26 -53
- package/configure/lib/upload-control.js.map +1 -1
- package/configure/lib/utils.js +85 -138
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +11 -10
- package/configure/src/__tests__/index.test.js +11 -5
- package/configure/src/button.jsx +12 -20
- package/configure/src/hotspot-circle.jsx +5 -18
- package/configure/src/hotspot-container.jsx +82 -98
- package/configure/src/hotspot-drawable.jsx +43 -45
- package/configure/src/hotspot-palette.jsx +45 -37
- package/configure/src/hotspot-polygon.jsx +4 -20
- package/configure/src/hotspot-rectangle.jsx +4 -17
- package/configure/src/index.js +12 -2
- package/configure/src/root.jsx +85 -79
- package/configure/src/upload-control.jsx +6 -16
- package/controller/CHANGELOG.md +52 -0
- package/controller/lib/__tests__/index.test.js +586 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +3 -4
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +152 -206
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +15 -35
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +2 -2
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/container.test.js +221 -0
- package/lib/__tests__/index.test.js +113 -0
- package/lib/__tests__/polygon.test.js +245 -0
- package/lib/__tests__/rectangle.test.js +236 -0
- package/lib/__tests__/session-updater.test.js +69 -0
- package/lib/hotspot/circle.js +111 -170
- package/lib/hotspot/circle.js.map +1 -1
- package/lib/hotspot/container.js +175 -261
- package/lib/hotspot/container.js.map +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/icons.js.map +1 -1
- package/lib/hotspot/image-konva-tooltip.js +66 -113
- package/lib/hotspot/image-konva-tooltip.js.map +1 -1
- package/lib/hotspot/index.js +136 -199
- package/lib/hotspot/index.js.map +1 -1
- package/lib/hotspot/polygon.js +151 -215
- package/lib/hotspot/polygon.js.map +1 -1
- package/lib/hotspot/rectangle.js +130 -186
- package/lib/hotspot/rectangle.js.map +1 -1
- package/lib/index.js +188 -257
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js +13 -19
- package/lib/session-updater.js.map +1 -1
- package/package.json +14 -11
- package/src/hotspot/circle.jsx +2 -13
- package/src/hotspot/container.jsx +35 -50
- package/src/hotspot/index.jsx +16 -28
- package/src/hotspot/polygon.jsx +4 -13
- package/src/hotspot/rectangle.jsx +4 -13
- package/src/index.js +21 -12
- package/LICENSE.md +0 -5
- package/configure/node_modules/debug/CHANGELOG.md +0 -395
- package/configure/node_modules/debug/LICENSE +0 -19
- package/configure/node_modules/debug/README.md +0 -437
- package/configure/node_modules/debug/node.js +0 -1
- package/configure/node_modules/debug/package.json +0 -51
- package/configure/node_modules/debug/src/browser.js +0 -180
- package/configure/node_modules/debug/src/common.js +0 -249
- package/configure/node_modules/debug/src/index.js +0 -12
- package/configure/node_modules/debug/src/node.js +0 -177
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _enzyme = require("enzyme");
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _hotspotContainer = require("../hotspot-container");
|
|
7
|
+
var _utils = require("../utils");
|
|
8
|
+
const model = () => ({
|
|
9
|
+
imageUrl: 'https://cdn.fluence.net/image/0240eb1455ce4c4bb6180232347b6aef_W',
|
|
10
|
+
shapes: (0, _utils.groupShapes)((0, _utils.getAllShapes)({
|
|
11
|
+
rectangles: [{
|
|
12
|
+
id: '0',
|
|
13
|
+
height: 140,
|
|
14
|
+
width: 130,
|
|
15
|
+
x: 1,
|
|
16
|
+
y: 1,
|
|
17
|
+
correct: true
|
|
18
|
+
}, {
|
|
19
|
+
id: '1',
|
|
20
|
+
height: 140,
|
|
21
|
+
width: 130,
|
|
22
|
+
x: 140,
|
|
23
|
+
y: 1
|
|
24
|
+
}, {
|
|
25
|
+
id: '2',
|
|
26
|
+
height: 140,
|
|
27
|
+
width: 130,
|
|
28
|
+
x: 280,
|
|
29
|
+
y: 1
|
|
30
|
+
}],
|
|
31
|
+
polygons: [{
|
|
32
|
+
id: '3',
|
|
33
|
+
points: [{
|
|
34
|
+
x: 1,
|
|
35
|
+
y: 148
|
|
36
|
+
}, {
|
|
37
|
+
x: 1,
|
|
38
|
+
y: 288
|
|
39
|
+
}, {
|
|
40
|
+
y: 288,
|
|
41
|
+
x: 129
|
|
42
|
+
}, {
|
|
43
|
+
y: 148,
|
|
44
|
+
x: 129
|
|
45
|
+
}],
|
|
46
|
+
correct: true
|
|
47
|
+
}, {
|
|
48
|
+
id: '4',
|
|
49
|
+
points: [{
|
|
50
|
+
y: 151,
|
|
51
|
+
x: 141
|
|
52
|
+
}, {
|
|
53
|
+
y: 289,
|
|
54
|
+
x: 141
|
|
55
|
+
}, {
|
|
56
|
+
y: 289,
|
|
57
|
+
x: 269
|
|
58
|
+
}, {
|
|
59
|
+
x: 269,
|
|
60
|
+
y: 151
|
|
61
|
+
}],
|
|
62
|
+
correct: false
|
|
63
|
+
}, {
|
|
64
|
+
id: '5',
|
|
65
|
+
points: [{
|
|
66
|
+
x: 279,
|
|
67
|
+
y: 150
|
|
68
|
+
}, {
|
|
69
|
+
x: 279,
|
|
70
|
+
y: 289
|
|
71
|
+
}, {
|
|
72
|
+
x: 407,
|
|
73
|
+
y: 289
|
|
74
|
+
}, {
|
|
75
|
+
x: 407,
|
|
76
|
+
y: 150
|
|
77
|
+
}],
|
|
78
|
+
correct: false
|
|
79
|
+
}],
|
|
80
|
+
circles: [{
|
|
81
|
+
id: '6',
|
|
82
|
+
radius: 70,
|
|
83
|
+
x: 100,
|
|
84
|
+
y: 100,
|
|
85
|
+
correct: false
|
|
86
|
+
}, {
|
|
87
|
+
id: '7',
|
|
88
|
+
radius: 30,
|
|
89
|
+
x: 200,
|
|
90
|
+
y: 150,
|
|
91
|
+
correct: true
|
|
92
|
+
}]
|
|
93
|
+
})),
|
|
94
|
+
dimensions: {
|
|
95
|
+
height: 291,
|
|
96
|
+
width: 410
|
|
97
|
+
},
|
|
98
|
+
hotspotColor: 'rgba(137, 183, 244, 0.65)',
|
|
99
|
+
outlineColor: 'blue',
|
|
100
|
+
multipleCorrect: true
|
|
101
|
+
});
|
|
102
|
+
describe('HotspotContainer', () => {
|
|
103
|
+
let w,
|
|
104
|
+
onImageUpload = jest.fn(),
|
|
105
|
+
onUpdateImageDimension = jest.fn(),
|
|
106
|
+
onDeleteShape = jest.fn(),
|
|
107
|
+
onUpdateShapes = jest.fn(),
|
|
108
|
+
initialModel = model();
|
|
109
|
+
beforeEach(() => {
|
|
110
|
+
w = extras => {
|
|
111
|
+
const props = {
|
|
112
|
+
classes: {},
|
|
113
|
+
dimensions: initialModel.dimensions,
|
|
114
|
+
imageUrl: initialModel.imageUrl,
|
|
115
|
+
multipleCorrect: initialModel.multipleCorrect,
|
|
116
|
+
hotspotColor: initialModel.hotspotColor,
|
|
117
|
+
outlineColor: initialModel.outlineColor,
|
|
118
|
+
onUpdateImageDimension: onUpdateImageDimension,
|
|
119
|
+
onUpdateShapes: onUpdateShapes,
|
|
120
|
+
onDeleteShape: onDeleteShape,
|
|
121
|
+
onImageUpload: onImageUpload,
|
|
122
|
+
shapes: initialModel.shapes,
|
|
123
|
+
...extras
|
|
124
|
+
};
|
|
125
|
+
return (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_hotspotContainer.Container, props));
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
describe('render', () => {
|
|
129
|
+
it('renders', () => {
|
|
130
|
+
expect(w()).toMatchSnapshot();
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe('logic', () => {
|
|
134
|
+
let wrapper;
|
|
135
|
+
let formattedShapes = [{
|
|
136
|
+
id: '0',
|
|
137
|
+
height: 140,
|
|
138
|
+
width: 130,
|
|
139
|
+
x: 1,
|
|
140
|
+
y: 1,
|
|
141
|
+
correct: true,
|
|
142
|
+
group: 'rectangles',
|
|
143
|
+
index: 0
|
|
144
|
+
}, {
|
|
145
|
+
id: '1',
|
|
146
|
+
height: 140,
|
|
147
|
+
width: 130,
|
|
148
|
+
x: 140,
|
|
149
|
+
y: 1,
|
|
150
|
+
group: 'rectangles',
|
|
151
|
+
index: 1
|
|
152
|
+
}, {
|
|
153
|
+
id: '2',
|
|
154
|
+
height: 140,
|
|
155
|
+
width: 130,
|
|
156
|
+
x: 280,
|
|
157
|
+
y: 1,
|
|
158
|
+
group: 'rectangles',
|
|
159
|
+
index: 2
|
|
160
|
+
}, {
|
|
161
|
+
id: '3',
|
|
162
|
+
points: [{
|
|
163
|
+
x: 1,
|
|
164
|
+
y: 148
|
|
165
|
+
}, {
|
|
166
|
+
x: 1,
|
|
167
|
+
y: 288
|
|
168
|
+
}, {
|
|
169
|
+
y: 288,
|
|
170
|
+
x: 129
|
|
171
|
+
}, {
|
|
172
|
+
y: 148,
|
|
173
|
+
x: 129
|
|
174
|
+
}],
|
|
175
|
+
correct: true,
|
|
176
|
+
group: 'polygons',
|
|
177
|
+
index: 3
|
|
178
|
+
}, {
|
|
179
|
+
id: '4',
|
|
180
|
+
points: [{
|
|
181
|
+
y: 151,
|
|
182
|
+
x: 141
|
|
183
|
+
}, {
|
|
184
|
+
y: 289,
|
|
185
|
+
x: 141
|
|
186
|
+
}, {
|
|
187
|
+
y: 289,
|
|
188
|
+
x: 269
|
|
189
|
+
}, {
|
|
190
|
+
x: 269,
|
|
191
|
+
y: 151
|
|
192
|
+
}],
|
|
193
|
+
correct: false,
|
|
194
|
+
group: 'polygons',
|
|
195
|
+
index: 4
|
|
196
|
+
}, {
|
|
197
|
+
id: '5',
|
|
198
|
+
points: [{
|
|
199
|
+
x: 279,
|
|
200
|
+
y: 150
|
|
201
|
+
}, {
|
|
202
|
+
x: 279,
|
|
203
|
+
y: 289
|
|
204
|
+
}, {
|
|
205
|
+
x: 407,
|
|
206
|
+
y: 289
|
|
207
|
+
}, {
|
|
208
|
+
x: 407,
|
|
209
|
+
y: 150
|
|
210
|
+
}],
|
|
211
|
+
correct: false,
|
|
212
|
+
group: 'polygons',
|
|
213
|
+
index: 5
|
|
214
|
+
}, {
|
|
215
|
+
id: '6',
|
|
216
|
+
radius: 70,
|
|
217
|
+
x: 100,
|
|
218
|
+
y: 100,
|
|
219
|
+
correct: false,
|
|
220
|
+
group: 'circles',
|
|
221
|
+
index: 6
|
|
222
|
+
}, {
|
|
223
|
+
id: '7',
|
|
224
|
+
radius: 30,
|
|
225
|
+
x: 200,
|
|
226
|
+
y: 150,
|
|
227
|
+
correct: true,
|
|
228
|
+
group: 'circles',
|
|
229
|
+
index: 7
|
|
230
|
+
}];
|
|
231
|
+
beforeEach(() => {
|
|
232
|
+
wrapper = w();
|
|
233
|
+
});
|
|
234
|
+
it('state will contain formatted shapes', () => {
|
|
235
|
+
expect(wrapper.instance().state.shapes).toEqual(expect.arrayContaining(formattedShapes));
|
|
236
|
+
});
|
|
237
|
+
it('onUpdateShapes with new added shape', () => {
|
|
238
|
+
const newShape = {
|
|
239
|
+
id: '8',
|
|
240
|
+
height: 140,
|
|
241
|
+
width: 130,
|
|
242
|
+
x: 280,
|
|
243
|
+
y: 1,
|
|
244
|
+
group: 'rectangles'
|
|
245
|
+
};
|
|
246
|
+
wrapper.instance().onUpdateShapes([...formattedShapes, newShape]);
|
|
247
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith({
|
|
248
|
+
rectangles: [...initialModel.shapes.rectangles, {
|
|
249
|
+
id: '8',
|
|
250
|
+
height: 140,
|
|
251
|
+
width: 130,
|
|
252
|
+
x: 280,
|
|
253
|
+
y: 1
|
|
254
|
+
}],
|
|
255
|
+
polygons: initialModel.shapes.polygons,
|
|
256
|
+
circles: initialModel.shapes.circles
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
it('onDeleteShape by id', () => {
|
|
260
|
+
console.log('wrapper', wrapper.instance());
|
|
261
|
+
wrapper.instance().onDeleteShape('8');
|
|
262
|
+
expect(onUpdateShapes).toHaveBeenCalledWith((0, _utils.groupShapes)([{
|
|
263
|
+
correct: true,
|
|
264
|
+
group: 'rectangles',
|
|
265
|
+
height: 140,
|
|
266
|
+
id: '0',
|
|
267
|
+
index: 0,
|
|
268
|
+
width: 130,
|
|
269
|
+
x: 1,
|
|
270
|
+
y: 1
|
|
271
|
+
}, {
|
|
272
|
+
group: 'rectangles',
|
|
273
|
+
height: 140,
|
|
274
|
+
id: '1',
|
|
275
|
+
index: 1,
|
|
276
|
+
width: 130,
|
|
277
|
+
x: 140,
|
|
278
|
+
y: 1
|
|
279
|
+
}, {
|
|
280
|
+
group: 'rectangles',
|
|
281
|
+
height: 140,
|
|
282
|
+
id: '2',
|
|
283
|
+
index: 2,
|
|
284
|
+
width: 130,
|
|
285
|
+
x: 280,
|
|
286
|
+
y: 1
|
|
287
|
+
}, {
|
|
288
|
+
correct: true,
|
|
289
|
+
group: 'polygons',
|
|
290
|
+
id: '3',
|
|
291
|
+
index: 3,
|
|
292
|
+
points: [{
|
|
293
|
+
x: 1,
|
|
294
|
+
y: 148
|
|
295
|
+
}, {
|
|
296
|
+
x: 1,
|
|
297
|
+
y: 288
|
|
298
|
+
}, {
|
|
299
|
+
x: 129,
|
|
300
|
+
y: 288
|
|
301
|
+
}, {
|
|
302
|
+
x: 129,
|
|
303
|
+
y: 148
|
|
304
|
+
}]
|
|
305
|
+
}, {
|
|
306
|
+
correct: false,
|
|
307
|
+
group: 'polygons',
|
|
308
|
+
id: '4',
|
|
309
|
+
index: 4,
|
|
310
|
+
points: [{
|
|
311
|
+
x: 141,
|
|
312
|
+
y: 151
|
|
313
|
+
}, {
|
|
314
|
+
x: 141,
|
|
315
|
+
y: 289
|
|
316
|
+
}, {
|
|
317
|
+
x: 269,
|
|
318
|
+
y: 289
|
|
319
|
+
}, {
|
|
320
|
+
x: 269,
|
|
321
|
+
y: 151
|
|
322
|
+
}]
|
|
323
|
+
}, {
|
|
324
|
+
correct: false,
|
|
325
|
+
group: 'polygons',
|
|
326
|
+
id: '5',
|
|
327
|
+
index: 5,
|
|
328
|
+
points: [{
|
|
329
|
+
x: 279,
|
|
330
|
+
y: 150
|
|
331
|
+
}, {
|
|
332
|
+
x: 279,
|
|
333
|
+
y: 289
|
|
334
|
+
}, {
|
|
335
|
+
x: 407,
|
|
336
|
+
y: 289
|
|
337
|
+
}, {
|
|
338
|
+
x: 407,
|
|
339
|
+
y: 150
|
|
340
|
+
}]
|
|
341
|
+
}, {
|
|
342
|
+
id: '6',
|
|
343
|
+
radius: 70,
|
|
344
|
+
x: 100,
|
|
345
|
+
y: 100,
|
|
346
|
+
correct: false,
|
|
347
|
+
group: 'circles',
|
|
348
|
+
index: 6
|
|
349
|
+
}, {
|
|
350
|
+
id: '7',
|
|
351
|
+
radius: 30,
|
|
352
|
+
x: 200,
|
|
353
|
+
y: 150,
|
|
354
|
+
correct: true,
|
|
355
|
+
group: 'circles',
|
|
356
|
+
index: 7
|
|
357
|
+
}]));
|
|
358
|
+
});
|
|
359
|
+
it('onUpdateShapes with no shapes', () => {
|
|
360
|
+
wrapper.instance().onUpdateShapes([]);
|
|
361
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith({
|
|
362
|
+
rectangles: [],
|
|
363
|
+
polygons: [],
|
|
364
|
+
circles: []
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
it('handleClearAll', () => {
|
|
368
|
+
wrapper.instance().handleClearAll();
|
|
369
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith({
|
|
370
|
+
rectangles: [],
|
|
371
|
+
polygons: [],
|
|
372
|
+
circles: []
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZW56eW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfaG90c3BvdENvbnRhaW5lciIsIl91dGlscyIsIm1vZGVsIiwiaW1hZ2VVcmwiLCJzaGFwZXMiLCJncm91cFNoYXBlcyIsImdldEFsbFNoYXBlcyIsInJlY3RhbmdsZXMiLCJpZCIsImhlaWdodCIsIndpZHRoIiwieCIsInkiLCJjb3JyZWN0IiwicG9seWdvbnMiLCJwb2ludHMiLCJjaXJjbGVzIiwicmFkaXVzIiwiZGltZW5zaW9ucyIsImhvdHNwb3RDb2xvciIsIm91dGxpbmVDb2xvciIsIm11bHRpcGxlQ29ycmVjdCIsImRlc2NyaWJlIiwidyIsIm9uSW1hZ2VVcGxvYWQiLCJqZXN0IiwiZm4iLCJvblVwZGF0ZUltYWdlRGltZW5zaW9uIiwib25EZWxldGVTaGFwZSIsIm9uVXBkYXRlU2hhcGVzIiwiaW5pdGlhbE1vZGVsIiwiYmVmb3JlRWFjaCIsImV4dHJhcyIsInByb3BzIiwiY2xhc3NlcyIsInNoYWxsb3ciLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIkNvbnRhaW5lciIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90Iiwid3JhcHBlciIsImZvcm1hdHRlZFNoYXBlcyIsImdyb3VwIiwiaW5kZXgiLCJpbnN0YW5jZSIsInN0YXRlIiwidG9FcXVhbCIsImFycmF5Q29udGFpbmluZyIsIm5ld1NoYXBlIiwidG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoIiwiY29uc29sZSIsImxvZyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiaGFuZGxlQ2xlYXJBbGwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2hvdHNwb3QtY29udGFpbmVyLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vaG90c3BvdC1jb250YWluZXInO1xuaW1wb3J0IHsgZ2V0QWxsU2hhcGVzLCBncm91cFNoYXBlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgbW9kZWwgPSAoKSA9PiAoe1xuICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmZsdWVuY2UubmV0L2ltYWdlLzAyNDBlYjE0NTVjZTRjNGJiNjE4MDIzMjM0N2I2YWVmX1cnLFxuICBzaGFwZXM6IGdyb3VwU2hhcGVzKFxuICAgIGdldEFsbFNoYXBlcyh7XG4gICAgICByZWN0YW5nbGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAnLFxuICAgICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgICAgeDogMSxcbiAgICAgICAgICB5OiAxLFxuICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgICAgeDogMTQwLFxuICAgICAgICAgIHk6IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzInLFxuICAgICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgICAgeDogMjgwLFxuICAgICAgICAgIHk6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcG9seWdvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgICB7IHg6IDEsIHk6IDE0OCB9LFxuICAgICAgICAgICAgeyB4OiAxLCB5OiAyODggfSxcbiAgICAgICAgICAgIHsgeTogMjg4LCB4OiAxMjkgfSxcbiAgICAgICAgICAgIHsgeTogMTQ4LCB4OiAxMjkgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzQnLFxuICAgICAgICAgIHBvaW50czogW1xuICAgICAgICAgICAgeyB5OiAxNTEsIHg6IDE0MSB9LFxuICAgICAgICAgICAgeyB5OiAyODksIHg6IDE0MSB9LFxuICAgICAgICAgICAgeyB5OiAyODksIHg6IDI2OSB9LFxuICAgICAgICAgICAgeyB4OiAyNjksIHk6IDE1MSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzUnLFxuICAgICAgICAgIHBvaW50czogW1xuICAgICAgICAgICAgeyB4OiAyNzksIHk6IDE1MCB9LFxuICAgICAgICAgICAgeyB4OiAyNzksIHk6IDI4OSB9LFxuICAgICAgICAgICAgeyB4OiA0MDcsIHk6IDI4OSB9LFxuICAgICAgICAgICAgeyB4OiA0MDcsIHk6IDE1MCB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2lyY2xlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2JyxcbiAgICAgICAgICByYWRpdXM6IDcwLFxuICAgICAgICAgIHg6IDEwMCxcbiAgICAgICAgICB5OiAxMDAsXG4gICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzcnLFxuICAgICAgICAgIHJhZGl1czogMzAsXG4gICAgICAgICAgeDogMjAwLFxuICAgICAgICAgIHk6IDE1MCxcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KSxcbiAgKSxcbiAgZGltZW5zaW9uczoge1xuICAgIGhlaWdodDogMjkxLFxuICAgIHdpZHRoOiA0MTAsXG4gIH0sXG4gIGhvdHNwb3RDb2xvcjogJ3JnYmEoMTM3LCAxODMsIDI0NCwgMC42NSknLFxuICBvdXRsaW5lQ29sb3I6ICdibHVlJyxcbiAgbXVsdGlwbGVDb3JyZWN0OiB0cnVlLFxufSk7XG5cbmRlc2NyaWJlKCdIb3RzcG90Q29udGFpbmVyJywgKCkgPT4ge1xuICBsZXQgdyxcbiAgICBvbkltYWdlVXBsb2FkID0gamVzdC5mbigpLFxuICAgIG9uVXBkYXRlSW1hZ2VEaW1lbnNpb24gPSBqZXN0LmZuKCksXG4gICAgb25EZWxldGVTaGFwZSA9IGplc3QuZm4oKSxcbiAgICBvblVwZGF0ZVNoYXBlcyA9IGplc3QuZm4oKSxcbiAgICBpbml0aWFsTW9kZWwgPSBtb2RlbCgpO1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB3ID0gKGV4dHJhcykgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICBkaW1lbnNpb25zOiBpbml0aWFsTW9kZWwuZGltZW5zaW9ucyxcbiAgICAgICAgaW1hZ2VVcmw6IGluaXRpYWxNb2RlbC5pbWFnZVVybCxcbiAgICAgICAgbXVsdGlwbGVDb3JyZWN0OiBpbml0aWFsTW9kZWwubXVsdGlwbGVDb3JyZWN0LFxuICAgICAgICBob3RzcG90Q29sb3I6IGluaXRpYWxNb2RlbC5ob3RzcG90Q29sb3IsXG4gICAgICAgIG91dGxpbmVDb2xvcjogaW5pdGlhbE1vZGVsLm91dGxpbmVDb2xvcixcbiAgICAgICAgb25VcGRhdGVJbWFnZURpbWVuc2lvbjogb25VcGRhdGVJbWFnZURpbWVuc2lvbixcbiAgICAgICAgb25VcGRhdGVTaGFwZXM6IG9uVXBkYXRlU2hhcGVzLFxuICAgICAgICBvbkRlbGV0ZVNoYXBlOiBvbkRlbGV0ZVNoYXBlLFxuICAgICAgICBvbkltYWdlVXBsb2FkOiBvbkltYWdlVXBsb2FkLFxuICAgICAgICBzaGFwZXM6IGluaXRpYWxNb2RlbC5zaGFwZXMsXG4gICAgICAgIC4uLmV4dHJhcyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzaGFsbG93KDxDb250YWluZXIgey4uLnByb3BzfSAvPik7XG4gICAgfTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3KCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbG9naWMnLCAoKSA9PiB7XG4gICAgbGV0IHdyYXBwZXI7XG4gICAgbGV0IGZvcm1hdHRlZFNoYXBlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgIHg6IDEsXG4gICAgICAgIHk6IDEsXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIGdyb3VwOiAncmVjdGFuZ2xlcycsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgIHg6IDE0MCxcbiAgICAgICAgeTogMSxcbiAgICAgICAgZ3JvdXA6ICdyZWN0YW5nbGVzJyxcbiAgICAgICAgaW5kZXg6IDEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzInLFxuICAgICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgICAgd2lkdGg6IDEzMCxcbiAgICAgICAgeDogMjgwLFxuICAgICAgICB5OiAxLFxuICAgICAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgICAgICBpbmRleDogMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnMycsXG4gICAgICAgIHBvaW50czogW1xuICAgICAgICAgIHsgeDogMSwgeTogMTQ4IH0sXG4gICAgICAgICAgeyB4OiAxLCB5OiAyODggfSxcbiAgICAgICAgICB7IHk6IDI4OCwgeDogMTI5IH0sXG4gICAgICAgICAgeyB5OiAxNDgsIHg6IDEyOSB9LFxuICAgICAgICBdLFxuICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICBncm91cDogJ3BvbHlnb25zJyxcbiAgICAgICAgaW5kZXg6IDMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzQnLFxuICAgICAgICBwb2ludHM6IFtcbiAgICAgICAgICB7IHk6IDE1MSwgeDogMTQxIH0sXG4gICAgICAgICAgeyB5OiAyODksIHg6IDE0MSB9LFxuICAgICAgICAgIHsgeTogMjg5LCB4OiAyNjkgfSxcbiAgICAgICAgICB7IHg6IDI2OSwgeTogMTUxIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICBncm91cDogJ3BvbHlnb25zJyxcbiAgICAgICAgaW5kZXg6IDQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzUnLFxuICAgICAgICBwb2ludHM6IFtcbiAgICAgICAgICB7IHg6IDI3OSwgeTogMTUwIH0sXG4gICAgICAgICAgeyB4OiAyNzksIHk6IDI4OSB9LFxuICAgICAgICAgIHsgeDogNDA3LCB5OiAyODkgfSxcbiAgICAgICAgICB7IHg6IDQwNywgeTogMTUwIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICBncm91cDogJ3BvbHlnb25zJyxcbiAgICAgICAgaW5kZXg6IDUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzYnLFxuICAgICAgICByYWRpdXM6IDcwLFxuICAgICAgICB4OiAxMDAsXG4gICAgICAgIHk6IDEwMCxcbiAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIGdyb3VwOiAnY2lyY2xlcycsXG4gICAgICAgIGluZGV4OiA2LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICc3JyxcbiAgICAgICAgcmFkaXVzOiAzMCxcbiAgICAgICAgeDogMjAwLFxuICAgICAgICB5OiAxNTAsXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIGdyb3VwOiAnY2lyY2xlcycsXG4gICAgICAgIGluZGV4OiA3LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICB3cmFwcGVyID0gdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N0YXRlIHdpbGwgY29udGFpbiBmb3JtYXR0ZWQgc2hhcGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHdyYXBwZXIuaW5zdGFuY2UoKS5zdGF0ZS5zaGFwZXMpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhmb3JtYXR0ZWRTaGFwZXMpKTtcbiAgICB9KTtcblxuICAgIGl0KCdvblVwZGF0ZVNoYXBlcyB3aXRoIG5ldyBhZGRlZCBzaGFwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NoYXBlID0ge1xuICAgICAgICBpZDogJzgnLFxuICAgICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgICAgd2lkdGg6IDEzMCxcbiAgICAgICAgeDogMjgwLFxuICAgICAgICB5OiAxLFxuICAgICAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgICAgfTtcblxuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLm9uVXBkYXRlU2hhcGVzKFsuLi5mb3JtYXR0ZWRTaGFwZXMsIG5ld1NoYXBlXSk7XG5cbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKHtcbiAgICAgICAgcmVjdGFuZ2xlczogW1xuICAgICAgICAgIC4uLmluaXRpYWxNb2RlbC5zaGFwZXMucmVjdGFuZ2xlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICAgICAgeDogMjgwLFxuICAgICAgICAgICAgeTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwb2x5Z29uczogaW5pdGlhbE1vZGVsLnNoYXBlcy5wb2x5Z29ucyxcbiAgICAgICAgY2lyY2xlczogaW5pdGlhbE1vZGVsLnNoYXBlcy5jaXJjbGVzLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnb25EZWxldGVTaGFwZSBieSBpZCcsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCd3cmFwcGVyJywgd3JhcHBlci5pbnN0YW5jZSgpKTtcbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5vbkRlbGV0ZVNoYXBlKCc4Jyk7XG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBncm91cFNoYXBlcyhbXG4gICAgICAgICAgeyBjb3JyZWN0OiB0cnVlLCBncm91cDogJ3JlY3RhbmdsZXMnLCBoZWlnaHQ6IDE0MCwgaWQ6ICcwJywgaW5kZXg6IDAsIHdpZHRoOiAxMzAsIHg6IDEsIHk6IDEgfSxcbiAgICAgICAgICB7IGdyb3VwOiAncmVjdGFuZ2xlcycsIGhlaWdodDogMTQwLCBpZDogJzEnLCBpbmRleDogMSwgd2lkdGg6IDEzMCwgeDogMTQwLCB5OiAxIH0sXG4gICAgICAgICAgeyBncm91cDogJ3JlY3RhbmdsZXMnLCBoZWlnaHQ6IDE0MCwgaWQ6ICcyJywgaW5kZXg6IDIsIHdpZHRoOiAxMzAsIHg6IDI4MCwgeTogMSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICBncm91cDogJ3BvbHlnb25zJyxcbiAgICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgICBpbmRleDogMyxcbiAgICAgICAgICAgIHBvaW50czogW1xuICAgICAgICAgICAgICB7IHg6IDEsIHk6IDE0OCB9LFxuICAgICAgICAgICAgICB7IHg6IDEsIHk6IDI4OCB9LFxuICAgICAgICAgICAgICB7IHg6IDEyOSwgeTogMjg4IH0sXG4gICAgICAgICAgICAgIHsgeDogMTI5LCB5OiAxNDggfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgIGdyb3VwOiAncG9seWdvbnMnLFxuICAgICAgICAgICAgaWQ6ICc0JyxcbiAgICAgICAgICAgIGluZGV4OiA0LFxuICAgICAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgICAgIHsgeDogMTQxLCB5OiAxNTEgfSxcbiAgICAgICAgICAgICAgeyB4OiAxNDEsIHk6IDI4OSB9LFxuICAgICAgICAgICAgICB7IHg6IDI2OSwgeTogMjg5IH0sXG4gICAgICAgICAgICAgIHsgeDogMjY5LCB5OiAxNTEgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgIGdyb3VwOiAncG9seWdvbnMnLFxuICAgICAgICAgICAgaWQ6ICc1JyxcbiAgICAgICAgICAgIGluZGV4OiA1LFxuICAgICAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgICAgIHsgeDogMjc5LCB5OiAxNTAgfSxcbiAgICAgICAgICAgICAgeyB4OiAyNzksIHk6IDI4OSB9LFxuICAgICAgICAgICAgICB7IHg6IDQwNywgeTogMjg5IH0sXG4gICAgICAgICAgICAgIHsgeDogNDA3LCB5OiAxNTAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzYnLFxuICAgICAgICAgICAgcmFkaXVzOiA3MCxcbiAgICAgICAgICAgIHg6IDEwMCxcbiAgICAgICAgICAgIHk6IDEwMCxcbiAgICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgZ3JvdXA6ICdjaXJjbGVzJyxcbiAgICAgICAgICAgIGluZGV4OiA2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICc3JyxcbiAgICAgICAgICAgIHJhZGl1czogMzAsXG4gICAgICAgICAgICB4OiAyMDAsXG4gICAgICAgICAgICB5OiAxNTAsXG4gICAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICAgICAgZ3JvdXA6ICdjaXJjbGVzJyxcbiAgICAgICAgICAgIGluZGV4OiA3LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdvblVwZGF0ZVNoYXBlcyB3aXRoIG5vIHNoYXBlcycsICgpID0+IHtcbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5vblVwZGF0ZVNoYXBlcyhbXSk7XG5cbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKHtcbiAgICAgICAgcmVjdGFuZ2xlczogW10sXG4gICAgICAgIHBvbHlnb25zOiBbXSxcbiAgICAgICAgY2lyY2xlczogW10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVDbGVhckFsbCcsICgpID0+IHtcbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVDbGVhckFsbCgpO1xuICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoe1xuICAgICAgICByZWN0YW5nbGVzOiBbXSxcbiAgICAgICAgcG9seWdvbnM6IFtdLFxuICAgICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBRUEsTUFBTUssS0FBSyxHQUFHQSxDQUFBLE1BQU87RUFDbkJDLFFBQVEsRUFBRSxrRUFBa0U7RUFDNUVDLE1BQU0sRUFBRSxJQUFBQyxrQkFBVyxFQUNqQixJQUFBQyxtQkFBWSxFQUFDO0lBQ1hDLFVBQVUsRUFBRSxDQUNWO01BQ0VDLEVBQUUsRUFBRSxHQUFHO01BQ1BD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
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _enzyme = require("enzyme");
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _hotspotDrawable = require("../hotspot-drawable");
|
|
7
|
+
const model = () => ({
|
|
8
|
+
imageUrl: 'https://cdn.fluence.net/image/0240eb1455ce4c4bb6180232347b6aef_W',
|
|
9
|
+
shapes: [{
|
|
10
|
+
id: '0',
|
|
11
|
+
height: 140,
|
|
12
|
+
width: 130,
|
|
13
|
+
x: 1,
|
|
14
|
+
y: 1,
|
|
15
|
+
correct: true,
|
|
16
|
+
group: 'rectangles'
|
|
17
|
+
}, {
|
|
18
|
+
id: '1',
|
|
19
|
+
height: 140,
|
|
20
|
+
width: 130,
|
|
21
|
+
x: 140,
|
|
22
|
+
y: 1,
|
|
23
|
+
group: 'rectangles'
|
|
24
|
+
}, {
|
|
25
|
+
id: '2',
|
|
26
|
+
height: 140,
|
|
27
|
+
width: 130,
|
|
28
|
+
x: 280,
|
|
29
|
+
y: 1,
|
|
30
|
+
group: 'rectangles'
|
|
31
|
+
}, {
|
|
32
|
+
id: '3',
|
|
33
|
+
points: [{
|
|
34
|
+
x: 1,
|
|
35
|
+
y: 148
|
|
36
|
+
}, {
|
|
37
|
+
x: 1,
|
|
38
|
+
y: 288
|
|
39
|
+
}, {
|
|
40
|
+
y: 288,
|
|
41
|
+
x: 129
|
|
42
|
+
}, {
|
|
43
|
+
y: 148,
|
|
44
|
+
x: 129
|
|
45
|
+
}],
|
|
46
|
+
correct: true,
|
|
47
|
+
group: 'polygons'
|
|
48
|
+
}, {
|
|
49
|
+
id: '4',
|
|
50
|
+
points: [{
|
|
51
|
+
y: 151,
|
|
52
|
+
x: 141
|
|
53
|
+
}, {
|
|
54
|
+
y: 289,
|
|
55
|
+
x: 141
|
|
56
|
+
}, {
|
|
57
|
+
y: 289,
|
|
58
|
+
x: 269
|
|
59
|
+
}, {
|
|
60
|
+
x: 269,
|
|
61
|
+
y: 151
|
|
62
|
+
}],
|
|
63
|
+
correct: false,
|
|
64
|
+
group: 'polygons'
|
|
65
|
+
}, {
|
|
66
|
+
id: '5',
|
|
67
|
+
points: [{
|
|
68
|
+
x: 279,
|
|
69
|
+
y: 150
|
|
70
|
+
}, {
|
|
71
|
+
x: 279,
|
|
72
|
+
y: 289
|
|
73
|
+
}, {
|
|
74
|
+
x: 407,
|
|
75
|
+
y: 289
|
|
76
|
+
}, {
|
|
77
|
+
x: 407,
|
|
78
|
+
y: 150
|
|
79
|
+
}],
|
|
80
|
+
correct: false,
|
|
81
|
+
group: 'polygons'
|
|
82
|
+
}],
|
|
83
|
+
dimensions: {
|
|
84
|
+
height: 291,
|
|
85
|
+
width: 410
|
|
86
|
+
},
|
|
87
|
+
hotspotColor: 'rgba(137, 183, 244, 0.65)',
|
|
88
|
+
outlineColor: 'blue',
|
|
89
|
+
multipleCorrect: true
|
|
90
|
+
});
|
|
91
|
+
describe('HotspotDrawable', () => {
|
|
92
|
+
let w,
|
|
93
|
+
handleDisableDrag = jest.fn(),
|
|
94
|
+
handleEnableDrag = jest.fn(),
|
|
95
|
+
onUpdateImageDimension = jest.fn(),
|
|
96
|
+
onUpdateShapes = jest.fn(),
|
|
97
|
+
initialModel = model();
|
|
98
|
+
beforeEach(() => {
|
|
99
|
+
w = extras => {
|
|
100
|
+
const props = {
|
|
101
|
+
classes: {},
|
|
102
|
+
dimensions: initialModel.dimensions,
|
|
103
|
+
disableDrag: handleDisableDrag,
|
|
104
|
+
enableDrag: handleEnableDrag,
|
|
105
|
+
imageUrl: initialModel.imageUrl,
|
|
106
|
+
hotspotColor: initialModel.hotspotColor,
|
|
107
|
+
multipleCorrect: initialModel.multipleCorrect,
|
|
108
|
+
onUpdateImageDimension: onUpdateImageDimension,
|
|
109
|
+
onUpdateShapes: onUpdateShapes,
|
|
110
|
+
outlineColor: initialModel.outlineColor,
|
|
111
|
+
shapes: initialModel.shapes,
|
|
112
|
+
strokeWidth: 5,
|
|
113
|
+
shapeType: 'rectangle',
|
|
114
|
+
handleFinishDrawing: jest.fn(),
|
|
115
|
+
onDeleteShape: jest.fn(),
|
|
116
|
+
...extras
|
|
117
|
+
};
|
|
118
|
+
return (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_hotspotDrawable.Drawable, props));
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
describe('render', () => {
|
|
122
|
+
it('renders with default strokeWidth', () => {
|
|
123
|
+
expect(w()).toMatchSnapshot();
|
|
124
|
+
});
|
|
125
|
+
it('renders with given strokeWidth', () => {
|
|
126
|
+
expect(w({
|
|
127
|
+
strokeWidth: 10
|
|
128
|
+
})).toMatchSnapshot();
|
|
129
|
+
});
|
|
130
|
+
it('renders', () => {
|
|
131
|
+
expect(w()).toMatchSnapshot();
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('logic', () => {
|
|
135
|
+
let wrapper;
|
|
136
|
+
beforeEach(() => {
|
|
137
|
+
wrapper = w();
|
|
138
|
+
});
|
|
139
|
+
it('handleOnMouseDown target != Stage', () => {
|
|
140
|
+
wrapper.instance().state.stateShapes = initialModel.shapes;
|
|
141
|
+
const event = {
|
|
142
|
+
target: 'Line',
|
|
143
|
+
currentTarget: 'Stage',
|
|
144
|
+
evt: {
|
|
145
|
+
layerX: 20,
|
|
146
|
+
layerY: 30
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
wrapper.instance().handleOnMouseDown(event);
|
|
150
|
+
expect(onUpdateShapes).not.toBeCalled();
|
|
151
|
+
});
|
|
152
|
+
it('handleOnMouseDown target = Stage', () => {
|
|
153
|
+
const event = {
|
|
154
|
+
target: 'Stage',
|
|
155
|
+
currentTarget: 'Stage',
|
|
156
|
+
evt: {
|
|
157
|
+
layerX: 20,
|
|
158
|
+
layerY: 30
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
wrapper.instance().handleOnMouseDown(event);
|
|
162
|
+
expect(onUpdateShapes).toHaveBeenCalledWith([...initialModel.shapes, {
|
|
163
|
+
id: '6',
|
|
164
|
+
height: 0,
|
|
165
|
+
width: 0,
|
|
166
|
+
x: 20,
|
|
167
|
+
y: 30,
|
|
168
|
+
group: 'rectangles',
|
|
169
|
+
index: 6
|
|
170
|
+
}]);
|
|
171
|
+
});
|
|
172
|
+
it('handleOnMouseUp isDrawing = true', () => {
|
|
173
|
+
wrapper.instance().state.isDrawing = true;
|
|
174
|
+
wrapper.instance().state.shapes = initialModel.shapes.slice(0, 2);
|
|
175
|
+
wrapper.instance().handleOnMouseUp({
|
|
176
|
+
evt: {
|
|
177
|
+
layerX: 20,
|
|
178
|
+
layerY: 30
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
expect(onUpdateShapes).toHaveBeenCalledWith([...initialModel.shapes.slice(0, 2)]);
|
|
182
|
+
|
|
183
|
+
// at this point, state.stateShapes is false, so we don't want to update shapes with false (onUpdateShapes)
|
|
184
|
+
expect(wrapper.instance().state.stateShapes).toEqual(false);
|
|
185
|
+
wrapper.instance().handleOnMouseUp({
|
|
186
|
+
evt: {
|
|
187
|
+
layerX: 20,
|
|
188
|
+
layerY: 30
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
expect(onUpdateShapes).not.toBeCalledWith(false);
|
|
192
|
+
wrapper.instance().handleOnMouseUp({});
|
|
193
|
+
expect(onUpdateShapes).toHaveBeenCalledWith(initialModel.shapes.slice(0, 2));
|
|
194
|
+
});
|
|
195
|
+
it('handleOnSetAsCorrect correct', () => {
|
|
196
|
+
wrapper.instance().handleOnSetAsCorrect({
|
|
197
|
+
id: '1'
|
|
198
|
+
});
|
|
199
|
+
expect(onUpdateShapes).toHaveBeenCalledWith([initialModel.shapes[0], {
|
|
200
|
+
...initialModel.shapes[1],
|
|
201
|
+
correct: true
|
|
202
|
+
}, ...initialModel.shapes.slice(2)]);
|
|
203
|
+
});
|
|
204
|
+
it('handleOnSetAsCorrect incorrect', () => {
|
|
205
|
+
wrapper.instance().handleOnSetAsCorrect({
|
|
206
|
+
id: '0'
|
|
207
|
+
});
|
|
208
|
+
expect(onUpdateShapes).toHaveBeenCalledWith([{
|
|
209
|
+
...initialModel.shapes[0],
|
|
210
|
+
correct: false
|
|
211
|
+
}, ...initialModel.shapes.slice(1)]);
|
|
212
|
+
});
|
|
213
|
+
it('handleOnDragEnd', () => {
|
|
214
|
+
wrapper.instance().handleOnDragEnd('0', {
|
|
215
|
+
x: 1,
|
|
216
|
+
y: 1
|
|
217
|
+
});
|
|
218
|
+
expect(onUpdateShapes).toHaveBeenCalledWith([{
|
|
219
|
+
...initialModel.shapes[0],
|
|
220
|
+
x: 1,
|
|
221
|
+
y: 1
|
|
222
|
+
}, ...initialModel.shapes.slice(1)]);
|
|
223
|
+
});
|
|
224
|
+
it('handleOnDragEnd unexistent id', () => {
|
|
225
|
+
wrapper.instance().handleOnDragEnd('10', {
|
|
226
|
+
x: 1,
|
|
227
|
+
y: 1
|
|
228
|
+
});
|
|
229
|
+
expect(onUpdateShapes).toHaveBeenCalledWith(initialModel.shapes);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZW56eW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfaG90c3BvdERyYXdhYmxlIiwibW9kZWwiLCJpbWFnZVVybCIsInNoYXBlcyIsImlkIiwiaGVpZ2h0Iiwid2lkdGgiLCJ4IiwieSIsImNvcnJlY3QiLCJncm91cCIsInBvaW50cyIsImRpbWVuc2lvbnMiLCJob3RzcG90Q29sb3IiLCJvdXRsaW5lQ29sb3IiLCJtdWx0aXBsZUNvcnJlY3QiLCJkZXNjcmliZSIsInciLCJoYW5kbGVEaXNhYmxlRHJhZyIsImplc3QiLCJmbiIsImhhbmRsZUVuYWJsZURyYWciLCJvblVwZGF0ZUltYWdlRGltZW5zaW9uIiwib25VcGRhdGVTaGFwZXMiLCJpbml0aWFsTW9kZWwiLCJiZWZvcmVFYWNoIiwiZXh0cmFzIiwicHJvcHMiLCJjbGFzc2VzIiwiZGlzYWJsZURyYWciLCJlbmFibGVEcmFnIiwic3Ryb2tlV2lkdGgiLCJzaGFwZVR5cGUiLCJoYW5kbGVGaW5pc2hEcmF3aW5nIiwib25EZWxldGVTaGFwZSIsInNoYWxsb3ciLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIkRyYXdhYmxlIiwiaXQiLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJ3cmFwcGVyIiwiaW5zdGFuY2UiLCJzdGF0ZSIsInN0YXRlU2hhcGVzIiwiZXZlbnQiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiZXZ0IiwibGF5ZXJYIiwibGF5ZXJZIiwiaGFuZGxlT25Nb3VzZURvd24iLCJub3QiLCJ0b0JlQ2FsbGVkIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJpbmRleCIsImlzRHJhd2luZyIsInNsaWNlIiwiaGFuZGxlT25Nb3VzZVVwIiwidG9FcXVhbCIsInRvQmVDYWxsZWRXaXRoIiwiaGFuZGxlT25TZXRBc0NvcnJlY3QiLCJoYW5kbGVPbkRyYWdFbmQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2hvdHNwb3QtZHJhd2FibGUudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEcmF3YWJsZSB9IGZyb20gJy4uL2hvdHNwb3QtZHJhd2FibGUnO1xuXG5jb25zdCBtb2RlbCA9ICgpID0+ICh7XG4gIGltYWdlVXJsOiAnaHR0cHM6Ly9jZG4uZmx1ZW5jZS5uZXQvaW1hZ2UvMDI0MGViMTQ1NWNlNGM0YmI2MTgwMjMyMzQ3YjZhZWZfVycsXG4gIHNoYXBlczogW1xuICAgIHtcbiAgICAgIGlkOiAnMCcsXG4gICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgIHdpZHRoOiAxMzAsXG4gICAgICB4OiAxLFxuICAgICAgeTogMSxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGhlaWdodDogMTQwLFxuICAgICAgd2lkdGg6IDEzMCxcbiAgICAgIHg6IDE0MCxcbiAgICAgIHk6IDEsXG4gICAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcyJyxcbiAgICAgIGhlaWdodDogMTQwLFxuICAgICAgd2lkdGg6IDEzMCxcbiAgICAgIHg6IDI4MCxcbiAgICAgIHk6IDEsXG4gICAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICczJyxcbiAgICAgIHBvaW50czogW1xuICAgICAgICB7IHg6IDEsIHk6IDE0OCB9LFxuICAgICAgICB7IHg6IDEsIHk6IDI4OCB9LFxuICAgICAgICB7IHk6IDI4OCwgeDogMTI5IH0sXG4gICAgICAgIHsgeTogMTQ4LCB4OiAxMjkgfSxcbiAgICAgIF0sXG4gICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgZ3JvdXA6ICdwb2x5Z29ucycsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzQnLFxuICAgICAgcG9pbnRzOiBbXG4gICAgICAgIHsgeTogMTUxLCB4OiAxNDEgfSxcbiAgICAgICAgeyB5OiAyODksIHg6IDE0MSB9LFxuICAgICAgICB7IHk6IDI4OSwgeDogMjY5IH0sXG4gICAgICAgIHsgeDogMjY5LCB5OiAxNTEgfSxcbiAgICAgIF0sXG4gICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgIGdyb3VwOiAncG9seWdvbnMnLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICc1JyxcbiAgICAgIHBvaW50czogW1xuICAgICAgICB7IHg6IDI3OSwgeTogMTUwIH0sXG4gICAgICAgIHsgeDogMjc5LCB5OiAyODkgfSxcbiAgICAgICAgeyB4OiA0MDcsIHk6IDI4OSB9LFxuICAgICAgICB7IHg6IDQwNywgeTogMTUwIH0sXG4gICAgICBdLFxuICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICBncm91cDogJ3BvbHlnb25zJyxcbiAgICB9LFxuICBdLFxuICBkaW1lbnNpb25zOiB7XG4gICAgaGVpZ2h0OiAyOTEsXG4gICAgd2lkdGg6IDQxMCxcbiAgfSxcbiAgaG90c3BvdENvbG9yOiAncmdiYSgxMzcsIDE4MywgMjQ0LCAwLjY1KScsXG4gIG91dGxpbmVDb2xvcjogJ2JsdWUnLFxuICBtdWx0aXBsZUNvcnJlY3Q6IHRydWUsXG59KTtcblxuZGVzY3JpYmUoJ0hvdHNwb3REcmF3YWJsZScsICgpID0+IHtcbiAgbGV0IHcsXG4gICAgaGFuZGxlRGlzYWJsZURyYWcgPSBqZXN0LmZuKCksXG4gICAgaGFuZGxlRW5hYmxlRHJhZyA9IGplc3QuZm4oKSxcbiAgICBvblVwZGF0ZUltYWdlRGltZW5zaW9uID0gamVzdC5mbigpLFxuICAgIG9uVXBkYXRlU2hhcGVzID0gamVzdC5mbigpLFxuICAgIGluaXRpYWxNb2RlbCA9IG1vZGVsKCk7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHcgPSAoZXh0cmFzKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgIGRpbWVuc2lvbnM6IGluaXRpYWxNb2RlbC5kaW1lbnNpb25zLFxuICAgICAgICBkaXNhYmxlRHJhZzogaGFuZGxlRGlzYWJsZURyYWcsXG4gICAgICAgIGVuYWJsZURyYWc6IGhhbmRsZUVuYWJsZURyYWcsXG4gICAgICAgIGltYWdlVXJsOiBpbml0aWFsTW9kZWwuaW1hZ2VVcmwsXG4gICAgICAgIGhvdHNwb3RDb2xvcjogaW5pdGlhbE1vZGVsLmhvdHNwb3RDb2xvcixcbiAgICAgICAgbXVsdGlwbGVDb3JyZWN0OiBpbml0aWFsTW9kZWwubXVsdGlwbGVDb3JyZWN0LFxuICAgICAgICBvblVwZGF0ZUltYWdlRGltZW5zaW9uOiBvblVwZGF0ZUltYWdlRGltZW5zaW9uLFxuICAgICAgICBvblVwZGF0ZVNoYXBlczogb25VcGRhdGVTaGFwZXMsXG4gICAgICAgIG91dGxpbmVDb2xvcjogaW5pdGlhbE1vZGVsLm91dGxpbmVDb2xvcixcbiAgICAgICAgc2hhcGVzOiBpbml0aWFsTW9kZWwuc2hhcGVzLFxuICAgICAgICBzdHJva2VXaWR0aDogNSxcbiAgICAgICAgc2hhcGVUeXBlOiAncmVjdGFuZ2xlJyxcbiAgICAgICAgaGFuZGxlRmluaXNoRHJhd2luZzogamVzdC5mbigpLFxuICAgICAgICBvbkRlbGV0ZVNoYXBlOiBqZXN0LmZuKCksXG4gICAgICAgIC4uLmV4dHJhcyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzaGFsbG93KDxEcmF3YWJsZSB7Li4ucHJvcHN9IC8+KTtcbiAgICB9O1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVyJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGggZGVmYXVsdCBzdHJva2VXaWR0aCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3KCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBnaXZlbiBzdHJva2VXaWR0aCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3KHsgc3Ryb2tlV2lkdGg6IDEwIH0pKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHcoKSkudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBsZXQgd3JhcHBlcjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgd3JhcHBlciA9IHcoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVPbk1vdXNlRG93biB0YXJnZXQgIT0gU3RhZ2UnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuc3RhdGUuc3RhdGVTaGFwZXMgPSBpbml0aWFsTW9kZWwuc2hhcGVzO1xuXG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgdGFyZ2V0OiAnTGluZScsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6ICdTdGFnZScsXG4gICAgICAgIGV2dDoge1xuICAgICAgICAgIGxheWVyWDogMjAsXG4gICAgICAgICAgbGF5ZXJZOiAzMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVPbk1vdXNlRG93bihldmVudCk7XG5cbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykubm90LnRvQmVDYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVPbk1vdXNlRG93biB0YXJnZXQgPSBTdGFnZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICB0YXJnZXQ6ICdTdGFnZScsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6ICdTdGFnZScsXG4gICAgICAgIGV2dDoge1xuICAgICAgICAgIGxheWVyWDogMjAsXG4gICAgICAgICAgbGF5ZXJZOiAzMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVPbk1vdXNlRG93bihldmVudCk7XG5cbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW1xuICAgICAgICAuLi5pbml0aWFsTW9kZWwuc2hhcGVzLFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2JyxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgeDogMjAsXG4gICAgICAgICAgeTogMzAsXG4gICAgICAgICAgZ3JvdXA6ICdyZWN0YW5nbGVzJyxcbiAgICAgICAgICBpbmRleDogNixcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZU9uTW91c2VVcCBpc0RyYXdpbmcgPSB0cnVlJywgKCkgPT4ge1xuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLnN0YXRlLmlzRHJhd2luZyA9IHRydWU7XG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuc3RhdGUuc2hhcGVzID0gaW5pdGlhbE1vZGVsLnNoYXBlcy5zbGljZSgwLCAyKTtcblxuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uTW91c2VVcCh7XG4gICAgICAgIGV2dDoge1xuICAgICAgICAgIGxheWVyWDogMjAsXG4gICAgICAgICAgbGF5ZXJZOiAzMCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFsuLi5pbml0aWFsTW9kZWwuc2hhcGVzLnNsaWNlKDAsIDIpXSk7XG5cbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHN0YXRlLnN0YXRlU2hhcGVzIGlzIGZhbHNlLCBzbyB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzaGFwZXMgd2l0aCBmYWxzZSAob25VcGRhdGVTaGFwZXMpXG4gICAgICBleHBlY3Qod3JhcHBlci5pbnN0YW5jZSgpLnN0YXRlLnN0YXRlU2hhcGVzKS50b0VxdWFsKGZhbHNlKTtcblxuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uTW91c2VVcCh7XG4gICAgICAgIGV2dDoge1xuICAgICAgICAgIGxheWVyWDogMjAsXG4gICAgICAgICAgbGF5ZXJZOiAzMCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLm5vdC50b0JlQ2FsbGVkV2l0aChmYWxzZSk7XG5cbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVPbk1vdXNlVXAoe30pO1xuXG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGluaXRpYWxNb2RlbC5zaGFwZXMuc2xpY2UoMCwgMikpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZU9uU2V0QXNDb3JyZWN0IGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlT25TZXRBc0NvcnJlY3Qoe1xuICAgICAgICBpZDogJzEnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW1xuICAgICAgICBpbml0aWFsTW9kZWwuc2hhcGVzWzBdLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uaW5pdGlhbE1vZGVsLnNoYXBlc1sxXSxcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAuLi5pbml0aWFsTW9kZWwuc2hhcGVzLnNsaWNlKDIpLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlT25TZXRBc0NvcnJlY3QgaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uU2V0QXNDb3JyZWN0KHtcbiAgICAgICAgaWQ6ICcwJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtcbiAgICAgICAge1xuICAgICAgICAgIC4uLmluaXRpYWxNb2RlbC5zaGFwZXNbMF0sXG4gICAgICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmluaXRpYWxNb2RlbC5zaGFwZXMuc2xpY2UoMSksXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVPbkRyYWdFbmQnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlT25EcmFnRW5kKCcwJywgeyB4OiAxLCB5OiAxIH0pO1xuXG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtcbiAgICAgICAge1xuICAgICAgICAgIC4uLmluaXRpYWxNb2RlbC5zaGFwZXNbMF0sXG4gICAgICAgICAgeDogMSxcbiAgICAgICAgICB5OiAxLFxuICAgICAgICB9LFxuICAgICAgICAuLi5pbml0aWFsTW9kZWwuc2hhcGVzLnNsaWNlKDEpLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlT25EcmFnRW5kIHVuZXhpc3RlbnQgaWQnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlT25EcmFnRW5kKCcxMCcsIHsgeDogMSwgeTogMSB9KTtcblxuICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChpbml0aWFsTW9kZWwuc2hhcGVzKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQUVBLE1BQU1JLEtBQUssR0FBR0EsQ0FBQSxNQUFPO0VBQ25CQyxRQUFRLEVBQUUsa0VBQWtFO0VBQzVFQyxNQUFNLEVBQUUsQ0FDTjtJQUNFQyxFQUFFLEVBQUUsR0FBRztJQUNQQyxNQUFNLEVBQUUsR0FBRztJQUNYQyxLQUFLLEVBQUUsR0FBRztJQUNWQyxDQUFDLEVB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
|