@pie-element/multiple-choice 13.3.5 → 13.5.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +16 -38
  2. package/configure/CHANGELOG.md +12 -33
  3. package/configure/lib/__tests__/root.test.js +279 -0
  4. package/configure/lib/defaults.js +1 -1
  5. package/configure/lib/index.js +1 -1
  6. package/configure/lib/main.js +1 -1
  7. package/configure/lib/utils.js +1 -1
  8. package/configure/package.json +3 -3
  9. package/controller/CHANGELOG.md +11 -8
  10. package/controller/lib/__tests__/index.test.js +561 -0
  11. package/controller/lib/__tests__/utils.test.js +8 -0
  12. package/controller/lib/defaults.js +1 -1
  13. package/controller/lib/index.js +1 -1
  14. package/controller/lib/utils.js +1 -1
  15. package/controller/package.json +1 -1
  16. package/docs/demo/pie.manifest.json +11 -0
  17. package/lib/__tests__/choice-input-test.js +49 -0
  18. package/lib/__tests__/choice-input.test.js +49 -0
  19. package/lib/__tests__/index-test.js +206 -0
  20. package/lib/__tests__/index.test.js +221 -0
  21. package/lib/__tests__/key-events-test.js +95 -0
  22. package/lib/__tests__/key-events.test.js +107 -0
  23. package/lib/__tests__/multiple-choice-test.js +101 -0
  24. package/lib/__tests__/multiple-choice.test.js +256 -0
  25. package/lib/__tests__/session-updater-test.js +70 -0
  26. package/lib/__tests__/session-updater.test.js +70 -0
  27. package/lib/choice-input.js +1 -1
  28. package/lib/choice.js +1 -1
  29. package/lib/feedback-tick.js +1 -1
  30. package/lib/index.js +1 -1
  31. package/lib/main.js +1 -1
  32. package/lib/multiple-choice.js +1 -1
  33. package/lib/print.js +1 -1
  34. package/lib/session-updater.js +1 -1
  35. package/lib/utils.js +1 -1
  36. package/module/configure.js +1 -1
  37. package/module/controller.js +15 -12
  38. package/module/element.js +1 -1
  39. package/module/index.html +1 -1
  40. package/module/manifest.json +3 -3
  41. package/module/print.html +1 -1
  42. package/module/print.js +1 -1
  43. package/package.json +2 -2
