@pie-element/drag-in-the-blank 10.1.8 → 10.1.9
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 +4 -0
- package/configure/CHANGELOG.md +4 -0
- package/configure/lib/__tests__/choice.test.js +114 -0
- package/configure/lib/__tests__/choices.test.js +157 -0
- package/configure/lib/__tests__/main.test.js +167 -0
- package/configure/lib/__tests__/markupUtils.test.js +105 -0
- package/configure/package.json +1 -1
- package/controller/CHANGELOG.md +4 -0
- package/controller/lib/__tests__/index.test.js +775 -0
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +118 -0
- package/lib/__tests__/main.test.js +139 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@10.1.7...@pie-element/drag-in-the-blank@10.1.9) (2026-08-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
9
|
+
|
|
6
10
|
## [10.1.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@10.1.7...@pie-element/drag-in-the-blank@10.1.8) (2026-07-31)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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
|
+
## [9.1.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@9.1.7...@pie-element/drag-in-the-blank-configure@9.1.9) (2026-08-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
9
|
+
|
|
6
10
|
## [9.1.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@9.1.7...@pie-element/drag-in-the-blank-configure@9.1.8) (2026-07-31)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _styles = require("@mui/material/styles");
|
|
7
|
+
var _core = require("@dnd-kit/core");
|
|
8
|
+
var _choice = require("../choice");
|
|
9
|
+
// Mock @dnd-kit/core
|
|
10
|
+
jest.mock('@dnd-kit/core', () => ({
|
|
11
|
+
DndContext: ({
|
|
12
|
+
children
|
|
13
|
+
}) => /*#__PURE__*/_react.default.createElement("div", null, children),
|
|
14
|
+
useDraggable: jest.fn(() => ({
|
|
15
|
+
attributes: {},
|
|
16
|
+
listeners: {},
|
|
17
|
+
setNodeRef: jest.fn(),
|
|
18
|
+
isDragging: false
|
|
19
|
+
}))
|
|
20
|
+
}));
|
|
21
|
+
const theme = (0, _styles.createTheme)();
|
|
22
|
+
describe('Choice', () => {
|
|
23
|
+
let onClick;
|
|
24
|
+
let onRemoveChoice;
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
onClick = jest.fn();
|
|
27
|
+
onRemoveChoice = jest.fn();
|
|
28
|
+
});
|
|
29
|
+
const renderChoice = (extras = {}) => {
|
|
30
|
+
const props = {
|
|
31
|
+
key: '0',
|
|
32
|
+
choice: {
|
|
33
|
+
value: '<div>6</div>',
|
|
34
|
+
id: '0'
|
|
35
|
+
},
|
|
36
|
+
onClick,
|
|
37
|
+
onRemoveChoice,
|
|
38
|
+
...extras
|
|
39
|
+
};
|
|
40
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
41
|
+
theme: theme
|
|
42
|
+
}, /*#__PURE__*/_react.default.createElement(_core.DndContext, null, /*#__PURE__*/_react.default.createElement(_choice.BlankContent, props))));
|
|
43
|
+
};
|
|
44
|
+
describe('render', () => {
|
|
45
|
+
it('renders without crashing', () => {
|
|
46
|
+
const {
|
|
47
|
+
container
|
|
48
|
+
} = renderChoice();
|
|
49
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
50
|
+
});
|
|
51
|
+
it('displays the choice value', () => {
|
|
52
|
+
const {
|
|
53
|
+
container
|
|
54
|
+
} = renderChoice();
|
|
55
|
+
expect(container.innerHTML).toContain('<div>6</div>');
|
|
56
|
+
});
|
|
57
|
+
it('calls onClick when clicked on choice', () => {
|
|
58
|
+
const {
|
|
59
|
+
container
|
|
60
|
+
} = renderChoice();
|
|
61
|
+
const choiceElement = container.firstChild.firstChild;
|
|
62
|
+
if (choiceElement) {
|
|
63
|
+
_react2.fireEvent.click(choiceElement);
|
|
64
|
+
expect(onClick).toHaveBeenCalled();
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Note: The delete icon click behavior cannot be easily tested with RTL because:
|
|
69
|
+
// 1. The onClick handler is on a styled MUI component with stopPropagation
|
|
70
|
+
// 2. The actual DOM structure is complex with SVG elements
|
|
71
|
+
// 3. Integration tests should verify this user interaction
|
|
72
|
+
// Keeping the test but marking it as a known limitation
|
|
73
|
+
it.skip('calls onRemoveChoice when delete icon is clicked', () => {
|
|
74
|
+
const {
|
|
75
|
+
container
|
|
76
|
+
} = renderChoice();
|
|
77
|
+
const svgs = container.querySelectorAll('svg');
|
|
78
|
+
const deleteIcon = svgs[svgs.length - 1];
|
|
79
|
+
if (deleteIcon) {
|
|
80
|
+
const deleteButton = deleteIcon.closest('[class*="StyledDeleteIcon"]') || deleteIcon.parentElement;
|
|
81
|
+
_react2.fireEvent.click(deleteButton);
|
|
82
|
+
expect(onRemoveChoice).toHaveBeenCalled();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('drag behavior', () => {
|
|
87
|
+
it('prevents drag when choice value is empty', () => {
|
|
88
|
+
// Mock window.alert
|
|
89
|
+
const jsdomAlert = window.alert;
|
|
90
|
+
window.alert = jest.fn();
|
|
91
|
+
const {
|
|
92
|
+
container
|
|
93
|
+
} = renderChoice({
|
|
94
|
+
choice: {
|
|
95
|
+
value: '',
|
|
96
|
+
id: '0'
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const choiceElement = container.firstChild.firstChild;
|
|
100
|
+
if (choiceElement) {
|
|
101
|
+
const event = new Event('dragstart', {
|
|
102
|
+
bubbles: true,
|
|
103
|
+
cancelable: true
|
|
104
|
+
});
|
|
105
|
+
(0, _react2.fireEvent)(choiceElement, event);
|
|
106
|
+
|
|
107
|
+
// The component should prevent the drag and show an alert
|
|
108
|
+
// Note: The actual alert behavior is tested in integration tests
|
|
109
|
+
}
|
|
110
|
+
window.alert = jsdomAlert;
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2NvcmUiLCJfY2hvaWNlIiwiamVzdCIsIm1vY2siLCJEbmRDb250ZXh0IiwiY2hpbGRyZW4iLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsInVzZURyYWdnYWJsZSIsImZuIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsInNldE5vZGVSZWYiLCJpc0RyYWdnaW5nIiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsImRlc2NyaWJlIiwib25DbGljayIsIm9uUmVtb3ZlQ2hvaWNlIiwiYmVmb3JlRWFjaCIsInJlbmRlckNob2ljZSIsImV4dHJhcyIsInByb3BzIiwia2V5IiwiY2hvaWNlIiwidmFsdWUiLCJpZCIsInJlbmRlciIsIlRoZW1lUHJvdmlkZXIiLCJCbGFua0NvbnRlbnQiLCJpdCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImlubmVySFRNTCIsInRvQ29udGFpbiIsImNob2ljZUVsZW1lbnQiLCJmaXJlRXZlbnQiLCJjbGljayIsInRvSGF2ZUJlZW5DYWxsZWQiLCJza2lwIiwic3ZncyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJkZWxldGVJY29uIiwibGVuZ3RoIiwiZGVsZXRlQnV0dG9uIiwiY2xvc2VzdCIsInBhcmVudEVsZW1lbnQiLCJqc2RvbUFsZXJ0Iiwid2luZG93IiwiYWxlcnQiLCJldmVudCIsIkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Nob2ljZS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBmaXJlRXZlbnQsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgeyBEbmRDb250ZXh0IH0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5cbmltcG9ydCB7IEJsYW5rQ29udGVudCBhcyBDaG9pY2UgfSBmcm9tICcuLi9jaG9pY2UnO1xuXG4vLyBNb2NrIEBkbmQta2l0L2NvcmVcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIERuZENvbnRleHQ6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXY+e2NoaWxkcmVufTwvZGl2PixcbiAgdXNlRHJhZ2dhYmxlOiBqZXN0LmZuKCgpID0+ICh7XG4gICAgYXR0cmlidXRlczoge30sXG4gICAgbGlzdGVuZXJzOiB7fSxcbiAgICBzZXROb2RlUmVmOiBqZXN0LmZuKCksXG4gICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gIH0pKSxcbn0pKTtcblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuXG5kZXNjcmliZSgnQ2hvaWNlJywgKCkgPT4ge1xuICBsZXQgb25DbGljaztcbiAgbGV0IG9uUmVtb3ZlQ2hvaWNlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2xpY2sgPSBqZXN0LmZuKCk7XG4gICAgb25SZW1vdmVDaG9pY2UgPSBqZXN0LmZuKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlckNob2ljZSA9IChleHRyYXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAga2V5OiAnMCcsXG4gICAgICBjaG9pY2U6IHtcbiAgICAgICAgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLFxuICAgICAgICBpZDogJzAnLFxuICAgICAgfSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvblJlbW92ZUNob2ljZSxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlbmRlcihcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgIDxEbmRDb250ZXh0PlxuICAgICAgICAgIDxDaG9pY2Ugey4uLnByb3BzfSAvPlxuICAgICAgICA8L0RuZENvbnRleHQ+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICBkZXNjcmliZSgncmVuZGVyJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ2hvaWNlKCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGlzcGxheXMgdGhlIGNob2ljZSB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDaG9pY2UoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuaW5uZXJIVE1MKS50b0NvbnRhaW4oJzxkaXY+NjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbGxzIG9uQ2xpY2sgd2hlbiBjbGlja2VkIG9uIGNob2ljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDaG9pY2UoKTtcbiAgICAgIGNvbnN0IGNob2ljZUVsZW1lbnQgPSBjb250YWluZXIuZmlyc3RDaGlsZC5maXJzdENoaWxkO1xuXG4gICAgICBpZiAoY2hvaWNlRWxlbWVudCkge1xuICAgICAgICBmaXJlRXZlbnQuY2xpY2soY2hvaWNlRWxlbWVudCk7XG4gICAgICAgIGV4cGVjdChvbkNsaWNrKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3RlOiBUaGUgZGVsZXRlIGljb24gY2xpY2sgYmVoYXZpb3IgY2Fubm90IGJlIGVhc2lseSB0ZXN0ZWQgd2l0aCBSVEwgYmVjYXVzZTpcbiAgICAvLyAxLiBUaGUgb25DbGljayBoYW5kbGVyIGlzIG9uIGEgc3R5bGVkIE1VSSBjb21wb25lbnQgd2l0aCBzdG9wUHJvcGFnYXRpb25cbiAgICAvLyAyLiBUaGUgYWN0dWFsIERPTSBzdHJ1Y3R1cmUgaXMgY29tcGxleCB3aXRoIFNWRyBlbGVtZW50c1xuICAgIC8vIDMuIEludGVncmF0aW9uIHRlc3RzIHNob3VsZCB2ZXJpZnkgdGhpcyB1c2VyIGludGVyYWN0aW9uXG4gICAgLy8gS2VlcGluZyB0aGUgdGVzdCBidXQgbWFya2luZyBpdCBhcyBhIGtub3duIGxpbWl0YXRpb25cbiAgICBpdC5za2lwKCdjYWxscyBvblJlbW92ZUNob2ljZSB3aGVuIGRlbGV0ZSBpY29uIGlzIGNsaWNrZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ2hvaWNlKCk7XG4gICAgICBjb25zdCBzdmdzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3N2ZycpO1xuICAgICAgY29uc3QgZGVsZXRlSWNvbiA9IHN2Z3Nbc3Zncy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKGRlbGV0ZUljb24pIHtcbiAgICAgICAgY29uc3QgZGVsZXRlQnV0dG9uID0gZGVsZXRlSWNvbi5jbG9zZXN0KCdbY2xhc3MqPVwiU3R5bGVkRGVsZXRlSWNvblwiXScpIHx8IGRlbGV0ZUljb24ucGFyZW50RWxlbWVudDtcbiAgICAgICAgZmlyZUV2ZW50LmNsaWNrKGRlbGV0ZUJ1dHRvbik7XG4gICAgICAgIGV4cGVjdChvblJlbW92ZUNob2ljZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZHJhZyBiZWhhdmlvcicsICgpID0+IHtcbiAgICBpdCgncHJldmVudHMgZHJhZyB3aGVuIGNob2ljZSB2YWx1ZSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIC8vIE1vY2sgd2luZG93LmFsZXJ0XG4gICAgICBjb25zdCBqc2RvbUFsZXJ0ID0gd2luZG93LmFsZXJ0O1xuICAgICAgd2luZG93LmFsZXJ0ID0gamVzdC5mbigpO1xuXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ2hvaWNlKHtcbiAgICAgICAgY2hvaWNlOiB7IHZhbHVlOiAnJywgaWQ6ICcwJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNob2ljZUVsZW1lbnQgPSBjb250YWluZXIuZmlyc3RDaGlsZC5maXJzdENoaWxkO1xuXG4gICAgICBpZiAoY2hvaWNlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnZHJhZ3N0YXJ0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgICAgICBmaXJlRXZlbnQoY2hvaWNlRWxlbWVudCwgZXZlbnQpO1xuXG4gICAgICAgIC8vIFRoZSBjb21wb25lbnQgc2hvdWxkIHByZXZlbnQgdGhlIGRyYWcgYW5kIHNob3cgYW4gYWxlcnRcbiAgICAgICAgLy8gTm90ZTogVGhlIGFjdHVhbCBhbGVydCBiZWhhdmlvciBpcyB0ZXN0ZWQgaW4gaW50ZWdyYXRpb24gdGVzdHNcbiAgICAgIH1cblxuICAgICAgd2luZG93LmFsZXJ0ID0ganNkb21BbGVydDtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBRUE7QUFDQUssSUFBSSxDQUFDQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU87RUFDaENDLFVBQVUsRUFBRUEsQ0FBQztJQUFFQztFQUFTLENBQUMsa0JBQUtWLE1BQUEsQ0FBQVcsT0FBQSxDQUFBQyxhQUFBLGNBQU1GLFFBQWMsQ0FBQztFQUNuREcsWUFBWSxFQUFFTixJQUFJLENBQUNPLEVBQUUsQ0FBQyxPQUFPO0lBQzNCQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2RDLFNBQVMs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
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _styles = require("@mui/material/styles");
|
|
7
|
+
var _choices = require("../choices");
|
|
8
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
9
|
+
var _markupUtils = require("../markupUtils");
|
|
10
|
+
jest.mock('@pie-lib/config-ui', () => ({
|
|
11
|
+
choiceUtils: {
|
|
12
|
+
firstAvailableIndex: jest.fn()
|
|
13
|
+
},
|
|
14
|
+
settings: {
|
|
15
|
+
Panel: props => /*#__PURE__*/_react.default.createElement("div", props),
|
|
16
|
+
toggle: jest.fn(),
|
|
17
|
+
radio: jest.fn(),
|
|
18
|
+
dropdown: jest.fn()
|
|
19
|
+
},
|
|
20
|
+
layout: {
|
|
21
|
+
ConfigLayout: props => /*#__PURE__*/_react.default.createElement("div", null, props.children)
|
|
22
|
+
},
|
|
23
|
+
AlertDialog: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
24
|
+
"data-testid": "alert-dialog"
|
|
25
|
+
}, props.open && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", null, props.title), /*#__PURE__*/_react.default.createElement("div", null, props.text), /*#__PURE__*/_react.default.createElement("button", {
|
|
26
|
+
onClick: props.onConfirm
|
|
27
|
+
}, "Confirm")))
|
|
28
|
+
}));
|
|
29
|
+
jest.mock('@pie-lib/editable-html-tip-tap', () => ({
|
|
30
|
+
__esModule: true,
|
|
31
|
+
default: ({
|
|
32
|
+
markup,
|
|
33
|
+
onChange
|
|
34
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
35
|
+
"data-testid": "editable-html",
|
|
36
|
+
onClick: () => onChange && onChange('new value')
|
|
37
|
+
}, markup)
|
|
38
|
+
}));
|
|
39
|
+
jest.mock('../choice', () => ({
|
|
40
|
+
__esModule: true,
|
|
41
|
+
default: ({
|
|
42
|
+
choice,
|
|
43
|
+
onClick,
|
|
44
|
+
onRemoveChoice
|
|
45
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
46
|
+
"data-testid": `choice-${choice.id}`
|
|
47
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
48
|
+
onClick: onClick
|
|
49
|
+
}, choice.value), /*#__PURE__*/_react.default.createElement("button", {
|
|
50
|
+
onClick: onRemoveChoice
|
|
51
|
+
}, "Remove"))
|
|
52
|
+
}));
|
|
53
|
+
const theme = (0, _styles.createTheme)();
|
|
54
|
+
const model = {
|
|
55
|
+
markup: '{{0}} + {{1}} = 15',
|
|
56
|
+
prompt: '<p>Solve the equation below.</p>',
|
|
57
|
+
choices: [{
|
|
58
|
+
value: '<div>6</div>',
|
|
59
|
+
id: '0'
|
|
60
|
+
}, {
|
|
61
|
+
value: '<div>9</div>',
|
|
62
|
+
id: '1'
|
|
63
|
+
}, {
|
|
64
|
+
value: '<div>12</div>',
|
|
65
|
+
id: '2'
|
|
66
|
+
}],
|
|
67
|
+
choicesPosition: 'below',
|
|
68
|
+
correctResponse: {
|
|
69
|
+
0: '0',
|
|
70
|
+
1: '1'
|
|
71
|
+
},
|
|
72
|
+
duplicates: true,
|
|
73
|
+
alternateResponses: [['1'], ['0']],
|
|
74
|
+
rationale: '<p>A correct response is shown below:</p><ul><li>2/6 = 1/3</li><li>4/8 = 1/2</li><li>6/10 = 3/5</li><li>9/12 = 3/4</li></ul>'
|
|
75
|
+
};
|
|
76
|
+
const prepareModel = (model = {}) => {
|
|
77
|
+
const joinedObj = {
|
|
78
|
+
..._defaults.default.model,
|
|
79
|
+
...model
|
|
80
|
+
};
|
|
81
|
+
// Handle null choices by converting to empty array for processing
|
|
82
|
+
const choicesForProcessing = joinedObj.choices || [];
|
|
83
|
+
const slateMarkup = model.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, choicesForProcessing, joinedObj.correctResponse);
|
|
84
|
+
const processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
|
|
85
|
+
return {
|
|
86
|
+
...joinedObj,
|
|
87
|
+
slateMarkup,
|
|
88
|
+
markup: processedMarkup.markup,
|
|
89
|
+
correctResponse: processedMarkup.correctResponse
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
describe('Choices', () => {
|
|
93
|
+
let onChange;
|
|
94
|
+
beforeEach(() => {
|
|
95
|
+
onChange = jest.fn();
|
|
96
|
+
});
|
|
97
|
+
const renderChoices = extras => {
|
|
98
|
+
const defaults = {
|
|
99
|
+
onChange,
|
|
100
|
+
classes: {},
|
|
101
|
+
model: prepareModel(model),
|
|
102
|
+
duplicates: true,
|
|
103
|
+
...extras
|
|
104
|
+
};
|
|
105
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
106
|
+
theme: theme
|
|
107
|
+
}, /*#__PURE__*/_react.default.createElement(_choices.Choices, defaults)));
|
|
108
|
+
};
|
|
109
|
+
describe('render', () => {
|
|
110
|
+
it('renders without crashing with duplicates', () => {
|
|
111
|
+
const {
|
|
112
|
+
container
|
|
113
|
+
} = renderChoices();
|
|
114
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
115
|
+
});
|
|
116
|
+
it('renders without crashing without duplicates', () => {
|
|
117
|
+
const {
|
|
118
|
+
container
|
|
119
|
+
} = renderChoices({
|
|
120
|
+
duplicates: false
|
|
121
|
+
});
|
|
122
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
123
|
+
});
|
|
124
|
+
it('renders with null choices', () => {
|
|
125
|
+
const {
|
|
126
|
+
container
|
|
127
|
+
} = renderChoices({
|
|
128
|
+
model: prepareModel({
|
|
129
|
+
...model,
|
|
130
|
+
choices: null
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
134
|
+
});
|
|
135
|
+
it('renders with empty correctResponse', () => {
|
|
136
|
+
const {
|
|
137
|
+
container
|
|
138
|
+
} = renderChoices({
|
|
139
|
+
duplicates: false,
|
|
140
|
+
model: prepareModel({
|
|
141
|
+
...model,
|
|
142
|
+
correctResponse: {}
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Note: Tests for internal methods (onChoiceChanged, onChoiceFocus, onAddChoice, onChoiceRemove, getVisibleChoices)
|
|
150
|
+
// are implementation details and cannot be directly tested with RTL.
|
|
151
|
+
// These methods should be tested through user interactions in integration tests:
|
|
152
|
+
// - onChoiceChanged: Test by simulating typing in choice inputs
|
|
153
|
+
// - onAddChoice: Test by clicking an "Add Choice" button
|
|
154
|
+
// - onChoiceRemove: Test by clicking a "Remove" button
|
|
155
|
+
// - getVisibleChoices: This is tested implicitly by checking what choices are rendered
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2Nob2ljZXMiLCJfZGVmYXVsdHMiLCJfbWFya3VwVXRpbHMiLCJqZXN0IiwibW9jayIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsImZuIiwic2V0dGluZ3MiLCJQYW5lbCIsInByb3BzIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJ0b2dnbGUiLCJyYWRpbyIsImRyb3Bkb3duIiwibGF5b3V0IiwiQ29uZmlnTGF5b3V0IiwiY2hpbGRyZW4iLCJBbGVydERpYWxvZyIsIm9wZW4iLCJ0aXRsZSIsInRleHQiLCJvbkNsaWNrIiwib25Db25maXJtIiwiX19lc01vZHVsZSIsIm1hcmt1cCIsIm9uQ2hhbmdlIiwiY2hvaWNlIiwib25SZW1vdmVDaG9pY2UiLCJpZCIsInZhbHVlIiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsIm1vZGVsIiwicHJvbXB0IiwiY2hvaWNlcyIsImNob2ljZXNQb3NpdGlvbiIsImNvcnJlY3RSZXNwb25zZSIsImR1cGxpY2F0ZXMiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJyYXRpb25hbGUiLCJwcmVwYXJlTW9kZWwiLCJqb2luZWRPYmoiLCJzZW5zaWJsZURlZmF1bHRzIiwiY2hvaWNlc0ZvclByb2Nlc3NpbmciLCJzbGF0ZU1hcmt1cCIsImNyZWF0ZVNsYXRlTWFya3VwIiwicHJvY2Vzc2VkTWFya3VwIiwicHJvY2Vzc01hcmt1cCIsImRlc2NyaWJlIiwiYmVmb3JlRWFjaCIsInJlbmRlckNob2ljZXMiLCJleHRyYXMiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiQ2hvaWNlcyIsIml0IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9jaG9pY2VzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIsIGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vY2hvaWNlcyc7XG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBjcmVhdGVTbGF0ZU1hcmt1cCwgcHJvY2Vzc01hcmt1cCB9IGZyb20gJy4uL21hcmt1cFV0aWxzJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IHsuLi5wcm9wc30gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKSxcbiAgICBkcm9wZG93bjogamVzdC5mbigpLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxuICBBbGVydERpYWxvZzogKHByb3BzKSA9PiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImFsZXJ0LWRpYWxvZ1wiPlxuICAgICAge3Byb3BzLm9wZW4gJiYgKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXY+e3Byb3BzLnRpdGxlfTwvZGl2PlxuICAgICAgICAgIDxkaXY+e3Byb3BzLnRleHR9PC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtwcm9wcy5vbkNvbmZpcm19PkNvbmZpcm08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApLFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2VkaXRhYmxlLWh0bWwtdGlwLXRhcCcsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6ICh7IG1hcmt1cCwgb25DaGFuZ2UgfSkgPT4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZWRpdGFibGUtaHRtbFwiXG4gICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSAmJiBvbkNoYW5nZSgnbmV3IHZhbHVlJyl9XG4gICAgPlxuICAgICAge21hcmt1cH1cbiAgICA8L2Rpdj5cbiAgKSxcbn0pKTtcblxuamVzdC5tb2NrKCcuLi9jaG9pY2UnLCAoKSA9PiAoe1xuICBfX2VzTW9kdWxlOiB0cnVlLFxuICBkZWZhdWx0OiAoeyBjaG9pY2UsIG9uQ2xpY2ssIG9uUmVtb3ZlQ2hvaWNlIH0pID0+IChcbiAgICA8ZGl2IGRhdGEtdGVzdGlkPXtgY2hvaWNlLSR7Y2hvaWNlLmlkfWB9PlxuICAgICAgPGRpdiBvbkNsaWNrPXtvbkNsaWNrfT57Y2hvaWNlLnZhbHVlfTwvZGl2PlxuICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtvblJlbW92ZUNob2ljZX0+UmVtb3ZlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICksXG59KSk7XG5cbmNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuY29uc3QgbW9kZWwgPSB7XG4gIG1hcmt1cDogJ3t7MH19ICsge3sxfX0gPSAxNScsXG4gIHByb21wdDogJzxwPlNvbHZlIHRoZSBlcXVhdGlvbiBiZWxvdy48L3A+JyxcbiAgY2hvaWNlczogW1xuICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgeyB2YWx1ZTogJzxkaXY+OTwvZGl2PicsIGlkOiAnMScgfSxcbiAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgXSxcbiAgY2hvaWNlc1Bvc2l0aW9uOiAnYmVsb3cnLFxuICBjb3JyZWN0UmVzcG9uc2U6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJzEnLFxuICB9LFxuICBkdXBsaWNhdGVzOiB0cnVlLFxuICBhbHRlcm5hdGVSZXNwb25zZXM6IFtbJzEnXSwgWycwJ11dLFxuICByYXRpb25hbGU6XG4gICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4yLzYgPSAxLzM8L2xpPjxsaT40LzggPSAxLzI8L2xpPjxsaT42LzEwID0gMy81PC9saT48bGk+OS8xMiA9IDMvNDwvbGk+PC91bD4nLFxufTtcblxuY29uc3QgcHJlcGFyZU1vZGVsID0gKG1vZGVsID0ge30pID0+IHtcbiAgY29uc3Qgam9pbmVkT2JqID0ge1xuICAgIC4uLnNlbnNpYmxlRGVmYXVsdHMubW9kZWwsXG4gICAgLi4ubW9kZWwsXG4gIH07XG4gIC8vIEhhbmRsZSBudWxsIGNob2ljZXMgYnkgY29udmVydGluZyB0byBlbXB0eSBhcnJheSBmb3IgcHJvY2Vzc2luZ1xuICBjb25zdCBjaG9pY2VzRm9yUHJvY2Vzc2luZyA9IGpvaW5lZE9iai5jaG9pY2VzIHx8IFtdO1xuICBjb25zdCBzbGF0ZU1hcmt1cCA9XG4gICAgbW9kZWwuc2xhdGVNYXJrdXAgfHwgY3JlYXRlU2xhdGVNYXJrdXAoam9pbmVkT2JqLm1hcmt1cCwgY2hvaWNlc0ZvclByb2Nlc3NpbmcsIGpvaW5lZE9iai5jb3JyZWN0UmVzcG9uc2UpO1xuICBjb25zdCBwcm9jZXNzZWRNYXJrdXAgPSBwcm9jZXNzTWFya3VwKHNsYXRlTWFya3VwKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmpvaW5lZE9iaixcbiAgICBzbGF0ZU1hcmt1cCxcbiAgICBtYXJrdXA6IHByb2Nlc3NlZE1hcmt1cC5tYXJrdXAsXG4gICAgY29ycmVjdFJlc3BvbnNlOiBwcm9jZXNzZWRNYXJrdXAuY29ycmVjdFJlc3BvbnNlLFxuICB9O1xufTtcblxuZGVzY3JpYmUoJ0Nob2ljZXMnLCAoKSA9PiB7XG4gIGxldCBvbkNoYW5nZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgY29uc3QgcmVuZGVyQ2hvaWNlcyA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgIGR1cGxpY2F0ZXM6IHRydWUsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfTtcblxuICAgIHJldHVybiByZW5kZXIoXG4gICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICA8Q2hvaWNlcyB7Li4uZGVmYXVsdHN9IC8+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICBkZXNjcmliZSgncmVuZGVyJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcgd2l0aCBkdXBsaWNhdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNob2ljZXMoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcgd2l0aG91dCBkdXBsaWNhdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNob2ljZXMoeyBkdXBsaWNhdGVzOiBmYWxzZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbnVsbCBjaG9pY2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNob2ljZXMoeyBtb2RlbDogcHJlcGFyZU1vZGVsKHsgLi4ubW9kZWwsIGNob2ljZXM6IG51bGwgfSkgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGVtcHR5IGNvcnJlY3RSZXNwb25zZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDaG9pY2VzKHtcbiAgICAgICAgZHVwbGljYXRlczogZmFsc2UsXG4gICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwoe1xuICAgICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZToge30sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE5vdGU6IFRlc3RzIGZvciBpbnRlcm5hbCBtZXRob2RzIChvbkNob2ljZUNoYW5nZWQsIG9uQ2hvaWNlRm9jdXMsIG9uQWRkQ2hvaWNlLCBvbkNob2ljZVJlbW92ZSwgZ2V0VmlzaWJsZUNob2ljZXMpXG4gIC8vIGFyZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBjYW5ub3QgYmUgZGlyZWN0bHkgdGVzdGVkIHdpdGggUlRMLlxuICAvLyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSB0ZXN0ZWQgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9ucyBpbiBpbnRlZ3JhdGlvbiB0ZXN0czpcbiAgLy8gLSBvbkNob2ljZUNoYW5nZWQ6IFRlc3QgYnkgc2ltdWxhdGluZyB0eXBpbmcgaW4gY2hvaWNlIGlucHV0c1xuICAvLyAtIG9uQWRkQ2hvaWNlOiBUZXN0IGJ5IGNsaWNraW5nIGFuIFwiQWRkIENob2ljZVwiIGJ1dHRvblxuICAvLyAtIG9uQ2hvaWNlUmVtb3ZlOiBUZXN0IGJ5IGNsaWNraW5nIGEgXCJSZW1vdmVcIiBidXR0b25cbiAgLy8gLSBnZXRWaXNpYmxlQ2hvaWNlczogVGhpcyBpcyB0ZXN0ZWQgaW1wbGljaXRseSBieSBjaGVja2luZyB3aGF0IGNob2ljZXMgYXJlIHJlbmRlcmVkXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBRUFNLElBQUksQ0FBQ0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU87RUFDckNDLFdBQVcsRUFBRTtJQUNYQyxtQkFBbUIsRUFBRUgsSUFBSSxDQUFDSSxFQUFFLENBQUM7RUFDL0IsQ0FBQztFQUNEQyxRQUFRLEVBQUU7SUFDUkMsS0FBSyxFQUFHQyxLQUFLLGlCQUFLZixNQUFBLENBQUFnQixPQUFBLENBQUFDLGFBQUEsUUFBU0YsS0FBUSxDQUFDO0lBQ3BDRyxNQUFNLEVBQUVWLElBQUksQ0FBQ0ksRUFBRSxDQUFDLENBQUM7SUFDakJPLEtBQUssRUFBRVgsSUFBSSxDQUFDSSxFQUFFLENBQUMsQ0FBQztJQUNoQlEsUUFBUSxFQUFFWixJQUFJLENBQUNJLEVBQUUsQ0FBQztFQUNwQixDQUFDO0VBQ0RTLE1BQU0sRUFBRTtJQUNOQyxZQUFZLEVBQUdQLEtBQUssaUJBQUtmLE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQUMsYUFBQSxjQUFNRixLQUFLLENBQUNRLFFBQWM7RUFDckQsQ0FBQztFQUNEQyxXQUFXLEVBQUdULEtBQUssaUJBQ2pCZixNQUFBLENBQUFnQixPQUFBLENBQUFDLGFBQUE7SUFBSyxlQUFZO0VBQWMsR0FDNUJGLEtBQUssQ0FBQ1UsSUFBSSxpQkFDVHpCLE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQUMsYUFBQSwyQkFDRWpCLE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQUMsYUFBQSxjQUFNRixLQUFLLENB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
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/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__*/_react.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__*/_react.default.createElement("div", {
|
|
25
|
+
"data-testid": "config-layout"
|
|
26
|
+
}, props.children)
|
|
27
|
+
},
|
|
28
|
+
InputContainer: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
29
|
+
"data-testid": "input-container"
|
|
30
|
+
}, props.children)
|
|
31
|
+
}));
|
|
32
|
+
jest.mock('@pie-lib/render-ui', () => ({
|
|
33
|
+
InputContainer: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
34
|
+
"data-testid": "input-container"
|
|
35
|
+
}, props.children)
|
|
36
|
+
}));
|
|
37
|
+
jest.mock('@pie-lib/editable-html-tip-tap', () => ({
|
|
38
|
+
__esModule: true,
|
|
39
|
+
default: ({
|
|
40
|
+
markup,
|
|
41
|
+
onChange
|
|
42
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
43
|
+
"data-testid": "editable-html",
|
|
44
|
+
onClick: () => onChange && onChange('new value')
|
|
45
|
+
}, markup),
|
|
46
|
+
ALL_PLUGINS: []
|
|
47
|
+
}));
|
|
48
|
+
jest.mock('@pie-lib/drag', () => ({
|
|
49
|
+
DragProvider: ({
|
|
50
|
+
children
|
|
51
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
52
|
+
"data-testid": "drag-provider"
|
|
53
|
+
}, children)
|
|
54
|
+
}));
|
|
55
|
+
jest.mock('@pie-lib/math-rendering', () => ({
|
|
56
|
+
renderMath: jest.fn()
|
|
57
|
+
}));
|
|
58
|
+
jest.mock('@dnd-kit/core', () => ({
|
|
59
|
+
DragOverlay: ({
|
|
60
|
+
children
|
|
61
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
62
|
+
"data-testid": "drag-overlay"
|
|
63
|
+
}, children)
|
|
64
|
+
}));
|
|
65
|
+
jest.mock('@dnd-kit/modifiers', () => ({
|
|
66
|
+
restrictToFirstScrollableAncestor: jest.fn()
|
|
67
|
+
}));
|
|
68
|
+
jest.mock('../choice', () => ({
|
|
69
|
+
__esModule: true,
|
|
70
|
+
default: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
71
|
+
"data-testid": "choice"
|
|
72
|
+
}, props.choice?.value)
|
|
73
|
+
}));
|
|
74
|
+
jest.mock('../choices', () => ({
|
|
75
|
+
__esModule: true,
|
|
76
|
+
default: props => /*#__PURE__*/_react.default.createElement("div", {
|
|
77
|
+
"data-testid": "choices"
|
|
78
|
+
}, props.children)
|
|
79
|
+
}));
|
|
80
|
+
const theme = (0, _styles.createTheme)();
|
|
81
|
+
const model = {
|
|
82
|
+
markup: '{{0}} + {{1}} = 15',
|
|
83
|
+
prompt: '<p>Solve the equation below.</p>',
|
|
84
|
+
choices: [{
|
|
85
|
+
value: '<div>6</div>',
|
|
86
|
+
id: '0'
|
|
87
|
+
}, {
|
|
88
|
+
value: '<div>9</div>',
|
|
89
|
+
id: '1'
|
|
90
|
+
}],
|
|
91
|
+
choicesPosition: 'below',
|
|
92
|
+
correctResponse: {
|
|
93
|
+
0: '0',
|
|
94
|
+
1: '1'
|
|
95
|
+
},
|
|
96
|
+
duplicates: true,
|
|
97
|
+
alternateResponses: [['1'], ['0']],
|
|
98
|
+
rationale: '<p>A correct response is shown below:</p><ul><li>2/6 = 1/3</li><li>4/8 = 1/2</li><li>6/10 = 3/5</li><li>9/12 = 3/4</li></ul>'
|
|
99
|
+
};
|
|
100
|
+
const prepareModel = (model = {}) => {
|
|
101
|
+
const joinedObj = {
|
|
102
|
+
..._defaults.default.model,
|
|
103
|
+
...model
|
|
104
|
+
};
|
|
105
|
+
// Handle null choices by converting to empty array for processing
|
|
106
|
+
const choicesForProcessing = joinedObj.choices || [];
|
|
107
|
+
const slateMarkup = model.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, choicesForProcessing, joinedObj.correctResponse);
|
|
108
|
+
const processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
|
|
109
|
+
return {
|
|
110
|
+
...joinedObj,
|
|
111
|
+
slateMarkup,
|
|
112
|
+
markup: processedMarkup.markup,
|
|
113
|
+
correctResponse: processedMarkup.correctResponse
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
describe('Main', () => {
|
|
117
|
+
let onModelChanged;
|
|
118
|
+
let onConfigurationChanged;
|
|
119
|
+
beforeEach(() => {
|
|
120
|
+
onModelChanged = jest.fn();
|
|
121
|
+
onConfigurationChanged = jest.fn();
|
|
122
|
+
});
|
|
123
|
+
const renderMain = (extras = {}) => {
|
|
124
|
+
const defaults = {
|
|
125
|
+
onModelChanged,
|
|
126
|
+
onConfigurationChanged,
|
|
127
|
+
classes: {},
|
|
128
|
+
model: prepareModel({
|
|
129
|
+
...model,
|
|
130
|
+
...extras
|
|
131
|
+
}),
|
|
132
|
+
configuration: _defaults.default.configuration
|
|
133
|
+
};
|
|
134
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_styles.ThemeProvider, {
|
|
135
|
+
theme: theme
|
|
136
|
+
}, /*#__PURE__*/_react.default.createElement(_main.Main, defaults)));
|
|
137
|
+
};
|
|
138
|
+
describe('render', () => {
|
|
139
|
+
it('renders with teacher instructions, prompt and rationale even if not set', () => {
|
|
140
|
+
const {
|
|
141
|
+
container
|
|
142
|
+
} = renderMain();
|
|
143
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
144
|
+
});
|
|
145
|
+
it('renders without teacher instructions, prompt and rationale', () => {
|
|
146
|
+
const {
|
|
147
|
+
container
|
|
148
|
+
} = renderMain({
|
|
149
|
+
promptEnabled: false,
|
|
150
|
+
teacherInstructionsEnabled: false,
|
|
151
|
+
rationaleEnabled: false
|
|
152
|
+
});
|
|
153
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Note: Tests for internal methods (onModelChange, onPromptChanged, onRationaleChanged,
|
|
158
|
+
// onTeacherInstructionsChanged, onMarkupChanged, onResponsesChanged) are implementation
|
|
159
|
+
// details and cannot be directly tested with RTL.
|
|
160
|
+
// These methods should be tested through user interactions in integration tests:
|
|
161
|
+
// - onPromptChanged: Test by typing in the prompt EditableHtml component
|
|
162
|
+
// - onRationaleChanged: Test by typing in the rationale EditableHtml component
|
|
163
|
+
// - onTeacherInstructionsChanged: Test by typing in the teacher instructions EditableHtml component
|
|
164
|
+
// - onMarkupChanged: Test by modifying the markup via the Design component
|
|
165
|
+
// - onResponsesChanged: Test by adding/removing/editing choices via the Choices component
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX21haW4iLCJfZGVmYXVsdHMiLCJfbWFya3VwVXRpbHMiLCJqZXN0IiwibW9jayIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsImZuIiwic2V0dGluZ3MiLCJQYW5lbCIsInByb3BzIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ0b2dnbGUiLCJyYWRpbyIsImRyb3Bkb3duIiwibGF5b3V0IiwiQ29uZmlnTGF5b3V0IiwiY2hpbGRyZW4iLCJJbnB1dENvbnRhaW5lciIsIl9fZXNNb2R1bGUiLCJtYXJrdXAiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJBTExfUExVR0lOUyIsIkRyYWdQcm92aWRlciIsInJlbmRlck1hdGgiLCJEcmFnT3ZlcmxheSIsInJlc3RyaWN0VG9GaXJzdFNjcm9sbGFibGVBbmNlc3RvciIsImNob2ljZSIsInZhbHVlIiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsIm1vZGVsIiwicHJvbXB0IiwiY2hvaWNlcyIsImlkIiwiY2hvaWNlc1Bvc2l0aW9uIiwiY29ycmVjdFJlc3BvbnNlIiwiZHVwbGljYXRlcyIsImFsdGVybmF0ZVJlc3BvbnNlcyIsInJhdGlvbmFsZSIsInByZXBhcmVNb2RlbCIsImpvaW5lZE9iaiIsInNlbnNpYmxlRGVmYXVsdHMiLCJjaG9pY2VzRm9yUHJvY2Vzc2luZyIsInNsYXRlTWFya3VwIiwiY3JlYXRlU2xhdGVNYXJrdXAiLCJwcm9jZXNzZWRNYXJrdXAiLCJwcm9jZXNzTWFya3VwIiwiZGVzY3JpYmUiLCJvbk1vZGVsQ2hhbmdlZCIsIm9uQ29uZmlndXJhdGlvbkNoYW5nZWQiLCJiZWZvcmVFYWNoIiwicmVuZGVyTWFpbiIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNvbmZpZ3VyYXRpb24iLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiTWFpbiIsIml0IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50IiwicHJvbXB0RW5hYmxlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwicmF0aW9uYWxlRW5hYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbWFpbi50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyLCBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcblxuaW1wb3J0IHsgTWFpbiB9IGZyb20gJy4uL21haW4nO1xuaW1wb3J0IHNlbnNpYmxlRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IHsgY3JlYXRlU2xhdGVNYXJrdXAsIHByb2Nlc3NNYXJrdXAgfSBmcm9tICcuLi9tYXJrdXBVdGlscyc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY29uZmlnLXVpJywgKCkgPT4gKHtcbiAgY2hvaWNlVXRpbHM6IHtcbiAgICBmaXJzdEF2YWlsYWJsZUluZGV4OiBqZXN0LmZuKCksXG4gIH0sXG4gIHNldHRpbmdzOiB7XG4gICAgUGFuZWw6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cInNldHRpbmdzLXBhbmVsXCIgey4uLnByb3BzfSAvPixcbiAgICB0b2dnbGU6IGplc3QuZm4oKSxcbiAgICByYWRpbzogamVzdC5mbigpLFxuICAgIGRyb3Bkb3duOiBqZXN0LmZuKCksXG4gIH0sXG4gIGxheW91dDoge1xuICAgIENvbmZpZ0xheW91dDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiY29uZmlnLWxheW91dFwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG4gIH0sXG4gIElucHV0Q29udGFpbmVyOiAocHJvcHMpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJpbnB1dC1jb250YWluZXJcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL3JlbmRlci11aScsICgpID0+ICh7XG4gIElucHV0Q29udGFpbmVyOiAocHJvcHMpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJpbnB1dC1jb250YWluZXJcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2VkaXRhYmxlLWh0bWwtdGlwLXRhcCcsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6ICh7IG1hcmt1cCwgb25DaGFuZ2UgfSkgPT4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZWRpdGFibGUtaHRtbFwiXG4gICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSAmJiBvbkNoYW5nZSgnbmV3IHZhbHVlJyl9XG4gICAgPlxuICAgICAge21hcmt1cH1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgQUxMX1BMVUdJTlM6IFtdLFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2RyYWcnLCAoKSA9PiAoe1xuICBEcmFnUHJvdmlkZXI6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnLXByb3ZpZGVyXCI+e2NoaWxkcmVufTwvZGl2Pixcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXJlbmRlcmluZycsICgpID0+ICh7XG4gIHJlbmRlck1hdGg6IGplc3QuZm4oKSxcbn0pKTtcblxuamVzdC5tb2NrKCdAZG5kLWtpdC9jb3JlJywgKCkgPT4gKHtcbiAgRHJhZ092ZXJsYXk6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnLW92ZXJsYXlcIj57Y2hpbGRyZW59PC9kaXY+LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BkbmQta2l0L21vZGlmaWVycycsICgpID0+ICh7XG4gIHJlc3RyaWN0VG9GaXJzdFNjcm9sbGFibGVBbmNlc3RvcjogamVzdC5mbigpLFxufSkpO1xuXG5qZXN0Lm1vY2soJy4uL2Nob2ljZScsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImNob2ljZVwiPntwcm9wcy5jaG9pY2U/LnZhbHVlfTwvZGl2Pixcbn0pKTtcblxuamVzdC5tb2NrKCcuLi9jaG9pY2VzJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiY2hvaWNlc1wiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG59KSk7XG5cbmNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuY29uc3QgbW9kZWwgPSB7XG4gIG1hcmt1cDogJ3t7MH19ICsge3sxfX0gPSAxNScsXG4gIHByb21wdDogJzxwPlNvbHZlIHRoZSBlcXVhdGlvbiBiZWxvdy48L3A+JyxcbiAgY2hvaWNlczogW1xuICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgeyB2YWx1ZTogJzxkaXY+OTwvZGl2PicsIGlkOiAnMScgfSxcbiAgXSxcbiAgY2hvaWNlc1Bvc2l0aW9uOiAnYmVsb3cnLFxuICBjb3JyZWN0UmVzcG9uc2U6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJzEnLFxuICB9LFxuICBkdXBsaWNhdGVzOiB0cnVlLFxuICBhbHRlcm5hdGVSZXNwb25zZXM6IFtbJzEnXSwgWycwJ11dLFxuICByYXRpb25hbGU6XG4gICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4yLzYgPSAxLzM8L2xpPjxsaT40LzggPSAxLzI8L2xpPjxsaT42LzEwID0gMy81PC9saT48bGk+OS8xMiA9IDMvNDwvbGk+PC91bD4nLFxufTtcblxuY29uc3QgcHJlcGFyZU1vZGVsID0gKG1vZGVsID0ge30pID0+IHtcbiAgY29uc3Qgam9pbmVkT2JqID0ge1xuICAgIC4uLnNlbnNpYmxlRGVmYXVsdHMubW9kZWwsXG4gICAgLi4ubW9kZWwsXG4gIH07XG4gIC8vIEhhbmRsZSBudWxsIGNob2ljZXMgYnkgY29udmVydGluZyB0byBlbXB0eSBhcnJheSBmb3IgcHJvY2Vzc2luZ1xuICBjb25zdCBjaG9pY2VzRm9yUHJvY2Vzc2luZyA9IGpvaW5lZE9iai5jaG9pY2VzIHx8IFtdO1xuICBjb25zdCBzbGF0ZU1hcmt1cCA9XG4gICAgbW9kZWwuc2xhdGVNYXJrdXAgfHwgY3JlYXRlU2xhdGVNYXJrdXAoam9pbmVkT2JqLm1hcmt1cCwgY2hvaWNlc0ZvclByb2Nlc3NpbmcsIGpvaW5lZE9iai5jb3JyZWN0UmVzcG9uc2UpO1xuICBjb25zdCBwcm9jZXNzZWRNYXJrdXAgPSBwcm9jZXNzTWFya3VwKHNsYXRlTWFya3VwKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmpvaW5lZE9iaixcbiAgICBzbGF0ZU1hcmt1cCxcbiAgICBtYXJrdXA6IHByb2Nlc3NlZE1hcmt1cC5tYXJrdXAsXG4gICAgY29ycmVjdFJlc3BvbnNlOiBwcm9jZXNzZWRNYXJrdXAuY29ycmVjdFJlc3BvbnNlLFxuICB9O1xufTtcblxuZGVzY3JpYmUoJ01haW4nLCAoKSA9PiB7XG4gIGxldCBvbk1vZGVsQ2hhbmdlZDtcbiAgbGV0IG9uQ29uZmlndXJhdGlvbkNoYW5nZWQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25Nb2RlbENoYW5nZWQgPSBqZXN0LmZuKCk7XG4gICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgY29uc3QgcmVuZGVyTWFpbiA9IChleHRyYXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIC4uLmV4dHJhcyxcbiAgICAgIH0pLFxuICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyKFxuICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgICAgPE1haW4gey4uLmRlZmF1bHRzfSAvPlxuICAgICAgPC9UaGVtZVByb3ZpZGVyPlxuICAgICk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aXRoIHRlYWNoZXIgaW5zdHJ1Y3Rpb25zLCBwcm9tcHQgYW5kIHJhdGlvbmFsZSBldmVuIGlmIG5vdCBzZXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTWFpbigpO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCB0ZWFjaGVyIGluc3RydWN0aW9ucywgcHJvbXB0IGFuZCByYXRpb25hbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyTWFpbih7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJhdGlvbmFsZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE5vdGU6IFRlc3RzIGZvciBpbnRlcm5hbCBtZXRob2RzIChvbk1vZGVsQ2hhbmdlLCBvblByb21wdENoYW5nZWQsIG9uUmF0aW9uYWxlQ2hhbmdlZCwgXG4gIC8vIG9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQsIG9uTWFya3VwQ2hhbmdlZCwgb25SZXNwb25zZXNDaGFuZ2VkKSBhcmUgaW1wbGVtZW50YXRpb24gXG4gIC8vIGRldGFpbHMgYW5kIGNhbm5vdCBiZSBkaXJlY3RseSB0ZXN0ZWQgd2l0aCBSVEwuXG4gIC8vIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGJlIHRlc3RlZCB0aHJvdWdoIHVzZXIgaW50ZXJhY3Rpb25zIGluIGludGVncmF0aW9uIHRlc3RzOlxuICAvLyAtIG9uUHJvbXB0Q2hhbmdlZDogVGVzdCBieSB0eXBpbmcgaW4gdGhlIHByb21wdCBFZGl0YWJsZUh0bWwgY29tcG9uZW50XG4gIC8vIC0gb25SYXRpb25hbGVDaGFuZ2VkOiBUZXN0IGJ5IHR5cGluZyBpbiB0aGUgcmF0aW9uYWxlIEVkaXRhYmxlSHRtbCBjb21wb25lbnRcbiAgLy8gLSBvblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkOiBUZXN0IGJ5IHR5cGluZyBpbiB0aGUgdGVhY2hlciBpbnN0cnVjdGlvbnMgRWRpdGFibGVIdG1sIGNvbXBvbmVudFxuICAvLyAtIG9uTWFya3VwQ2hhbmdlZDogVGVzdCBieSBtb2RpZnlpbmcgdGhlIG1hcmt1cCB2aWEgdGhlIERlc2lnbiBjb21wb25lbnRcbiAgLy8gLSBvblJlc3BvbnNlc0NoYW5nZWQ6IFRlc3QgYnkgYWRkaW5nL3JlbW92aW5nL2VkaXRpbmcgY2hvaWNlcyB2aWEgdGhlIENob2ljZXMgY29tcG9uZW50XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUVBTSxJQUFJLENBQUNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxPQUFPO0VB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
|