@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
|
@@ -0,0 +1,470 @@
|
|
|
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 _main = require("../main");
|
|
9
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
10
|
+
var _markupUtils = require("../markupUtils");
|
|
11
|
+
jest.mock('@pie-lib/config-ui', () => ({
|
|
12
|
+
choiceUtils: {
|
|
13
|
+
firstAvailableIndex: jest.fn()
|
|
14
|
+
},
|
|
15
|
+
settings: {
|
|
16
|
+
Panel: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
|
|
17
|
+
"data-testid": "settings-panel"
|
|
18
|
+
}, props)),
|
|
19
|
+
toggle: jest.fn(),
|
|
20
|
+
radio: jest.fn(),
|
|
21
|
+
dropdown: jest.fn()
|
|
22
|
+
},
|
|
23
|
+
layout: {
|
|
24
|
+
ConfigLayout: props => /*#__PURE__*/_react2.default.createElement("div", {
|
|
25
|
+
"data-testid": "config-layout"
|
|
26
|
+
}, props.children)
|
|
27
|
+
},
|
|
28
|
+
InputContainer: props => /*#__PURE__*/_react2.default.createElement("div", {
|
|
29
|
+
"data-testid": "input-container"
|
|
30
|
+
}, props.children)
|
|
31
|
+
}));
|
|
32
|
+
jest.mock('@pie-lib/editable-html-tip-tap', () => ({
|
|
33
|
+
__esModule: true,
|
|
34
|
+
default: ({
|
|
35
|
+
markup,
|
|
36
|
+
onChange
|
|
37
|
+
}) => /*#__PURE__*/_react2.default.createElement("div", {
|
|
38
|
+
"data-testid": "editable-html",
|
|
39
|
+
onClick: () => onChange && onChange('new value')
|
|
40
|
+
}, markup),
|
|
41
|
+
ALL_PLUGINS: []
|
|
42
|
+
}));
|
|
43
|
+
jest.mock('../ecr-toolbar', () => ({
|
|
44
|
+
__esModule: true,
|
|
45
|
+
default: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
|
|
46
|
+
"data-testid": "ecr-toolbar"
|
|
47
|
+
}, props))
|
|
48
|
+
}));
|
|
49
|
+
jest.mock('../alternateResponses', () => ({
|
|
50
|
+
__esModule: true,
|
|
51
|
+
default: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
|
|
52
|
+
"data-testid": "alternate-responses"
|
|
53
|
+
}, props))
|
|
54
|
+
}));
|
|
55
|
+
const theme = (0, _styles.createTheme)();
|
|
56
|
+
const model = {
|
|
57
|
+
markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
|
|
58
|
+
disabled: false,
|
|
59
|
+
choices: {
|
|
60
|
+
0: [{
|
|
61
|
+
label: 'cow',
|
|
62
|
+
value: '0'
|
|
63
|
+
}, {
|
|
64
|
+
label: 'cattle',
|
|
65
|
+
value: '1'
|
|
66
|
+
}, {
|
|
67
|
+
label: 'calf',
|
|
68
|
+
value: '2'
|
|
69
|
+
}],
|
|
70
|
+
1: [{
|
|
71
|
+
label: 'over',
|
|
72
|
+
value: '0'
|
|
73
|
+
}, {
|
|
74
|
+
label: 'past',
|
|
75
|
+
value: '1'
|
|
76
|
+
}, {
|
|
77
|
+
label: 'beyond',
|
|
78
|
+
value: '2'
|
|
79
|
+
}],
|
|
80
|
+
2: [{
|
|
81
|
+
label: 'moon',
|
|
82
|
+
value: '0'
|
|
83
|
+
}]
|
|
84
|
+
},
|
|
85
|
+
maxLengthPerChoice: [6, 6, 4],
|
|
86
|
+
prompt: 'Complete the sentence'
|
|
87
|
+
};
|
|
88
|
+
const prepareModel = (model = {}) => {
|
|
89
|
+
const joinedObj = {
|
|
90
|
+
..._defaults.default.model,
|
|
91
|
+
...model
|
|
92
|
+
};
|
|
93
|
+
const slateMarkup = joinedObj.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, joinedObj.choices);
|
|
94
|
+
const processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
|
|
95
|
+
return {
|
|
96
|
+
...joinedObj,
|
|
97
|
+
slateMarkup,
|
|
98
|
+
markup: processedMarkup
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
describe('Main', () => {
|
|
102
|
+
let onModelChanged = jest.fn();
|
|
103
|
+
let onConfigurationChanged = jest.fn();
|
|
104
|
+
beforeEach(() => {
|
|
105
|
+
jest.clearAllMocks();
|
|
106
|
+
});
|
|
107
|
+
const renderMain = (extras = {}) => {
|
|
108
|
+
const defaults = {
|
|
109
|
+
onModelChanged,
|
|
110
|
+
onConfigurationChanged,
|
|
111
|
+
classes: {},
|
|
112
|
+
model: prepareModel({
|
|
113
|
+
...model,
|
|
114
|
+
...extras
|
|
115
|
+
}),
|
|
116
|
+
configuration: _defaults.default.configuration
|
|
117
|
+
};
|
|
118
|
+
const props = {
|
|
119
|
+
...defaults
|
|
120
|
+
};
|
|
121
|
+
return (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_styles.ThemeProvider, {
|
|
122
|
+
theme: theme
|
|
123
|
+
}, /*#__PURE__*/_react2.default.createElement(_main.Main, props)));
|
|
124
|
+
};
|
|
125
|
+
describe('logic', () => {
|
|
126
|
+
describe('onModelChange', () => {
|
|
127
|
+
it('changes the model', () => {
|
|
128
|
+
const testInstance = new _main.Main({
|
|
129
|
+
onModelChanged,
|
|
130
|
+
onConfigurationChanged,
|
|
131
|
+
classes: {},
|
|
132
|
+
model: prepareModel(model),
|
|
133
|
+
configuration: _defaults.default.configuration
|
|
134
|
+
});
|
|
135
|
+
testInstance.onModelChange({
|
|
136
|
+
promptEnabled: false
|
|
137
|
+
});
|
|
138
|
+
expect(onModelChanged).toBeCalledWith({
|
|
139
|
+
...prepareModel(model),
|
|
140
|
+
promptEnabled: false
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('onPromptChanged', () => {
|
|
145
|
+
it('changes the prompt value', () => {
|
|
146
|
+
const testInstance = new _main.Main({
|
|
147
|
+
onModelChanged,
|
|
148
|
+
onConfigurationChanged,
|
|
149
|
+
classes: {},
|
|
150
|
+
model: prepareModel(model),
|
|
151
|
+
configuration: _defaults.default.configuration
|
|
152
|
+
});
|
|
153
|
+
testInstance.onPromptChanged('This is the new prompt');
|
|
154
|
+
expect(onModelChanged).toBeCalledWith({
|
|
155
|
+
...prepareModel(model),
|
|
156
|
+
prompt: 'This is the new prompt'
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('onRationaleChanged', () => {
|
|
161
|
+
it('changes the rationale value', () => {
|
|
162
|
+
const testInstance = new _main.Main({
|
|
163
|
+
onModelChanged,
|
|
164
|
+
onConfigurationChanged,
|
|
165
|
+
classes: {},
|
|
166
|
+
model: prepareModel(model),
|
|
167
|
+
configuration: _defaults.default.configuration
|
|
168
|
+
});
|
|
169
|
+
testInstance.onRationaleChanged('New Rationale');
|
|
170
|
+
expect(onModelChanged).toBeCalledWith({
|
|
171
|
+
...prepareModel(model),
|
|
172
|
+
rationale: 'New Rationale'
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
describe('onTeacherInstructionsChanged', () => {
|
|
177
|
+
it('changes the teacher instructions value', () => {
|
|
178
|
+
const testInstance = new _main.Main({
|
|
179
|
+
onModelChanged,
|
|
180
|
+
onConfigurationChanged,
|
|
181
|
+
classes: {},
|
|
182
|
+
model: prepareModel(model),
|
|
183
|
+
configuration: _defaults.default.configuration
|
|
184
|
+
});
|
|
185
|
+
testInstance.onTeacherInstructionsChanged('New Teacher Instructions');
|
|
186
|
+
expect(onModelChanged).toBeCalledWith({
|
|
187
|
+
...prepareModel(model),
|
|
188
|
+
teacherInstructions: 'New Teacher Instructions'
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe('onMarkupChanged', () => {
|
|
193
|
+
it('changes slate markup value', () => {
|
|
194
|
+
const testInstance = new _main.Main({
|
|
195
|
+
onModelChanged,
|
|
196
|
+
onConfigurationChanged,
|
|
197
|
+
classes: {},
|
|
198
|
+
model: prepareModel(model),
|
|
199
|
+
configuration: _defaults.default.configuration
|
|
200
|
+
});
|
|
201
|
+
const slateMarkup = '<p>The <span data-type=\\"explicit_constructed_response\\" data-index=\\"0\\" data-value=\\"cow\\"></span> jumped</p>';
|
|
202
|
+
testInstance.onMarkupChanged(slateMarkup);
|
|
203
|
+
expect(onModelChanged).toBeCalledWith({
|
|
204
|
+
...prepareModel(model),
|
|
205
|
+
slateMarkup
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('onResponsesChanged', () => {
|
|
210
|
+
it('changes choices and slateMarkup as well', () => {
|
|
211
|
+
const testInstance = new _main.Main({
|
|
212
|
+
onModelChanged,
|
|
213
|
+
onConfigurationChanged,
|
|
214
|
+
classes: {},
|
|
215
|
+
model: prepareModel(model),
|
|
216
|
+
configuration: _defaults.default.configuration
|
|
217
|
+
});
|
|
218
|
+
const newChoices = {
|
|
219
|
+
0: [{
|
|
220
|
+
label: 'cow',
|
|
221
|
+
value: '0'
|
|
222
|
+
}, {
|
|
223
|
+
label: 'cattle',
|
|
224
|
+
value: '1'
|
|
225
|
+
}, {
|
|
226
|
+
label: 'calf',
|
|
227
|
+
value: '2'
|
|
228
|
+
}],
|
|
229
|
+
1: [{
|
|
230
|
+
label: 'over',
|
|
231
|
+
value: '0'
|
|
232
|
+
}, {
|
|
233
|
+
label: 'past',
|
|
234
|
+
value: '1'
|
|
235
|
+
}, {
|
|
236
|
+
label: 'beyond',
|
|
237
|
+
value: '2'
|
|
238
|
+
}],
|
|
239
|
+
2: [{
|
|
240
|
+
label: 'sun',
|
|
241
|
+
value: '0'
|
|
242
|
+
}]
|
|
243
|
+
};
|
|
244
|
+
testInstance.onResponsesChanged(newChoices);
|
|
245
|
+
expect(onModelChanged).toBeCalledWith({
|
|
246
|
+
...prepareModel(model),
|
|
247
|
+
choices: newChoices
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
describe('onChangeResponse', () => {
|
|
252
|
+
it('with new area', () => {
|
|
253
|
+
const testInstance = new _main.Main({
|
|
254
|
+
onModelChanged,
|
|
255
|
+
onConfigurationChanged,
|
|
256
|
+
classes: {},
|
|
257
|
+
model: prepareModel(model),
|
|
258
|
+
configuration: _defaults.default.configuration
|
|
259
|
+
});
|
|
260
|
+
testInstance.onChangeResponse(3);
|
|
261
|
+
expect(onModelChanged).toBeCalledWith(expect.objectContaining({
|
|
262
|
+
choices: expect.objectContaining({
|
|
263
|
+
...model.choices,
|
|
264
|
+
3: [{
|
|
265
|
+
label: '',
|
|
266
|
+
value: '0'
|
|
267
|
+
}]
|
|
268
|
+
}),
|
|
269
|
+
maxLengthPerChoice: expect.arrayContaining([6, 6, 4, 2])
|
|
270
|
+
}));
|
|
271
|
+
});
|
|
272
|
+
it('with existing area', () => {
|
|
273
|
+
const testInstance = new _main.Main({
|
|
274
|
+
onModelChanged,
|
|
275
|
+
onConfigurationChanged,
|
|
276
|
+
classes: {},
|
|
277
|
+
model: prepareModel(model),
|
|
278
|
+
configuration: _defaults.default.configuration
|
|
279
|
+
});
|
|
280
|
+
testInstance.onChangeResponse(1, 'under');
|
|
281
|
+
expect(onModelChanged).toBeCalledWith(expect.objectContaining({
|
|
282
|
+
choices: expect.objectContaining({
|
|
283
|
+
1: [{
|
|
284
|
+
label: 'under',
|
|
285
|
+
value: '0'
|
|
286
|
+
}, {
|
|
287
|
+
label: 'past',
|
|
288
|
+
value: '1'
|
|
289
|
+
}, {
|
|
290
|
+
label: 'beyond',
|
|
291
|
+
value: '2'
|
|
292
|
+
}]
|
|
293
|
+
})
|
|
294
|
+
}));
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
describe('onChange', () => {
|
|
298
|
+
// Note: The following tests for onChange test implementation details (setState callbacks)
|
|
299
|
+
// that are difficult to test with RTL without full component rendering.
|
|
300
|
+
// These should be tested through user interactions in integration tests instead.
|
|
301
|
+
|
|
302
|
+
it.skip('slateMarkup and choices are updated with new area without data-value', () => {
|
|
303
|
+
jest.useFakeTimers();
|
|
304
|
+
const testInstance = new _main.Main({
|
|
305
|
+
onModelChanged,
|
|
306
|
+
onConfigurationChanged,
|
|
307
|
+
classes: {},
|
|
308
|
+
model: prepareModel({
|
|
309
|
+
choices: {
|
|
310
|
+
0: [{
|
|
311
|
+
label: 'cow',
|
|
312
|
+
value: '0'
|
|
313
|
+
}, {
|
|
314
|
+
label: 'cattle',
|
|
315
|
+
value: '1'
|
|
316
|
+
}, {
|
|
317
|
+
label: 'calf',
|
|
318
|
+
value: '2'
|
|
319
|
+
}],
|
|
320
|
+
1: [{
|
|
321
|
+
label: 'over',
|
|
322
|
+
value: '0'
|
|
323
|
+
}, {
|
|
324
|
+
label: 'past',
|
|
325
|
+
value: '1'
|
|
326
|
+
}, {
|
|
327
|
+
label: 'beyond',
|
|
328
|
+
value: '2'
|
|
329
|
+
}],
|
|
330
|
+
2: [{
|
|
331
|
+
label: 'moon',
|
|
332
|
+
value: '0'
|
|
333
|
+
}]
|
|
334
|
+
},
|
|
335
|
+
maxLengthPerChoice: [6, 6, 4, 2]
|
|
336
|
+
}),
|
|
337
|
+
configuration: _defaults.default.configuration
|
|
338
|
+
});
|
|
339
|
+
const newMarkup = `<p>The <span data-type="explicit_constructed_response" data-index="0" data-value="cow"></span> jumped <span data-type="explicit_constructed_response" data-index="1" data-value="over"></span> the <span data-type="explicit_constructed_response" data-index="2" data-value="moon"></span>and <span data-type="explicit_constructed_response" data-index="3"></span></p>`;
|
|
340
|
+
testInstance.onChange(newMarkup);
|
|
341
|
+
|
|
342
|
+
// Wait for setState callback
|
|
343
|
+
jest.runAllTimers();
|
|
344
|
+
expect(onModelChanged).toBeCalledWith(expect.objectContaining({
|
|
345
|
+
slateMarkup: newMarkup,
|
|
346
|
+
choices: expect.objectContaining({
|
|
347
|
+
3: [{
|
|
348
|
+
label: '',
|
|
349
|
+
value: '0'
|
|
350
|
+
}]
|
|
351
|
+
})
|
|
352
|
+
}));
|
|
353
|
+
jest.useRealTimers();
|
|
354
|
+
});
|
|
355
|
+
it.skip('slateMarkup and choices are updated with new area with data-value', () => {
|
|
356
|
+
jest.useFakeTimers();
|
|
357
|
+
const testInstance = new _main.Main({
|
|
358
|
+
onModelChanged,
|
|
359
|
+
onConfigurationChanged,
|
|
360
|
+
classes: {},
|
|
361
|
+
model: prepareModel({
|
|
362
|
+
choices: {
|
|
363
|
+
0: [{
|
|
364
|
+
label: 'cow',
|
|
365
|
+
value: '0'
|
|
366
|
+
}, {
|
|
367
|
+
label: 'cattle',
|
|
368
|
+
value: '1'
|
|
369
|
+
}, {
|
|
370
|
+
label: 'calf',
|
|
371
|
+
value: '2'
|
|
372
|
+
}],
|
|
373
|
+
1: [{
|
|
374
|
+
label: 'over',
|
|
375
|
+
value: '0'
|
|
376
|
+
}, {
|
|
377
|
+
label: 'past',
|
|
378
|
+
value: '1'
|
|
379
|
+
}, {
|
|
380
|
+
label: 'beyond',
|
|
381
|
+
value: '2'
|
|
382
|
+
}],
|
|
383
|
+
2: [{
|
|
384
|
+
label: 'moon',
|
|
385
|
+
value: '0'
|
|
386
|
+
}]
|
|
387
|
+
},
|
|
388
|
+
maxLengthPerChoice: [6, 6, 4, 2]
|
|
389
|
+
}),
|
|
390
|
+
configuration: _defaults.default.configuration
|
|
391
|
+
});
|
|
392
|
+
const newMarkup = `<p>The <span data-type="explicit_constructed_response" data-index="0" data-value="cow"></span> jumped <span data-type="explicit_constructed_response" data-index="1" data-value="over"></span> the <span data-type="explicit_constructed_response" data-index="2" data-value="moon"></span>and <span data-type="explicit_constructed_response" data-index="3" data-value="test"></span></p>`;
|
|
393
|
+
testInstance.onChange(newMarkup);
|
|
394
|
+
|
|
395
|
+
// Wait for setState callback
|
|
396
|
+
jest.runAllTimers();
|
|
397
|
+
expect(onModelChanged).toBeCalledWith(expect.objectContaining({
|
|
398
|
+
slateMarkup: newMarkup,
|
|
399
|
+
choices: expect.objectContaining({
|
|
400
|
+
3: [{
|
|
401
|
+
label: 'test',
|
|
402
|
+
value: '0'
|
|
403
|
+
}]
|
|
404
|
+
})
|
|
405
|
+
}));
|
|
406
|
+
jest.useRealTimers();
|
|
407
|
+
});
|
|
408
|
+
it.skip('slateMarkup and choices are updated with changed data-value', () => {
|
|
409
|
+
jest.useFakeTimers();
|
|
410
|
+
const testInstance = new _main.Main({
|
|
411
|
+
onModelChanged,
|
|
412
|
+
onConfigurationChanged,
|
|
413
|
+
classes: {},
|
|
414
|
+
model: prepareModel({
|
|
415
|
+
choices: {
|
|
416
|
+
0: [{
|
|
417
|
+
label: 'cow',
|
|
418
|
+
value: '0'
|
|
419
|
+
}, {
|
|
420
|
+
label: 'cattle',
|
|
421
|
+
value: '1'
|
|
422
|
+
}, {
|
|
423
|
+
label: 'calf',
|
|
424
|
+
value: '2'
|
|
425
|
+
}],
|
|
426
|
+
1: [{
|
|
427
|
+
label: 'over',
|
|
428
|
+
value: '0'
|
|
429
|
+
}, {
|
|
430
|
+
label: 'past',
|
|
431
|
+
value: '1'
|
|
432
|
+
}, {
|
|
433
|
+
label: 'beyond',
|
|
434
|
+
value: '2'
|
|
435
|
+
}],
|
|
436
|
+
2: [{
|
|
437
|
+
label: 'moon',
|
|
438
|
+
value: '0'
|
|
439
|
+
}]
|
|
440
|
+
},
|
|
441
|
+
maxLengthPerChoice: [6, 6, 4, 2]
|
|
442
|
+
}),
|
|
443
|
+
configuration: _defaults.default.configuration
|
|
444
|
+
});
|
|
445
|
+
const newMarkup = `<p>The <span data-type="explicit_constructed_response" data-index="0" data-value="rabbit"></span> jumped <span data-type="explicit_constructed_response" data-index="1" data-value="over"></span> the <span data-type="explicit_constructed_response" data-index="2" data-value="moon"></span>and <span data-type="explicit_constructed_response" data-index="3" data-value="test"></span></p>`;
|
|
446
|
+
testInstance.onChange(newMarkup);
|
|
447
|
+
|
|
448
|
+
// Wait for setState callback
|
|
449
|
+
jest.runAllTimers();
|
|
450
|
+
expect(onModelChanged).toBeCalledWith(expect.objectContaining({
|
|
451
|
+
slateMarkup: newMarkup,
|
|
452
|
+
choices: expect.objectContaining({
|
|
453
|
+
0: [{
|
|
454
|
+
label: 'rabbit',
|
|
455
|
+
value: '0'
|
|
456
|
+
}, {
|
|
457
|
+
label: 'cattle',
|
|
458
|
+
value: '1'
|
|
459
|
+
}, {
|
|
460
|
+
label: 'calf',
|
|
461
|
+
value: '2'
|
|
462
|
+
}]
|
|
463
|
+
})
|
|
464
|
+
}));
|
|
465
|
+
jest.useRealTimers();
|
|
466
|
+
});
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVzIiwiX21haW4iLCJfZGVmYXVsdHMiLCJfbWFya3VwVXRpbHMiLCJqZXN0IiwibW9jayIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsImZuIiwic2V0dGluZ3MiLCJQYW5lbCIsInByb3BzIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ0b2dnbGUiLCJyYWRpbyIsImRyb3Bkb3duIiwibGF5b3V0IiwiQ29uZmlnTGF5b3V0IiwiY2hpbGRyZW4iLCJJbnB1dENvbnRhaW5lciIsIl9fZXNNb2R1bGUiLCJtYXJrdXAiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJBTExfUExVR0lOUyIsInRoZW1lIiwiY3JlYXRlVGhlbWUiLCJtb2RlbCIsImRpc2FibGVkIiwiY2hvaWNlcyIsImxhYmVsIiwidmFsdWUiLCJtYXhMZW5ndGhQZXJDaG9pY2UiLCJwcm9tcHQiLCJwcmVwYXJlTW9kZWwiLCJqb2luZWRPYmoiLCJzZW5zaWJsZURlZmF1bHRzIiwic2xhdGVNYXJrdXAiLCJjcmVhdGVTbGF0ZU1hcmt1cCIsInByb2Nlc3NlZE1hcmt1cCIsInByb2Nlc3NNYXJrdXAiLCJkZXNjcmliZSIsIm9uTW9kZWxDaGFuZ2VkIiwib25Db25maWd1cmF0aW9uQ2hhbmdlZCIsImJlZm9yZUVhY2giLCJjbGVhckFsbE1vY2tzIiwicmVuZGVyTWFpbiIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNvbmZpZ3VyYXRpb24iLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiTWFpbiIsIml0IiwidGVzdEluc3RhbmNlIiwib25Nb2RlbENoYW5nZSIsInByb21wdEVuYWJsZWQiLCJleHBlY3QiLCJ0b0JlQ2FsbGVkV2l0aCIsIm9uUHJvbXB0Q2hhbmdlZCIsIm9uUmF0aW9uYWxlQ2hhbmdlZCIsInJhdGlvbmFsZSIsIm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwib25NYXJrdXBDaGFuZ2VkIiwibmV3Q2hvaWNlcyIsIm9uUmVzcG9uc2VzQ2hhbmdlZCIsIm9uQ2hhbmdlUmVzcG9uc2UiLCJvYmplY3RDb250YWluaW5nIiwiYXJyYXlDb250YWluaW5nIiwic2tpcCIsInVzZUZha2VUaW1lcnMiLCJuZXdNYXJrdXAiLCJydW5BbGxUaW1lcnMiLCJ1c2VSZWFsVGltZXJzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9tYWluLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIsIGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5pbXBvcnQgeyBNYWluIH0gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBjcmVhdGVTbGF0ZU1hcmt1cCwgcHJvY2Vzc01hcmt1cCB9IGZyb20gJy4uL21hcmt1cFV0aWxzJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwic2V0dGluZ3MtcGFuZWxcIiB7Li4ucHJvcHN9IC8+LFxuICAgIHRvZ2dsZTogamVzdC5mbigpLFxuICAgIHJhZGlvOiBqZXN0LmZuKCksXG4gICAgZHJvcGRvd246IGplc3QuZm4oKSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgQ29uZmlnTGF5b3V0OiAocHJvcHMpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJjb25maWctbGF5b3V0XCI+e3Byb3BzLmNoaWxkcmVufTwvZGl2PixcbiAgfSxcbiAgSW5wdXRDb250YWluZXI6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImlucHV0LWNvbnRhaW5lclwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHsgbWFya3VwLCBvbkNoYW5nZSB9KSA9PiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImVkaXRhYmxlLWh0bWxcIiBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSAmJiBvbkNoYW5nZSgnbmV3IHZhbHVlJyl9PlxuICAgICAge21hcmt1cH1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgQUxMX1BMVUdJTlM6IFtdLFxufSkpO1xuXG5qZXN0Lm1vY2soJy4uL2Vjci10b29sYmFyJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZWNyLXRvb2xiYXJcIiB7Li4ucHJvcHN9IC8+LFxufSkpO1xuXG5qZXN0Lm1vY2soJy4uL2FsdGVybmF0ZVJlc3BvbnNlcycsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImFsdGVybmF0ZS1yZXNwb25zZXNcIiB7Li4ucHJvcHN9IC8+LFxufSkpO1xuXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmNvbnN0IG1vZGVsID0ge1xuICBtYXJrdXA6ICc8cD5UaGUge3swfX0ganVtcGVkIHt7MX19IHRoZSB7ezJ9fTwvcD4nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGNob2ljZXM6IHtcbiAgICAwOiBbXG4gICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgIF0sXG4gICAgMTogW1xuICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgXSxcbiAgICAyOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnIH1dLFxuICB9LFxuICBtYXhMZW5ndGhQZXJDaG9pY2U6IFs2LCA2LCA0XSxcbiAgcHJvbXB0OiAnQ29tcGxldGUgdGhlIHNlbnRlbmNlJyxcbn07XG5cbmNvbnN0IHByZXBhcmVNb2RlbCA9IChtb2RlbCA9IHt9KSA9PiB7XG4gIGNvbnN0IGpvaW5lZE9iaiA9IHtcbiAgICAuLi5zZW5zaWJsZURlZmF1bHRzLm1vZGVsLFxuICAgIC4uLm1vZGVsLFxuICB9O1xuICBjb25zdCBzbGF0ZU1hcmt1cCA9IGpvaW5lZE9iai5zbGF0ZU1hcmt1cCB8fCBjcmVhdGVTbGF0ZU1hcmt1cChqb2luZWRPYmoubWFya3VwLCBqb2luZWRPYmouY2hvaWNlcyk7XG4gIGNvbnN0IHByb2Nlc3NlZE1hcmt1cCA9IHByb2Nlc3NNYXJrdXAoc2xhdGVNYXJrdXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uam9pbmVkT2JqLFxuICAgIHNsYXRlTWFya3VwLFxuICAgIG1hcmt1cDogcHJvY2Vzc2VkTWFya3VwLFxuICB9O1xufTtcblxuZGVzY3JpYmUoJ01haW4nLCAoKSA9PiB7XG4gIGxldCBvbk1vZGVsQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgbGV0IG9uQ29uZmlndXJhdGlvbkNoYW5nZWQgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlck1haW4gPSAoZXh0cmFzID0ge30pID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAuLi5leHRyYXMsXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cyB9O1xuXG4gICAgcmV0dXJuIHJlbmRlcihcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgIDxNYWluIHsuLi5wcm9wc30gLz5cbiAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICApO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnb25Nb2RlbENoYW5nZScsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIHRoZSBtb2RlbCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IE1haW4oe1xuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsXG4gICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25Nb2RlbENoYW5nZSh7IHByb21wdEVuYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIC4uLnByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgcHJvbXB0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Qcm9tcHRDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgaXQoJ2NoYW5nZXMgdGhlIHByb21wdCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IE1haW4oe1xuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsXG4gICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25Qcm9tcHRDaGFuZ2VkKCdUaGlzIGlzIHRoZSBuZXcgcHJvbXB0Jyk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgLi4ucHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBwcm9tcHQ6ICdUaGlzIGlzIHRoZSBuZXcgcHJvbXB0JyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvblJhdGlvbmFsZUNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnY2hhbmdlcyB0aGUgcmF0aW9uYWxlIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vblJhdGlvbmFsZUNoYW5nZWQoJ05ldyBSYXRpb25hbGUnKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ05ldyBSYXRpb25hbGUnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnY2hhbmdlcyB0aGUgdGVhY2hlciBpbnN0cnVjdGlvbnMgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQoJ05ldyBUZWFjaGVyIEluc3RydWN0aW9ucycpO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIC4uLnByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ05ldyBUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25NYXJrdXBDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgaXQoJ2NoYW5nZXMgc2xhdGUgbWFya3VwIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNsYXRlTWFya3VwID1cbiAgICAgICAgICAnPHA+VGhlIDxzcGFuIGRhdGEtdHlwZT1cXFxcXCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVxcXFxcIiBkYXRhLWluZGV4PVxcXFxcIjBcXFxcXCIgZGF0YS12YWx1ZT1cXFxcXCJjb3dcXFxcXCI+PC9zcGFuPiBqdW1wZWQ8L3A+JztcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25NYXJrdXBDaGFuZ2VkKHNsYXRlTWFya3VwKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHNsYXRlTWFya3VwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uUmVzcG9uc2VzQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIGNob2ljZXMgYW5kIHNsYXRlTWFya3VwIGFzIHdlbGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IHtcbiAgICAgICAgICAwOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgMTogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyOiBbeyBsYWJlbDogJ3N1bicsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLm9uUmVzcG9uc2VzQ2hhbmdlZChuZXdDaG9pY2VzKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNob2ljZXM6IG5ld0Nob2ljZXMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaGFuZ2VSZXNwb25zZScsICgpID0+IHtcbiAgICAgIGl0KCd3aXRoIG5ldyBhcmVhJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNoYW5nZVJlc3BvbnNlKDMpO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICAuLi5tb2RlbC5jaG9pY2VzLFxuICAgICAgICAgICAgICAzOiBbeyBsYWJlbDogJycsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZTogZXhwZWN0LmFycmF5Q29udGFpbmluZyhbNiwgNiwgNCwgMl0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd3aXRoIGV4aXN0aW5nIGFyZWEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLm9uQ2hhbmdlUmVzcG9uc2UoMSwgJ3VuZGVyJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBjaG9pY2VzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAndW5kZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ3Bhc3QnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIHRlc3RzIGZvciBvbkNoYW5nZSB0ZXN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgKHNldFN0YXRlIGNhbGxiYWNrcylcbiAgICAgIC8vIHRoYXQgYXJlIGRpZmZpY3VsdCB0byB0ZXN0IHdpdGggUlRMIHdpdGhvdXQgZnVsbCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHRlc3RlZCB0aHJvdWdoIHVzZXIgaW50ZXJhY3Rpb25zIGluIGludGVncmF0aW9uIHRlc3RzIGluc3RlYWQuXG5cbiAgICAgIGl0LnNraXAoJ3NsYXRlTWFya3VwIGFuZCBjaG9pY2VzIGFyZSB1cGRhdGVkIHdpdGggbmV3IGFyZWEgd2l0aG91dCBkYXRhLXZhbHVlJywgKCkgPT4ge1xuICAgICAgICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcblxuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKHtcbiAgICAgICAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgICAgICAgMDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjb3cnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMTogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdvdmVyJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdwYXN0JywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDI6IFt7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbNiwgNiwgNCwgMl0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBuZXdNYXJrdXAgPSBgPHA+VGhlIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLXZhbHVlPVwiY293XCI+PC9zcGFuPiBqdW1wZWQgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiMVwiIGRhdGEtdmFsdWU9XCJvdmVyXCI+PC9zcGFuPiB0aGUgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiMlwiIGRhdGEtdmFsdWU9XCJtb29uXCI+PC9zcGFuPmFuZCA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIzXCI+PC9zcGFuPjwvcD5gO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNoYW5nZShuZXdNYXJrdXApO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIHNldFN0YXRlIGNhbGxiYWNrXG4gICAgICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBzbGF0ZU1hcmt1cDogbmV3TWFya3VwLFxuICAgICAgICAgICAgY2hvaWNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICAzOiBbeyBsYWJlbDogJycsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdC5za2lwKCdzbGF0ZU1hcmt1cCBhbmQgY2hvaWNlcyBhcmUgdXBkYXRlZCB3aXRoIG5ldyBhcmVhIHdpdGggZGF0YS12YWx1ZScsICgpID0+IHtcbiAgICAgICAgamVzdC51c2VGYWtlVGltZXJzKCk7XG5cbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IE1haW4oe1xuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsXG4gICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgICAgICBjaG9pY2VzOiB7XG4gICAgICAgICAgICAgIDA6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYXR0bGUnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbGYnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnb3ZlcicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnYmV5b25kJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAyOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZTogWzYsIDYsIDQsIDJdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3TWFya3VwID0gYDxwPlRoZSA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIwXCIgZGF0YS12YWx1ZT1cImNvd1wiPjwvc3Bhbj4ganVtcGVkIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjFcIiBkYXRhLXZhbHVlPVwib3ZlclwiPjwvc3Bhbj4gdGhlIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjJcIiBkYXRhLXZhbHVlPVwibW9vblwiPjwvc3Bhbj5hbmQgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiM1wiIGRhdGEtdmFsdWU9XCJ0ZXN0XCI+PC9zcGFuPjwvcD5gO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNoYW5nZShuZXdNYXJrdXApO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIHNldFN0YXRlIGNhbGxiYWNrXG4gICAgICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBzbGF0ZU1hcmt1cDogbmV3TWFya3VwLFxuICAgICAgICAgICAgY2hvaWNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICAzOiBbeyBsYWJlbDogJ3Rlc3QnLCB2YWx1ZTogJzAnIH1dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgamVzdC51c2VSZWFsVGltZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQuc2tpcCgnc2xhdGVNYXJrdXAgYW5kIGNob2ljZXMgYXJlIHVwZGF0ZWQgd2l0aCBjaGFuZ2VkIGRhdGEtdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGplc3QudXNlRmFrZVRpbWVycygpO1xuXG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwoe1xuICAgICAgICAgICAgY2hvaWNlczoge1xuICAgICAgICAgICAgICAwOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NvdycsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2F0dGxlJywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ3Bhc3QnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMjogW3sgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcwJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFs2LCA2LCA0LCAyXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5ld01hcmt1cCA9IGA8cD5UaGUgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiMFwiIGRhdGEtdmFsdWU9XCJyYWJiaXRcIj48L3NwYW4+IGp1bXBlZCA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIxXCIgZGF0YS12YWx1ZT1cIm92ZXJcIj48L3NwYW4+IHRoZSA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIyXCIgZGF0YS12YWx1ZT1cIm1vb25cIj48L3NwYW4+YW5kIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjNcIiBkYXRhLXZhbHVlPVwidGVzdFwiPjwvc3Bhbj48L3A+YDtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25DaGFuZ2UobmV3TWFya3VwKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBzZXRTdGF0ZSBjYWxsYmFja1xuICAgICAgICBqZXN0LnJ1bkFsbFRpbWVycygpO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgc2xhdGVNYXJrdXA6IG5ld01hcmt1cCxcbiAgICAgICAgICAgIGNob2ljZXM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgICAgMDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdyYWJiaXQnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGplc3QudXNlUmVhbFRpbWVycygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFFQU8sSUFBSSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUs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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _markupUtils = require("../markupUtils");
|
|
4
|
+
describe('markupUtils', () => {
|
|
5
|
+
describe('removeUnwantedCharacters', () => {
|
|
6
|
+
it('should remove \\t and \\n characters', () => {
|
|
7
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\t\nbar</div>')).toEqual('<div>foobar</div>');
|
|
8
|
+
});
|
|
9
|
+
it('should remove \\t and \\n characters', () => {
|
|
10
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\\t\\nbar</div>')).toEqual('<div>foobar</div>');
|
|
11
|
+
});
|
|
12
|
+
it('should replace \\" with "', () => {
|
|
13
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>"foo bar"</div>')).toEqual('<div>"foo bar"</div>');
|
|
14
|
+
});
|
|
15
|
+
it('should replace \\/ with /', () => {
|
|
16
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo/bar</div>')).toEqual('<div>foo/bar</div>');
|
|
17
|
+
});
|
|
18
|
+
it('should not remove \\t character which has latex like \\times', () => {
|
|
19
|
+
expect((0, _markupUtils.removeUnwantedCharacters)('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>')).toEqual('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('processMarkup', () => {
|
|
23
|
+
it('should process slate markup and replace {{number}} with a ecr element dom', () => {
|
|
24
|
+
const markup = ['<div>', '<span data-type="explicit_constructed_response"></span>', '<span data-type="explicit_constructed_response"></span>', '</div>'].join('');
|
|
25
|
+
const processed = (0, _markupUtils.processMarkup)(markup);
|
|
26
|
+
expect(processed).toEqual(['<div>', '{{0}}', '{{1}}', '</div>'].join(''));
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('createSlateMarkup', () => {
|
|
30
|
+
it('should handle the case when markup is empty', () => {
|
|
31
|
+
expect((0, _markupUtils.createSlateMarkup)('', {})).toEqual('');
|
|
32
|
+
});
|
|
33
|
+
it('should replace {{number}} with the appropriate element', () => {
|
|
34
|
+
const markup = ['<div>', '{{0}}', '</div>'].join('');
|
|
35
|
+
const choices = {
|
|
36
|
+
0: [{
|
|
37
|
+
label: 'foobar'
|
|
38
|
+
}]
|
|
39
|
+
};
|
|
40
|
+
const slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices);
|
|
41
|
+
expect(slateMarkup).toEqual(['<div>', '<span data-type="explicit_constructed_response" data-index="0" data-value="foobar"></span>', '</div>'].join(''));
|
|
42
|
+
});
|
|
43
|
+
it('should replace {{number}} with the appropriate element having the value escaped', () => {
|
|
44
|
+
const markup = ['<div>', '{{0}}', '</div>'].join('');
|
|
45
|
+
const choices = {
|
|
46
|
+
0: [{
|
|
47
|
+
label: 'foo&bar'
|
|
48
|
+
}]
|
|
49
|
+
};
|
|
50
|
+
const slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices);
|
|
51
|
+
expect(slateMarkup).toEqual(['<div>', '<span data-type="explicit_constructed_response" data-index="0" data-value="foo&bar"></span>', '</div>'].join(''));
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWFya3VwVXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInJlbW92ZVVud2FudGVkQ2hhcmFjdGVycyIsInRvRXF1YWwiLCJtYXJrdXAiLCJqb2luIiwicHJvY2Vzc2VkIiwicHJvY2Vzc01hcmt1cCIsImNyZWF0ZVNsYXRlTWFya3VwIiwiY2hvaWNlcyIsImxhYmVsIiwic2xhdGVNYXJrdXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL21hcmt1cFV0aWxzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVNsYXRlTWFya3VwLCBwcm9jZXNzTWFya3VwLCByZW1vdmVVbndhbnRlZENoYXJhY3RlcnMgfSBmcm9tICcuLi9tYXJrdXBVdGlscyc7XG5cbmRlc2NyaWJlKCdtYXJrdXBVdGlscycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3JlbW92ZVVud2FudGVkQ2hhcmFjdGVycycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBcXFxcdCBhbmQgXFxcXG4gY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vXFx0XFxuYmFyPC9kaXY+JykpLnRvRXF1YWwoJzxkaXY+Zm9vYmFyPC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBcXFxcdCBhbmQgXFxcXG4gY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vXFxcXHRcXFxcbmJhcjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PmZvb2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIFxcXFxcIiB3aXRoIFwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj5cImZvbyBiYXJcIjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PlwiZm9vIGJhclwiPC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2UgXFxcXC8gd2l0aCAvJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj5mb28vYmFyPC9kaXY+JykpLnRvRXF1YWwoJzxkaXY+Zm9vL2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcmVtb3ZlIFxcXFx0IGNoYXJhY3RlciB3aGljaCBoYXMgbGF0ZXggbGlrZSBcXFxcdGltZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj48c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9XCIzXFxcXHRpbWVzM1xcXFxkaXYyXCI+M1xcXFx0aW1lczNcXFxcZGl2Mjwvc3Bhbj48L2Rpdj4nKSxcbiAgICAgICkudG9FcXVhbCgnPGRpdj48c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9XCIzXFxcXHRpbWVzM1xcXFxkaXYyXCI+M1xcXFx0aW1lczNcXFxcZGl2Mjwvc3Bhbj48L2Rpdj4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Byb2Nlc3NNYXJrdXAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcm9jZXNzIHNsYXRlIG1hcmt1cCBhbmQgcmVwbGFjZSB7e251bWJlcn19IHdpdGggYSBlY3IgZWxlbWVudCBkb20nLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbXG4gICAgICAgICc8ZGl2PicsXG4gICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiPjwvc3Bhbj4nLFxuICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIj48L3NwYW4+JyxcbiAgICAgICAgJzwvZGl2PicsXG4gICAgICBdLmpvaW4oJycpO1xuICAgICAgY29uc3QgcHJvY2Vzc2VkID0gcHJvY2Vzc01hcmt1cChtYXJrdXApO1xuXG4gICAgICBleHBlY3QocHJvY2Vzc2VkKS50b0VxdWFsKFsnPGRpdj4nLCAne3swfX0nLCAne3sxfX0nLCAnPC9kaXY+J10uam9pbignJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlU2xhdGVNYXJrdXAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBtYXJrdXAgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY3JlYXRlU2xhdGVNYXJrdXAoJycsIHt9KSkudG9FcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2Uge3tudW1iZXJ9fSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlbGVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3VwID0gWyc8ZGl2PicsICd7ezB9fScsICc8L2Rpdj4nXS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSB7XG4gICAgICAgIDA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogJ2Zvb2JhcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzbGF0ZU1hcmt1cCA9IGNyZWF0ZVNsYXRlTWFya3VwKG1hcmt1cCwgY2hvaWNlcyk7XG5cbiAgICAgIGV4cGVjdChzbGF0ZU1hcmt1cCkudG9FcXVhbChcbiAgICAgICAgW1xuICAgICAgICAgICc8ZGl2PicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLXZhbHVlPVwiZm9vYmFyXCI+PC9zcGFuPicsXG4gICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgIF0uam9pbignJyksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIHt7bnVtYmVyfX0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgZWxlbWVudCBoYXZpbmcgdGhlIHZhbHVlIGVzY2FwZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbJzxkaXY+JywgJ3t7MH19JywgJzwvZGl2PiddLmpvaW4oJycpO1xuICAgICAgY29uc3QgY2hvaWNlcyA9IHtcbiAgICAgICAgMDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnZm9vJmJhcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzbGF0ZU1hcmt1cCA9IGNyZWF0ZVNsYXRlTWFya3VwKG1hcmt1cCwgY2hvaWNlcyk7XG5cbiAgICAgIGV4cGVjdChzbGF0ZU1hcmt1cCkudG9FcXVhbChcbiAgICAgICAgW1xuICAgICAgICAgICc8ZGl2PicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLXZhbHVlPVwiZm9vJmFtcDtiYXJcIj48L3NwYW4+JyxcbiAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgXS5qb2luKCcnKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsTUFBTTtFQUM1QkEsUUFBUSxDQUFDLDBCQUEwQixFQUFFLE1BQU07SUFDekNDLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxNQUFNO01BQy9DQyxNQUFNLENBQUMsSUFBQUMscUNBQXdCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7SUFDeEYsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxNQUFNO01BQy9DQyxNQUFNLENBQUMsSUFBQUMscUNBQXdC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
|