@pie-element/multiple-choice 13.3.6 → 13.3.7
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 +7 -0
- package/configure/CHANGELOG.md +7 -0
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +4 -0
- package/controller/package.json +1 -1
- package/module/configure.js +1 -1
- package/module/controller.js +12 -15
- package/module/element.js +1 -1
- package/module/index.html +1 -1
- package/module/manifest.json +3 -3
- package/module/print.html +1 -1
- package/module/print.js +1 -1
- package/package.json +2 -2
- package/configure/lib/__tests__/root.test.js +0 -279
- package/controller/lib/__tests__/index.test.js +0 -561
- package/controller/lib/__tests__/utils.test.js +0 -8
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/choice-input-test.js +0 -49
- package/lib/__tests__/choice-input.test.js +0 -49
- package/lib/__tests__/index-test.js +0 -206
- package/lib/__tests__/index.test.js +0 -221
- package/lib/__tests__/key-events-test.js +0 -95
- package/lib/__tests__/key-events.test.js +0 -107
- package/lib/__tests__/multiple-choice-test.js +0 -101
- package/lib/__tests__/multiple-choice.test.js +0 -256
- package/lib/__tests__/session-updater-test.js +0 -70
- package/lib/__tests__/session-updater.test.js +0 -70
|
@@ -1,561 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _index = require("../index");
|
|
5
|
-
var _utils = require("../utils");
|
|
6
|
-
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
7
|
-
jest.mock('../utils', () => ({
|
|
8
|
-
isResponseCorrect: jest.fn()
|
|
9
|
-
}));
|
|
10
|
-
describe('controller', () => {
|
|
11
|
-
let result, question, session, env;
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
question = {
|
|
14
|
-
id: '1',
|
|
15
|
-
element: 'multiple-choice',
|
|
16
|
-
prompt: 'prompt',
|
|
17
|
-
promptEnabled: true,
|
|
18
|
-
choicePrefix: 'letters',
|
|
19
|
-
choiceMode: 'radio',
|
|
20
|
-
feedbackEnabled: true,
|
|
21
|
-
choices: [{
|
|
22
|
-
label: 'a',
|
|
23
|
-
value: 'apple',
|
|
24
|
-
correct: true,
|
|
25
|
-
feedback: {
|
|
26
|
-
type: 'custom',
|
|
27
|
-
value: 'foo'
|
|
28
|
-
}
|
|
29
|
-
}, {
|
|
30
|
-
label: 'b',
|
|
31
|
-
value: 'banana',
|
|
32
|
-
feedback: {
|
|
33
|
-
type: 'default'
|
|
34
|
-
}
|
|
35
|
-
}]
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
const {
|
|
39
|
-
stringify
|
|
40
|
-
} = JSON;
|
|
41
|
-
describe('model', () => {
|
|
42
|
-
describe('mode: gather', () => {
|
|
43
|
-
beforeEach(async () => {
|
|
44
|
-
session = {};
|
|
45
|
-
env = {
|
|
46
|
-
mode: 'gather'
|
|
47
|
-
};
|
|
48
|
-
result = await (0, _index.model)(question, session, env);
|
|
49
|
-
});
|
|
50
|
-
it('returns disabled', () => {
|
|
51
|
-
expect(result.disabled).toEqual(false);
|
|
52
|
-
});
|
|
53
|
-
it('returns mode', () => {
|
|
54
|
-
expect(result.mode).toEqual('gather');
|
|
55
|
-
});
|
|
56
|
-
it('returns prompt', () => {
|
|
57
|
-
expect(result.prompt).toEqual('prompt');
|
|
58
|
-
});
|
|
59
|
-
it('returns choiceMode', () => {
|
|
60
|
-
expect(result.choiceMode).toEqual('radio');
|
|
61
|
-
});
|
|
62
|
-
it('returns choicePrefix', () => {
|
|
63
|
-
expect(result.keyMode).toEqual('letters');
|
|
64
|
-
});
|
|
65
|
-
it('returns choices', () => {
|
|
66
|
-
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
67
|
-
label: 'a',
|
|
68
|
-
value: 'apple',
|
|
69
|
-
rationale: null
|
|
70
|
-
}, {
|
|
71
|
-
label: 'b',
|
|
72
|
-
value: 'banana',
|
|
73
|
-
rationale: null
|
|
74
|
-
}]));
|
|
75
|
-
});
|
|
76
|
-
it('does not return responseCorrect', () => {
|
|
77
|
-
expect(result.responseCorrect).toBe(undefined);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe('model - with updateSession', () => {
|
|
81
|
-
it('calls updateSession', async () => {
|
|
82
|
-
session = {
|
|
83
|
-
id: '1',
|
|
84
|
-
element: 'multiple-choice'
|
|
85
|
-
};
|
|
86
|
-
env = {
|
|
87
|
-
mode: 'gather'
|
|
88
|
-
};
|
|
89
|
-
question = {
|
|
90
|
-
...question,
|
|
91
|
-
lockChoiceOrder: false
|
|
92
|
-
};
|
|
93
|
-
const updateSession = jest.fn().mockResolvedValue();
|
|
94
|
-
await (0, _index.model)(question, session, env, updateSession);
|
|
95
|
-
expect(updateSession).toHaveBeenCalledWith('1', 'multiple-choice', {
|
|
96
|
-
shuffledValues: expect.arrayContaining(['apple', 'banana'])
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
describe('mode: view', () => {
|
|
101
|
-
beforeEach(async () => {
|
|
102
|
-
session = {};
|
|
103
|
-
env = {
|
|
104
|
-
mode: 'view'
|
|
105
|
-
};
|
|
106
|
-
result = await (0, _index.model)(question, session, env);
|
|
107
|
-
});
|
|
108
|
-
it('returns disabled', () => {
|
|
109
|
-
expect(result.disabled).toEqual(true);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
describe('mode: evaluate', () => {
|
|
113
|
-
beforeEach(async () => {
|
|
114
|
-
session = {};
|
|
115
|
-
env = {
|
|
116
|
-
mode: 'evaluate'
|
|
117
|
-
};
|
|
118
|
-
_utils.isResponseCorrect.mockReturnValue(false);
|
|
119
|
-
result = await (0, _index.model)(question, session, env);
|
|
120
|
-
return result;
|
|
121
|
-
});
|
|
122
|
-
it('returns choices w/ correct', () => {
|
|
123
|
-
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
124
|
-
label: 'a',
|
|
125
|
-
value: 'apple',
|
|
126
|
-
correct: true,
|
|
127
|
-
feedback: 'foo',
|
|
128
|
-
rationale: null
|
|
129
|
-
}, {
|
|
130
|
-
label: 'b',
|
|
131
|
-
value: 'banana',
|
|
132
|
-
correct: false,
|
|
133
|
-
feedback: 'Incorrect',
|
|
134
|
-
rationale: null
|
|
135
|
-
}]));
|
|
136
|
-
});
|
|
137
|
-
it('returns choices w/ correct even if feedbackEnabled is false', async () => {
|
|
138
|
-
result = await (0, _index.model)({
|
|
139
|
-
...question,
|
|
140
|
-
feedbackEnabled: false
|
|
141
|
-
}, session, env, jest.fn());
|
|
142
|
-
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
143
|
-
label: 'a',
|
|
144
|
-
value: 'apple',
|
|
145
|
-
correct: true,
|
|
146
|
-
feedback: undefined,
|
|
147
|
-
rationale: null
|
|
148
|
-
}, {
|
|
149
|
-
label: 'b',
|
|
150
|
-
value: 'banana',
|
|
151
|
-
correct: false,
|
|
152
|
-
feedback: undefined,
|
|
153
|
-
rationale: null
|
|
154
|
-
}]));
|
|
155
|
-
});
|
|
156
|
-
it('returns feedback undefined if feedbackEnabled is false', async () => {
|
|
157
|
-
result = await (0, _index.model)({
|
|
158
|
-
...question,
|
|
159
|
-
feedbackEnabled: false
|
|
160
|
-
}, session, env, jest.fn());
|
|
161
|
-
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
162
|
-
label: 'a',
|
|
163
|
-
value: 'apple',
|
|
164
|
-
correct: true,
|
|
165
|
-
feedback: undefined,
|
|
166
|
-
rationale: null
|
|
167
|
-
}, {
|
|
168
|
-
label: 'b',
|
|
169
|
-
value: 'banana',
|
|
170
|
-
correct: false,
|
|
171
|
-
feedback: undefined,
|
|
172
|
-
rationale: null
|
|
173
|
-
}]));
|
|
174
|
-
});
|
|
175
|
-
it('returns proper feedback if feedbackEnabled is true', async () => {
|
|
176
|
-
result = await (0, _index.model)({
|
|
177
|
-
...question,
|
|
178
|
-
feedbackEnabled: true
|
|
179
|
-
}, session, env, jest.fn());
|
|
180
|
-
expect(result.choices).toEqual(expect.arrayContaining([{
|
|
181
|
-
label: 'a',
|
|
182
|
-
value: 'apple',
|
|
183
|
-
correct: true,
|
|
184
|
-
feedback: 'foo',
|
|
185
|
-
rationale: null
|
|
186
|
-
}, {
|
|
187
|
-
label: 'b',
|
|
188
|
-
value: 'banana',
|
|
189
|
-
correct: false,
|
|
190
|
-
feedback: 'Incorrect',
|
|
191
|
-
rationale: null
|
|
192
|
-
}]));
|
|
193
|
-
});
|
|
194
|
-
it('returns is response correct', () => {
|
|
195
|
-
expect(result.responseCorrect).toEqual(false);
|
|
196
|
-
});
|
|
197
|
-
const returnsCorrectness = sess => {
|
|
198
|
-
it(`returns responseCorrect: false if session is ${stringify(sess)}`, async () => {
|
|
199
|
-
const o = await (0, _index.model)(question, sess, env);
|
|
200
|
-
expect(o.responseCorrect).toEqual(false);
|
|
201
|
-
});
|
|
202
|
-
};
|
|
203
|
-
returnsCorrectness(undefined);
|
|
204
|
-
returnsCorrectness(null);
|
|
205
|
-
returnsCorrectness({});
|
|
206
|
-
});
|
|
207
|
-
describe('choicePrefix is undefined', () => {
|
|
208
|
-
const question = {
|
|
209
|
-
id: '1',
|
|
210
|
-
element: 'multiple-choice',
|
|
211
|
-
prompt: 'prompt',
|
|
212
|
-
promptEnabled: true,
|
|
213
|
-
choiceMode: 'radio',
|
|
214
|
-
feedbackEnabled: true,
|
|
215
|
-
choices: [{
|
|
216
|
-
label: 'a',
|
|
217
|
-
value: 'apple',
|
|
218
|
-
correct: true,
|
|
219
|
-
feedback: {
|
|
220
|
-
type: 'custom',
|
|
221
|
-
value: 'foo'
|
|
222
|
-
}
|
|
223
|
-
}, {
|
|
224
|
-
label: 'b',
|
|
225
|
-
value: 'banana',
|
|
226
|
-
feedback: {
|
|
227
|
-
type: 'default'
|
|
228
|
-
}
|
|
229
|
-
}]
|
|
230
|
-
};
|
|
231
|
-
beforeEach(async () => {
|
|
232
|
-
session = {};
|
|
233
|
-
env = {
|
|
234
|
-
mode: 'gather'
|
|
235
|
-
};
|
|
236
|
-
result = await (0, _index.model)(question, session, env);
|
|
237
|
-
});
|
|
238
|
-
it('returns default letters', () => {
|
|
239
|
-
expect(result.keyMode).toEqual('letters');
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
describe('getScore', () => {
|
|
244
|
-
it.each`
|
|
245
|
-
sessionValue | expectedDychotomous | expectedPartialScoring
|
|
246
|
-
${undefined} | ${0} | ${0}
|
|
247
|
-
${null} | ${0} | ${0}
|
|
248
|
-
${[]} | ${0} | ${0}
|
|
249
|
-
${['a']} | ${0} | ${0.5}
|
|
250
|
-
${['e']} | ${0} | ${0.5}
|
|
251
|
-
${['a', 'b']} | ${0} | ${0.5}
|
|
252
|
-
${['a', 'c']} | ${0} | ${0.5}
|
|
253
|
-
${['a', 'd']} | ${0} | ${0.5}
|
|
254
|
-
${['a', 'e']} | ${1} | ${1}
|
|
255
|
-
${['a', 'b', 'c']} | ${0} | ${0}
|
|
256
|
-
${['a', 'b', 'd']} | ${0} | ${0}
|
|
257
|
-
${['a', 'b', 'e']} | ${0} | ${0.5}
|
|
258
|
-
${['a', 'b', 'c', 'd']} | ${0} | ${0}
|
|
259
|
-
${['a', 'b', 'c', 'e']} | ${0} | ${0}
|
|
260
|
-
${['a', 'b', 'c', 'd', 'e']} | ${0} | ${0}
|
|
261
|
-
${['a', 'c', 'd', 'e']} | ${0} | ${0}
|
|
262
|
-
${['a', 'd', 'e']} | ${0} | ${0.5}
|
|
263
|
-
`('session = $sessionValue; partial scoring = true => score = $expectedPartialScoring / partial scoring = false => score = $expectedDychotomous', async ({
|
|
264
|
-
sessionValue,
|
|
265
|
-
expectedPartialScoring,
|
|
266
|
-
expectedDychotomous
|
|
267
|
-
}) => {
|
|
268
|
-
const q = {
|
|
269
|
-
choiceMode: 'checkbox',
|
|
270
|
-
choices: [{
|
|
271
|
-
label: 'a',
|
|
272
|
-
value: 'a',
|
|
273
|
-
correct: true
|
|
274
|
-
}, {
|
|
275
|
-
label: 'b',
|
|
276
|
-
value: 'b'
|
|
277
|
-
}, {
|
|
278
|
-
label: 'c',
|
|
279
|
-
value: 'c'
|
|
280
|
-
}, {
|
|
281
|
-
label: 'd',
|
|
282
|
-
value: 'd'
|
|
283
|
-
}, {
|
|
284
|
-
label: 'e',
|
|
285
|
-
value: 'e',
|
|
286
|
-
correct: true
|
|
287
|
-
}]
|
|
288
|
-
};
|
|
289
|
-
const resultPS = await (0, _index.outcome)(q, {
|
|
290
|
-
value: sessionValue
|
|
291
|
-
}, {
|
|
292
|
-
mode: 'evaluate '
|
|
293
|
-
});
|
|
294
|
-
expect(resultPS.score).toEqual(expectedPartialScoring);
|
|
295
|
-
const resultD = await (0, _index.outcome)({
|
|
296
|
-
...q,
|
|
297
|
-
partialScoring: false
|
|
298
|
-
}, {
|
|
299
|
-
value: sessionValue
|
|
300
|
-
}, {
|
|
301
|
-
mode: 'evaluate '
|
|
302
|
-
});
|
|
303
|
-
expect(resultD.score).toEqual(expectedDychotomous);
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
describe('outcome', () => {
|
|
307
|
-
it('returns score of 0', async () => {
|
|
308
|
-
const result = await (0, _index.outcome)(question, {
|
|
309
|
-
value: ['banana']
|
|
310
|
-
}, {
|
|
311
|
-
mode: 'gather'
|
|
312
|
-
});
|
|
313
|
-
expect(result.score).toEqual(0);
|
|
314
|
-
});
|
|
315
|
-
it('returns score of 1', async () => {
|
|
316
|
-
const result = await (0, _index.outcome)(question, {
|
|
317
|
-
value: ['apple']
|
|
318
|
-
}, {
|
|
319
|
-
mode: 'gather'
|
|
320
|
-
});
|
|
321
|
-
expect(result.score).toEqual(1);
|
|
322
|
-
});
|
|
323
|
-
describe('partial scoring', () => {
|
|
324
|
-
describe('choiceMode:radio is disabled', () => {
|
|
325
|
-
it('with defaults', async () => {
|
|
326
|
-
const result = await (0, _index.outcome)(question, {}, {});
|
|
327
|
-
expect(result.score).toEqual(0);
|
|
328
|
-
});
|
|
329
|
-
it('with defaults and correct', async () => {
|
|
330
|
-
const result = await (0, _index.outcome)(question, {
|
|
331
|
-
value: ['apple']
|
|
332
|
-
}, {});
|
|
333
|
-
expect(result.score).toEqual(1);
|
|
334
|
-
});
|
|
335
|
-
it('with env.partialScoring: true', async () => {
|
|
336
|
-
const result = await (0, _index.outcome)(question, {
|
|
337
|
-
partialScoring: true
|
|
338
|
-
}, {});
|
|
339
|
-
expect(result.score).toEqual(0);
|
|
340
|
-
});
|
|
341
|
-
it('with env.partialScoring: true + config.partialScoring: true', async () => {
|
|
342
|
-
const result = await (0, _index.outcome)({
|
|
343
|
-
...question,
|
|
344
|
-
partialScoring: true
|
|
345
|
-
}, {
|
|
346
|
-
partialScoring: true
|
|
347
|
-
}, {});
|
|
348
|
-
expect(result.score).toEqual(0);
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
describe('checkbox', () => {
|
|
352
|
-
beforeEach(() => {
|
|
353
|
-
const choices = question.choices.concat({
|
|
354
|
-
value: 'c',
|
|
355
|
-
correct: true
|
|
356
|
-
});
|
|
357
|
-
question = {
|
|
358
|
-
...question,
|
|
359
|
-
choiceMode: 'checkbox',
|
|
360
|
-
partialScoring: true,
|
|
361
|
-
choices
|
|
362
|
-
};
|
|
363
|
-
});
|
|
364
|
-
it.each`
|
|
365
|
-
sessionValue | expected
|
|
366
|
-
${undefined} | ${0}
|
|
367
|
-
${null} | ${0}
|
|
368
|
-
${[]} | ${0}
|
|
369
|
-
${['apple']} | ${0.25}
|
|
370
|
-
${['apple', 'cherry']} | ${0.5}
|
|
371
|
-
${['apple', 'banana']} | ${0.5}
|
|
372
|
-
${['apple', 'banana', 'cherry']} | ${0.75}
|
|
373
|
-
${['apple', 'banana', 'grapes']} | ${0.75}
|
|
374
|
-
${['apple', 'banana', 'grapes', 'cherry']} | ${1}
|
|
375
|
-
${['cherry', 'banana', 'grapes']} | ${0.75}
|
|
376
|
-
${['apple', 'durian']} | ${0.25}
|
|
377
|
-
${['apple', 'durian', 'elderberries']} | ${0.25}
|
|
378
|
-
${['apple', 'durian', 'feijoa', 'elderberries', 'jackfruit']} | ${0}
|
|
379
|
-
${['apple', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
|
|
380
|
-
${['apple', 'cherry', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
|
|
381
|
-
${['apple', 'cherry', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
|
|
382
|
-
${['apple', 'cherry', 'banana', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
|
|
383
|
-
${['apple', 'cherry', 'banana', 'durian', 'feijoa', 'jackfruit', 'kiwi']} | ${0}
|
|
384
|
-
${['apple', 'cherry', 'banana', 'grapes', 'durian', 'jackfruit', 'kiwi']} | ${0.25}
|
|
385
|
-
${['apple', 'cherry', 'banana', 'grapes', 'durian', 'jackfruit']} | ${0.5}
|
|
386
|
-
${['apple', 'cherry', 'banana', 'grapes', 'durian']} | ${0.75}
|
|
387
|
-
`('outcome: partial scoring = true, sessionValue = $sessionValue => expected = $expected', async ({
|
|
388
|
-
sessionValue,
|
|
389
|
-
expected
|
|
390
|
-
}) => {
|
|
391
|
-
const q = {
|
|
392
|
-
choiceMode: 'checkbox',
|
|
393
|
-
choices: [{
|
|
394
|
-
label: 'a',
|
|
395
|
-
value: 'apple',
|
|
396
|
-
correct: true
|
|
397
|
-
}, {
|
|
398
|
-
label: 'b',
|
|
399
|
-
value: 'banana',
|
|
400
|
-
correct: true
|
|
401
|
-
}, {
|
|
402
|
-
label: 'c',
|
|
403
|
-
value: 'cherry',
|
|
404
|
-
correct: true
|
|
405
|
-
}, {
|
|
406
|
-
label: 'd',
|
|
407
|
-
value: 'durian'
|
|
408
|
-
}, {
|
|
409
|
-
label: 'e',
|
|
410
|
-
value: 'elderberries'
|
|
411
|
-
}, {
|
|
412
|
-
label: 'f',
|
|
413
|
-
value: 'feijoa'
|
|
414
|
-
}, {
|
|
415
|
-
label: 'g',
|
|
416
|
-
value: 'grapes',
|
|
417
|
-
correct: true
|
|
418
|
-
}, {
|
|
419
|
-
label: 'j',
|
|
420
|
-
value: 'jackfruit'
|
|
421
|
-
}, {
|
|
422
|
-
label: 'k',
|
|
423
|
-
value: 'kiwi'
|
|
424
|
-
}]
|
|
425
|
-
};
|
|
426
|
-
const result = await (0, _index.outcome)(q, {
|
|
427
|
-
value: sessionValue
|
|
428
|
-
}, {
|
|
429
|
-
mode: 'evaluate '
|
|
430
|
-
});
|
|
431
|
-
expect(result.score).toEqual(expected);
|
|
432
|
-
});
|
|
433
|
-
});
|
|
434
|
-
});
|
|
435
|
-
it.each`
|
|
436
|
-
session | empty
|
|
437
|
-
${undefined} | ${true}
|
|
438
|
-
${null} | ${true}
|
|
439
|
-
${{}} | ${true}
|
|
440
|
-
${{
|
|
441
|
-
value: []
|
|
442
|
-
}} | ${false}
|
|
443
|
-
`('returns score: 0 and empty: true if session is $session', async ({
|
|
444
|
-
session,
|
|
445
|
-
empty
|
|
446
|
-
}) => {
|
|
447
|
-
const o = await (0, _index.outcome)(question, session, {
|
|
448
|
-
mode: 'evaluate'
|
|
449
|
-
});
|
|
450
|
-
expect(o.score).toEqual(0);
|
|
451
|
-
expect(o.empty).toEqual(empty);
|
|
452
|
-
});
|
|
453
|
-
});
|
|
454
|
-
describe('correct response', () => {
|
|
455
|
-
it('returns correct response if env is correct', async () => {
|
|
456
|
-
const sess = await (0, _index.createCorrectResponseSession)(question, {
|
|
457
|
-
mode: 'gather',
|
|
458
|
-
role: 'instructor'
|
|
459
|
-
});
|
|
460
|
-
expect(sess).toEqual({
|
|
461
|
-
id: '1',
|
|
462
|
-
value: ['apple']
|
|
463
|
-
});
|
|
464
|
-
});
|
|
465
|
-
it('returns null env is student', async () => {
|
|
466
|
-
const noResult = await (0, _index.createCorrectResponseSession)(question, {
|
|
467
|
-
mode: 'gather',
|
|
468
|
-
role: 'student'
|
|
469
|
-
});
|
|
470
|
-
expect(noResult).toBeNull();
|
|
471
|
-
});
|
|
472
|
-
});
|
|
473
|
-
describe('normalize', () => {
|
|
474
|
-
it('sets choicesLayout: horizontal if verticalMode: false', async () => {
|
|
475
|
-
const sess = await (0, _index.normalize)({
|
|
476
|
-
...question,
|
|
477
|
-
verticalMode: false
|
|
478
|
-
});
|
|
479
|
-
expect(sess).toEqual({
|
|
480
|
-
..._defaults.default,
|
|
481
|
-
...question,
|
|
482
|
-
choicesLayout: 'horizontal'
|
|
483
|
-
});
|
|
484
|
-
});
|
|
485
|
-
it('sets choicesLayout: vertical if verticalMode: true', async () => {
|
|
486
|
-
const sess = await (0, _index.normalize)({
|
|
487
|
-
...question,
|
|
488
|
-
verticalMode: true
|
|
489
|
-
});
|
|
490
|
-
expect(sess).toEqual({
|
|
491
|
-
..._defaults.default,
|
|
492
|
-
...question,
|
|
493
|
-
choicesLayout: 'vertical'
|
|
494
|
-
});
|
|
495
|
-
});
|
|
496
|
-
it('sets choicesLayout: grid if verticalMode: true && choicesLayout: grid', async () => {
|
|
497
|
-
const sess = await (0, _index.normalize)({
|
|
498
|
-
...question,
|
|
499
|
-
verticalMode: true,
|
|
500
|
-
choicesLayout: 'grid'
|
|
501
|
-
});
|
|
502
|
-
expect(sess).toEqual({
|
|
503
|
-
..._defaults.default,
|
|
504
|
-
...question,
|
|
505
|
-
choicesLayout: 'grid'
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
it('sets choicesLayout: vertical', async () => {
|
|
509
|
-
const sess = await (0, _index.normalize)(question);
|
|
510
|
-
expect(sess).toEqual({
|
|
511
|
-
..._defaults.default,
|
|
512
|
-
...question,
|
|
513
|
-
choicesLayout: 'vertical'
|
|
514
|
-
});
|
|
515
|
-
});
|
|
516
|
-
});
|
|
517
|
-
describe('validate', () => {
|
|
518
|
-
const makeChoice = (value, correct = false) => ({
|
|
519
|
-
value,
|
|
520
|
-
label: value,
|
|
521
|
-
correct
|
|
522
|
-
});
|
|
523
|
-
const config = {
|
|
524
|
-
minAnswerChoices: 2,
|
|
525
|
-
maxAnswerChoices: 5
|
|
526
|
-
};
|
|
527
|
-
it('returns no error when maxSelections >= correctCount', () => {
|
|
528
|
-
const m = {
|
|
529
|
-
choiceMode: 'checkbox',
|
|
530
|
-
maxSelections: 2,
|
|
531
|
-
choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
|
|
532
|
-
};
|
|
533
|
-
expect((0, _index.validate)(m, config).correctResponse).toBeUndefined();
|
|
534
|
-
});
|
|
535
|
-
it('returns error when maxSelections < correctCount', () => {
|
|
536
|
-
const m = {
|
|
537
|
-
choiceMode: 'checkbox',
|
|
538
|
-
maxSelections: 1,
|
|
539
|
-
choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
|
|
540
|
-
};
|
|
541
|
-
expect((0, _index.validate)(m, config).correctResponse).toMatch(/exceeds max selections/);
|
|
542
|
-
});
|
|
543
|
-
it('does not error in radio mode even if maxSelections < correctCount', () => {
|
|
544
|
-
const m = {
|
|
545
|
-
choiceMode: 'radio',
|
|
546
|
-
maxSelections: 1,
|
|
547
|
-
choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
|
|
548
|
-
};
|
|
549
|
-
expect((0, _index.validate)(m, config).correctResponse).toBeUndefined();
|
|
550
|
-
});
|
|
551
|
-
it('does not error when maxSelections is null', () => {
|
|
552
|
-
const m = {
|
|
553
|
-
choiceMode: 'checkbox',
|
|
554
|
-
maxSelections: null,
|
|
555
|
-
choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
|
|
556
|
-
};
|
|
557
|
-
expect((0, _index.validate)(m, config).correctResponse).toBeUndefined();
|
|
558
|
-
});
|
|
559
|
-
});
|
|
560
|
-
});
|
|
561
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX3V0aWxzIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImplc3QiLCJtb2NrIiwiaXNSZXNwb25zZUNvcnJlY3QiLCJmbiIsImRlc2NyaWJlIiwicmVzdWx0IiwicXVlc3Rpb24iLCJzZXNzaW9uIiwiZW52IiwiYmVmb3JlRWFjaCIsImlkIiwiZWxlbWVudCIsInByb21wdCIsInByb21wdEVuYWJsZWQiLCJjaG9pY2VQcmVmaXgiLCJjaG9pY2VNb2RlIiwiZmVlZGJhY2tFbmFibGVkIiwiY2hvaWNlcyIsImxhYmVsIiwidmFsdWUiLCJjb3JyZWN0IiwiZmVlZGJhY2siLCJ0eXBlIiwic3RyaW5naWZ5IiwiSlNPTiIsIm1vZGUiLCJtb2RlbCIsIml0IiwiZXhwZWN0IiwiZGlzYWJsZWQiLCJ0b0VxdWFsIiwia2V5TW9kZSIsImFycmF5Q29udGFpbmluZyIsInJhdGlvbmFsZSIsInJlc3BvbnNlQ29ycmVjdCIsInRvQmUiLCJ1bmRlZmluZWQiLCJsb2NrQ2hvaWNlT3JkZXIiLCJ1cGRhdGVTZXNzaW9uIiwibW9ja1Jlc29sdmVkVmFsdWUiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNodWZmbGVkVmFsdWVzIiwibW9ja1JldHVyblZhbHVlIiwicmV0dXJuc0NvcnJlY3RuZXNzIiwic2VzcyIsIm8iLCJlYWNoIiwic2Vzc2lvblZhbHVlIiwiZXhwZWN0ZWRQYXJ0aWFsU2NvcmluZyIsImV4cGVjdGVkRHljaG90b21vdXMiLCJxIiwicmVzdWx0UFMiLCJvdXRjb21lIiwic2NvcmUiLCJyZXN1bHREIiwicGFydGlhbFNjb3JpbmciLCJjb25jYXQiLCJleHBlY3RlZCIsImVtcHR5IiwiY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiIsInJvbGUiLCJub1Jlc3VsdCIsInRvQmVOdWxsIiwibm9ybWFsaXplIiwidmVydGljYWxNb2RlIiwiZGVmYXVsdHMiLCJjaG9pY2VzTGF5b3V0IiwibWFrZUNob2ljZSIsImNvbmZpZyIsIm1pbkFuc3dlckNob2ljZXMiLCJtYXhBbnN3ZXJDaG9pY2VzIiwibSIsIm1heFNlbGVjdGlvbnMiLCJ2YWxpZGF0ZSIsImNvcnJlY3RSZXNwb25zZSIsInRvQmVVbmRlZmluZWQiLCJ0b01hdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsLCBvdXRjb21lLCBnZXRTY29yZSwgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiwgbm9ybWFsaXplLCB2YWxpZGF0ZSB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IGlzUmVzcG9uc2VDb3JyZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzJztcblxuamVzdC5tb2NrKCcuLi91dGlscycsICgpID0+ICh7XG4gIGlzUmVzcG9uc2VDb3JyZWN0OiBqZXN0LmZuKCksXG59KSk7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0LCBxdWVzdGlvbiwgc2Vzc2lvbiwgZW52O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHF1ZXN0aW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGVsZW1lbnQ6ICdtdWx0aXBsZS1jaG9pY2UnLFxuICAgICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICBjaG9pY2VQcmVmaXg6ICdsZXR0ZXJzJyxcbiAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgIHZhbHVlOiAnYXBwbGUnLFxuICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2InLFxuICAgICAgICAgIHZhbHVlOiAnYmFuYW5hJyxcbiAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0IHsgc3RyaW5naWZ5IH0gPSBKU09OO1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW9kZTogZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaXNhYmxlZCkudG9FcXVhbChmYWxzZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbW9kZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5tb2RlKS50b0VxdWFsKCdnYXRoZXInKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBwcm9tcHQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucHJvbXB0KS50b0VxdWFsKCdwcm9tcHQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjaG9pY2VNb2RlJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZU1vZGUpLnRvRXF1YWwoJ3JhZGlvJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlUHJlZml4JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleU1vZGUpLnRvRXF1YWwoJ2xldHRlcnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjaG9pY2VzJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZXMpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgICAgICB7IGxhYmVsOiAnYScsIHZhbHVlOiAnYXBwbGUnLCByYXRpb25hbGU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdiJywgdmFsdWU6ICdiYW5hbmEnLCByYXRpb25hbGU6IG51bGwgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgcmV0dXJuIHJlc3BvbnNlQ29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZUNvcnJlY3QpLnRvQmUodW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGVsIC0gd2l0aCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIHVwZGF0ZVNlc3Npb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7IGlkOiAnMScsIGVsZW1lbnQ6ICdtdWx0aXBsZS1jaG9pY2UnIH07XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ2dhdGhlcicgfTtcbiAgICAgICAgcXVlc3Rpb24gPSB7IC4uLnF1ZXN0aW9uLCBsb2NrQ2hvaWNlT3JkZXI6IGZhbHNlIH07XG4gICAgICAgIGNvbnN0IHVwZGF0ZVNlc3Npb24gPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoKTtcblxuICAgICAgICBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52LCB1cGRhdGVTZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAnbXVsdGlwbGUtY2hvaWNlJywge1xuICAgICAgICAgIHNodWZmbGVkVmFsdWVzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsnYXBwbGUnLCAnYmFuYW5hJ10pLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IHZpZXcnLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICd2aWV3JyB9O1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaXNhYmxlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IGV2YWx1YXRlJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICAgIGlzUmVzcG9uc2VDb3JyZWN0Lm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNob2ljZXMgdy8gY29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6ICdmb28nLFxuICAgICAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2InLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2JhbmFuYScsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBmZWVkYmFjazogJ0luY29ycmVjdCcsXG4gICAgICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlcyB3LyBjb3JyZWN0IGV2ZW4gaWYgZmVlZGJhY2tFbmFibGVkIGlzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBqZXN0LmZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBmZWVkYmFjayB1bmRlZmluZWQgaWYgZmVlZGJhY2tFbmFibGVkIGlzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBqZXN0LmZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaWYgZmVlZGJhY2tFbmFibGVkIGlzIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgamVzdC5mbigpLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQuY2hvaWNlcykudG9FcXVhbChcbiAgICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdhJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdhcHBsZScsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICAgIGZlZWRiYWNrOiAnZm9vJyxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6ICdJbmNvcnJlY3QnLFxuICAgICAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGlzIHJlc3BvbnNlIGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2VDb3JyZWN0KS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXR1cm5zQ29ycmVjdG5lc3MgPSAoc2VzcykgPT4ge1xuICAgICAgICBpdChgcmV0dXJucyByZXNwb25zZUNvcnJlY3Q6IGZhbHNlIGlmIHNlc3Npb24gaXMgJHtzdHJpbmdpZnkoc2Vzcyl9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG8gPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2VzcywgZW52KTtcblxuICAgICAgICAgIGV4cGVjdChvLnJlc3BvbnNlQ29ycmVjdCkudG9FcXVhbChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuc0NvcnJlY3RuZXNzKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm5zQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICByZXR1cm5zQ29ycmVjdG5lc3Moe30pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZVByZWZpeCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgZWxlbWVudDogJ211bHRpcGxlLWNob2ljZScsXG4gICAgICAgIHByb21wdDogJ3Byb21wdCcsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYScsXG4gICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYicsXG4gICAgICAgICAgICB2YWx1ZTogJ2JhbmFuYScsXG4gICAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdnYXRoZXInIH07XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgfSk7XG4gICAgICBpdCgncmV0dXJucyBkZWZhdWx0IGxldHRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5TW9kZSkudG9FcXVhbCgnbGV0dGVycycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgc2Vzc2lvblZhbHVlICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkRHljaG90b21vdXMgfCBleHBlY3RlZFBhcnRpYWxTY29yaW5nXG4gICAgICAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7bnVsbH0gICAgICAgICAgICAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswfVxuICAgICAgJHtbXX0gICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYSddfSAgICAgICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHtbJ2UnXX0gICAgICAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7WydhJywgJ2InXX0gICAgICAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke1snYScsICdjJ119ICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHtbJ2EnLCAnZCddfSAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7WydhJywgJ2UnXX0gICAgICAgICAgICAgICAgfCAkezF9ICAgICAgICAgICAgICAgIHwgJHsxfVxuICAgICAgJHtbJ2EnLCAnYicsICdjJ119ICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYScsICdiJywgJ2QnXX0gICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2InLCAnZSddfSAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke1snYScsICdiJywgJ2MnLCAnZCddfSAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2InLCAnYycsICdlJ119ICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswfVxuICAgICAgJHtbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddfSB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYScsICdjJywgJ2QnLCAnZSddfSAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2QnLCAnZSddfSAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgYChcbiAgICAgICdzZXNzaW9uID0gJHNlc3Npb25WYWx1ZTsgcGFydGlhbCBzY29yaW5nID0gdHJ1ZSA9PiBzY29yZSA9ICRleHBlY3RlZFBhcnRpYWxTY29yaW5nIC8gcGFydGlhbCBzY29yaW5nID0gZmFsc2UgPT4gc2NvcmUgPSAkZXhwZWN0ZWREeWNob3RvbW91cycsXG4gICAgICBhc3luYyAoeyBzZXNzaW9uVmFsdWUsIGV4cGVjdGVkUGFydGlhbFNjb3JpbmcsIGV4cGVjdGVkRHljaG90b21vdXMgfSkgPT4ge1xuICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJ2EnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIHZhbHVlOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgdmFsdWU6ICdjJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2QnLCB2YWx1ZTogJ2QnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnZScsIHZhbHVlOiAnZScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFBTID0gYXdhaXQgb3V0Y29tZShxLCB7IHZhbHVlOiBzZXNzaW9uVmFsdWUgfSwgeyBtb2RlOiAnZXZhbHVhdGUgJyB9KTtcblxuICAgICAgICBleHBlY3QocmVzdWx0UFMuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWRQYXJ0aWFsU2NvcmluZyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0RCA9IGF3YWl0IG91dGNvbWUoeyAuLi5xLCBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSwgeyB2YWx1ZTogc2Vzc2lvblZhbHVlIH0sIHsgbW9kZTogJ2V2YWx1YXRlICcgfSk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdEQuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWREeWNob3RvbW91cyk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvdXRjb21lJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHNjb3JlIG9mIDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7IHZhbHVlOiBbJ2JhbmFuYSddIH0sIHsgbW9kZTogJ2dhdGhlcicgfSk7XG4gICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgc2NvcmUgb2YgMScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWU6IFsnYXBwbGUnXSB9LCB7IG1vZGU6ICdnYXRoZXInIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJ0aWFsIHNjb3JpbmcnLCAoKSA9PiB7XG4gICAgICBkZXNjcmliZSgnY2hvaWNlTW9kZTpyYWRpbyBpcyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgaXQoJ3dpdGggZGVmYXVsdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge30sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3dpdGggZGVmYXVsdHMgYW5kIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyB2YWx1ZTogWydhcHBsZSddIH0sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3dpdGggZW52LnBhcnRpYWxTY29yaW5nOiB0cnVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgcGFydGlhbFNjb3Jpbmc6IHRydWUgfSwge30pO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnd2l0aCBlbnYucGFydGlhbFNjb3Jpbmc6IHRydWUgKyBjb25maWcucGFydGlhbFNjb3Jpbmc6IHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZSh7IC4uLnF1ZXN0aW9uLCBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LCB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnY2hlY2tib3gnLCAoKSA9PiB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzLmNvbmNhdCh7XG4gICAgICAgICAgICB2YWx1ZTogJ2MnLFxuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBxdWVzdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICAgICAgY2hvaWNlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBpdC5lYWNoYFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAgICAgICAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke251bGx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke1tdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke1snYXBwbGUnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC4yNX1cbiAgICAgICAgICAke1snYXBwbGUnLCAnY2hlcnJ5J119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgICAgICR7WydhcHBsZScsICdiYW5hbmEnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdjaGVycnknXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdncmFwZXMnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdncmFwZXMnLCAnY2hlcnJ5J119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezF9XG4gICAgICAgICAgJHtbJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJ119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbiddfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdlbGRlcmJlcnJpZXMnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdmZWlqb2EnLCAnZWxkZXJiZXJyaWVzJywgJ2phY2tmcnVpdCddfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdmZWlqb2EnLCAnZWxkZXJiZXJyaWVzJywgJ2phY2tmcnVpdCcsICdraXdpJ119ICAgICAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdkdXJpYW4nLCAnZmVpam9hJywgJ2VsZGVyYmVycmllcycsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdkdXJpYW4nLCAnZmVpam9hJywgJ2VsZGVyYmVycmllcycsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZHVyaWFuJywgJ2ZlaWpvYScsICdlbGRlcmJlcnJpZXMnLCAnamFja2ZydWl0JywgJ2tpd2knXX0gfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZHVyaWFuJywgJ2ZlaWpvYScsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJywgJ2R1cmlhbicsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJywgJ2R1cmlhbicsICdqYWNrZnJ1aXQnXX0gICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICAgICAke1snYXBwbGUnLCAnY2hlcnJ5JywgJ2JhbmFuYScsICdncmFwZXMnLCAnZHVyaWFuJ119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC43NX1cbiAgICAgICAgYChcbiAgICAgICAgICAnb3V0Y29tZTogcGFydGlhbCBzY29yaW5nID0gdHJ1ZSwgc2Vzc2lvblZhbHVlID0gJHNlc3Npb25WYWx1ZSA9PiBleHBlY3RlZCA9ICRleHBlY3RlZCcsXG4gICAgICAgICAgYXN5bmMgKHsgc2Vzc2lvblZhbHVlLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgICAgICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICAgICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJ2FwcGxlJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdiJywgdmFsdWU6ICdiYW5hbmEnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCB2YWx1ZTogJ2NoZXJyeScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnZCcsIHZhbHVlOiAnZHVyaWFuJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdlJywgdmFsdWU6ICdlbGRlcmJlcnJpZXMnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2YnLCB2YWx1ZTogJ2ZlaWpvYScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnZycsIHZhbHVlOiAnZ3JhcGVzJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdqJywgdmFsdWU6ICdqYWNrZnJ1aXQnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2snLCB2YWx1ZTogJ2tpd2knIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHEsIHsgdmFsdWU6IHNlc3Npb25WYWx1ZSB9LCB7IG1vZGU6ICdldmFsdWF0ZSAnIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQuZWFjaGBcbiAgICAgIHNlc3Npb24gICAgICAgICAgfCBlbXB0eVxuICAgICAgJHt1bmRlZmluZWR9ICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7bnVsbH0gICAgICAgICAgfCAke3RydWV9XG4gICAgICAke3t9fSAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICAgJHt7IHZhbHVlOiBbXSB9fSB8ICR7ZmFsc2V9XG4gICAgYCgncmV0dXJucyBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAkc2Vzc2lvbicsIGFzeW5jICh7IHNlc3Npb24sIGVtcHR5IH0pID0+IHtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG5cbiAgICAgIGV4cGVjdChvLnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgZXhwZWN0KG8uZW1wdHkpLnRvRXF1YWwoZW1wdHkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIGVudiBpcyBjb3JyZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdpbnN0cnVjdG9yJyB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IFsnYXBwbGUnXSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIG51bGwgZW52IGlzIHN0dWRlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZScsICgpID0+IHtcbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiBob3Jpem9udGFsIGlmIHZlcnRpY2FsTW9kZTogZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgbm9ybWFsaXplKHsgLi4ucXVlc3Rpb24sIHZlcnRpY2FsTW9kZTogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgLi4uZGVmYXVsdHMsIC4uLnF1ZXN0aW9uLCBjaG9pY2VzTGF5b3V0OiAnaG9yaXpvbnRhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiB2ZXJ0aWNhbCBpZiB2ZXJ0aWNhbE1vZGU6IHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgbm9ybWFsaXplKHsgLi4ucXVlc3Rpb24sIHZlcnRpY2FsTW9kZTogdHJ1ZSB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyAuLi5kZWZhdWx0cywgLi4ucXVlc3Rpb24sIGNob2ljZXNMYXlvdXQ6ICd2ZXJ0aWNhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiBncmlkIGlmIHZlcnRpY2FsTW9kZTogdHJ1ZSAmJiBjaG9pY2VzTGF5b3V0OiBncmlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IG5vcm1hbGl6ZSh7IC4uLnF1ZXN0aW9uLCB2ZXJ0aWNhbE1vZGU6IHRydWUsIGNob2ljZXNMYXlvdXQ6ICdncmlkJyB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyAuLi5kZWZhdWx0cywgLi4ucXVlc3Rpb24sIGNob2ljZXNMYXlvdXQ6ICdncmlkJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzZXRzIGNob2ljZXNMYXlvdXQ6IHZlcnRpY2FsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IG5vcm1hbGl6ZShxdWVzdGlvbik7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgLi4uZGVmYXVsdHMsIC4uLnF1ZXN0aW9uLCBjaG9pY2VzTGF5b3V0OiAndmVydGljYWwnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFrZUNob2ljZSA9ICh2YWx1ZSwgY29ycmVjdCA9IGZhbHNlKSA9PiAoeyB2YWx1ZSwgbGFiZWw6IHZhbHVlLCBjb3JyZWN0IH0pO1xuICAgIGNvbnN0IGNvbmZpZyA9IHsgbWluQW5zd2VyQ2hvaWNlczogMiwgbWF4QW5zd2VyQ2hvaWNlczogNSB9O1xuXG4gICAgaXQoJ3JldHVybnMgbm8gZXJyb3Igd2hlbiBtYXhTZWxlY3Rpb25zID49IGNvcnJlY3RDb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDIsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGVycm9yIHdoZW4gbWF4U2VsZWN0aW9ucyA8IGNvcnJlY3RDb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDEsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvTWF0Y2goL2V4Y2VlZHMgbWF4IHNlbGVjdGlvbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBlcnJvciBpbiByYWRpbyBtb2RlIGV2ZW4gaWYgbWF4U2VsZWN0aW9ucyA8IGNvcnJlY3RDb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDEsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBlcnJvciB3aGVuIG1heFNlbGVjdGlvbnMgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IG51bGwsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBRUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0VBQzNCQyxpQkFBaUIsRUFBRUYsSUFBSSxDQUFDRyxFQUFFLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFFSEMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNO0VBQzNCLElBQUlDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEdBQUc7RUFFbENDLFVBQVUsQ0FBQyxNQUFNO0lBQ2ZILFFBQVEsR0FBRztNQUNUSSxFQUFFLEVBQUUsR0FBRztNQUNQQyxPQUFPLEVBQUUsaUJB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
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
describe('utils', () => {
|
|
4
|
-
xit('todo', () => {
|
|
5
|
-
expect(true).toEqual(false);
|
|
6
|
-
});
|
|
7
|
-
});
|
|
8
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsInhpdCIsImV4cGVjdCIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3V0aWxzLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICB4aXQoJ3RvZG8nLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRydWUpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU07RUFDdEJDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUNoQkMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0VBQzdCLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|