@pie-element/hotspot 4.10.16-next.1 → 4.11.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/LICENSE.md +5 -0
  3. package/configure/CHANGELOG.md +75 -0
  4. package/configure/lib/button.js +1 -1
  5. package/configure/lib/defaults.js +3 -2
  6. package/configure/lib/defaults.js.map +1 -1
  7. package/configure/lib/hotspot-container.js +1 -1
  8. package/configure/lib/hotspot-drawable.js +2 -2
  9. package/configure/lib/hotspot-palette.js +1 -1
  10. package/configure/lib/hotspot-polygon.js +1 -1
  11. package/configure/lib/hotspot-rectangle.js +1 -1
  12. package/configure/lib/index.js +1 -1
  13. package/configure/lib/root.js +23 -18
  14. package/configure/lib/root.js.map +1 -1
  15. package/configure/lib/upload-control.js +1 -1
  16. package/configure/lib/utils.js +14 -2
  17. package/configure/lib/utils.js.map +1 -1
  18. package/configure/package.json +3 -3
  19. package/configure/src/__tests__/__snapshots__/root.test.js.snap +32 -4
  20. package/configure/src/defaults.js +2 -1
  21. package/configure/src/hotspot-drawable.jsx +1 -1
  22. package/configure/src/root.jsx +33 -26
  23. package/configure/src/utils.js +23 -1
  24. package/controller/CHANGELOG.md +12 -0
  25. package/controller/lib/defaults.js +1 -1
  26. package/controller/lib/index.js +1 -1
  27. package/controller/lib/index.js.map +1 -1
  28. package/controller/lib/utils.js +1 -1
  29. package/controller/package.json +1 -1
  30. package/lib/hotspot/container.js +1 -1
  31. package/lib/hotspot/icons.js +1 -1
  32. package/lib/hotspot/image.js +1 -1
  33. package/lib/hotspot/index.js +1 -1
  34. package/lib/hotspot/polygon.js +1 -1
  35. package/lib/hotspot/rectangle.js +1 -1
  36. package/lib/index.js +4 -1
  37. package/lib/session-updater.js +1 -1
  38. package/package.json +4 -4
  39. package/src/index.js +5 -0
  40. package/configure/lib/__tests__/hotspot-container.test.js +0 -281
  41. package/configure/lib/__tests__/hotspot-drawable.test.js +0 -241
  42. package/configure/lib/__tests__/index.test.js +0 -224
  43. package/configure/lib/__tests__/root.test.js +0 -443
  44. package/configure/lib/__tests__/utils.test.js +0 -335
  45. package/controller/lib/__tests__/index.test.js +0 -921
  46. package/controller/lib/__tests__/utils.test.js +0 -8
  47. package/docs/demo/pie.manifest.json +0 -11
  48. package/lib/__tests__/container-test.js +0 -185
  49. package/lib/__tests__/image-test.js +0 -63
  50. package/lib/__tests__/polygon-test.js +0 -99
  51. package/lib/__tests__/rectangle-test.js +0 -92
  52. package/lib/__tests__/session-updater-test.js +0 -78
