@pie-element/explicit-constructed-response 11.0.1 → 11.1.0-beta.1
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 +6 -0
- package/configure/CHANGELOG.md +6 -0
- package/configure/lib/__tests__/alternateResponses.test.js +503 -0
- package/configure/lib/__tests__/alternateSection.test.js +372 -0
- package/configure/lib/__tests__/ecr-toolbar.test.js +214 -0
- package/configure/lib/__tests__/main.test.js +470 -0
- package/configure/lib/__tests__/markupUtils.test.js +55 -0
- package/configure/lib/__tests__/utils.test.js +62 -0
- package/configure/lib/alternateResponses.js +1 -1
- package/configure/lib/alternateSection.js +1 -1
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/ecr-toolbar.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/main.js +1 -1
- package/configure/lib/markupUtils.js +1 -1
- package/configure/lib/utils.js +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +6 -0
- package/controller/lib/__tests__/index.spec.js +30 -0
- package/controller/lib/__tests__/index.test.js +950 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/package.json +3 -3
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/main.test.js +166 -0
- package/lib/index.js +1 -1
- package/lib/main.js +1 -1
- package/lib/print.js +1 -1
- package/module/configure.js +1 -1
- package/module/element.js +1 -1
- package/module/index.html +1 -1
- package/module/manifest.json +4 -4
- package/module/print.html +1 -1
- package/module/print.js +1 -1
- package/package.json +7 -7
- package/LICENSE.md +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [11.1.0-next.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@11.1.0-next.0...@pie-element/explicit-constructed-response@11.1.0-next.1) (2026-05-06)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- bump libs and shared modules PIE-440, PIE-436, PIE-439, PIE-519, PIE-216 ([932fc12](https://github.com/pie-framework/pie-elements/commit/932fc12557ba56a737cee005be898d54d5e590ef))
|
|
11
|
+
|
|
6
12
|
## [11.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@11.0.0...@pie-element/explicit-constructed-response@11.0.1) (2026-04-28)
|
|
7
13
|
|
|
8
14
|
**Note:** Version bump only for package @pie-element/explicit-constructed-response
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [10.1.0-next.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@10.1.0-next.0...@pie-element/explicit-constructed-response-configure@10.1.0-next.1) (2026-05-06)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- bump libs and shared modules PIE-440, PIE-436, PIE-439, PIE-519, PIE-216 ([932fc12](https://github.com/pie-framework/pie-elements/commit/932fc12557ba56a737cee005be898d54d5e590ef))
|
|
11
|
+
|
|
6
12
|
## [10.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@10.0.0...@pie-element/explicit-constructed-response-configure@10.0.1) (2026-04-28)
|
|
7
13
|
|
|
8
14
|
**Note:** Version bump only for package @pie-element/explicit-constructed-response-configure
|
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
5
|
+
var _react = require("@testing-library/react");
|
|
6
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
7
|
+
var _styles = require("@mui/material/styles");
|
|
8
|
+
var _alternateResponses = require("../alternateResponses");
|
|
9
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
10
|
+
var _markupUtils = require("../markupUtils");
|
|
11
|
+
jest.mock('../alternateSection', () => ({
|
|
12
|
+
__esModule: true,
|
|
13
|
+
default: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
|
|
14
|
+
"data-testid": "alternate-section"
|
|
15
|
+
}, props))
|
|
16
|
+
}));
|
|
17
|
+
const theme = (0, _styles.createTheme)();
|
|
18
|
+
const model = {
|
|
19
|
+
markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
|
|
20
|
+
disabled: false,
|
|
21
|
+
choices: {
|
|
22
|
+
0: [{
|
|
23
|
+
label: 'cow',
|
|
24
|
+
value: '0'
|
|
25
|
+
}, {
|
|
26
|
+
label: 'cattle',
|
|
27
|
+
value: '1'
|
|
28
|
+
}, {
|
|
29
|
+
label: 'calf',
|
|
30
|
+
value: '2'
|
|
31
|
+
}],
|
|
32
|
+
1: [{
|
|
33
|
+
label: 'over',
|
|
34
|
+
value: '0'
|
|
35
|
+
}, {
|
|
36
|
+
label: 'past',
|
|
37
|
+
value: '1'
|
|
38
|
+
}, {
|
|
39
|
+
label: 'beyond',
|
|
40
|
+
value: '2'
|
|
41
|
+
}],
|
|
42
|
+
2: [{
|
|
43
|
+
label: 'moon',
|
|
44
|
+
value: '0'
|
|
45
|
+
}]
|
|
46
|
+
},
|
|
47
|
+
maxLengthPerChoice: [6, 6, 4],
|
|
48
|
+
prompt: 'Complete the sentence'
|
|
49
|
+
};
|
|
50
|
+
const prepareModel = (model = {}) => {
|
|
51
|
+
const joinedObj = {
|
|
52
|
+
..._defaults.default.model,
|
|
53
|
+
...model
|
|
54
|
+
};
|
|
55
|
+
const slateMarkup = joinedObj.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, joinedObj.choices);
|
|
56
|
+
const processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
|
|
57
|
+
return {
|
|
58
|
+
...joinedObj,
|
|
59
|
+
slateMarkup,
|
|
60
|
+
markup: processedMarkup
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
describe('AlternateResponses', () => {
|
|
64
|
+
let onChange = jest.fn();
|
|
65
|
+
let onLengthChange = jest.fn();
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
jest.clearAllMocks();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Helper function to create a properly initialized test instance
|
|
71
|
+
const createTestInstance = (modelOverrides = {}, propsOverrides = {}) => {
|
|
72
|
+
const testProps = {
|
|
73
|
+
onChange,
|
|
74
|
+
onLengthChange,
|
|
75
|
+
classes: {},
|
|
76
|
+
model: prepareModel({
|
|
77
|
+
...model,
|
|
78
|
+
...modelOverrides
|
|
79
|
+
}),
|
|
80
|
+
maxLengthPerChoiceEnabled: false,
|
|
81
|
+
...propsOverrides
|
|
82
|
+
};
|
|
83
|
+
const testInstance = new _alternateResponses.AlternateResponses(testProps);
|
|
84
|
+
// Initialize state manually since we're not mounting
|
|
85
|
+
testInstance.state = {
|
|
86
|
+
maxLengthPerChoice: []
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// Mock setState to capture state updates
|
|
90
|
+
testInstance.setState = jest.fn(newState => {
|
|
91
|
+
testInstance.state = {
|
|
92
|
+
...testInstance.state,
|
|
93
|
+
...newState
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
return testInstance;
|
|
97
|
+
};
|
|
98
|
+
const renderAlternateResponses = extras => {
|
|
99
|
+
const defaults = {
|
|
100
|
+
onChange,
|
|
101
|
+
onLengthChange,
|
|
102
|
+
classes: {},
|
|
103
|
+
model: prepareModel({
|
|
104
|
+
...model,
|
|
105
|
+
...extras
|
|
106
|
+
}),
|
|
107
|
+
maxLengthPerChoiceEnabled: true
|
|
108
|
+
};
|
|
109
|
+
const props = {
|
|
110
|
+
...defaults
|
|
111
|
+
};
|
|
112
|
+
return (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_styles.ThemeProvider, {
|
|
113
|
+
theme: theme
|
|
114
|
+
}, /*#__PURE__*/_react2.default.createElement(_alternateResponses.AlternateResponses, props)));
|
|
115
|
+
};
|
|
116
|
+
describe('logic', () => {
|
|
117
|
+
describe('updateChoicesIfNeeded', () => {
|
|
118
|
+
it('sets state, updates edited choice', () => {
|
|
119
|
+
const testInstance = createTestInstance();
|
|
120
|
+
const newChoices = {
|
|
121
|
+
0: [{
|
|
122
|
+
label: 'cow',
|
|
123
|
+
value: '0'
|
|
124
|
+
}, {
|
|
125
|
+
label: 'cattle',
|
|
126
|
+
value: '1'
|
|
127
|
+
}, {
|
|
128
|
+
label: 'calf',
|
|
129
|
+
value: '2'
|
|
130
|
+
}],
|
|
131
|
+
1: [{
|
|
132
|
+
label: 'under',
|
|
133
|
+
value: '0'
|
|
134
|
+
}, {
|
|
135
|
+
label: 'past',
|
|
136
|
+
value: '1'
|
|
137
|
+
}, {
|
|
138
|
+
label: 'beyond',
|
|
139
|
+
value: '2'
|
|
140
|
+
}],
|
|
141
|
+
2: [{
|
|
142
|
+
label: 'moon',
|
|
143
|
+
value: '0'
|
|
144
|
+
}]
|
|
145
|
+
};
|
|
146
|
+
testInstance.updateChoicesIfNeeded({
|
|
147
|
+
model: {
|
|
148
|
+
...model,
|
|
149
|
+
choices: newChoices
|
|
150
|
+
},
|
|
151
|
+
maxLengthPerChoiceEnabled: false
|
|
152
|
+
});
|
|
153
|
+
expect(testInstance.state).toEqual(expect.objectContaining({
|
|
154
|
+
choices: newChoices,
|
|
155
|
+
values: {
|
|
156
|
+
0: {
|
|
157
|
+
label: 'cow',
|
|
158
|
+
value: '0'
|
|
159
|
+
},
|
|
160
|
+
1: {
|
|
161
|
+
label: 'under',
|
|
162
|
+
value: '0'
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}));
|
|
166
|
+
});
|
|
167
|
+
it('sets state, if a choice has an alternate', () => {
|
|
168
|
+
const testInstance = createTestInstance();
|
|
169
|
+
const newChoices = {
|
|
170
|
+
0: [{
|
|
171
|
+
label: 'cow',
|
|
172
|
+
value: '0'
|
|
173
|
+
}, {
|
|
174
|
+
label: 'cattle',
|
|
175
|
+
value: '1'
|
|
176
|
+
}, {
|
|
177
|
+
label: 'calf',
|
|
178
|
+
value: '2'
|
|
179
|
+
}],
|
|
180
|
+
1: [{
|
|
181
|
+
label: 'under',
|
|
182
|
+
value: '0'
|
|
183
|
+
}, {
|
|
184
|
+
label: 'past',
|
|
185
|
+
value: '1'
|
|
186
|
+
}, {
|
|
187
|
+
label: 'beyond',
|
|
188
|
+
value: '2'
|
|
189
|
+
}],
|
|
190
|
+
2: [{
|
|
191
|
+
label: 'sun',
|
|
192
|
+
value: '0'
|
|
193
|
+
}, {
|
|
194
|
+
label: 'star',
|
|
195
|
+
value: '1'
|
|
196
|
+
}]
|
|
197
|
+
};
|
|
198
|
+
testInstance.updateChoicesIfNeeded({
|
|
199
|
+
model: {
|
|
200
|
+
...model,
|
|
201
|
+
choices: newChoices
|
|
202
|
+
},
|
|
203
|
+
maxLengthPerChoiceEnabled: false
|
|
204
|
+
});
|
|
205
|
+
expect(testInstance.state).toEqual(expect.objectContaining({
|
|
206
|
+
choices: newChoices,
|
|
207
|
+
values: {
|
|
208
|
+
0: {
|
|
209
|
+
label: 'cow',
|
|
210
|
+
value: '0'
|
|
211
|
+
},
|
|
212
|
+
1: {
|
|
213
|
+
label: 'under',
|
|
214
|
+
value: '0'
|
|
215
|
+
},
|
|
216
|
+
2: {
|
|
217
|
+
label: 'sun',
|
|
218
|
+
value: '0'
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}));
|
|
222
|
+
});
|
|
223
|
+
it('sets state if some choices are removed', () => {
|
|
224
|
+
const testInstance = createTestInstance();
|
|
225
|
+
const newChoices = {
|
|
226
|
+
0: [{
|
|
227
|
+
label: 'cow',
|
|
228
|
+
value: '0'
|
|
229
|
+
}, {
|
|
230
|
+
label: 'cattle',
|
|
231
|
+
value: '1'
|
|
232
|
+
}, {
|
|
233
|
+
label: 'calf',
|
|
234
|
+
value: '2'
|
|
235
|
+
}]
|
|
236
|
+
};
|
|
237
|
+
testInstance.updateChoicesIfNeeded({
|
|
238
|
+
model: {
|
|
239
|
+
...model,
|
|
240
|
+
choices: newChoices
|
|
241
|
+
},
|
|
242
|
+
maxLengthPerChoiceEnabled: false
|
|
243
|
+
});
|
|
244
|
+
expect(testInstance.state).toEqual(expect.objectContaining({
|
|
245
|
+
choices: newChoices,
|
|
246
|
+
values: {
|
|
247
|
+
0: {
|
|
248
|
+
label: 'cow',
|
|
249
|
+
value: '0'
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}));
|
|
253
|
+
});
|
|
254
|
+
it('does not change state', () => {
|
|
255
|
+
const testInstance = createTestInstance();
|
|
256
|
+
|
|
257
|
+
// Initialize state
|
|
258
|
+
testInstance.updateChoicesIfNeeded({
|
|
259
|
+
model,
|
|
260
|
+
maxLengthPerChoiceEnabled: false
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Call again with same model
|
|
264
|
+
testInstance.updateChoicesIfNeeded({
|
|
265
|
+
model,
|
|
266
|
+
maxLengthPerChoiceEnabled: false
|
|
267
|
+
});
|
|
268
|
+
expect(testInstance.state).toEqual(expect.objectContaining({
|
|
269
|
+
choices: model.choices,
|
|
270
|
+
values: {
|
|
271
|
+
0: {
|
|
272
|
+
label: 'cow',
|
|
273
|
+
value: '0'
|
|
274
|
+
},
|
|
275
|
+
1: {
|
|
276
|
+
label: 'over',
|
|
277
|
+
value: '0'
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}));
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
describe('getRemainingChoices', () => {
|
|
284
|
+
it('adds an alternate if selecting a choice', () => {
|
|
285
|
+
const testInstance = createTestInstance();
|
|
286
|
+
|
|
287
|
+
// Initialize state
|
|
288
|
+
testInstance.updateChoicesIfNeeded({
|
|
289
|
+
model,
|
|
290
|
+
maxLengthPerChoiceEnabled: false
|
|
291
|
+
});
|
|
292
|
+
const remainingChoices = testInstance.getRemainingChoices();
|
|
293
|
+
expect(remainingChoices).toEqual([{
|
|
294
|
+
label: 'moon',
|
|
295
|
+
value: '2'
|
|
296
|
+
}]);
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
describe('onChoiceChanged', () => {
|
|
300
|
+
it('changes new alternate', () => {
|
|
301
|
+
const testInstance = createTestInstance();
|
|
302
|
+
|
|
303
|
+
// Initialize state
|
|
304
|
+
testInstance.updateChoicesIfNeeded({
|
|
305
|
+
model,
|
|
306
|
+
maxLengthPerChoiceEnabled: false
|
|
307
|
+
});
|
|
308
|
+
testInstance.onChoiceChanged({
|
|
309
|
+
label: 'New Choice',
|
|
310
|
+
value: '1'
|
|
311
|
+
}, 2);
|
|
312
|
+
expect(onChange).toBeCalledWith({
|
|
313
|
+
...model.choices,
|
|
314
|
+
2: [{
|
|
315
|
+
label: 'moon',
|
|
316
|
+
value: '0'
|
|
317
|
+
}, {
|
|
318
|
+
label: 'New Choice',
|
|
319
|
+
value: '1'
|
|
320
|
+
}]
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
it('changes existing alternate', () => {
|
|
324
|
+
const testInstance = createTestInstance();
|
|
325
|
+
|
|
326
|
+
// Initialize state
|
|
327
|
+
testInstance.updateChoicesIfNeeded({
|
|
328
|
+
model,
|
|
329
|
+
maxLengthPerChoiceEnabled: false
|
|
330
|
+
});
|
|
331
|
+
testInstance.onChoiceChanged({
|
|
332
|
+
label: 'New Choice Edited',
|
|
333
|
+
value: '1'
|
|
334
|
+
}, 2);
|
|
335
|
+
expect(onChange).toBeCalledWith({
|
|
336
|
+
...model.choices,
|
|
337
|
+
2: [{
|
|
338
|
+
label: 'moon',
|
|
339
|
+
value: '0'
|
|
340
|
+
}, {
|
|
341
|
+
label: 'New Choice Edited',
|
|
342
|
+
value: '1'
|
|
343
|
+
}]
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
describe('onChoiceRemoved', () => {
|
|
348
|
+
it('removes choice from section', () => {
|
|
349
|
+
const testInstance = createTestInstance();
|
|
350
|
+
|
|
351
|
+
// Initialize state
|
|
352
|
+
testInstance.updateChoicesIfNeeded({
|
|
353
|
+
model,
|
|
354
|
+
maxLengthPerChoiceEnabled: false
|
|
355
|
+
});
|
|
356
|
+
testInstance.onChoiceRemoved('1', '1');
|
|
357
|
+
const expectedChoices = {
|
|
358
|
+
...model.choices,
|
|
359
|
+
1: [{
|
|
360
|
+
label: 'over',
|
|
361
|
+
value: '0'
|
|
362
|
+
}, {
|
|
363
|
+
label: 'beyond',
|
|
364
|
+
value: '2'
|
|
365
|
+
}]
|
|
366
|
+
};
|
|
367
|
+
expect(onChange).toBeCalledWith(expectedChoices);
|
|
368
|
+
});
|
|
369
|
+
it('does not throw error if parameters are not correct', () => {
|
|
370
|
+
const testInstance = createTestInstance();
|
|
371
|
+
|
|
372
|
+
// Initialize state
|
|
373
|
+
testInstance.updateChoicesIfNeeded({
|
|
374
|
+
model,
|
|
375
|
+
maxLengthPerChoiceEnabled: false
|
|
376
|
+
});
|
|
377
|
+
testInstance.onChoiceRemoved('11', '1');
|
|
378
|
+
expect(onChange).toBeCalledWith(model.choices);
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
describe('onSectionSelect', () => {
|
|
382
|
+
it('removing a selection', () => {
|
|
383
|
+
const testInstance = createTestInstance({
|
|
384
|
+
choices: {
|
|
385
|
+
0: [{
|
|
386
|
+
label: 'cow',
|
|
387
|
+
value: '0'
|
|
388
|
+
}, {
|
|
389
|
+
label: 'cattle',
|
|
390
|
+
value: '1'
|
|
391
|
+
}, {
|
|
392
|
+
label: 'calf',
|
|
393
|
+
value: '2'
|
|
394
|
+
}],
|
|
395
|
+
1: [{
|
|
396
|
+
label: 'over',
|
|
397
|
+
value: '0'
|
|
398
|
+
}, {
|
|
399
|
+
label: 'past',
|
|
400
|
+
value: '1'
|
|
401
|
+
}, {
|
|
402
|
+
label: 'beyond',
|
|
403
|
+
value: '2'
|
|
404
|
+
}],
|
|
405
|
+
2: [{
|
|
406
|
+
label: 'moon',
|
|
407
|
+
value: '0'
|
|
408
|
+
}]
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
// Initialize state
|
|
413
|
+
testInstance.updateChoicesIfNeeded({
|
|
414
|
+
model: {
|
|
415
|
+
...model,
|
|
416
|
+
choices: {
|
|
417
|
+
0: [{
|
|
418
|
+
label: 'cow',
|
|
419
|
+
value: '0'
|
|
420
|
+
}, {
|
|
421
|
+
label: 'cattle',
|
|
422
|
+
value: '1'
|
|
423
|
+
}, {
|
|
424
|
+
label: 'calf',
|
|
425
|
+
value: '2'
|
|
426
|
+
}],
|
|
427
|
+
1: [{
|
|
428
|
+
label: 'over',
|
|
429
|
+
value: '0'
|
|
430
|
+
}, {
|
|
431
|
+
label: 'past',
|
|
432
|
+
value: '1'
|
|
433
|
+
}, {
|
|
434
|
+
label: 'beyond',
|
|
435
|
+
value: '2'
|
|
436
|
+
}],
|
|
437
|
+
2: [{
|
|
438
|
+
label: 'moon',
|
|
439
|
+
value: '0'
|
|
440
|
+
}]
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
maxLengthPerChoiceEnabled: false
|
|
444
|
+
});
|
|
445
|
+
testInstance.onSectionSelect(undefined, '0');
|
|
446
|
+
expect(onChange).toBeCalledWith({
|
|
447
|
+
0: [{
|
|
448
|
+
label: 'cow',
|
|
449
|
+
value: '0'
|
|
450
|
+
}],
|
|
451
|
+
1: [{
|
|
452
|
+
label: 'over',
|
|
453
|
+
value: '0'
|
|
454
|
+
}, {
|
|
455
|
+
label: 'past',
|
|
456
|
+
value: '1'
|
|
457
|
+
}, {
|
|
458
|
+
label: 'beyond',
|
|
459
|
+
value: '2'
|
|
460
|
+
}],
|
|
461
|
+
2: [{
|
|
462
|
+
label: 'moon',
|
|
463
|
+
value: '0'
|
|
464
|
+
}]
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
it('selecting a response', () => {
|
|
468
|
+
const testInstance = createTestInstance();
|
|
469
|
+
|
|
470
|
+
// Initialize state
|
|
471
|
+
testInstance.updateChoicesIfNeeded({
|
|
472
|
+
model,
|
|
473
|
+
maxLengthPerChoiceEnabled: false
|
|
474
|
+
});
|
|
475
|
+
const stateBefore = {
|
|
476
|
+
...testInstance.state
|
|
477
|
+
};
|
|
478
|
+
testInstance.onSectionSelect({
|
|
479
|
+
label: 'moon',
|
|
480
|
+
value: '0'
|
|
481
|
+
}, '2');
|
|
482
|
+
expect(testInstance.state.choices).toEqual({
|
|
483
|
+
...stateBefore.choices,
|
|
484
|
+
2: [{
|
|
485
|
+
label: 'moon',
|
|
486
|
+
value: '0'
|
|
487
|
+
}, {
|
|
488
|
+
label: '',
|
|
489
|
+
value: '1'
|
|
490
|
+
}]
|
|
491
|
+
});
|
|
492
|
+
expect(testInstance.state.values).toEqual({
|
|
493
|
+
...stateBefore.values,
|
|
494
|
+
2: {
|
|
495
|
+
label: 'moon',
|
|
496
|
+
value: '0'
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
});
|
|
502
|
+
});
|
|
503
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVzIiwiX2FsdGVybmF0ZVJlc3BvbnNlcyIsIl9kZWZhdWx0cyIsIl9tYXJrdXBVdGlscyIsImplc3QiLCJtb2NrIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ0aGVtZSIsImNyZWF0ZVRoZW1lIiwibW9kZWwiLCJtYXJrdXAiLCJkaXNhYmxlZCIsImNob2ljZXMiLCJsYWJlbCIsInZhbHVlIiwibWF4TGVuZ3RoUGVyQ2hvaWNlIiwicHJvbXB0IiwicHJlcGFyZU1vZGVsIiwiam9pbmVkT2JqIiwic2Vuc2libGVEZWZhdWx0cyIsInNsYXRlTWFya3VwIiwiY3JlYXRlU2xhdGVNYXJrdXAiLCJwcm9jZXNzZWRNYXJrdXAiLCJwcm9jZXNzTWFya3VwIiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImZuIiwib25MZW5ndGhDaGFuZ2UiLCJiZWZvcmVFYWNoIiwiY2xlYXJBbGxNb2NrcyIsImNyZWF0ZVRlc3RJbnN0YW5jZSIsIm1vZGVsT3ZlcnJpZGVzIiwicHJvcHNPdmVycmlkZXMiLCJ0ZXN0UHJvcHMiLCJjbGFzc2VzIiwibWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZCIsInRlc3RJbnN0YW5jZSIsIkFsdGVybmF0ZVJlc3BvbnNlcyIsInN0YXRlIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInJlbmRlckFsdGVybmF0ZVJlc3BvbnNlcyIsImV4dHJhcyIsImRlZmF1bHRzIiwicmVuZGVyIiwiVGhlbWVQcm92aWRlciIsIml0IiwibmV3Q2hvaWNlcyIsInVwZGF0ZUNob2ljZXNJZk5lZWRlZCIsImV4cGVjdCIsInRvRXF1YWwiLCJvYmplY3RDb250YWluaW5nIiwidmFsdWVzIiwicmVtYWluaW5nQ2hvaWNlcyIsImdldFJlbWFpbmluZ0Nob2ljZXMiLCJvbkNob2ljZUNoYW5nZWQiLCJ0b0JlQ2FsbGVkV2l0aCIsIm9uQ2hvaWNlUmVtb3ZlZCIsImV4cGVjdGVkQ2hvaWNlcyIsIm9uU2VjdGlvblNlbGVjdCIsInVuZGVmaW5lZCIsInN0YXRlQmVmb3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9hbHRlcm5hdGVSZXNwb25zZXMudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5cbmltcG9ydCB7IEFsdGVybmF0ZVJlc3BvbnNlcyB9IGZyb20gJy4uL2FsdGVybmF0ZVJlc3BvbnNlcyc7XG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBjcmVhdGVTbGF0ZU1hcmt1cCwgcHJvY2Vzc01hcmt1cCB9IGZyb20gJy4uL21hcmt1cFV0aWxzJztcblxuamVzdC5tb2NrKCcuLi9hbHRlcm5hdGVTZWN0aW9uJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiYWx0ZXJuYXRlLXNlY3Rpb25cIiB7Li4ucHJvcHN9IC8+LFxufSkpO1xuXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmNvbnN0IG1vZGVsID0ge1xuICBtYXJrdXA6ICc8cD5UaGUge3swfX0ganVtcGVkIHt7MX19IHRoZSB7ezJ9fTwvcD4nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGNob2ljZXM6IHtcbiAgICAwOiBbXG4gICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgIF0sXG4gICAgMTogW1xuICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgXSxcbiAgICAyOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnIH1dLFxuICB9LFxuICBtYXhMZW5ndGhQZXJDaG9pY2U6IFs2LCA2LCA0XSxcbiAgcHJvbXB0OiAnQ29tcGxldGUgdGhlIHNlbnRlbmNlJyxcbn07XG5cbmNvbnN0IHByZXBhcmVNb2RlbCA9IChtb2RlbCA9IHt9KSA9PiB7XG4gIGNvbnN0IGpvaW5lZE9iaiA9IHtcbiAgICAuLi5zZW5zaWJsZURlZmF1bHRzLm1vZGVsLFxuICAgIC4uLm1vZGVsLFxuICB9O1xuICBjb25zdCBzbGF0ZU1hcmt1cCA9IGpvaW5lZE9iai5zbGF0ZU1hcmt1cCB8fCBjcmVhdGVTbGF0ZU1hcmt1cChqb2luZWRPYmoubWFya3VwLCBqb2luZWRPYmouY2hvaWNlcyk7XG4gIGNvbnN0IHByb2Nlc3NlZE1hcmt1cCA9IHByb2Nlc3NNYXJrdXAoc2xhdGVNYXJrdXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uam9pbmVkT2JqLFxuICAgIHNsYXRlTWFya3VwLFxuICAgIG1hcmt1cDogcHJvY2Vzc2VkTWFya3VwLFxuICB9O1xufTtcblxuZGVzY3JpYmUoJ0FsdGVybmF0ZVJlc3BvbnNlcycsICgpID0+IHtcbiAgbGV0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICBsZXQgb25MZW5ndGhDaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBwcm9wZXJseSBpbml0aWFsaXplZCB0ZXN0IGluc3RhbmNlXG4gIGNvbnN0IGNyZWF0ZVRlc3RJbnN0YW5jZSA9IChtb2RlbE92ZXJyaWRlcyA9IHt9LCBwcm9wc092ZXJyaWRlcyA9IHt9KSA9PiB7XG4gICAgY29uc3QgdGVzdFByb3BzID0ge1xuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkxlbmd0aENoYW5nZSxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAuLi5tb2RlbE92ZXJyaWRlcyxcbiAgICAgIH0pLFxuICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAuLi5wcm9wc092ZXJyaWRlcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IEFsdGVybmF0ZVJlc3BvbnNlcyh0ZXN0UHJvcHMpO1xuICAgIC8vIEluaXRpYWxpemUgc3RhdGUgbWFudWFsbHkgc2luY2Ugd2UncmUgbm90IG1vdW50aW5nXG4gICAgdGVzdEluc3RhbmNlLnN0YXRlID0geyBtYXhMZW5ndGhQZXJDaG9pY2U6IFtdIH07XG5cbiAgICAvLyBNb2NrIHNldFN0YXRlIHRvIGNhcHR1cmUgc3RhdGUgdXBkYXRlc1xuICAgIHRlc3RJbnN0YW5jZS5zZXRTdGF0ZSA9IGplc3QuZm4oKG5ld1N0YXRlKSA9PiB7XG4gICAgICB0ZXN0SW5zdGFuY2Uuc3RhdGUgPSB7IC4uLnRlc3RJbnN0YW5jZS5zdGF0ZSwgLi4ubmV3U3RhdGUgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXN0SW5zdGFuY2U7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQWx0ZXJuYXRlUmVzcG9uc2VzID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkxlbmd0aENoYW5nZSxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAuLi5leHRyYXMsXG4gICAgICB9KSxcbiAgICAgIG1heExlbmd0aFBlckNob2ljZUVuYWJsZWQ6IHRydWUsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMgfTtcblxuICAgIHJldHVybiByZW5kZXIoXG4gICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICA8QWx0ZXJuYXRlUmVzcG9uc2VzIHsuLi5wcm9wc30gLz5cbiAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICApO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgndXBkYXRlQ2hvaWNlc0lmTmVlZGVkJywgKCkgPT4ge1xuICAgICAgaXQoJ3NldHMgc3RhdGUsIHVwZGF0ZXMgZWRpdGVkIGNob2ljZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gY3JlYXRlVGVzdEluc3RhbmNlKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IHtcbiAgICAgICAgICAwOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgMTogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ3VuZGVyJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ3Bhc3QnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYmV5b25kJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgMjogW3sgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcwJyB9XSxcbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2UudXBkYXRlQ2hvaWNlc0lmTmVlZGVkKHtcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgICAgICBjaG9pY2VzOiBuZXdDaG9pY2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4cGVjdCh0ZXN0SW5zdGFuY2Uuc3RhdGUpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogbmV3Q2hvaWNlcyxcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAwOiB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAxOiB7IGxhYmVsOiAndW5kZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzZXRzIHN0YXRlLCBpZiBhIGNob2ljZSBoYXMgYW4gYWx0ZXJuYXRlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBjcmVhdGVUZXN0SW5zdGFuY2UoKTtcblxuICAgICAgICBjb25zdCBuZXdDaG9pY2VzID0ge1xuICAgICAgICAgIDA6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjb3cnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnY2F0dGxlJywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2NhbGYnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAndW5kZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnc3VuJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ3N0YXInLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2UudXBkYXRlQ2hvaWNlc0lmTmVlZGVkKHtcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgICAgICBjaG9pY2VzOiBuZXdDaG9pY2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4cGVjdCh0ZXN0SW5zdGFuY2Uuc3RhdGUpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogbmV3Q2hvaWNlcyxcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAwOiB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAxOiB7IGxhYmVsOiAndW5kZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgIDI6IHsgbGFiZWw6ICdzdW4nLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzZXRzIHN0YXRlIGlmIHNvbWUgY2hvaWNlcyBhcmUgcmVtb3ZlZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gY3JlYXRlVGVzdEluc3RhbmNlKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IHtcbiAgICAgICAgICAwOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLnVwZGF0ZUNob2ljZXNJZk5lZWRlZCh7XG4gICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAgICAgY2hvaWNlczogbmV3Q2hvaWNlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QodGVzdEluc3RhbmNlLnN0YXRlKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIGNob2ljZXM6IG5ld0Nob2ljZXMsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgMDogeyBsYWJlbDogJ2NvdycsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgbm90IGNoYW5nZSBzdGF0ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gY3JlYXRlVGVzdEluc3RhbmNlKCk7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBzdGF0ZVxuICAgICAgICB0ZXN0SW5zdGFuY2UudXBkYXRlQ2hvaWNlc0lmTmVlZGVkKHtcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2FsbCBhZ2FpbiB3aXRoIHNhbWUgbW9kZWxcbiAgICAgICAgdGVzdEluc3RhbmNlLnVwZGF0ZUNob2ljZXNJZk5lZWRlZCh7XG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4cGVjdCh0ZXN0SW5zdGFuY2Uuc3RhdGUpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogbW9kZWwuY2hvaWNlcyxcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAwOiB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAxOiB7IGxhYmVsOiAnb3ZlcicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRSZW1haW5pbmdDaG9pY2VzJywgKCkgPT4ge1xuICAgICAgaXQoJ2FkZHMgYW4gYWx0ZXJuYXRlIGlmIHNlbGVjdGluZyBhIGNob2ljZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gY3JlYXRlVGVzdEluc3RhbmNlKCk7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBzdGF0ZVxuICAgICAgICB0ZXN0SW5zdGFuY2UudXBkYXRlQ2hvaWNlc0lmTmVlZGVkKHtcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVtYWluaW5nQ2hvaWNlcyA9IHRlc3RJbnN0YW5jZS5nZXRSZW1haW5pbmdDaG9pY2VzKCk7XG5cbiAgICAgICAgZXhwZWN0KHJlbWFpbmluZ0Nob2ljZXMpLnRvRXF1YWwoW3sgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcyJyB9XSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvbkNob2ljZUNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnY2hhbmdlcyBuZXcgYWx0ZXJuYXRlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBjcmVhdGVUZXN0SW5zdGFuY2UoKTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIHN0YXRlXG4gICAgICAgIHRlc3RJbnN0YW5jZS51cGRhdGVDaG9pY2VzSWZOZWVkZWQoe1xuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25DaG9pY2VDaGFuZ2VkKHsgbGFiZWw6ICdOZXcgQ2hvaWNlJywgdmFsdWU6ICcxJyB9LCAyKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5tb2RlbC5jaG9pY2VzLFxuICAgICAgICAgIDI6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ05ldyBDaG9pY2UnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NoYW5nZXMgZXhpc3RpbmcgYWx0ZXJuYXRlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBjcmVhdGVUZXN0SW5zdGFuY2UoKTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIHN0YXRlXG4gICAgICAgIHRlc3RJbnN0YW5jZS51cGRhdGVDaG9pY2VzSWZOZWVkZWQoe1xuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25DaG9pY2VDaGFuZ2VkKHsgbGFiZWw6ICdOZXcgQ2hvaWNlIEVkaXRlZCcsIHZhbHVlOiAnMScgfSwgMik7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgLi4ubW9kZWwuY2hvaWNlcyxcbiAgICAgICAgICAyOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOZXcgQ2hvaWNlIEVkaXRlZCcsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hvaWNlUmVtb3ZlZCcsICgpID0+IHtcbiAgICAgIGl0KCdyZW1vdmVzIGNob2ljZSBmcm9tIHNlY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IGNyZWF0ZVRlc3RJbnN0YW5jZSgpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgc3RhdGVcbiAgICAgICAgdGVzdEluc3RhbmNlLnVwZGF0ZUNob2ljZXNJZk5lZWRlZCh7XG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNob2ljZVJlbW92ZWQoJzEnLCAnMScpO1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkQ2hvaWNlcyA9IHtcbiAgICAgICAgICAuLi5tb2RlbC5jaG9pY2VzLFxuICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdvdmVyJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoZXhwZWN0ZWRDaG9pY2VzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZXJyb3IgaWYgcGFyYW1ldGVycyBhcmUgbm90IGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IGNyZWF0ZVRlc3RJbnN0YW5jZSgpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgc3RhdGVcbiAgICAgICAgdGVzdEluc3RhbmNlLnVwZGF0ZUNob2ljZXNJZk5lZWRlZCh7XG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNob2ljZVJlbW92ZWQoJzExJywgJzEnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvQmVDYWxsZWRXaXRoKG1vZGVsLmNob2ljZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25TZWN0aW9uU2VsZWN0JywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbW92aW5nIGEgc2VsZWN0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBjcmVhdGVUZXN0SW5zdGFuY2Uoe1xuICAgICAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgICAgIDA6IFtcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ2NvdycsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbGYnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMTogW1xuICAgICAgICAgICAgICB7IGxhYmVsOiAnb3ZlcicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ3Bhc3QnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMjogW3sgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcwJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIHN0YXRlXG4gICAgICAgIHRlc3RJbnN0YW5jZS51cGRhdGVDaG9pY2VzSWZOZWVkZWQoe1xuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgICAgICAgMDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjb3cnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMTogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdvdmVyJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdwYXN0JywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDI6IFt7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vblNlY3Rpb25TZWxlY3QodW5kZWZpbmVkLCAnMCcpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIDA6IFt7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9XSxcbiAgICAgICAgICAxOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnb3ZlcicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdwYXN0JywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIDI6IFt7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzZWxlY3RpbmcgYSByZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gY3JlYXRlVGVzdEluc3RhbmNlKCk7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBzdGF0ZVxuICAgICAgICB0ZXN0SW5zdGFuY2UudXBkYXRlQ2hvaWNlc0lmTmVlZGVkKHtcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmUgPSB7IC4uLnRlc3RJbnN0YW5jZS5zdGF0ZSB9O1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vblNlY3Rpb25TZWxlY3QoeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnIH0sICcyJyk7XG5cbiAgICAgICAgZXhwZWN0KHRlc3RJbnN0YW5jZS5zdGF0ZS5jaG9pY2VzKS50b0VxdWFsKHtcbiAgICAgICAgICAuLi5zdGF0ZUJlZm9yZS5jaG9pY2VzLFxuICAgICAgICAgIDI6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJycsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHRlc3RJbnN0YW5jZS5zdGF0ZS52YWx1ZXMpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnN0YXRlQmVmb3JlLnZhbHVlcyxcbiAgICAgICAgICAyOiB7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAg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
|