@@ -0,0 +1,221 @@
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 _piePlayerEvents = require("@pie-framework/pie-player-events");
7
+ var _main = _interopRequireDefault(require("../main"));
8
+ var _index = _interopRequireWildcard(require("../index"));
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
+ jest.useFakeTimers();
11
+ jest.mock('@pie-lib/math-rendering', () => ({
12
+ renderMath: jest.fn()
13
+ }));
14
+ jest.mock('@pie-lib/correct-answer-toggle', () => () => null);
15
+ jest.mock('@pie-lib/translator', () => ({
16
+ __esModule: true,
17
+ default: {
18
+ translator: {
19
+ t: key => key
20
+ }
21
+ }
22
+ }));
23
+ jest.mock('../choice', () => {
24
+ const React = require('react');
25
+ return {
26
+ __esModule: true,
27
+ default: ({
28
+ choice
29
+ }) => /*#__PURE__*/React.createElement("div", null, choice.label)
30
+ };
31
+ });
32
+ jest.mock('lodash-es', () => {
33
+ const lodash = require('lodash');
34
+ return {
35
+ ...lodash,
36
+ debounce: jest.fn(fn => fn)
37
+ };
38
+ });
39
+
40
+ // Mock the render-ui PreviewLayout
41
+ jest.mock('@pie-lib/render-ui', () => ({
42
+ PreviewLayout: ({
43
+ children
44
+ }) => /*#__PURE__*/_react.default.createElement("div", {
45
+ "data-testid": "preview-layout"
46
+ }, children),
47
+ Collapsible: ({
48
+ children,
49
+ labels
50
+ }) => /*#__PURE__*/_react.default.createElement("div", {
51
+ "data-testid": "collapsible"
52
+ }, /*#__PURE__*/_react.default.createElement("button", null, labels?.hidden || 'Show'), children),
53
+ PreviewPrompt: ({
54
+ prompt
55
+ }) => /*#__PURE__*/_react.default.createElement("div", {
56
+ "data-testid": "preview-prompt"
57
+ }, prompt),
58
+ color: {
59
+ text: () => '#000',
60
+ background: () => '#fff',
61
+ primary: () => '#1976d2',
62
+ correct: () => '#4caf50',
63
+ incorrect: () => '#f44336',
64
+ disabled: () => '#9e9e9e'
65
+ }
66
+ }));
67
+ describe('isComplete', () => {
68
+ it.each`
69
+ session | expected
70
+ ${{
71
+ value: [1, 2, 3]
72
+ }} | ${true}
73
+ ${{
74
+ value: []
75
+ }} | ${false}
76
+ ${{}} | ${false}
77
+ ${null} | ${false}
78
+ ${undefined} | ${false}
79
+ `('session = $session is complete => $expected', ({
80
+ session,
81
+ expected
82
+ }) => {
83
+ expect((0, _index.isComplete)(session)).toEqual(expected);
84
+ });
85
+ });
86
+ beforeAll(() => {
87
+ customElements.define('pie-multiple-choice', _index.default);
88
+ });
89
+ const makeEl = () => {
90
+ const el = new _index.default();
91
+ el.dispatchEvent = jest.fn();
92
+ return el;
93
+ };
94
+ describe('multiple-choice', () => {
95
+ describe('rendering', () => {
96
+ const renderComponent = (modelOverrides = {}) => {
97
+ const defaultProps = {
98
+ model: {
99
+ choices: [],
100
+ prompt: 'Select an answer',
101
+ ...modelOverrides
102
+ },
103
+ session: {},
104
+ classes: {}
105
+ };
106
+ return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_main.default, defaultProps));
107
+ };
108
+ it('renders without crashing', () => {
109
+ const {
110
+ container
111
+ } = renderComponent();
112
+ expect(container).toBeInTheDocument();
113
+ });
114
+ it('renders the preview layout wrapper', () => {
115
+ renderComponent();
116
+ expect(_react2.screen.getByTestId('preview-layout')).toBeInTheDocument();
117
+ });
118
+ it('renders with teacherInstructions', () => {
119
+ renderComponent({
120
+ teacherInstructions: 'These are teacher instructions'
121
+ });
122
+ expect(_react2.screen.getByText('These are teacher instructions')).toBeInTheDocument();
123
+ });
124
+ it('renders choices when provided', () => {
125
+ renderComponent({
126
+ choices: [{
127
+ value: 'a',
128
+ label: 'Option A'
129
+ }, {
130
+ value: 'b',
131
+ label: 'Option B'
132
+ }]
133
+ });
134
+ expect(_react2.screen.getByText('Option A')).toBeInTheDocument();
135
+ expect(_react2.screen.getByText('Option B')).toBeInTheDocument();
136
+ });
137
+ });
138
+ describe('events', () => {
139
+ describe('model', () => {
140
+ it('dispatches model set event', () => {
141
+ const el = makeEl();
142
+ el.model = {};
143
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.ModelSetEvent(el.tagName.toLowerCase(), false, true));
144
+ });
145
+ });
146
+ describe('onChange', () => {
147
+ it('dispatches session changed event - add answer (checkbox)', () => {
148
+ const el = makeEl();
149
+ el.model = {
150
+ choiceMode: 'checkbox'
151
+ };
152
+ el.session = {
153
+ value: []
154
+ };
155
+ el._onChange({
156
+ value: 'a',
157
+ selected: true
158
+ });
159
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), true));
160
+ });
161
+ it('dispatches session changed event - remove answer (checkbox)', () => {
162
+ const el = makeEl();
163
+ el.model = {
164
+ choiceMode: 'checkbox'
165
+ };
166
+ el.session = {
167
+ value: ['a']
168
+ };
169
+ el._onChange({
170
+ value: 'a',
171
+ selected: false
172
+ });
173
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), false));
174
+ });
175
+ it('dispatches session changed event - add/remove answer (checkbox)', () => {
176
+ const el = makeEl();
177
+ el.model = {
178
+ choiceMode: 'checkbox'
179
+ };
180
+ el.session = {
181
+ value: ['1']
182
+ };
183
+ el._onChange({
184
+ id: '2',
185
+ selected: true
186
+ });
187
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), true));
188
+ el._onChange({
189
+ id: '1',
190
+ selected: false
191
+ });
192
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), true));
193
+ el._onChange({
194
+ id: '2',
195
+ selected: false
196
+ });
197
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), false));
198
+ });
199
+ it('dispatches session changed event - add/change answer (radio)', () => {
200
+ const el = makeEl();
201
+ el.model = {
202
+ choiceMode: 'radio'
203
+ };
204
+ el.session = {
205
+ value: []
206
+ };
207
+ el._onChange({
208
+ value: 'a',
209
+ selected: true
210
+ });
211
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), true));
212
+ el._onChange({
213
+ value: 'b',
214
+ selected: true
215
+ });
216
+ expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent(el.tagName.toLowerCase(), true));
217
+ });
218
+ });
219
+ });
220
+ });
221
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfcGllUGxheWVyRXZlbnRzIiwiX21haW4iLCJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImplc3QiLCJ1c2VGYWtlVGltZXJzIiwibW9jayIsInJlbmRlck1hdGgiLCJmbiIsInRyYW5zbGF0b3IiLCJrZXkiLCJSZWFjdCIsImNob2ljZSIsImNyZWF0ZUVsZW1lbnQiLCJsYWJlbCIsImxvZGFzaCIsImRlYm91bmNlIiwiUHJldmlld0xheW91dCIsImNoaWxkcmVuIiwiQ29sbGFwc2libGUiLCJsYWJlbHMiLCJoaWRkZW4iLCJQcmV2aWV3UHJvbXB0IiwicHJvbXB0IiwiY29sb3IiLCJ0ZXh0IiwiYmFja2dyb3VuZCIsInByaW1hcnkiLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwiZGlzYWJsZWQiLCJkZXNjcmliZSIsIml0IiwiZWFjaCIsInZhbHVlIiwidW5kZWZpbmVkIiwic2Vzc2lvbiIsImV4cGVjdGVkIiwiZXhwZWN0IiwiaXNDb21wbGV0ZSIsInRvRXF1YWwiLCJiZWZvcmVBbGwiLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsIk11bHRpcGxlQ2hvaWNlIiwibWFrZUVsIiwiZWwiLCJkaXNwYXRjaEV2ZW50IiwicmVuZGVyQ29tcG9uZW50IiwibW9kZWxPdmVycmlkZXMiLCJkZWZhdWx0UHJvcHMiLCJtb2RlbCIsImNob2ljZXMiLCJjbGFzc2VzIiwicmVuZGVyIiwiY29udGFpbmVyIiwidG9CZUluVGhlRG9jdW1lbnQiLCJzY3JlZW4iLCJnZXRCeVRlc3RJZCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJnZXRCeVRleHQiLCJ0b0JlQ2FsbGVkV2l0aCIsIk1vZGVsU2V0RXZlbnQiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJjaG9pY2VNb2RlIiwiX29uQ2hhbmdlIiwic2VsZWN0ZWQiLCJTZXNzaW9uQ2hhbmdlZEV2ZW50IiwiaWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2luZGV4LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgTW9kZWxTZXRFdmVudCwgU2Vzc2lvbkNoYW5nZWRFdmVudCB9IGZyb20gJ0BwaWUtZnJhbWV3b3JrL3BpZS1wbGF5ZXItZXZlbnRzJztcbmltcG9ydCBNdWx0aXBsZUNob2ljZUNvbXBvbmVudCBmcm9tICcuLi9tYWluJztcbmltcG9ydCBNdWx0aXBsZUNob2ljZSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBpc0NvbXBsZXRlIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5qZXN0LnVzZUZha2VUaW1lcnMoKTtcbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnLCAoKSA9PiAoeyByZW5kZXJNYXRoOiBqZXN0LmZuKCkgfSkpO1xuamVzdC5tb2NrKCdAcGllLWxpYi9jb3JyZWN0LWFuc3dlci10b2dnbGUnLCAoKSA9PiAoKSA9PiBudWxsKTtcbmplc3QubW9jaygnQHBpZS1saWIvdHJhbnNsYXRvcicsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IHsgdHJhbnNsYXRvcjogeyB0OiAoa2V5KSA9PiBrZXkgfSB9LFxufSkpO1xuamVzdC5tb2NrKCcuLi9jaG9pY2UnLCAoKSA9PiB7XG4gIGNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbiAgcmV0dXJuIHtcbiAgICBfX2VzTW9kdWxlOiB0cnVlLFxuICAgIGRlZmF1bHQ6ICh7IGNob2ljZSB9KSA9PiA8ZGl2PntjaG9pY2UubGFiZWx9PC9kaXY+LFxuICB9O1xufSk7XG5qZXN0Lm1vY2soJ2xvZGFzaC1lcycsICgpID0+IHtcbiAgY29uc3QgbG9kYXNoID0gcmVxdWlyZSgnbG9kYXNoJyk7XG4gIHJldHVybiB7XG4gICAgLi4ubG9kYXNoLFxuICAgIGRlYm91bmNlOiBqZXN0LmZuKChmbikgPT4gZm4pLFxuICB9O1xufSk7XG5cbi8vIE1vY2sgdGhlIHJlbmRlci11aSBQcmV2aWV3TGF5b3V0XG5qZXN0Lm1vY2soJ0BwaWUtbGliL3JlbmRlci11aScsICgpID0+ICh7XG4gIFByZXZpZXdMYXlvdXQ6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJwcmV2aWV3LWxheW91dFwiPntjaGlsZHJlbn08L2Rpdj4sXG4gIENvbGxhcHNpYmxlOiAoeyBjaGlsZHJlbiwgbGFiZWxzIH0pID0+IChcbiAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiY29sbGFwc2libGVcIj5cbiAgICAgIDxidXR0b24+e2xhYmVscz8uaGlkZGVuIHx8ICdTaG93J308L2J1dHRvbj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgUHJldmlld1Byb21wdDogKHsgcHJvbXB0IH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJwcmV2aWV3LXByb21wdFwiPntwcm9tcHR9PC9kaXY+LFxuICBjb2xvcjoge1xuICAgIHRleHQ6ICgpID0+ICcjMDAwJyxcbiAgICBiYWNrZ3JvdW5kOiAoKSA9PiAnI2ZmZicsXG4gICAgcHJpbWFyeTogKCkgPT4gJyMxOTc2ZDInLFxuICAgIGNvcnJlY3Q6ICgpID0+ICcjNGNhZjUwJyxcbiAgICBpbmNvcnJlY3Q6ICgpID0+ICcjZjQ0MzM2JyxcbiAgICBkaXNhYmxlZDogKCkgPT4gJyM5ZTllOWUnLFxuICB9LFxufSkpO1xuXG5kZXNjcmliZSgnaXNDb21wbGV0ZScsICgpID0+IHtcbiAgaXQuZWFjaGBcbiAgICBzZXNzaW9uICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgJHt7IHZhbHVlOiBbMSwgMiwgM10gfX0gfCAke3RydWV9XG4gICAgJHt7IHZhbHVlOiBbXSB9fSAgICAgICAgfCAke2ZhbHNlfVxuICAgICR7e319ICAgICAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke251bGx9ICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHt1bmRlZmluZWR9ICAgICAgICAgICAgfCAke2ZhbHNlfVxuICBgKCdzZXNzaW9uID0gJHNlc3Npb24gaXMgY29tcGxldGUgPT4gJGV4cGVjdGVkJywgKHsgc2Vzc2lvbiwgZXhwZWN0ZWQgfSkgPT4ge1xuICAgIGV4cGVjdChpc0NvbXBsZXRlKHNlc3Npb24pKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcblxuYmVmb3JlQWxsKCgpID0+IHtcbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdwaWUtbXVsdGlwbGUtY2hvaWNlJywgTXVsdGlwbGVDaG9pY2UpO1xufSk7XG5cbmNvbnN0IG1ha2VFbCA9ICgpID0+IHtcbiAgY29uc3QgZWwgPSBuZXcgTXVsdGlwbGVDaG9pY2UoKTtcbiAgZWwuZGlzcGF0Y2hFdmVudCA9IGplc3QuZm4oKTtcbiAgcmV0dXJuIGVsO1xufTtcblxuZGVzY3JpYmUoJ211bHRpcGxlLWNob2ljZScsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBjb25zdCByZW5kZXJDb21wb25lbnQgPSAobW9kZWxPdmVycmlkZXMgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgIHByb21wdDogJ1NlbGVjdCBhbiBhbnN3ZXInLFxuICAgICAgICAgIC4uLm1vZGVsT3ZlcnJpZGVzLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uOiB7fSxcbiAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVuZGVyKDxNdWx0aXBsZUNob2ljZUNvbXBvbmVudCB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgfTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgdGhlIHByZXZpZXcgbGF5b3V0IHdyYXBwZXInLCAoKSA9PiB7XG4gICAgICByZW5kZXJDb21wb25lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ3ByZXZpZXctbGF5b3V0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIHRlYWNoZXJJbnN0cnVjdGlvbnMnLCAoKSA9PiB7XG4gICAgICByZW5kZXJDb21wb25lbnQoeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGhlc2UgYXJlIHRlYWNoZXIgaW5zdHJ1Y3Rpb25zJyB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdUaGVzZSBhcmUgdGVhY2hlciBpbnN0cnVjdGlvbnMnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGNob2ljZXMgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IHZhbHVlOiAnYScsIGxhYmVsOiAnT3B0aW9uIEEnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJ2InLCBsYWJlbDogJ09wdGlvbiBCJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnT3B0aW9uIEEnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdPcHRpb24gQicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXZlbnRzJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICAgIGl0KCdkaXNwYXRjaGVzIG1vZGVsIHNldCBldmVudCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBtYWtlRWwoKTtcbiAgICAgICAgZWwubW9kZWwgPSB7fTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBNb2RlbFNldEV2ZW50KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgZmFsc2UsIHRydWUpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgaXQoJ2Rpc3BhdGNoZXMgc2Vzc2lvbiBjaGFuZ2VkIGV2ZW50IC0gYWRkIGFuc3dlciAoY2hlY2tib3gpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IG1ha2VFbCgpO1xuICAgICAgICBlbC5tb2RlbCA9IHsgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyB9O1xuICAgICAgICBlbC5zZXNzaW9uID0geyB2YWx1ZTogW10gfTtcbiAgICAgICAgZWwuX29uQ2hhbmdlKHsgdmFsdWU6ICdhJywgc2VsZWN0ZWQ6IHRydWUgfSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIHRydWUpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlzcGF0Y2hlcyBzZXNzaW9uIGNoYW5nZWQgZXZlbnQgLSByZW1vdmUgYW5zd2VyIChjaGVja2JveCknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gbWFrZUVsKCk7XG4gICAgICAgIGVsLm1vZGVsID0geyBjaG9pY2VNb2RlOiAnY2hlY2tib3gnIH07XG4gICAgICAgIGVsLnNlc3Npb24gPSB7IHZhbHVlOiBbJ2EnXSB9O1xuICAgICAgICBlbC5fb25DaGFuZ2UoeyB2YWx1ZTogJ2EnLCBzZWxlY3RlZDogZmFsc2UgfSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIGZhbHNlKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc3BhdGNoZXMgc2Vzc2lvbiBjaGFuZ2VkIGV2ZW50IC0gYWRkL3JlbW92ZSBhbnN3ZXIgKGNoZWNrYm94KScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBtYWtlRWwoKTtcbiAgICAgICAgZWwubW9kZWwgPSB7IGNob2ljZU1vZGU6ICdjaGVja2JveCcgfTtcbiAgICAgICAgZWwuc2Vzc2lvbiA9IHsgdmFsdWU6IFsnMSddIH07XG4gICAgICAgIGVsLl9vbkNoYW5nZSh7IGlkOiAnMicsIHNlbGVjdGVkOiB0cnVlIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IFNlc3Npb25DaGFuZ2VkRXZlbnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCB0cnVlKSk7XG5cbiAgICAgICAgZWwuX29uQ2hhbmdlKHsgaWQ6ICcxJywgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IFNlc3Npb25DaGFuZ2VkRXZlbnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCB0cnVlKSk7XG5cbiAgICAgICAgZWwuX29uQ2hhbmdlKHsgaWQ6ICcyJywgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IFNlc3Npb25DaGFuZ2VkRXZlbnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBmYWxzZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaXNwYXRjaGVzIHNlc3Npb24gY2hhbmdlZCBldmVudCAtIGFkZC9jaGFuZ2UgYW5zd2VyIChyYWRpbyknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gbWFrZUVsKCk7XG4gICAgICAgIGVsLm1vZGVsID0geyBjaG9pY2VNb2RlOiAncmFkaW8nIH07XG4gICAgICAgIGVsLnNlc3Npb24gPSB7IHZhbHVlOiBbXSB9O1xuICAgICAgICBlbC5fb25DaGFuZ2UoeyB2YWx1ZTogJ2EnLCBzZWxlY3RlZDogdHJ1ZSB9KTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgdHJ1ZSkpO1xuICAgICAgICBlbC5fb25DaGFuZ2UoeyB2YWx1ZTogJ2InLCBzZWxlY3RlZDogdHJ1ZSB9KTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgdHJ1ZSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFBc0MsU0FBQUssd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEs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
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _multipleChoice = _interopRequireDefault(require("../multiple-choice"));
5
+ describe('MultipleChoice', () => {
6
+ let instance;
7
+ beforeEach(() => {
8
+ instance = new _multipleChoice.default();
9
+ instance._model = {
10
+ choices: [{
11
+ value: '1'
12
+ }, {
13
+ value: '2'
14
+ }, {
15
+ value: '3'
16
+ }],
17
+ choiceMode: 'checkbox'
18
+ };
19
+ instance._session = {
20
+ value: []
21
+ };
22
+ instance._onChange = jest.fn();
23
+ });
24
+ describe('handleKeyDown', () => {
25
+ const simulateKeyDown = key => {
26
+ const event = new KeyboardEvent('keydown', {
27
+ key
28
+ });
29
+ instance.handleKeyDown(event);
30
+ };
31
+ it('selects a choice on valid numeric key (checkbox)', () => {
32
+ simulateKeyDown('1');
33
+ expect(instance._onChange).toHaveBeenCalledWith({
34
+ value: '1',
35
+ selected: true
36
+ });
37
+ });
38
+ it('toggles a choice on valid numeric key (checkbox)', () => {
39
+ instance._session.value = ['1'];
40
+ simulateKeyDown('1');
41
+ expect(instance._onChange).toHaveBeenCalledWith({
42
+ value: '1',
43
+ selected: false
44
+ });
45
+ });
46
+ it('selects a choice on valid alphabetic key (checkbox)', () => {
47
+ simulateKeyDown('a');
48
+ expect(instance._onChange).toHaveBeenCalledWith({
49
+ value: '1',
50
+ selected: true
51
+ });
52
+ });
53
+ it('does nothing on invalid key', () => {
54
+ simulateKeyDown('z');
55
+ expect(instance._onChange).not.toHaveBeenCalled();
56
+ });
57
+ it('selects a choice in radio mode', () => {
58
+ instance._model.choiceMode = 'radio';
59
+ simulateKeyDown('2');
60
+ expect(instance._onChange).toHaveBeenCalledWith({
61
+ value: '2',
62
+ selected: true
63
+ });
64
+ });
65
+ it('replaces the selected choice in radio mode', () => {
66
+ instance._model.choiceMode = 'radio';
67
+ instance._session.value = ['1'];
68
+ simulateKeyDown('3');
69
+ expect(instance._onChange).toHaveBeenCalledWith({
70
+ value: '3',
71
+ selected: true
72
+ });
73
+ });
74
+ it('does not toggle the same choice in radio mode', () => {
75
+ instance._model.choiceMode = 'radio';
76
+ instance._session.value = ['1'];
77
+ simulateKeyDown('1');
78
+ expect(instance._onChange).toHaveBeenCalledWith({
79
+ value: '1',
80
+ selected: true
81
+ });
82
+ });
83
+ it('does nothing if model is missing', () => {
84
+ instance._model = null;
85
+ simulateKeyDown('1');
86
+ expect(instance._onChange).not.toHaveBeenCalled();
87
+ });
88
+ it('does nothing if session is missing', () => {
89
+ instance._session = null;
90
+ simulateKeyDown('1');
91
+ expect(instance._onChange).not.toHaveBeenCalled();
92
+ });
93
+ });
94
+ });
95
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbXVsdGlwbGVDaG9pY2UiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImRlc2NyaWJlIiwiaW5zdGFuY2UiLCJiZWZvcmVFYWNoIiwiTXVsdGlwbGVDaG9pY2UiLCJfbW9kZWwiLCJjaG9pY2VzIiwidmFsdWUiLCJjaG9pY2VNb2RlIiwiX3Nlc3Npb24iLCJfb25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJzaW11bGF0ZUtleURvd24iLCJrZXkiLCJldmVudCIsIktleWJvYXJkRXZlbnQiLCJoYW5kbGVLZXlEb3duIiwiaXQiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNlbGVjdGVkIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18va2V5LWV2ZW50cy10ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTXVsdGlwbGVDaG9pY2UgZnJvbSAnLi4vbXVsdGlwbGUtY2hvaWNlJztcblxuZGVzY3JpYmUoJ011bHRpcGxlQ2hvaWNlJywgKCkgPT4ge1xuICBsZXQgaW5zdGFuY2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgaW5zdGFuY2UgPSBuZXcgTXVsdGlwbGVDaG9pY2UoKTtcbiAgICBpbnN0YW5jZS5fbW9kZWwgPSB7XG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgdmFsdWU6ICcxJyB9LFxuICAgICAgICB7IHZhbHVlOiAnMicgfSxcbiAgICAgICAgeyB2YWx1ZTogJzMnIH0sXG4gICAgICBdLFxuICAgICAgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyxcbiAgICB9O1xuICAgIGluc3RhbmNlLl9zZXNzaW9uID0geyB2YWx1ZTogW10gfTtcbiAgICBpbnN0YW5jZS5fb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdoYW5kbGVLZXlEb3duJywgKCkgPT4ge1xuICAgIGNvbnN0IHNpbXVsYXRlS2V5RG93biA9IChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCB7IGtleSB9KTtcbiAgICAgIGluc3RhbmNlLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBpdCgnc2VsZWN0cyBhIGNob2ljZSBvbiB2YWxpZCBudW1lcmljIGtleSAoY2hlY2tib3gpJywgKCkgPT4ge1xuICAgICAgc2ltdWxhdGVLZXlEb3duKCcxJyk7XG4gICAgICBleHBlY3QoaW5zdGFuY2UuX29uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9nZ2xlcyBhIGNob2ljZSBvbiB2YWxpZCBudW1lcmljIGtleSAoY2hlY2tib3gpJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX3Nlc3Npb24udmFsdWUgPSBbJzEnXTtcbiAgICAgIHNpbXVsYXRlS2V5RG93bignMScpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICB2YWx1ZTogJzEnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzZWxlY3RzIGEgY2hvaWNlIG9uIHZhbGlkIGFscGhhYmV0aWMga2V5IChjaGVja2JveCknLCAoKSA9PiB7XG4gICAgICBzaW11bGF0ZUtleURvd24oJ2EnKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5fb25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdGhpbmcgb24gaW52YWxpZCBrZXknLCAoKSA9PiB7XG4gICAgICBzaW11bGF0ZUtleURvd24oJ3onKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5fb25DaGFuZ2UpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2VsZWN0cyBhIGNob2ljZSBpbiByYWRpbyBtb2RlJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX21vZGVsLmNob2ljZU1vZGUgPSAncmFkaW8nO1xuICAgICAgc2ltdWxhdGVLZXlEb3duKCcyJyk7XG4gICAgICBleHBlY3QoaW5zdGFuY2UuX29uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIHZhbHVlOiAnMicsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVwbGFjZXMgdGhlIHNlbGVjdGVkIGNob2ljZSBpbiByYWRpbyBtb2RlJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX21vZGVsLmNob2ljZU1vZGUgPSAncmFkaW8nO1xuICAgICAgaW5zdGFuY2UuX3Nlc3Npb24udmFsdWUgPSBbJzEnXTtcbiAgICAgIHNpbXVsYXRlS2V5RG93bignMycpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICB2YWx1ZTogJzMnLFxuICAgICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHRvZ2dsZSB0aGUgc2FtZSBjaG9pY2UgaW4gcmFkaW8gbW9kZScsICgpID0+IHtcbiAgICAgIGluc3RhbmNlLl9tb2RlbC5jaG9pY2VNb2RlID0gJ3JhZGlvJztcbiAgICAgIGluc3RhbmNlLl9zZXNzaW9uLnZhbHVlID0gWycxJ107XG4gICAgICBzaW11bGF0ZUtleURvd24oJzEnKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5fb25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdGhpbmcgaWYgbW9kZWwgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgIGluc3RhbmNlLl9tb2RlbCA9IG51bGw7XG4gICAgICBzaW11bGF0ZUtleURvd24oJzEnKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5fb25DaGFuZ2UpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3RoaW5nIGlmIHNlc3Npb24gaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgIGluc3RhbmNlLl9zZXNzaW9uID0gbnVsbDtcbiAgICAgIHNpbXVsYXRlS2V5RG93bignMScpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNO0VBQy9CLElBQUlDLFFBQVE7RUFFWkMsVUFBVSxDQUFDLE1BQU07SUFDZkQsUUFBUSxHQUFHLElBQUlFLHVCQUFjLENBQUMsQ0FBQztJQUMvQkYsUUFBUSxDQUFDRyxNQUFNLEdBQUc7TUFDaEJDLE9BQU8sRUFBRSxDQUNQO1FBQUVDLEtBQUssRUFBRTtNQUFJLENBQUMsRUFDZDtRQUFFQSxLQUFLLEVBQUU7TUFBSSxDQUFDLEVBQ2Q7UUFBRUEsS0FBSyxFQUFFO01BQUksQ0FBQyxDQUNmO01BQ0RDLFVBQVUsRUFBRTtJQUNkLENBQUM7SUFDRE4sUUFBUSxDQUFDTyxRQUFRLEdBQUc7TUFBRUYsS0FBSyxFQUFFO0lBQUcsQ0FBQztJQUNqQ0wsUUFBUSxDQUFDUSxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7RUFDaEMsQ0FBQyxDQUFDO0VBRUZYLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTTtJQUM5QixN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
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _index = _interopRequireDefault(require("../index"));
5
+ beforeAll(() => {
6
+ if (!customElements.get('pie-multiple-choice-key-events')) {
7
+ customElements.define('pie-multiple-choice-key-events', _index.default);
8
+ }
9
+ });
10
+ describe('MultipleChoice', () => {
11
+ let instance;
12
+ beforeEach(() => {
13
+ instance = new _index.default();
14
+ instance._model = {
15
+ mode: 'gather',
16
+ choices: [{
17
+ value: '1'
18
+ }, {
19
+ value: '2'
20
+ }, {
21
+ value: '3'
22
+ }],
23
+ choiceMode: 'checkbox'
24
+ };
25
+ instance._session = {
26
+ value: []
27
+ };
28
+ instance._onChange = jest.fn();
29
+ });
30
+ describe('handleKeyDown', () => {
31
+ const simulateKeyDown = key => {
32
+ const event = new KeyboardEvent('keydown', {
33
+ key
34
+ });
35
+ instance.handleKeyDown(event);
36
+ };
37
+ it('selects a choice on valid numeric key (checkbox)', () => {
38
+ simulateKeyDown('1');
39
+ expect(instance._onChange).toHaveBeenCalledWith({
40
+ value: '1',
41
+ selected: true,
42
+ selector: 'Keyboard'
43
+ });
44
+ });
45
+ it('toggles a choice on valid numeric key (checkbox)', () => {
46
+ instance._session.value = ['1'];
47
+ simulateKeyDown('1');
48
+ expect(instance._onChange).toHaveBeenCalledWith({
49
+ value: '1',
50
+ selected: false,
51
+ selector: 'Keyboard'
52
+ });
53
+ });
54
+ it('selects a choice on valid alphabetic key (checkbox)', () => {
55
+ simulateKeyDown('a');
56
+ expect(instance._onChange).toHaveBeenCalledWith({
57
+ value: '1',
58
+ selected: true,
59
+ selector: 'Keyboard'
60
+ });
61
+ });
62
+ it('does nothing on invalid key', () => {
63
+ simulateKeyDown('z');
64
+ expect(instance._onChange).not.toHaveBeenCalled();
65
+ });
66
+ it('selects a choice in radio mode', () => {
67
+ instance._model.choiceMode = 'radio';
68
+ simulateKeyDown('2');
69
+ expect(instance._onChange).toHaveBeenCalledWith({
70
+ value: '2',
71
+ selected: true,
72
+ selector: 'Keyboard'
73
+ });
74
+ });
75
+ it('replaces the selected choice in radio mode', () => {
76
+ instance._model.choiceMode = 'radio';
77
+ instance._session.value = ['1'];
78
+ simulateKeyDown('3');
79
+ expect(instance._onChange).toHaveBeenCalledWith({
80
+ value: '3',
81
+ selected: true,
82
+ selector: 'Keyboard'
83
+ });
84
+ });
85
+ it('does not toggle the same choice in radio mode', () => {
86
+ instance._model.choiceMode = 'radio';
87
+ instance._session.value = ['1'];
88
+ simulateKeyDown('1');
89
+ expect(instance._onChange).toHaveBeenCalledWith({
90
+ value: '1',
91
+ selected: true,
92
+ selector: 'Keyboard'
93
+ });
94
+ });
95
+ it('does nothing if model is missing', () => {
96
+ instance._model = null;
97
+ simulateKeyDown('1');
98
+ expect(instance._onChange).not.toHaveBeenCalled();
99
+ });
100
+ it('does nothing if session is missing', () => {
101
+ instance._session = null;
102
+ simulateKeyDown('1');
103
+ expect(instance._onChange).not.toHaveBeenCalled();
104
+ });
105
+ });
106
+ });
107
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImJlZm9yZUFsbCIsImN1c3RvbUVsZW1lbnRzIiwiZ2V0IiwiZGVmaW5lIiwiTXVsdGlwbGVDaG9pY2UiLCJkZXNjcmliZSIsImluc3RhbmNlIiwiYmVmb3JlRWFjaCIsIl9tb2RlbCIsIm1vZGUiLCJjaG9pY2VzIiwidmFsdWUiLCJjaG9pY2VNb2RlIiwiX3Nlc3Npb24iLCJfb25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJzaW11bGF0ZUtleURvd24iLCJrZXkiLCJldmVudCIsIktleWJvYXJkRXZlbnQiLCJoYW5kbGVLZXlEb3duIiwiaXQiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNlbGVjdGVkIiwic2VsZWN0b3IiLCJub3QiLCJ0b0hhdmVCZWVuQ2FsbGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9rZXktZXZlbnRzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNdWx0aXBsZUNob2ljZSBmcm9tICcuLi9pbmRleCc7XG5cbmJlZm9yZUFsbCgoKSA9PiB7XG4gIGlmICghY3VzdG9tRWxlbWVudHMuZ2V0KCdwaWUtbXVsdGlwbGUtY2hvaWNlLWtleS1ldmVudHMnKSkge1xuICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGllLW11bHRpcGxlLWNob2ljZS1rZXktZXZlbnRzJywgTXVsdGlwbGVDaG9pY2UpO1xuICB9XG59KTtcblxuZGVzY3JpYmUoJ011bHRpcGxlQ2hvaWNlJywgKCkgPT4ge1xuICBsZXQgaW5zdGFuY2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgaW5zdGFuY2UgPSBuZXcgTXVsdGlwbGVDaG9pY2UoKTtcbiAgICBpbnN0YW5jZS5fbW9kZWwgPSB7XG4gICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyB2YWx1ZTogJzEnIH0sXG4gICAgICAgIHsgdmFsdWU6ICcyJyB9LFxuICAgICAgICB7IHZhbHVlOiAnMycgfSxcbiAgICAgIF0sXG4gICAgICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICAgIH07XG4gICAgaW5zdGFuY2UuX3Nlc3Npb24gPSB7IHZhbHVlOiBbXSB9O1xuICAgIGluc3RhbmNlLl9vbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hhbmRsZUtleURvd24nLCAoKSA9PiB7XG4gICAgY29uc3Qgc2ltdWxhdGVLZXlEb3duID0gKGtleSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicsIHsga2V5IH0pO1xuICAgICAgaW5zdGFuY2UuaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGl0KCdzZWxlY3RzIGEgY2hvaWNlIG9uIHZhbGlkIG51bWVyaWMga2V5IChjaGVja2JveCknLCAoKSA9PiB7XG4gICAgICBzaW11bGF0ZUtleURvd24oJzEnKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5fb25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIHNlbGVjdG9yOiAnS2V5Ym9hcmQnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9nZ2xlcyBhIGNob2ljZSBvbiB2YWxpZCBudW1lcmljIGtleSAoY2hlY2tib3gpJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX3Nlc3Npb24udmFsdWUgPSBbJzEnXTtcbiAgICAgIHNpbXVsYXRlS2V5RG93bignMScpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICB2YWx1ZTogJzEnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdG9yOiAnS2V5Ym9hcmQnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2VsZWN0cyBhIGNob2ljZSBvbiB2YWxpZCBhbHBoYWJldGljIGtleSAoY2hlY2tib3gpJywgKCkgPT4ge1xuICAgICAgc2ltdWxhdGVLZXlEb3duKCdhJyk7XG4gICAgICBleHBlY3QoaW5zdGFuY2UuX29uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICBzZWxlY3RvcjogJ0tleWJvYXJkJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90aGluZyBvbiBpbnZhbGlkIGtleScsICgpID0+IHtcbiAgICAgIHNpbXVsYXRlS2V5RG93bigneicpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzZWxlY3RzIGEgY2hvaWNlIGluIHJhZGlvIG1vZGUnLCAoKSA9PiB7XG4gICAgICBpbnN0YW5jZS5fbW9kZWwuY2hvaWNlTW9kZSA9ICdyYWRpbyc7XG4gICAgICBzaW11bGF0ZUtleURvd24oJzInKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5fb25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgdmFsdWU6ICcyJyxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIHNlbGVjdG9yOiAnS2V5Ym9hcmQnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVwbGFjZXMgdGhlIHNlbGVjdGVkIGNob2ljZSBpbiByYWRpbyBtb2RlJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX21vZGVsLmNob2ljZU1vZGUgPSAncmFkaW8nO1xuICAgICAgaW5zdGFuY2UuX3Nlc3Npb24udmFsdWUgPSBbJzEnXTtcbiAgICAgIHNpbXVsYXRlS2V5RG93bignMycpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICB2YWx1ZTogJzMnLFxuICAgICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgc2VsZWN0b3I6ICdLZXlib2FyZCcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0b2dnbGUgdGhlIHNhbWUgY2hvaWNlIGluIHJhZGlvIG1vZGUnLCAoKSA9PiB7XG4gICAgICBpbnN0YW5jZS5fbW9kZWwuY2hvaWNlTW9kZSA9ICdyYWRpbyc7XG4gICAgICBpbnN0YW5jZS5fc2Vzc2lvbi52YWx1ZSA9IFsnMSddO1xuICAgICAgc2ltdWxhdGVLZXlEb3duKCcxJyk7XG4gICAgICBleHBlY3QoaW5zdGFuY2UuX29uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICBzZWxlY3RvcjogJ0tleWJvYXJkJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90aGluZyBpZiBtb2RlbCBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX21vZGVsID0gbnVsbDtcbiAgICAgIHNpbXVsYXRlS2V5RG93bignMScpO1xuICAgICAgZXhwZWN0KGluc3RhbmNlLl9vbkNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdGhpbmcgaWYgc2Vzc2lvbiBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuX3Nlc3Npb24gPSBudWxsO1xuICAgICAgc2ltdWxhdGVLZXlEb3duKCcxJyk7XG4gICAgICBleHBlY3QoaW5zdGFuY2UuX29uQ2hhbmdlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQUMsU0FBUyxDQUFD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
@@ -0,0 +1,101 @@
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 _multipleChoice = require("../multiple-choice");
7
+ var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
8
+ // Mock the CorrectAnswerToggle component
9
+ jest.mock('@pie-lib/correct-answer-toggle', () => {
10
+ const MockToggle = props => /*#__PURE__*/_react.default.createElement("div", {
11
+ "data-testid": "correct-answer-toggle",
12
+ "data-show": props.show,
13
+ "data-toggled": props.toggled
14
+ }, "Mock Toggle");
15
+ MockToggle.displayName = 'CorrectAnswerToggle';
16
+ return MockToggle;
17
+ });
18
+ describe('Choice', () => {
19
+ let onChoiceChanged;
20
+ beforeEach(() => {
21
+ onChoiceChanged = jest.fn();
22
+ });
23
+ const renderChoice = (extras = {}) => {
24
+ const props = {
25
+ classes: {},
26
+ choice: {},
27
+ index: 0,
28
+ choicesLength: 1,
29
+ showCorrect: false,
30
+ isEvaluateMode: false,
31
+ choiceMode: 'radio',
32
+ disabled: true,
33
+ onChoiceChanged,
34
+ checked: true,
35
+ correctness: 'correct',
36
+ displayKey: '0',
37
+ choicesLayout: 'grid',
38
+ gridColumns: 2,
39
+ ...extras
40
+ };
41
+ return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_multipleChoice.Choice, props));
42
+ };
43
+ describe('logic', () => {
44
+ it('does not call onChoiceChanged if disabled is true', () => {
45
+ const {
46
+ container
47
+ } = renderChoice({
48
+ disabled: true
49
+ });
50
+ const input = container.querySelector('input');
51
+ if (input) {
52
+ input.click();
53
+ }
54
+ // When disabled, onChange should not be called
55
+ expect(onChoiceChanged).not.toHaveBeenCalled();
56
+ });
57
+ });
58
+ });
59
+ describe('CorespringChoice', () => {
60
+ const mkWrapper = (opts = {}) => {
61
+ const defaultProps = {
62
+ classes: {},
63
+ choices: [],
64
+ disabled: false,
65
+ keyMode: 'letters',
66
+ onChoiceChanged: jest.fn(),
67
+ mode: 'gather',
68
+ ...opts
69
+ };
70
+ return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_multipleChoice.MultipleChoice, defaultProps));
71
+ };
72
+ describe('Toggle', () => {
73
+ it('toggle is rendered', () => {
74
+ mkWrapper();
75
+ expect(_react2.screen.getByTestId('correct-answer-toggle')).toBeInTheDocument();
76
+ });
77
+ it('toggle show is set to false by default', () => {
78
+ mkWrapper();
79
+ const toggle = _react2.screen.getByTestId('correct-answer-toggle');
80
+ expect(toggle).toHaveAttribute('data-show', 'false');
81
+ });
82
+ it('shows toggle if mode is evaluate, feedback is enabled and responseCorrect is false', () => {
83
+ mkWrapper({
84
+ mode: 'evaluate',
85
+ responseCorrect: false,
86
+ feedbackEnabled: true
87
+ });
88
+ const toggle = _react2.screen.getByTestId('correct-answer-toggle');
89
+ expect(toggle).toHaveAttribute('data-show', 'true');
90
+ });
91
+ it('hides toggle if mode is evaluate and responseCorrect is true', () => {
92
+ mkWrapper({
93
+ mode: 'evaluate',
94
+ responseCorrect: true
95
+ });
96
+ const toggle = _react2.screen.getByTestId('correct-answer-toggle');
97
+ expect(toggle).toHaveAttribute('data-show', 'false');
98
+ });
99
+ });
100
+ });
101
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfbXVsdGlwbGVDaG9pY2UiLCJfY29ycmVjdEFuc3dlclRvZ2dsZSIsImplc3QiLCJtb2NrIiwiTW9ja1RvZ2dsZSIsInByb3BzIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJzaG93IiwidG9nZ2xlZCIsImRpc3BsYXlOYW1lIiwiZGVzY3JpYmUiLCJvbkNob2ljZUNoYW5nZWQiLCJiZWZvcmVFYWNoIiwiZm4iLCJyZW5kZXJDaG9pY2UiLCJleHRyYXMiLCJjbGFzc2VzIiwiY2hvaWNlIiwiaW5kZXgiLCJjaG9pY2VzTGVuZ3RoIiwic2hvd0NvcnJlY3QiLCJpc0V2YWx1YXRlTW9kZSIsImNob2ljZU1vZGUiLCJkaXNhYmxlZCIsImNoZWNrZWQiLCJjb3JyZWN0bmVzcyIsImRpc3BsYXlLZXkiLCJjaG9pY2VzTGF5b3V0IiwiZ3JpZENvbHVtbnMiLCJyZW5kZXIiLCJDaG9pY2UiLCJpdCIsImNvbnRhaW5lciIsImlucHV0IiwicXVlcnlTZWxlY3RvciIsImNsaWNrIiwiZXhwZWN0Iiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCIsIm1rV3JhcHBlciIsIm9wdHMiLCJkZWZhdWx0UHJvcHMiLCJjaG9pY2VzIiwia2V5TW9kZSIsIm1vZGUiLCJNdWx0aXBsZUNob2ljZSIsInNjcmVlbiIsImdldEJ5VGVzdElkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJ0b2dnbGUiLCJ0b0hhdmVBdHRyaWJ1dGUiLCJyZXNwb25zZUNvcnJlY3QiLCJmZWVkYmFja0VuYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL211bHRpcGxlLWNob2ljZS10ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IE11bHRpcGxlQ2hvaWNlLCBDaG9pY2UgfSBmcm9tICcuLi9tdWx0aXBsZS1jaG9pY2UnO1xuaW1wb3J0IENvcnJlY3RBbnN3ZXJUb2dnbGUgZnJvbSAnQHBpZS1saWIvY29ycmVjdC1hbnN3ZXItdG9nZ2xlJztcblxuLy8gTW9jayB0aGUgQ29ycmVjdEFuc3dlclRvZ2dsZSBjb21wb25lbnRcbmplc3QubW9jaygnQHBpZS1saWIvY29ycmVjdC1hbnN3ZXItdG9nZ2xlJywgKCkgPT4ge1xuICBjb25zdCBNb2NrVG9nZ2xlID0gKHByb3BzKSA9PiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImNvcnJlY3QtYW5zd2VyLXRvZ2dsZVwiIGRhdGEtc2hvdz17cHJvcHMuc2hvd30gZGF0YS10b2dnbGVkPXtwcm9wcy50b2dnbGVkfT5cbiAgICAgIE1vY2sgVG9nZ2xlXG4gICAgPC9kaXY+XG4gICk7XG4gIE1vY2tUb2dnbGUuZGlzcGxheU5hbWUgPSAnQ29ycmVjdEFuc3dlclRvZ2dsZSc7XG4gIHJldHVybiBNb2NrVG9nZ2xlO1xufSk7XG5cbmRlc2NyaWJlKCdDaG9pY2UnLCAoKSA9PiB7XG4gIGxldCBvbkNob2ljZUNoYW5nZWQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaG9pY2VDaGFuZ2VkID0gamVzdC5mbigpO1xuICB9KTtcblxuICBjb25zdCByZW5kZXJDaG9pY2UgPSAoZXh0cmFzID0ge30pID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2hvaWNlOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgY2hvaWNlc0xlbmd0aDogMSxcbiAgICAgIHNob3dDb3JyZWN0OiBmYWxzZSxcbiAgICAgIGlzRXZhbHVhdGVNb2RlOiBmYWxzZSxcbiAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgIG9uQ2hvaWNlQ2hhbmdlZCxcbiAgICAgIGNoZWNrZWQ6IHRydWUsXG4gICAgICBjb3JyZWN0bmVzczogJ2NvcnJlY3QnLFxuICAgICAgZGlzcGxheUtleTogJzAnLFxuICAgICAgY2hvaWNlc0xheW91dDogJ2dyaWQnLFxuICAgICAgZ3JpZENvbHVtbnM6IDIsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfTtcbiAgICByZXR1cm4gcmVuZGVyKDxDaG9pY2Ugey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ2xvZ2ljJywgKCkgPT4ge1xuICAgIGl0KCdkb2VzIG5vdCBjYWxsIG9uQ2hvaWNlQ2hhbmdlZCBpZiBkaXNhYmxlZCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNob2ljZSh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5jbGljaygpO1xuICAgICAgfVxuICAgICAgLy8gV2hlbiBkaXNhYmxlZCwgb25DaGFuZ2Ugc2hvdWxkIG5vdCBiZSBjYWxsZWRcbiAgICAgIGV4cGVjdChvbkNob2ljZUNoYW5nZWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDb3Jlc3ByaW5nQ2hvaWNlJywgKCkgPT4ge1xuICBjb25zdCBta1dyYXBwZXIgPSAob3B0cyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBjaG9pY2VzOiBbXSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGtleU1vZGU6ICdsZXR0ZXJzJyxcbiAgICAgIG9uQ2hvaWNlQ2hhbmdlZDogamVzdC5mbigpLFxuICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyKDxNdWx0aXBsZUNob2ljZSB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ1RvZ2dsZScsICgpID0+IHtcbiAgICBpdCgndG9nZ2xlIGlzIHJlbmRlcmVkJywgKCkgPT4ge1xuICAgICAgbWtXcmFwcGVyKCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdjb3JyZWN0LWFuc3dlci10b2dnbGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0b2dnbGUgc2hvdyBpcyBzZXQgdG8gZmFsc2UgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIG1rV3JhcHBlcigpO1xuICAgICAgY29uc3QgdG9nZ2xlID0gc2NyZWVuLmdldEJ5VGVzdElkKCdjb3JyZWN0LWFuc3dlci10b2dnbGUnKTtcbiAgICAgIGV4cGVjdCh0b2dnbGUpLnRvSGF2ZUF0dHJpYnV0ZSgnZGF0YS1zaG93JywgJ2ZhbHNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgdG9nZ2xlIGlmIG1vZGUgaXMgZXZhbHVhdGUsIGZlZWRiYWNrIGlzIGVuYWJsZWQgYW5kIHJlc3BvbnNlQ29ycmVjdCBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgIG1rV3JhcHBlcih7IG1vZGU6ICdldmFsdWF0ZScsIHJlc3BvbnNlQ29ycmVjdDogZmFsc2UsIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHRvZ2dsZSA9IHNjcmVlbi5nZXRCeVRlc3RJZCgnY29ycmVjdC1hbnN3ZXItdG9nZ2xlJyk7XG4gICAgICBleHBlY3QodG9nZ2xlKS50b0hhdmVBdHRyaWJ1dGUoJ2RhdGEtc2hvdycsICd0cnVlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGlkZXMgdG9nZ2xlIGlmIG1vZGUgaXMgZXZhbHVhdGUgYW5kIHJlc3BvbnNlQ29ycmVjdCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgbWtXcmFwcGVyKHsgbW9kZTogJ2V2YWx1YXRlJywgcmVzcG9uc2VDb3JyZWN0OiB0cnVlIH0pO1xuICAgICAgY29uc3QgdG9nZ2xlID0gc2NyZWVuLmdldEJ5VGVzdElkKCdjb3JyZWN0LWFuc3dlci10b2dnbGUnKTtcbiAgICAgIGV4cGVjdCh0b2dnbGUpLnRvSGF2ZUF0dHJpYnV0ZSgnZGF0YS1zaG93JywgJ2ZhbHNlJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLG9CQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQTtBQUNBSSxJQUFJLENBQUNDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxNQUFNO0VBQ2hELE1BQU1DLFVBQVUsR0FBSUMsS0FBSyxpQkFDdkJULE1BQUEsQ0FBQVUsT0FBQSxDQUFBQyxhQUFBO0lBQUssZUFBWSx1QkFBdUI7SUFBQyxhQUFXRixLQUFLLENBQUNHLElBQUs7SUFBQyxnQkFBY0gsS0FBSyxDQUFDSTtFQUFRLEdBQUMsYUFFeEYsQ0FDTjtFQUNETCxVQUFVLENBQUNNLFdBQVcsR0FBRyxxQkFBcUI7RUFDOUMsT0FBT04sVUFBVTtBQUNuQixDQUFDLENBQUM7QUFFRk8sUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNO0VBQ3ZCLElBQUlDLGVBQWU7RUFFbkJDLFVBQVUsQ0FBQyxNQUFNO0lBQ2ZELGVBQWUsR0FBR1YsSUFBSSxDQUFDWSxFQUFFLENBQUMsQ0FBQztFQUM3QixDQUFDLENBQUM7RUFFRixNQUFNQyxZQUFZLEdBQUdBLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSztJQUNwQyxNQUFNWCxLQUFLLEdBQUc7TUFDWlksT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNYQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQ1ZDLEtBQUssRUFBRSxDQUFDO01BQ1JDLGFBQWEsRUFBRSxDQUFDO01BQ2hCQyxXQUFXLEVBQUUsS0FBSztNQUNsQkMsY0FBYyxFQUFFLEtBQUs7TUFDckJDLFVBQVUsRUFBRSxPQUFPO01BQ25CQyxRQUFRLEVBQUUsSUFBSTtNQUNkWixlQUFlO01BQ2ZhLE9BQU8sRUFBRSxJQUFJO01BQ2JDLFdBQVcsRUFBRSxTQUFTO01BQ3RCQyxVQUFVLEVBQUUsR0FBRztNQUNmQyxhQUFhLEVBQUUsTUFBTTtNQUNyQkMsV0FBVyxFQUFFLENBQUM7TUFDZCxHQUFHYjtJQUNMLENBQUM7SUFDRCxPQUFPLElBQUFjLGNBQU0sZUFBQ2xDLE1BQUEsQ0FBQVUsT0FBQSxDQUFBQyxhQUFBLENBQUNQLGVBQUEsQ0FBQStCLE1BQU0sRUFBSzFCLEtBQVEsQ0FBQyxDQUFDO0VBQ3RDLENBQUM7RUFFRE0sUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNO0lBQ3RCcUIsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLE1BQU07TUFDNUQsTUFBTTtRQUFFQztNQUFVLENBQUMsR0FBR2xCLFlBQVksQ0FBQztRQUFFUyxRQUFRLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDdEQsTUFBTVUsS0FBSyxHQUFHRCxTQUFTLENBQUNFLGFBQWEsQ0FBQyxPQUFPLENBQUM7TUFDOUMsSUFBSUQsS0FBSyxFQUFFO1FBQ1RBLEtBQUssQ0FBQ0UsS0FBSyxDQUFDLENBQUM7TUFDZjtNQUNBO01BQ0FDLE1BQU0sQ0FBQ3pCLGVBQWUsQ0FBQyxDQUFDMEIsR0FBRyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGNUIsUUFBUSxDQUFDLGtCQUFrQixFQUFFLE1BQU07RUFDakMsTUFBTTZCLFNBQVMsR0FBR0EsQ0FBQ0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLO0lBQy9CLE1BQU1DLFlBQVksR0FBRztNQUNuQnpCLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDWDBCLE9BQU8sRUFBRSxFQUFFO01BQ1huQixRQUFRLEVBQUUsS0FBSztNQUNmb0IsT0FBTyxFQUFFLFNBQVM7TUFDbEJoQyxlQUFlLEVBQUVWLElBQUksQ0FBQ1ksRUFBRSxDQUFDLENBQUM7TUFDMUIrQixJQUFJLEVBQUUsUUFBUTtNQUNkLEdBQUdKO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBQVgsY0FBTSxlQUFDbEMsTUFBQSxDQUFBVSxPQUFBLENBQUFDLGFBQUEsQ0FBQ1AsZUFBQSxDQUFBOEMsY0FBYyxFQUFLSixZQUFlLENBQUMsQ0FBQztFQUNyRCxDQUFDO0VBRUQvQixRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU07SUFDdkJxQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsTUFBTTtNQUM3QlEsU0FBUyxDQUFDLENBQUM7TUFDWEgsTUFBTSxDQUFDVSxjQUFNLENBQUNDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBRUZqQixFQUFFLENBQUMsd0NBQXdDLEVBQUUsTUFBTTtNQUNqRFEsU0FBUyxDQUFDLENBQUM7TUFDWCxNQUFNVSxNQUFNLEdBQUdILGNBQU0sQ0FBQ0MsV0FBVyxDQUFDLHVCQUF1QixDQUFDO01BQzFEWCxNQUFNLENBQUNhLE1BQU0sQ0FBQyxDQUFDQyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztJQUN0RCxDQUFDLENBQUM7SUFFRm5CLEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxNQUFNO01BQzdGUSxTQUFTLENBQUM7UUFBRUssSUFBSSxFQUFFLFVBQVU7UUFBRU8sZUFBZSxFQUFFLEtBQUs7UUFBRUMsZUFBZSxFQUFFO01BQUssQ0FBQyxDQUFDO01BQzlFLE1BQU1ILE1BQU0sR0FBR0gsY0FBTSxDQUFDQyxXQUFXLENBQUMsdUJBQXVCLENBQUM7TUFDMURYLE1BQU0sQ0FBQ2EsTUFBTSxDQUFDLENBQUNDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3JELENBQUMsQ0FBQztJQUVGbkIsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLE1BQU07TUFDdkVRLFNBQVMsQ0FBQztRQUFFSyxJQUFJLEVBQUUsVUFBVTtRQUFFTyxlQUFlLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDdEQsTUFBTUYsTUFBTSxHQUFHSCxjQUFNLENBQUNDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztNQUMxRFgsTUFBTSxDQUFDYSxNQUFNLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7SUFDdEQsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119