@@ -1,921 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
-
7
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
-
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
-
11
- var _index = require("../index");
12
-
13
- var _utils = require("../utils");
14
-
15
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
-
17
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
-
19
- describe('controller', function () {
20
- var result, question, session, env;
21
- beforeEach(function () {
22
- question = {
23
- prompt: 'prompt',
24
- promptEnabled: true,
25
- imageUrl: '',
26
- dimensions: {
27
- height: 0,
28
- width: 0
29
- },
30
- outlineColor: 'blue',
31
- hotspotColor: 'lightblue',
32
- shapes: {
33
- rectangles: [{
34
- id: '1',
35
- correct: true
36
- }, {
37
- id: '2'
38
- }, {
39
- id: '3'
40
- }],
41
- polygons: [{
42
- id: '4',
43
- correct: true
44
- }]
45
- },
46
- multipleCorrect: true,
47
- partialScoring: false
48
- };
49
- });
50
- describe('outcome partialScoring test', function () {
51
- describe('hanging controller', function () {
52
- it('doesnt hang if answers is missing', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
53
- var response;
54
- return _regenerator["default"].wrap(function _callee$(_context) {
55
- while (1) {
56
- switch (_context.prev = _context.next) {
57
- case 0:
58
- _context.next = 2;
59
- return (0, _index.outcome)({}, {
60
- id: "1"
61
- }, {});
62
-
63
- case 2:
64
- response = _context.sent;
65
- expect(response).toEqual({
66
- score: 0,
67
- empty: true
68
- });
69
-
70
- case 4:
71
- case "end":
72
- return _context.stop();
73
- }
74
- }
75
- }, _callee);
76
- })));
77
- it('doesnt hang if the rest is missing', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
78
- var response;
79
- return _regenerator["default"].wrap(function _callee2$(_context2) {
80
- while (1) {
81
- switch (_context2.prev = _context2.next) {
82
- case 0:
83
- _context2.next = 2;
84
- return (0, _index.outcome)({}, {
85
- id: "1",
86
- answers: {}
87
- }, {});
88
-
89
- case 2:
90
- response = _context2.sent;
91
- expect(response).toEqual({
92
- score: 0
93
- });
94
-
95
- case 4:
96
- case "end":
97
- return _context2.stop();
98
- }
99
- }
100
- }, _callee2);
101
- })));
102
- });
103
- beforeEach(function () {
104
- var rectangles = question.shapes.rectangles.concat({
105
- id: '5',
106
- correct: true
107
- });
108
- question = _objectSpread(_objectSpread({}, question), {}, {
109
- shapes: _objectSpread(_objectSpread({}, question.shapes), {}, {
110
- rectangles: rectangles
111
- })
112
- });
113
- });
114
-
115
- var assertOutcome = function assertOutcome(message, extra, sessionValue, env, expected) {
116
- it(message, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
117
- var result;
118
- return _regenerator["default"].wrap(function _callee3$(_context3) {
119
- while (1) {
120
- switch (_context3.prev = _context3.next) {
121
- case 0:
122
- _context3.next = 2;
123
- return (0, _index.outcome)(_objectSpread(_objectSpread({}, question), extra), sessionValue, env);
124
-
125
- case 2:
126
- result = _context3.sent;
127
- expect(result).toEqual(expect.objectContaining(expected));
128
-
129
- case 4:
130
- case "end":
131
- return _context3.stop();
132
- }
133
- }
134
- }, _callee3);
135
- })));
136
- };
137
-
138
- assertOutcome('element.partialScoring = true', {
139
- partialScoring: true
140
- }, {
141
- answers: [{
142
- id: '2'
143
- }]
144
- }, {
145
- mode: 'evaluate'
146
- }, {
147
- score: 0
148
- });
149
- assertOutcome('element.partialScoring = false', {
150
- partialScoring: false
151
- }, {
152
- answers: [{
153
- id: '2'
154
- }]
155
- }, {
156
- mode: 'evaluate'
157
- }, {
158
- score: 0
159
- });
160
- assertOutcome('element.partialScoring = false, env.partialScoring = true', {
161
- partialScoring: false
162
- }, {
163
- answers: [{
164
- id: '2'
165
- }]
166
- }, {
167
- mode: 'evaluate',
168
- partialScoring: true
169
- }, {
170
- score: 0
171
- });
172
- assertOutcome('element.partialScoring = true, env.partialScoring = false', {
173
- partialScoring: true
174
- }, {
175
- answers: [{
176
- id: '2'
177
- }]
178
- }, {
179
- mode: 'evaluate',
180
- partialScoring: false
181
- }, {
182
- score: 0
183
- });
184
- });
185
- describe('outcome', function () {
186
- it('returns score of 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
187
- var result;
188
- return _regenerator["default"].wrap(function _callee4$(_context4) {
189
- while (1) {
190
- switch (_context4.prev = _context4.next) {
191
- case 0:
192
- _context4.next = 2;
193
- return (0, _index.outcome)(question, {
194
- answers: [{
195
- id: '2'
196
- }]
197
- });
198
-
199
- case 2:
200
- result = _context4.sent;
201
- expect(result.score).toEqual(0);
202
-
203
- case 4:
204
- case "end":
205
- return _context4.stop();
206
- }
207
- }
208
- }, _callee4);
209
- })));
210
- it('returns score of 1 (partialScoring: false, answers in order)', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
211
- var result;
212
- return _regenerator["default"].wrap(function _callee5$(_context5) {
213
- while (1) {
214
- switch (_context5.prev = _context5.next) {
215
- case 0:
216
- _context5.next = 2;
217
- return (0, _index.outcome)(question, {
218
- answers: [{
219
- id: '1'
220
- }, {
221
- id: '4'
222
- }]
223
- });
224
-
225
- case 2:
226
- result = _context5.sent;
227
- expect(result.score).toEqual(1);
228
-
229
- case 4:
230
- case "end":
231
- return _context5.stop();
232
- }
233
- }
234
- }, _callee5);
235
- })));
236
- it('returns score of 1 (partialScoring: false, answers not in order)', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
237
- var result;
238
- return _regenerator["default"].wrap(function _callee6$(_context6) {
239
- while (1) {
240
- switch (_context6.prev = _context6.next) {
241
- case 0:
242
- _context6.next = 2;
243
- return (0, _index.outcome)(question, {
244
- answers: [{
245
- id: '4'
246
- }, {
247
- id: '1'
248
- }]
249
- });
250
-
251
- case 2:
252
- result = _context6.sent;
253
- expect(result.score).toEqual(1);
254
-
255
- case 4:
256
- case "end":
257
- return _context6.stop();
258
- }
259
- }
260
- }, _callee6);
261
- })));
262
- describe('partial scoring', function () {
263
- beforeEach(function () {
264
- var rectangles = question.shapes.rectangles.concat({
265
- id: '5',
266
- correct: true
267
- }, {
268
- id: '6',
269
- correct: true
270
- });
271
- question = _objectSpread(_objectSpread({}, question), {}, {
272
- partialScoring: true,
273
- shapes: _objectSpread(_objectSpread({}, question.shapes), {}, {
274
- rectangles: rectangles
275
- })
276
- });
277
- });
278
- it('returns a score of 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
279
- var result;
280
- return _regenerator["default"].wrap(function _callee7$(_context7) {
281
- while (1) {
282
- switch (_context7.prev = _context7.next) {
283
- case 0:
284
- _context7.next = 2;
285
- return (0, _index.outcome)(question, {
286
- answers: [{
287
- id: '2'
288
- }]
289
- });
290
-
291
- case 2:
292
- result = _context7.sent;
293
- expect(result.score).toEqual(0);
294
-
295
- case 4:
296
- case "end":
297
- return _context7.stop();
298
- }
299
- }
300
- }, _callee7);
301
- })));
302
- it('returns a score of 0.25 for 1/4 correct answers and 0 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
303
- var result;
304
- return _regenerator["default"].wrap(function _callee8$(_context8) {
305
- while (1) {
306
- switch (_context8.prev = _context8.next) {
307
- case 0:
308
- _context8.next = 2;
309
- return (0, _index.outcome)(question, {
310
- answers: [{
311
- id: '2'
312
- }, {
313
- id: '5'
314
- }]
315
- });
316
-
317
- case 2:
318
- result = _context8.sent;
319
- expect(result.score).toEqual(0.25);
320
-
321
- case 4:
322
- case "end":
323
- return _context8.stop();
324
- }
325
- }
326
- }, _callee8);
327
- })));
328
- it('returns a score of 0.25, even if answers are not in order', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
329
- var result;
330
- return _regenerator["default"].wrap(function _callee9$(_context9) {
331
- while (1) {
332
- switch (_context9.prev = _context9.next) {
333
- case 0:
334
- _context9.next = 2;
335
- return (0, _index.outcome)(question, {
336
- answers: [{
337
- id: '5'
338
- }, {
339
- id: '2'
340
- }]
341
- });
342
-
343
- case 2:
344
- result = _context9.sent;
345
- expect(result.score).toEqual(0.25);
346
-
347
- case 4:
348
- case "end":
349
- return _context9.stop();
350
- }
351
- }
352
- }, _callee9);
353
- })));
354
- it('returns a score of 0.5 for 2/4 correct answers and 0 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
355
- var result;
356
- return _regenerator["default"].wrap(function _callee10$(_context10) {
357
- while (1) {
358
- switch (_context10.prev = _context10.next) {
359
- case 0:
360
- _context10.next = 2;
361
- return (0, _index.outcome)(question, {
362
- answers: [{
363
- id: '5'
364
- }, {
365
- id: '4'
366
- }]
367
- });
368
-
369
- case 2:
370
- result = _context10.sent;
371
- expect(result.score).toEqual(0.5);
372
-
373
- case 4:
374
- case "end":
375
- return _context10.stop();
376
- }
377
- }
378
- }, _callee10);
379
- })));
380
- it('returns a score of 0.75 for 3/4 correct answers and 0 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
381
- var result;
382
- return _regenerator["default"].wrap(function _callee11$(_context11) {
383
- while (1) {
384
- switch (_context11.prev = _context11.next) {
385
- case 0:
386
- _context11.next = 2;
387
- return (0, _index.outcome)(question, {
388
- answers: [{
389
- id: '1'
390
- }, {
391
- id: '5'
392
- }, {
393
- id: '4'
394
- }]
395
- });
396
-
397
- case 2:
398
- result = _context11.sent;
399
- expect(result.score).toEqual(0.75);
400
-
401
- case 4:
402
- case "end":
403
- return _context11.stop();
404
- }
405
- }
406
- }, _callee11);
407
- })));
408
- it('returns a score of 1 for 4/4 correct answers and 0 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
409
- var result;
410
- return _regenerator["default"].wrap(function _callee12$(_context12) {
411
- while (1) {
412
- switch (_context12.prev = _context12.next) {
413
- case 0:
414
- _context12.next = 2;
415
- return (0, _index.outcome)(question, {
416
- answers: [{
417
- id: '1'
418
- }, {
419
- id: '4'
420
- }, {
421
- id: '5'
422
- }, {
423
- id: '6'
424
- }]
425
- });
426
-
427
- case 2:
428
- result = _context12.sent;
429
- expect(result.score).toEqual(1);
430
-
431
- case 4:
432
- case "end":
433
- return _context12.stop();
434
- }
435
- }
436
- }, _callee12);
437
- })));
438
- it('returns a score of 0.25 for 1/4 correct answers and 2 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
439
- var result;
440
- return _regenerator["default"].wrap(function _callee13$(_context13) {
441
- while (1) {
442
- switch (_context13.prev = _context13.next) {
443
- case 0:
444
- _context13.next = 2;
445
- return (0, _index.outcome)(question, {
446
- answers: [{
447
- id: '1'
448
- }, {
449
- id: '2'
450
- }, {
451
- id: '3'
452
- }]
453
- });
454
-
455
- case 2:
456
- result = _context13.sent;
457
- expect(result.score).toEqual(0.25);
458
-
459
- case 4:
460
- case "end":
461
- return _context13.stop();
462
- }
463
- }
464
- }, _callee13);
465
- })));
466
- it('returns a score of 0.5 for 2/4 correct answers and 2 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
467
- var result;
468
- return _regenerator["default"].wrap(function _callee14$(_context14) {
469
- while (1) {
470
- switch (_context14.prev = _context14.next) {
471
- case 0:
472
- _context14.next = 2;
473
- return (0, _index.outcome)(question, {
474
- answers: [{
475
- id: '1'
476
- }, {
477
- id: '4'
478
- }, {
479
- id: '2'
480
- }, {
481
- id: '3'
482
- }]
483
- });
484
-
485
- case 2:
486
- result = _context14.sent;
487
- expect(result.score).toEqual(0.5);
488
-
489
- case 4:
490
- case "end":
491
- return _context14.stop();
492
- }
493
- }
494
- }, _callee14);
495
- })));
496
- it('returns a score of 0.5 for 2/4 correct answers and 2 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
497
- var result;
498
- return _regenerator["default"].wrap(function _callee15$(_context15) {
499
- while (1) {
500
- switch (_context15.prev = _context15.next) {
501
- case 0:
502
- _context15.next = 2;
503
- return (0, _index.outcome)(question, {
504
- answers: [{
505
- id: '1'
506
- }, {
507
- id: '4'
508
- }, {
509
- id: '2'
510
- }, {
511
- id: '3'
512
- }]
513
- });
514
-
515
- case 2:
516
- result = _context15.sent;
517
- expect(result.score).toEqual(0.5);
518
-
519
- case 4:
520
- case "end":
521
- return _context15.stop();
522
- }
523
- }
524
- }, _callee15);
525
- })));
526
- it('returns a score of 0.75 for 3/4 correct answers and 1 incorrect answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee16() {
527
- var result;
528
- return _regenerator["default"].wrap(function _callee16$(_context16) {
529
- while (1) {
530
- switch (_context16.prev = _context16.next) {
531
- case 0:
532
- _context16.next = 2;
533
- return (0, _index.outcome)(question, {
534
- answers: [{
535
- id: '6'
536
- }, {
537
- id: '4'
538
- }, {
539
- id: '1'
540
- }, {
541
- id: '3'
542
- }]
543
- });
544
-
545
- case 2:
546
- result = _context16.sent;
547
- expect(result.score).toEqual(0.75);
548
-
549
- case 4:
550
- case "end":
551
- return _context16.stop();
552
- }
553
- }
554
- }, _callee16);
555
- })));
556
- it('returns a score of 0.75 for 3/4 correct answers and 1 incorrect answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee17() {
557
- var result;
558
- return _regenerator["default"].wrap(function _callee17$(_context17) {
559
- while (1) {
560
- switch (_context17.prev = _context17.next) {
561
- case 0:
562
- _context17.next = 2;
563
- return (0, _index.outcome)(question, {
564
- answers: [{
565
- id: '6'
566
- }, {
567
- id: '4'
568
- }, {
569
- id: '1'
570
- }, {
571
- id: '3'
572
- }]
573
- });
574
-
575
- case 2:
576
- result = _context17.sent;
577
- expect(result.score).toEqual(0.75);
578
-
579
- case 4:
580
- case "end":
581
- return _context17.stop();
582
- }
583
- }
584
- }, _callee17);
585
- })));
586
- it('returns a score of 0.5 for 3/4 correct answers and 2 incorrect answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee18() {
587
- var result;
588
- return _regenerator["default"].wrap(function _callee18$(_context18) {
589
- while (1) {
590
- switch (_context18.prev = _context18.next) {
591
- case 0:
592
- _context18.next = 2;
593
- return (0, _index.outcome)(question, {
594
- answers: [{
595
- id: '6'
596
- }, {
597
- id: '4'
598
- }, {
599
- id: '2'
600
- }, {
601
- id: '3'
602
- }, {
603
- id: '1'
604
- }]
605
- });
606
-
607
- case 2:
608
- result = _context18.sent;
609
- expect(result.score).toEqual(0.5);
610
-
611
- case 4:
612
- case "end":
613
- return _context18.stop();
614
- }
615
- }
616
- }, _callee18);
617
- })));
618
- it('returns a score of 0.75 for 4/4 correct answers and 1 incorrect answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee19() {
619
- var result;
620
- return _regenerator["default"].wrap(function _callee19$(_context19) {
621
- while (1) {
622
- switch (_context19.prev = _context19.next) {
623
- case 0:
624
- _context19.next = 2;
625
- return (0, _index.outcome)(question, {
626
- answers: [{
627
- id: '6'
628
- }, {
629
- id: '4'
630
- }, {
631
- id: '2'
632
- }, {
633
- id: '5'
634
- }, {
635
- id: '1'
636
- }]
637
- });
638
-
639
- case 2:
640
- result = _context19.sent;
641
- expect(result.score).toEqual(0.75);
642
-
643
- case 4:
644
- case "end":
645
- return _context19.stop();
646
- }
647
- }
648
- }, _callee19);
649
- })));
650
- it('returns a score of 0.5 for 4/4 correct answers and 2 incorrect answers', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee20() {
651
- var result;
652
- return _regenerator["default"].wrap(function _callee20$(_context20) {
653
- while (1) {
654
- switch (_context20.prev = _context20.next) {
655
- case 0:
656
- _context20.next = 2;
657
- return (0, _index.outcome)(question, {
658
- answers: [{
659
- id: '6'
660
- }, {
661
- id: '4'
662
- }, {
663
- id: '2'
664
- }, {
665
- id: '5'
666
- }, {
667
- id: '1'
668
- }, {
669
- id: '3'
670
- }]
671
- });
672
-
673
- case 2:
674
- result = _context20.sent;
675
- expect(result.score).toEqual(0.5);
676
-
677
- case 4:
678
- case "end":
679
- return _context20.stop();
680
- }
681
- }
682
- }, _callee20);
683
- })));
684
- });
685
-
686
- var returnOutcome = function returnOutcome(session) {
687
- it("returns empty: true when session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee21() {
688
- var result;
689
- return _regenerator["default"].wrap(function _callee21$(_context21) {
690
- while (1) {
691
- switch (_context21.prev = _context21.next) {
692
- case 0:
693
- _context21.next = 2;
694
- return (0, _index.outcome)(question, session);
695
-
696
- case 2:
697
- result = _context21.sent;
698
- expect(result).toEqual({
699
- score: 0,
700
- empty: true
701
- });
702
-
703
- case 4:
704
- case "end":
705
- return _context21.stop();
706
- }
707
- }
708
- }, _callee21);
709
- })));
710
- };
711
-
712
- returnOutcome(undefined);
713
- returnOutcome(null);
714
- returnOutcome({});
715
- });
716
- describe('model', function () {
717
- describe('mode: gather', function () {
718
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee22() {
719
- return _regenerator["default"].wrap(function _callee22$(_context22) {
720
- while (1) {
721
- switch (_context22.prev = _context22.next) {
722
- case 0:
723
- session = {};
724
- env = {
725
- mode: 'gather'
726
- };
727
- _context22.next = 4;
728
- return (0, _index.model)(question, session, env);
729
-
730
- case 4:
731
- result = _context22.sent;
732
-
733
- case 5:
734
- case "end":
735
- return _context22.stop();
736
- }
737
- }
738
- }, _callee22);
739
- })));
740
- it('returns disabled', function () {
741
- expect(result.disabled).toEqual(false);
742
- });
743
- it('returns mode', function () {
744
- expect(result.mode).toEqual('gather');
745
- });
746
- it('returns prompt', function () {
747
- expect(result.prompt).toEqual('prompt');
748
- });
749
- it('returns dimensions', function () {
750
- expect(result.dimensions).toEqual({
751
- height: 0,
752
- width: 0
753
- });
754
- });
755
- it('returns outlineColor', function () {
756
- expect(result.outlineColor).toEqual('blue');
757
- });
758
- it('returns hotspotColor', function () {
759
- expect(result.hotspotColor).toEqual('lightblue');
760
- });
761
- it('returns multipleCorrect', function () {
762
- expect(result.multipleCorrect).toEqual(true);
763
- });
764
- it('returns shapes', function () {
765
- expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
766
- id: '1',
767
- correct: true
768
- }, {
769
- id: '2'
770
- }, {
771
- id: '3'
772
- }]));
773
- expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
774
- id: '4',
775
- correct: true
776
- }]));
777
- });
778
- it('does not return responseCorrect', function () {
779
- expect(result.responseCorrect).toBe(undefined);
780
- });
781
- });
782
- describe('mode: view', function () {
783
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee23() {
784
- return _regenerator["default"].wrap(function _callee23$(_context23) {
785
- while (1) {
786
- switch (_context23.prev = _context23.next) {
787
- case 0:
788
- session = {};
789
- env = {
790
- mode: 'view'
791
- };
792
- _context23.next = 4;
793
- return (0, _index.model)(question, session, env);
794
-
795
- case 4:
796
- result = _context23.sent;
797
-
798
- case 5:
799
- case "end":
800
- return _context23.stop();
801
- }
802
- }
803
- }, _callee23);
804
- })));
805
- it('returns disabled', function () {
806
- expect(result.disabled).toEqual(true);
807
- });
808
- });
809
- describe('mode: evaluate', function () {
810
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee24() {
811
- return _regenerator["default"].wrap(function _callee24$(_context24) {
812
- while (1) {
813
- switch (_context24.prev = _context24.next) {
814
- case 0:
815
- session = {
816
- answers: []
817
- };
818
- env = {
819
- mode: 'evaluate'
820
- };
821
- _context24.next = 4;
822
- return (0, _index.model)(question, session, env);
823
-
824
- case 4:
825
- result = _context24.sent;
826
- return _context24.abrupt("return", result);
827
-
828
- case 6:
829
- case "end":
830
- return _context24.stop();
831
- }
832
- }
833
- }, _callee24);
834
- })));
835
- it('returns choices w/ correct', function () {
836
- expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
837
- id: '1',
838
- correct: true
839
- }, {
840
- id: '2'
841
- }, {
842
- id: '3'
843
- }]));
844
- expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
845
- id: '4',
846
- correct: true
847
- }]));
848
- });
849
- it('returns is response correct', function () {
850
- expect(result.responseCorrect).toEqual(false);
851
- });
852
- });
853
- });
854
- describe('isResponseCorrect', function () {
855
- var returnIsResponseCorect = function returnIsResponseCorect(session) {
856
- it("response is not correct if session is ".concat(JSON.stringify(session)), function () {
857
- expect((0, _utils.isResponseCorrect)(question, session)).toEqual(false);
858
- });
859
- };
860
-
861
- returnIsResponseCorect(undefined);
862
- returnIsResponseCorect(null);
863
- returnIsResponseCorect({});
864
- });
865
- describe('correct response', function () {
866
- it('returns correct response if env is correct', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee25() {
867
- var sess;
868
- return _regenerator["default"].wrap(function _callee25$(_context25) {
869
- while (1) {
870
- switch (_context25.prev = _context25.next) {
871
- case 0:
872
- _context25.next = 2;
873
- return (0, _index.createCorrectResponseSession)(question, {
874
- mode: 'gather',
875
- role: 'instructor'
876
- });
877
-
878
- case 2:
879
- sess = _context25.sent;
880
- expect(sess).toEqual({
881
- answers: [{
882
- id: '1'
883
- }, {
884
- id: '4'
885
- }],
886
- id: '1'
887
- });
888
-
889
- case 4:
890
- case "end":
891
- return _context25.stop();
892
- }
893
- }
894
- }, _callee25);
895
- })));
896
- it('returns null env is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee26() {
897
- var noResult;
898
- return _regenerator["default"].wrap(function _callee26$(_context26) {
899
- while (1) {
900
- switch (_context26.prev = _context26.next) {
901
- case 0:
902
- _context26.next = 2;
903
- return (0, _index.createCorrectResponseSession)(question, {
904
- mode: 'gather',
905
- role: 'student'
906
- });
907
-
908
- case 2:
909
- noResult = _context26.sent;
910
- expect(noResult).toBeNull();
911
-
912
- case 4:
913
- case "end":
914
- return _context26.stop();
915
- }
916
- }
917
- }, _callee26);
918
- })));
919
- });
920
- });
921
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsInJlc3VsdCIsInF1ZXN0aW9uIiwic2Vzc2lvbiIsImVudiIsImJlZm9yZUVhY2giLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiaW1hZ2VVcmwiLCJkaW1lbnNpb25zIiwiaGVpZ2h0Iiwid2lkdGgiLCJvdXRsaW5lQ29sb3IiLCJob3RzcG90Q29sb3IiLCJzaGFwZXMiLCJyZWN0YW5nbGVzIiwiaWQiLCJjb3JyZWN0IiwicG9seWdvbnMiLCJtdWx0aXBsZUNvcnJlY3QiLCJwYXJ0aWFsU2NvcmluZyIsIml0IiwicmVzcG9uc2UiLCJleHBlY3QiLCJ0b0VxdWFsIiwic2NvcmUiLCJlbXB0eSIsImFuc3dlcnMiLCJjb25jYXQiLCJhc3NlcnRPdXRjb21lIiwibWVzc2FnZSIsImV4dHJhIiwic2Vzc2lvblZhbHVlIiwiZXhwZWN0ZWQiLCJvYmplY3RDb250YWluaW5nIiwibW9kZSIsInJldHVybk91dGNvbWUiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiZGlzYWJsZWQiLCJhcnJheUNvbnRhaW5pbmciLCJyZXNwb25zZUNvcnJlY3QiLCJ0b0JlIiwicmV0dXJuSXNSZXNwb25zZUNvcmVjdCIsInJvbGUiLCJzZXNzIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7QUFFQUEsUUFBUSxDQUFDLFlBQUQsRUFBZSxZQUFNO0FBQzNCLE1BQUlDLE1BQUosRUFBWUMsUUFBWixFQUFzQkMsT0FBdEIsRUFBK0JDLEdBQS9CO0FBRUFDLEVBQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2ZILElBQUFBLFFBQVEsR0FBRztBQUNUSSxNQUFBQSxNQUFNLEVBQUUsUUFEQztBQUVUQyxNQUFBQSxhQUFhLEVBQUUsSUFGTjtBQUdUQyxNQUFBQSxRQUFRLEVBQUUsRUFIRDtBQUlUQyxNQUFBQSxVQUFVLEVB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LGVBQXZDLENBRFM7O0FBQUE7QUFDMUJFLGNBQUFBLFFBRDBCO0FBS2hDeEIsY0FBQUEsTUFBTSxDQUFDd0IsUUFBRCxDQUFOLENBQWlCQyxRQUFqQjs7QUFMZ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FBaEMsR0FBRjtBQU9ELEdBaEJPLENBQVI7QUFpQkQsQ0EvWE8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsLCBvdXRjb21lLCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgaXNSZXNwb25zZUNvcnJlY3QgfSBmcm9tICcuLi91dGlscyc7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0LCBxdWVzdGlvbiwgc2Vzc2lvbiwgZW52O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHF1ZXN0aW9uID0ge1xuICAgICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICBpbWFnZVVybDogJycsXG4gICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICB9LFxuICAgICAgb3V0bGluZUNvbG9yOiAnYmx1ZScsXG4gICAgICBob3RzcG90Q29sb3I6ICdsaWdodGJsdWUnLFxuICAgICAgc2hhcGVzOiB7XG4gICAgICAgIHJlY3RhbmdsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBvbHlnb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICc0JyxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZUNvcnJlY3Q6IHRydWUsXG4gICAgICBwYXJ0aWFsU2NvcmluZzogZmFsc2UsXG4gICAgfTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUgcGFydGlhbFNjb3JpbmcgdGVzdCcsICgpID0+IHtcblxuICAgIGRlc2NyaWJlKCdoYW5naW5nIGNvbnRyb2xsZXInLCAoKT0+IHtcblxuICAgICAgaXQoJ2RvZXNudCBoYW5nIGlmIGFuc3dlcnMgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvdXRjb21lKHt9LCB7aWQ6IFwiMVwifSwge30pO1xuICAgICAgICBleHBlY3QocmVzcG9uc2UpLnRvRXF1YWwoe3Njb3JlOiAwLCBlbXB0eTogdHJ1ZX0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzbnQgaGFuZyBpZiB0aGUgcmVzdCBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG91dGNvbWUoe30sIHtpZDogXCIxXCIsIGFuc3dlcnM6IHt9fSwge30pO1xuICAgICAgICBleHBlY3QocmVzcG9uc2UpLnRvRXF1YWwoe3Njb3JlOiAwIH0pO1xuICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBjb25zdCByZWN0YW5nbGVzID0gcXVlc3Rpb24uc2hhcGVzLnJlY3RhbmdsZXMuY29uY2F0KHtcbiAgICAgICAgaWQ6ICc1JyxcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcXVlc3Rpb24gPSB7XG4gICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICBzaGFwZXM6IHtcbiAgICAgICAgICAuLi5xdWVzdGlvbi5zaGFwZXMsXG4gICAgICAgICAgcmVjdGFuZ2xlcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3NlcnRPdXRjb21lID0gKG1lc3NhZ2UsIGV4dHJhLCBzZXNzaW9uVmFsdWUsIGVudiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KG1lc3NhZ2UsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShcbiAgICAgICAgICB7IC4uLnF1ZXN0aW9uLCAuLi5leHRyYSB9LFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSxcbiAgICAgICAgICBlbnZcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyhleHBlY3RlZCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IHRydWUnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICAgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgc2NvcmU6IDAgfVxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSBmYWxzZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiBmYWxzZSB9LFxuICAgICAgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgc2NvcmU6IDAgfVxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSBmYWxzZSwgZW52LnBhcnRpYWxTY29yaW5nID0gdHJ1ZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiBmYWxzZSB9LFxuICAgICAgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScsIHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgICB7IHNjb3JlOiAwIH1cbiAgICApO1xuXG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgICdlbGVtZW50LnBhcnRpYWxTY29yaW5nID0gdHJ1ZSwgZW52LnBhcnRpYWxTY29yaW5nID0gZmFsc2UnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICAgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScsIHBhcnRpYWxTY29yaW5nOiBmYWxzZSB9LFxuICAgICAgeyBzY29yZTogMCB9XG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgc2NvcmUgb2YgMCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgYW5zd2VyczogW3sgaWQ6ICcyJyB9XSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBzY29yZSBvZiAxIChwYXJ0aWFsU2NvcmluZzogZmFsc2UsIGFuc3dlcnMgaW4gb3JkZXIpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICc0JyB9XSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHNjb3JlIG9mIDEgKHBhcnRpYWxTY29yaW5nOiBmYWxzZSwgYW5zd2VycyBub3QgaW4gb3JkZXIpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzQnIH0sIHsgaWQ6ICcxJyB9XSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJ0aWFsIHNjb3JpbmcnLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlcyA9IHF1ZXN0aW9uLnNoYXBlcy5yZWN0YW5nbGVzLmNvbmNhdCh7XG4gICAgICAgICAgaWQ6ICc1JyxcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB9LCB7XG4gICAgICAgICAgaWQ6ICc2JyxcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcXVlc3Rpb24gPSB7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICAgICAgc2hhcGVzOiB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbi5zaGFwZXMsXG4gICAgICAgICAgICByZWN0YW5nbGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC4yNSBmb3IgMS80IGNvcnJlY3QgYW5zd2VycyBhbmQgMCBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnMicgfSwgeyBpZDogJzUnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjI1KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuMjUsIGV2ZW4gaWYgYW5zd2VycyBhcmUgbm90IGluIG9yZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7XG4gICAgICAgICAgYW5zd2VyczogW3sgaWQ6ICc1JyB9LCB7IGlkOiAnMicgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuMjUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC41IGZvciAyLzQgY29ycmVjdCBhbnN3ZXJzIGFuZCAwIGluY29ycmVjdCBhbnN3ZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7IGFuc3dlcnM6IFt7IGlkOiAnNScgfSwgeyBpZDogJzQnfV0gfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC41KTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC43NSBmb3IgMy80IGNvcnJlY3QgYW5zd2VycyBhbmQgMCBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICc1JyB9LCB7IGlkOiAnNCd9XSB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjc1KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDEgZm9yIDQvNCBjb3JyZWN0IGFuc3dlcnMgYW5kIDAgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnNScgfSwgeyBpZDogJzYnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuMjUgZm9yIDEvNCBjb3JyZWN0IGFuc3dlcnMgYW5kIDIgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICcyJyB9LCB7IGlkOiAnMycgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuMjUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC41IGZvciAyLzQgY29ycmVjdCBhbnN3ZXJzIGFuZCAyIGluY29ycmVjdCBhbnN3ZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7XG4gICAgICAgICAgYW5zd2VyczogW3sgaWQ6ICcxJyB9LCB7IGlkOiAnNCcgfSwgeyBpZDogJzInIH0sIHsgaWQ6ICczJyB9XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC41KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuNSBmb3IgMi80IGNvcnJlY3QgYW5zd2VycyBhbmQgMiBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnMScgfSwgeyBpZDogJzQnIH0sIHsgaWQ6ICcyJyB9LCB7IGlkOiAnMycgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuNSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgYSBzY29yZSBvZiAwLjc1IGZvciAzLzQgY29ycmVjdCBhbnN3ZXJzIGFuZCAxIGluY29ycmVjdCBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzYnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMScgfSwgeyBpZDogJzMnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjc1KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuNzUgZm9yIDMvNCBjb3JyZWN0IGFuc3dlcnMgYW5kIDEgaW5jb3JyZWN0IGFuc3dlcicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnNicgfSwgeyBpZDogJzQnIH0sIHsgaWQ6ICcxJyB9LCB7IGlkOiAnMycgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuNzUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC41IGZvciAzLzQgY29ycmVjdCBhbnN3ZXJzIGFuZCAyIGluY29ycmVjdCBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzYnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH0sIHsgaWQ6ICcxJyB9XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC41KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuNzUgZm9yIDQvNCBjb3JyZWN0IGFuc3dlcnMgYW5kIDEgaW5jb3JyZWN0IGFuc3dlcicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnNicgfSwgeyBpZDogJzQnIH0sIHsgaWQ6ICcyJyB9LCB7IGlkOiAnNScgfSwgeyBpZDogJzEnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjc1KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuNSBmb3IgNC80IGNvcnJlY3QgYW5zd2VycyBhbmQgMiBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnNicgfSwgeyBpZDogJzQnIH0sIHsgaWQ6ICcyJyB9LCB7IGlkOiAnNScgfSwgeyBpZDogJzEnIH0sIHsgaWQ6ICczJyB9XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC41KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmV0dXJuT3V0Y29tZSA9IChzZXNzaW9uKSA9PiB7XG4gICAgICBpdChgcmV0dXJucyBlbXB0eTogdHJ1ZSB3aGVuIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24pO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDAsIGVtcHR5OiB0cnVlIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybk91dGNvbWUodW5kZWZpbmVkKTtcbiAgICByZXR1cm5PdXRjb21lKG51bGwpO1xuICAgIHJldHVybk91dGNvbWUoe30pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ21vZGU6IGdhdGhlcicsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXNzaW9uID0ge307XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ2dhdGhlcicgfTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwoZmFsc2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQubW9kZSkudG9FcXVhbCgnZ2F0aGVyJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgcHJvbXB0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LnByb21wdCkudG9FcXVhbCgncHJvbXB0Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgZGltZW5zaW9ucycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaW1lbnNpb25zKS50b0VxdWFsKHsgaGVpZ2h0OiAwLCB3aWR0aDogMCB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBvdXRsaW5lQ29sb3InLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQub3V0bGluZUNvbG9yKS50b0VxdWFsKCdibHVlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgaG90c3BvdENvbG9yJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmhvdHNwb3RDb2xvcikudG9FcXVhbCgnbGlnaHRibHVlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbXVsdGlwbGVDb3JyZWN0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0Lm11bHRpcGxlQ29ycmVjdCkudG9FcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBzaGFwZXMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2hhcGVzLnJlY3RhbmdsZXMpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgICAgICB7IGlkOiAnMScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgIHsgaWQ6ICcyJyB9LFxuICAgICAgICAgICAgeyBpZDogJzMnIH0sXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMucG9seWdvbnMpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBpZDogJzQnLCBjb3JyZWN0OiB0cnVlIH1dKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIG5vdCByZXR1cm4gcmVzcG9uc2VDb3JyZWN0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LnJlc3BvbnNlQ29ycmVjdCkudG9CZSh1bmRlZmluZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZTogdmlldycsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXNzaW9uID0ge307XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ3ZpZXcnIH07XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmRpc2FibGVkKS50b0VxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZTogZXZhbHVhdGUnLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNob2ljZXMgdy8gY29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMucmVjdGFuZ2xlcykudG9FcXVhbChcbiAgICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgICAgIHsgaWQ6ICcxJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBpZDogJzInIH0sXG4gICAgICAgICAgICB7IGlkOiAnMycgfSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNoYXBlcy5wb2x5Z29ucykudG9FcXVhbChcbiAgICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGlkOiAnNCcsIGNvcnJlY3Q6IHRydWUgfV0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgaXMgcmVzcG9uc2UgY29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZUNvcnJlY3QpLnRvRXF1YWwoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1Jlc3BvbnNlQ29ycmVjdCcsICgpID0+IHtcbiAgICBjb25zdCByZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0ID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGByZXNwb25zZSBpcyBub3QgY29ycmVjdCBpZiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHNlc3Npb25cbiAgICAgICl9YCwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoaXNSZXNwb25zZUNvcnJlY3QocXVlc3Rpb24sIHNlc3Npb24pKS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0KHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuSXNSZXNwb25zZUNvcmVjdChudWxsKTtcbiAgICByZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0KHt9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgYW5zd2VyczogW3sgaWQ6ICcxJyB9LCB7IGlkOiAnNCcgfV0sIGlkOiAnMScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBudWxsIGVudiBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==