@pie-lib/mask-markup 2.2.0-next.2 → 2.2.0-next.5
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 +26 -33
- package/LICENSE.md +5 -0
- package/lib/choices/choice.js +1 -1
- package/lib/choices/index.js +1 -1
- package/lib/componentize.js +1 -1
- package/lib/components/blank.js +1 -1
- package/lib/components/correct-input.js +1 -1
- package/lib/components/dropdown.js +1 -1
- package/lib/components/input.js +1 -1
- package/lib/constructed-response.js +1 -1
- package/lib/customizable.js +1 -1
- package/lib/drag-in-the-blank.js +33 -32
- package/lib/drag-in-the-blank.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/inline-dropdown.js +1 -1
- package/lib/mask.js +1 -1
- package/lib/serialization.js +1 -1
- package/lib/with-mask.js +1 -1
- package/package.json +3 -3
- package/src/drag-in-the-blank.jsx +33 -27
- package/lib/__tests__/drag-in-the-blank.test.js +0 -129
- package/lib/__tests__/index.test.js +0 -39
- package/lib/__tests__/mask.test.js +0 -163
- package/lib/__tests__/serialization.test.js +0 -44
- package/lib/__tests__/utils.js +0 -14
- package/lib/__tests__/with-mask.test.js +0 -110
- package/lib/choices/__tests__/index.test.js +0 -101
- package/lib/components/__tests__/blank.test.js +0 -188
- package/lib/components/__tests__/correct-input.test.js +0 -132
- package/lib/components/__tests__/dropdown.test.js +0 -134
- package/lib/components/__tests__/input.test.js +0 -129
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
6
|
-
var React = _interopRequireWildcard(require("react"));
|
|
7
|
-
var _react2 = require("@testing-library/react");
|
|
8
|
-
var _blank = _interopRequireDefault(require("../blank"));
|
|
9
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(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 (var _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
|
-
// Mock @dnd-kit hooks to avoid DndContext requirement
|
|
11
|
-
jest.mock('@dnd-kit/core', function () {
|
|
12
|
-
return {
|
|
13
|
-
useDraggable: jest.fn(function () {
|
|
14
|
-
return {
|
|
15
|
-
attributes: {},
|
|
16
|
-
listeners: {},
|
|
17
|
-
setNodeRef: jest.fn(),
|
|
18
|
-
transform: null,
|
|
19
|
-
isDragging: false
|
|
20
|
-
};
|
|
21
|
-
}),
|
|
22
|
-
useDroppable: jest.fn(function () {
|
|
23
|
-
return {
|
|
24
|
-
setNodeRef: jest.fn(),
|
|
25
|
-
isOver: false,
|
|
26
|
-
active: null
|
|
27
|
-
};
|
|
28
|
-
})
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
jest.mock('@dnd-kit/utilities', function () {
|
|
32
|
-
return {
|
|
33
|
-
CSS: {
|
|
34
|
-
Translate: {
|
|
35
|
-
toString: jest.fn(function () {
|
|
36
|
-
return 'translate3d(0, 0, 0)';
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
describe('Blank', function () {
|
|
43
|
-
var onChange = jest.fn();
|
|
44
|
-
var defaultProps = {
|
|
45
|
-
disabled: false,
|
|
46
|
-
choice: {
|
|
47
|
-
value: 'Cow'
|
|
48
|
-
},
|
|
49
|
-
isOver: false,
|
|
50
|
-
dragItem: {},
|
|
51
|
-
correct: false,
|
|
52
|
-
onChange: onChange
|
|
53
|
-
};
|
|
54
|
-
beforeEach(function () {
|
|
55
|
-
onChange.mockClear();
|
|
56
|
-
});
|
|
57
|
-
describe('rendering', function () {
|
|
58
|
-
it('renders with default props', function () {
|
|
59
|
-
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
|
|
60
|
-
container = _render.container;
|
|
61
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
62
|
-
});
|
|
63
|
-
it('displays the value when provided', function () {
|
|
64
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
65
|
-
expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
|
|
66
|
-
});
|
|
67
|
-
it('renders as disabled when disabled prop is true', function () {
|
|
68
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
69
|
-
disabled: true
|
|
70
|
-
})));
|
|
71
|
-
// Check that delete button is not present when disabled
|
|
72
|
-
expect(_react2.screen.queryByRole('button', {
|
|
73
|
-
name: /delete/i
|
|
74
|
-
})).not.toBeInTheDocument();
|
|
75
|
-
});
|
|
76
|
-
it('renders with dragged item preview', function () {
|
|
77
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
78
|
-
dragItem: {
|
|
79
|
-
choice: {
|
|
80
|
-
value: 'Dog'
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
})));
|
|
84
|
-
// Blank component should render
|
|
85
|
-
expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
|
|
86
|
-
});
|
|
87
|
-
it('shows hover state when isOver is true', function () {
|
|
88
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
89
|
-
dragItem: {
|
|
90
|
-
choice: {
|
|
91
|
-
value: 'Dog'
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
isOver: true
|
|
95
|
-
}))),
|
|
96
|
-
container = _render2.container;
|
|
97
|
-
// Component should have hover styling
|
|
98
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
99
|
-
});
|
|
100
|
-
it('shows correct state when correct is true', function () {
|
|
101
|
-
var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
102
|
-
correct: true
|
|
103
|
-
}))),
|
|
104
|
-
container = _render3.container;
|
|
105
|
-
// Component should indicate correctness
|
|
106
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('delete functionality', function () {
|
|
110
|
-
it('does not show delete button when disabled', function () {
|
|
111
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
112
|
-
disabled: true
|
|
113
|
-
})));
|
|
114
|
-
expect(_react2.screen.queryByRole('button', {
|
|
115
|
-
name: /delete/i
|
|
116
|
-
})).not.toBeInTheDocument();
|
|
117
|
-
});
|
|
118
|
-
it('does not show delete button when no value is set', function () {
|
|
119
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
120
|
-
choice: undefined
|
|
121
|
-
})));
|
|
122
|
-
expect(_react2.screen.queryByRole('button', {
|
|
123
|
-
name: /delete/i
|
|
124
|
-
})).not.toBeInTheDocument();
|
|
125
|
-
});
|
|
126
|
-
it('shows delete button when value is present and not disabled', function () {
|
|
127
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
128
|
-
// If delete button is present, it should be clickable
|
|
129
|
-
var deleteButton = _react2.screen.queryByRole('button');
|
|
130
|
-
if (deleteButton) {
|
|
131
|
-
expect(deleteButton).toBeInTheDocument();
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('dimensions', function () {
|
|
136
|
-
it('renders with custom dimensions when provided', function () {
|
|
137
|
-
var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
138
|
-
emptyResponseAreaHeight: 100,
|
|
139
|
-
emptyResponseAreaWidth: 200
|
|
140
|
-
}))),
|
|
141
|
-
container = _render4.container;
|
|
142
|
-
var element = container.firstChild;
|
|
143
|
-
expect(element).toBeInTheDocument();
|
|
144
|
-
});
|
|
145
|
-
it('renders with min dimensions by default', function () {
|
|
146
|
-
var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
|
|
147
|
-
container = _render5.container;
|
|
148
|
-
var element = container.firstChild;
|
|
149
|
-
expect(element).toBeInTheDocument();
|
|
150
|
-
// Component should have minimum dimensions applied
|
|
151
|
-
});
|
|
152
|
-
it('handles non-numeric dimension props gracefully', function () {
|
|
153
|
-
var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
154
|
-
emptyResponseAreaHeight: "non-numeric",
|
|
155
|
-
emptyResponseAreaWidth: "non-numeric"
|
|
156
|
-
}))),
|
|
157
|
-
container = _render6.container;
|
|
158
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
describe('drag and drop', function () {
|
|
162
|
-
it('accepts drag item when not disabled', function () {
|
|
163
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
164
|
-
isOver: true,
|
|
165
|
-
dragItem: {
|
|
166
|
-
choice: {
|
|
167
|
-
value: 'Dog'
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
})));
|
|
171
|
-
expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
|
|
172
|
-
});
|
|
173
|
-
it('shows drag preview when dragging over', function () {
|
|
174
|
-
var _render7 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
175
|
-
isOver: true,
|
|
176
|
-
dragItem: {
|
|
177
|
-
choice: {
|
|
178
|
-
value: 'Dog'
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}))),
|
|
182
|
-
container = _render7.container;
|
|
183
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
184
|
-
// Should show visual feedback for drag over
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfYmxhbmsiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJqZXN0IiwibW9jayIsInVzZURyYWdnYWJsZSIsImZuIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsInNldE5vZGVSZWYiLCJ0cmFuc2Zvcm0iLCJpc0RyYWdnaW5nIiwidXNlRHJvcHBhYmxlIiwiaXNPdmVyIiwiYWN0aXZlIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwiZGVmYXVsdFByb3BzIiwiZGlzYWJsZWQiLCJjaG9pY2UiLCJ2YWx1ZSIsImRyYWdJdGVtIiwiY29ycmVjdCIsImJlZm9yZUVhY2giLCJtb2NrQ2xlYXIiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50Iiwic2NyZWVuIiwiZ2V0QnlUZXh0IiwiX2V4dGVuZHMyIiwicXVlcnlCeVJvbGUiLCJuYW1lIiwibm90IiwiX3JlbmRlcjIiLCJfcmVuZGVyMyIsInVuZGVmaW5lZCIsImRlbGV0ZUJ1dHRvbiIsIl9yZW5kZXI0IiwiZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQiLCJlbXB0eVJlc3BvbnNlQXJlYVdpZHRoIiwiZWxlbWVudCIsIl9yZW5kZXI1IiwiX3JlbmRlcjYiLCJfcmVuZGVyNyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL19fdGVzdHNfXy9ibGFuay50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgQmxhbmsgZnJvbSAnLi4vYmxhbmsnO1xuXG4vLyBNb2NrIEBkbmQta2l0IGhvb2tzIHRvIGF2b2lkIERuZENvbnRleHQgcmVxdWlyZW1lbnRcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIHVzZURyYWdnYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGxpc3RlbmVyczoge30sXG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIHRyYW5zZm9ybTogbnVsbCxcbiAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgfSkpLFxuICB1c2VEcm9wcGFibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBzZXROb2RlUmVmOiBqZXN0LmZuKCksXG4gICAgaXNPdmVyOiBmYWxzZSxcbiAgICBhY3RpdmU6IG51bGwsXG4gIH0pKSxcbn0pKTtcblxuamVzdC5tb2NrKCdAZG5kLWtpdC91dGlsaXRpZXMnLCAoKSA9PiAoe1xuICBDU1M6IHtcbiAgICBUcmFuc2xhdGU6IHtcbiAgICAgIHRvU3RyaW5nOiBqZXN0LmZuKCgpID0+ICd0cmFuc2xhdGUzZCgwLCAwLCAwKScpLFxuICAgIH0sXG4gIH0sXG59KSk7XG5cbmRlc2NyaWJlKCdCbGFuaycsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgY2hvaWNlOiB7IHZhbHVlOiAnQ293JyB9LFxuICAgIGlzT3ZlcjogZmFsc2UsXG4gICAgZHJhZ0l0ZW06IHt9LFxuICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgIG9uQ2hhbmdlLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlLm1vY2tDbGVhcigpO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGggZGVmYXVsdCBwcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaXNwbGF5cyB0aGUgdmFsdWUgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NvdycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgYXMgZGlzYWJsZWQgd2hlbiBkaXNhYmxlZCBwcm9wIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVkPXt0cnVlfSAvPik7XG4gICAgICAvLyBDaGVjayB0aGF0IGRlbGV0ZSBidXR0b24gaXMgbm90IHByZXNlbnQgd2hlbiBkaXNhYmxlZFxuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAvZGVsZXRlL2kgfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkcmFnZ2VkIGl0ZW0gcHJldmlldycsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IC8+KTtcbiAgICAgIC8vIEJsYW5rIGNvbXBvbmVudCBzaG91bGQgcmVuZGVyXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ293JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgaG92ZXIgc3RhdGUgd2hlbiBpc092ZXIgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGRyYWdJdGVtPXt7IGNob2ljZTogeyB2YWx1ZTogJ0RvZycgfSB9fSBpc092ZXI9e3RydWV9IC8+KTtcbiAgICAgIC8vIENvbXBvbmVudCBzaG91bGQgaGF2ZSBob3ZlciBzdHlsaW5nXG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgY29ycmVjdCBzdGF0ZSB3aGVuIGNvcnJlY3QgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGNvcnJlY3Q9e3RydWV9IC8+KTtcbiAgICAgIC8vIENvbXBvbmVudCBzaG91bGQgaW5kaWNhdGUgY29ycmVjdG5lc3NcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlbGV0ZSBmdW5jdGlvbmFsaXR5JywgKCkgPT4ge1xuICAgIGl0KCdkb2VzIG5vdCBzaG93IGRlbGV0ZSBidXR0b24gd2hlbiBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e3RydWV9IC8+KTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL2RlbGV0ZS9pIH0pKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBzaG93IGRlbGV0ZSBidXR0b24gd2hlbiBubyB2YWx1ZSBpcyBzZXQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGNob2ljZT17dW5kZWZpbmVkfSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9kZWxldGUvaSB9KSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgZGVsZXRlIGJ1dHRvbiB3aGVuIHZhbHVlIGlzIHByZXNlbnQgYW5kIG5vdCBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgLy8gSWYgZGVsZXRlIGJ1dHRvbiBpcyBwcmVzZW50LCBpdCBzaG91bGQgYmUgY2xpY2thYmxlXG4gICAgICBjb25zdCBkZWxldGVCdXR0b24gPSBzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicpO1xuICAgICAgaWYgKGRlbGV0ZUJ1dHRvbikge1xuICAgICAgICBleHBlY3QoZGVsZXRlQnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGltZW5zaW9ucycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aXRoIGN1c3RvbSBkaW1lbnNpb25zIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQ9ezEwMH0gZW1wdHlSZXNwb25zZUFyZWFXaWR0aD17MjAwfSAvPixcbiAgICAgICk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICBleHBlY3QoZWxlbWVudCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbWluIGRpbWVuc2lvbnMgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIGV4cGVjdChlbGVtZW50KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgLy8gQ29tcG9uZW50IHNob3VsZCBoYXZlIG1pbmltdW0gZGltZW5zaW9ucyBhcHBsaWVkXG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBub24tbnVtZXJpYyBkaW1lbnNpb24gcHJvcHMgZ3JhY2VmdWxseScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBlbXB0eVJlc3BvbnNlQXJlYUhlaWdodD1cIm5vbi1udW1lcmljXCIgZW1wdHlSZXNwb25zZUFyZWFXaWR0aD1cIm5vbi1udW1lcmljXCIgLz4sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZHJhZyBhbmQgZHJvcCcsICgpID0+IHtcbiAgICBpdCgnYWNjZXB0cyBkcmFnIGl0ZW0gd2hlbiBub3QgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGlzT3Zlcj17dHJ1ZX0gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IC8+KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDb3cnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBkcmFnIHByZXZpZXcgd2hlbiBkcmFnZ2luZyBvdmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gaXNPdmVyPXt0cnVlfSBkcmFnSXRlbT17eyBjaG9pY2U6IHsgdmFsdWU6ICdEb2cnIH0gfX0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgLy8gU2hvdWxkIHNob3cgdmlzdWFsIGZlZWRiYWNrIGZvciBkcmFnIG92ZXJcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFBNkIsU0FBQUQsd0JBQUFLLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFQLHVCQUFBLFlBQUFBLHdCQUFBSyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxjQUFBTSxFQUFBLElBQUFkLENBQUEsZ0JBQUFjLEVBQUEsT0FBQUMsY0FB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QUM7SUFFRlAsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLFlBQU07TUFDekQsSUFBQXVCLFFBQUEsR0FBc0IsSUFBQXJCLGNBQU0sZUFDMUJyRCxLQUFBLENBQUFzRCxhQUFBLENBQUNsRCxNQUFBLFdBQUssTUFBQXlELFNBQUEsaUJBQUtsQixZQUFZO1VBQUUyQix1QkFBdUIsRUFBQyxhQUFhO1VBQUNDLHNCQUFzQixFQUFDO1FBQWEsRUFBRSxDQUN2RyxDQUFDO1FBRk9oQixTQUFTLEdBQUFtQixRQUFBLENBQVRuQixTQUFTO01BR2pCQyxNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZqQixRQUFRLENBQUMsZUFBZSxFQUFFLFlBQU07SUFDOUJVLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxZQUFNO01BQzlDLElBQUFFLGNBQU0sZUFBQ3JELEtBQUEsQ0FBQXNELGFBQUEsQ0FBQ2xELE1BQUEsV0FBSyxNQUFBeUQsU0FBQSxpQkFBS2xCLFlBQVk7UUFBRVAsTUFBTSxFQUFFLElBQUs7UUFBQ1csUUFBUSxFQUFFO1VBQUVGLE1BQU0sRUFBRTtZQUFFQyxLQUFLLEVBQUU7VUFBTTtRQUFFO01BQUUsRUFBRSxDQUFDLENBQUM7TUFDekZVLE1BQU0sQ0FBQ0csY0FBTSxDQUFDQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ0YsaUJBQWlCLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLFlBQU07TUFDaEQsSUFBQXdCLFFBQUEsR0FBc0IsSUFBQXRCLGNBQU0sZUFBQ3JELEtBQUEsQ0FBQXNELGFBQUEsQ0FBQ2xELE1BQUEsV0FBSyxNQUFBeUQsU0FBQSxpQkFBS2xCLFlBQVk7VUFBRVAsTUFBTSxFQUFFLElBQUs7VUFBQ1csUUFBUSxFQUFFO1lBQUVGLE1BQU0sRUFBRTtjQUFFQyxLQUFLLEVBQUU7WUFBTTtVQUFFO1FBQUUsRUFBRSxDQUFDLENBQUM7UUFBdkdTLFNBQVMsR0FBQW9CLFFBQUEsQ0FBVHBCLFNBQVM7TUFDakJDLE1BQU0sQ0FBQ0QsU0FBUyxDQUFDRSxVQUFVLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztNQUNoRDtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
7
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
|
-
var React = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _react2 = require("@testing-library/react");
|
|
10
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
11
|
-
var _correctInput = _interopRequireDefault(require("../correct-input"));
|
|
12
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(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 (var _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); }
|
|
13
|
-
describe('CorrectInput', function () {
|
|
14
|
-
var onChange = jest.fn();
|
|
15
|
-
var defaultProps = {
|
|
16
|
-
disabled: false,
|
|
17
|
-
correct: false,
|
|
18
|
-
variant: 'outlined',
|
|
19
|
-
value: 'Cow',
|
|
20
|
-
onChange: onChange
|
|
21
|
-
};
|
|
22
|
-
beforeEach(function () {
|
|
23
|
-
onChange.mockClear();
|
|
24
|
-
});
|
|
25
|
-
describe('rendering', function () {
|
|
26
|
-
it('renders input with default props', function () {
|
|
27
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], defaultProps));
|
|
28
|
-
var input = _react2.screen.getByRole('textbox');
|
|
29
|
-
expect(input).toBeInTheDocument();
|
|
30
|
-
expect(input).toHaveValue('Cow');
|
|
31
|
-
});
|
|
32
|
-
it('renders as disabled when disabled prop is true', function () {
|
|
33
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
34
|
-
disabled: true
|
|
35
|
-
})));
|
|
36
|
-
var input = _react2.screen.getByRole('textbox');
|
|
37
|
-
expect(input).toBeDisabled();
|
|
38
|
-
});
|
|
39
|
-
it('renders with correct state as false', function () {
|
|
40
|
-
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
41
|
-
correct: false
|
|
42
|
-
}))),
|
|
43
|
-
container = _render.container;
|
|
44
|
-
var input = _react2.screen.getByRole('textbox');
|
|
45
|
-
expect(input).toBeInTheDocument();
|
|
46
|
-
});
|
|
47
|
-
it('renders with correct state as true', function () {
|
|
48
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
49
|
-
correct: true
|
|
50
|
-
}))),
|
|
51
|
-
container = _render2.container;
|
|
52
|
-
var input = _react2.screen.getByRole('textbox');
|
|
53
|
-
expect(input).toBeInTheDocument();
|
|
54
|
-
// Should show visual indication of correctness
|
|
55
|
-
});
|
|
56
|
-
it('renders with outlined variant', function () {
|
|
57
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
58
|
-
variant: "outlined"
|
|
59
|
-
})));
|
|
60
|
-
var input = _react2.screen.getByRole('textbox');
|
|
61
|
-
expect(input).toBeInTheDocument();
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('user interactions', function () {
|
|
65
|
-
it('calls onChange when user types', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
66
|
-
var user, input;
|
|
67
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
68
|
-
while (1) switch (_context.prev = _context.next) {
|
|
69
|
-
case 0:
|
|
70
|
-
user = _userEvent["default"].setup();
|
|
71
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], defaultProps));
|
|
72
|
-
input = _react2.screen.getByRole('textbox');
|
|
73
|
-
_context.next = 1;
|
|
74
|
-
return user.clear(input);
|
|
75
|
-
case 1:
|
|
76
|
-
_context.next = 2;
|
|
77
|
-
return user.type(input, '1');
|
|
78
|
-
case 2:
|
|
79
|
-
expect(onChange).toHaveBeenCalled();
|
|
80
|
-
case 3:
|
|
81
|
-
case "end":
|
|
82
|
-
return _context.stop();
|
|
83
|
-
}
|
|
84
|
-
}, _callee);
|
|
85
|
-
})));
|
|
86
|
-
it('calls onChange with event object', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
87
|
-
var user, input, lastCall;
|
|
88
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
89
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
90
|
-
case 0:
|
|
91
|
-
user = _userEvent["default"].setup();
|
|
92
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
93
|
-
value: ""
|
|
94
|
-
})));
|
|
95
|
-
input = _react2.screen.getByRole('textbox');
|
|
96
|
-
_context2.next = 1;
|
|
97
|
-
return user.type(input, 'test');
|
|
98
|
-
case 1:
|
|
99
|
-
expect(onChange).toHaveBeenCalled();
|
|
100
|
-
// Check that onChange receives an event-like object
|
|
101
|
-
lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];
|
|
102
|
-
expect(lastCall).toHaveProperty('target');
|
|
103
|
-
case 2:
|
|
104
|
-
case "end":
|
|
105
|
-
return _context2.stop();
|
|
106
|
-
}
|
|
107
|
-
}, _callee2);
|
|
108
|
-
})));
|
|
109
|
-
it('updates value when user changes input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
110
|
-
var user, input;
|
|
111
|
-
return _regenerator["default"].wrap(function (_context3) {
|
|
112
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
113
|
-
case 0:
|
|
114
|
-
user = _userEvent["default"].setup();
|
|
115
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_correctInput["default"], defaultProps));
|
|
116
|
-
input = _react2.screen.getByRole('textbox');
|
|
117
|
-
_context3.next = 1;
|
|
118
|
-
return user.clear(input);
|
|
119
|
-
case 1:
|
|
120
|
-
_context3.next = 2;
|
|
121
|
-
return user.type(input, 'Dog');
|
|
122
|
-
case 2:
|
|
123
|
-
expect(onChange).toHaveBeenCalled();
|
|
124
|
-
case 3:
|
|
125
|
-
case "end":
|
|
126
|
-
return _context3.stop();
|
|
127
|
-
}
|
|
128
|
-
}, _callee3);
|
|
129
|
-
})));
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb3JyZWN0SW5wdXQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImRlc2NyaWJlIiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJkZWZhdWx0UHJvcHMiLCJkaXNhYmxlZCIsImNvcnJlY3QiLCJ2YXJpYW50IiwidmFsdWUiLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiaW5wdXQiLCJzY3JlZW4iLCJnZXRCeVJvbGUiLCJleHBlY3QiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInRvSGF2ZVZhbHVlIiwiX2V4dGVuZHMyIiwidG9CZURpc2FibGVkIiwiX3JlbmRlciIsImNvbnRhaW5lciIsIl9yZW5kZXIyIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ1c2VyIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImNsZWFyIiwidHlwZSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJzdG9wIiwiX2NhbGxlZTIiLCJsYXN0Q2FsbCIsIl9jb250ZXh0MiIsIm1vY2siLCJjYWxscyIsImxlbmd0aCIsInRvSGF2ZVByb3BlcnR5IiwiX2NhbGxlZTMiLCJfY29udGV4dDMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9fX3Rlc3RzX18vY29ycmVjdC1pbnB1dC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgdXNlckV2ZW50IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCc7XG5pbXBvcnQgQ29ycmVjdElucHV0IGZyb20gJy4uL2NvcnJlY3QtaW5wdXQnO1xuXG5kZXNjcmliZSgnQ29ycmVjdElucHV0JywgKCkgPT4ge1xuICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICB2YXJpYW50OiAnb3V0bGluZWQnLFxuICAgIHZhbHVlOiAnQ293JyxcbiAgICBvbkNoYW5nZSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZS5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBpbnB1dCB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPENvcnJlY3RJbnB1dCB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9IYXZlVmFsdWUoJ0NvdycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgYXMgZGlzYWJsZWQgd2hlbiBkaXNhYmxlZCBwcm9wIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPENvcnJlY3RJbnB1dCB7Li4uZGVmYXVsdFByb3BzfSBkaXNhYmxlZD17dHJ1ZX0gLz4pO1xuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94Jyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVEaXNhYmxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBjb3JyZWN0IHN0YXRlIGFzIGZhbHNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q29ycmVjdElucHV0IHsuLi5kZWZhdWx0UHJvcHN9IGNvcnJlY3Q9e2ZhbHNlfSAvPik7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY29ycmVjdCBzdGF0ZSBhcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q29ycmVjdElucHV0IHsuLi5kZWZhdWx0UHJvcHN9IGNvcnJlY3Q9e3RydWV9IC8+KTtcbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgndGV4dGJveCcpO1xuICAgICAgZXhwZWN0KGlucHV0KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgLy8gU2hvdWxkIHNob3cgdmlzdWFsIGluZGljYXRpb24gb2YgY29ycmVjdG5lc3NcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggb3V0bGluZWQgdmFyaWFudCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Q29ycmVjdElucHV0IHsuLi5kZWZhdWx0UHJvcHN9IHZhcmlhbnQ9XCJvdXRsaW5lZFwiIC8+KTtcbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgndGV4dGJveCcpO1xuICAgICAgZXhwZWN0KGlucHV0KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlciBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIHdoZW4gdXNlciB0eXBlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8Q29ycmVjdElucHV0IHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94Jyk7XG4gICAgICBhd2FpdCB1c2VyLmNsZWFyKGlucHV0KTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJzEnKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgb25DaGFuZ2Ugd2l0aCBldmVudCBvYmplY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXIoPENvcnJlY3RJbnB1dCB7Li4uZGVmYXVsdFByb3BzfSB2YWx1ZT1cIlwiIC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94Jyk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoaW5wdXQsICd0ZXN0Jyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgLy8gQ2hlY2sgdGhhdCBvbkNoYW5nZSByZWNlaXZlcyBhbiBldmVudC1saWtlIG9iamVjdFxuICAgICAgY29uc3QgbGFzdENhbGwgPSBvbkNoYW5nZS5tb2NrLmNhbGxzW29uQ2hhbmdlLm1vY2suY2FsbHMubGVuZ3RoIC0gMV1bMF07XG4gICAgICBleHBlY3QobGFzdENhbGwpLnRvSGF2ZVByb3BlcnR5KCd0YXJnZXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCd1cGRhdGVzIHZhbHVlIHdoZW4gdXNlciBjaGFuZ2VzIGlucHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyKDxDb3JyZWN0SW5wdXQgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xlYXIoaW5wdXQpO1xuICAgICAgYXdhaXQgdXNlci50eXBlKGlucHV0LCAnRG9nJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQTRDLFNBQUFELHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUix1QkFBQSxZQUFBQSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxPQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsY0FBQU0sRUFBQSxJQUFB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
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
-
var React = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _react2 = require("@testing-library/react");
|
|
10
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
11
|
-
var _utils = require("../../__tests__/utils");
|
|
12
|
-
var _dropdown = _interopRequireDefault(require("../dropdown"));
|
|
13
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(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 (var _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); }
|
|
14
|
-
describe('Dropdown', function () {
|
|
15
|
-
var onChange = jest.fn();
|
|
16
|
-
var defaultProps = {
|
|
17
|
-
onChange: onChange,
|
|
18
|
-
id: '1',
|
|
19
|
-
correct: false,
|
|
20
|
-
disabled: false,
|
|
21
|
-
value: 'Jumped',
|
|
22
|
-
choices: [(0, _utils.choice)('Jumped'), (0, _utils.choice)('Laughed'), (0, _utils.choice)('Smiled')]
|
|
23
|
-
};
|
|
24
|
-
beforeEach(function () {
|
|
25
|
-
onChange.mockClear();
|
|
26
|
-
});
|
|
27
|
-
describe('rendering', function () {
|
|
28
|
-
it('renders dropdown with default props', function () {
|
|
29
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_dropdown["default"], defaultProps));
|
|
30
|
-
var button = _react2.screen.getByRole('combobox');
|
|
31
|
-
expect(button).toBeInTheDocument();
|
|
32
|
-
// Button displays the selected value
|
|
33
|
-
expect(button).toHaveTextContent('Jumped');
|
|
34
|
-
});
|
|
35
|
-
it('renders with all choices as options when opened', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
36
|
-
var user, button, options;
|
|
37
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
38
|
-
while (1) switch (_context.prev = _context.next) {
|
|
39
|
-
case 0:
|
|
40
|
-
user = _userEvent["default"].setup();
|
|
41
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_dropdown["default"], defaultProps));
|
|
42
|
-
button = _react2.screen.getByRole('combobox');
|
|
43
|
-
_context.next = 1;
|
|
44
|
-
return user.click(button);
|
|
45
|
-
case 1:
|
|
46
|
-
// Options should now be visible - find them by role
|
|
47
|
-
options = _react2.screen.getAllByRole('option');
|
|
48
|
-
expect(options).toHaveLength(3);
|
|
49
|
-
// Verify the text content of options using specific elements
|
|
50
|
-
expect(options[0]).toHaveTextContent('Jumped');
|
|
51
|
-
expect(options[1]).toHaveTextContent('Laughed');
|
|
52
|
-
expect(options[2]).toHaveTextContent('Smiled');
|
|
53
|
-
case 2:
|
|
54
|
-
case "end":
|
|
55
|
-
return _context.stop();
|
|
56
|
-
}
|
|
57
|
-
}, _callee);
|
|
58
|
-
})));
|
|
59
|
-
it('renders as disabled when disabled prop is true', function () {
|
|
60
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_dropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
61
|
-
disabled: true
|
|
62
|
-
})));
|
|
63
|
-
var button = _react2.screen.getByRole('combobox');
|
|
64
|
-
expect(button).toBeDisabled();
|
|
65
|
-
});
|
|
66
|
-
it('shows correct state when correct is true', function () {
|
|
67
|
-
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_dropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
68
|
-
correct: true
|
|
69
|
-
}))),
|
|
70
|
-
container = _render.container;
|
|
71
|
-
var button = _react2.screen.getByRole('combobox');
|
|
72
|
-
expect(button).toBeInTheDocument();
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe('user interactions', function () {
|
|
76
|
-
it('calls onChange when user selects a different option', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
77
|
-
var user, button, options, laughedOption;
|
|
78
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
79
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
80
|
-
case 0:
|
|
81
|
-
user = _userEvent["default"].setup();
|
|
82
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_dropdown["default"], defaultProps));
|
|
83
|
-
|
|
84
|
-
// Click button to open menu
|
|
85
|
-
button = _react2.screen.getByRole('combobox');
|
|
86
|
-
_context2.next = 1;
|
|
87
|
-
return user.click(button);
|
|
88
|
-
case 1:
|
|
89
|
-
// Find the option by getting all options and selecting the one with "Laughed" text
|
|
90
|
-
options = _react2.screen.getAllByRole('option');
|
|
91
|
-
laughedOption = options.find(function (opt) {
|
|
92
|
-
return opt.textContent.includes('Laughed');
|
|
93
|
-
});
|
|
94
|
-
_context2.next = 2;
|
|
95
|
-
return user.click(laughedOption);
|
|
96
|
-
case 2:
|
|
97
|
-
expect(onChange).toHaveBeenCalledWith('1', 'Laughed');
|
|
98
|
-
case 3:
|
|
99
|
-
case "end":
|
|
100
|
-
return _context2.stop();
|
|
101
|
-
}
|
|
102
|
-
}, _callee2);
|
|
103
|
-
})));
|
|
104
|
-
it('calls onChange with correct value', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
105
|
-
var user, button, options, smiledOption;
|
|
106
|
-
return _regenerator["default"].wrap(function (_context3) {
|
|
107
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
108
|
-
case 0:
|
|
109
|
-
user = _userEvent["default"].setup();
|
|
110
|
-
(0, _react2.render)(/*#__PURE__*/React.createElement(_dropdown["default"], defaultProps));
|
|
111
|
-
|
|
112
|
-
// Click button to open menu
|
|
113
|
-
button = _react2.screen.getByRole('combobox');
|
|
114
|
-
_context3.next = 1;
|
|
115
|
-
return user.click(button);
|
|
116
|
-
case 1:
|
|
117
|
-
// Find the option by getting all options and selecting the one with "Smiled" text
|
|
118
|
-
options = _react2.screen.getAllByRole('option');
|
|
119
|
-
smiledOption = options.find(function (opt) {
|
|
120
|
-
return opt.textContent.includes('Smiled');
|
|
121
|
-
});
|
|
122
|
-
_context3.next = 2;
|
|
123
|
-
return user.click(smiledOption);
|
|
124
|
-
case 2:
|
|
125
|
-
expect(onChange).toHaveBeenCalledWith('1', 'Smiled');
|
|
126
|
-
case 3:
|
|
127
|
-
case "end":
|
|
128
|
-
return _context3.stop();
|
|
129
|
-
}
|
|
130
|
-
}, _callee3);
|
|
131
|
-
})));
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9kcm9wZG93biIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImplc3QiLCJmbiIsImRlZmF1bHRQcm9wcyIsImlkIiwiY29ycmVjdCIsImRpc2FibGVkIiwidmFsdWUiLCJjaG9pY2VzIiwiY2hvaWNlIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsIml0IiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImJ1dHRvbiIsInNjcmVlbiIsImdldEJ5Um9sZSIsImV4cGVjdCIsInRvQmVJblRoZURvY3VtZW50IiwidG9IYXZlVGV4dENvbnRlbnQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJvcHRpb25zIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImNsaWNrIiwiZ2V0QWxsQnlSb2xlIiwidG9IYXZlTGVuZ3RoIiwic3RvcCIsIl9leHRlbmRzMiIsInRvQmVEaXNhYmxlZCIsIl9yZW5kZXIiLCJjb250YWluZXIiLCJfY2FsbGVlMiIsImxhdWdoZWRPcHRpb24iLCJfY29udGV4dDIiLCJmaW5kIiwib3B0IiwidGV4dENvbnRlbnQiLCJpbmNsdWRlcyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiX2NhbGxlZTMiLCJzbWlsZWRPcHRpb24iLCJfY29udGV4dDMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9fX3Rlc3RzX18vZHJvcGRvd24udGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IHsgY2hvaWNlIH0gZnJvbSAnLi4vLi4vX190ZXN0c19fL3V0aWxzJztcbmltcG9ydCBEcm9wZG93biBmcm9tICcuLi9kcm9wZG93bic7XG5cbmRlc2NyaWJlKCdEcm9wZG93bicsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBvbkNoYW5nZSxcbiAgICBpZDogJzEnLFxuICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICB2YWx1ZTogJ0p1bXBlZCcsXG4gICAgY2hvaWNlczogW2Nob2ljZSgnSnVtcGVkJyksIGNob2ljZSgnTGF1Z2hlZCcpLCBjaG9pY2UoJ1NtaWxlZCcpXSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZS5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBkcm9wZG93biB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPERyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBleHBlY3QoYnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgLy8gQnV0dG9uIGRpc3BsYXlzIHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgICAgZXhwZWN0KGJ1dHRvbikudG9IYXZlVGV4dENvbnRlbnQoJ0p1bXBlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBhbGwgY2hvaWNlcyBhcyBvcHRpb25zIHdoZW4gb3BlbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyKDxEcm9wZG93biB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKGJ1dHRvbik7XG5cbiAgICAgIC8vIE9wdGlvbnMgc2hvdWxkIG5vdyBiZSB2aXNpYmxlIC0gZmluZCB0aGVtIGJ5IHJvbGVcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdvcHRpb24nKTtcbiAgICAgIGV4cGVjdChvcHRpb25zKS50b0hhdmVMZW5ndGgoMyk7XG4gICAgICAvLyBWZXJpZnkgdGhlIHRleHQgY29udGVudCBvZiBvcHRpb25zIHVzaW5nIHNwZWNpZmljIGVsZW1lbnRzXG4gICAgICBleHBlY3Qob3B0aW9uc1swXSkudG9IYXZlVGV4dENvbnRlbnQoJ0p1bXBlZCcpO1xuICAgICAgZXhwZWN0KG9wdGlvbnNbMV0pLnRvSGF2ZVRleHRDb250ZW50KCdMYXVnaGVkJyk7XG4gICAgICBleHBlY3Qob3B0aW9uc1syXSkudG9IYXZlVGV4dENvbnRlbnQoJ1NtaWxlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgYXMgZGlzYWJsZWQgd2hlbiBkaXNhYmxlZCBwcm9wIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPERyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVkPXt0cnVlfSAvPik7XG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KGJ1dHRvbikudG9CZURpc2FibGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgY29ycmVjdCBzdGF0ZSB3aGVuIGNvcnJlY3QgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPERyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IGNvcnJlY3Q9e3RydWV9IC8+KTtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBleHBlY3QoYnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlciBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIHdoZW4gdXNlciBzZWxlY3RzIGEgZGlmZmVyZW50IG9wdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8RHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuXG4gICAgICAvLyBDbGljayBidXR0b24gdG8gb3BlbiBtZW51XG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhidXR0b24pO1xuXG4gICAgICAvLyBGaW5kIHRoZSBvcHRpb24gYnkgZ2V0dGluZyBhbGwgb3B0aW9ucyBhbmQgc2VsZWN0aW5nIHRoZSBvbmUgd2l0aCBcIkxhdWdoZWRcIiB0ZXh0XG4gICAgICBjb25zdCBvcHRpb25zID0gc2NyZWVuLmdldEFsbEJ5Um9sZSgnb3B0aW9uJyk7XG4gICAgICBjb25zdCBsYXVnaGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC50ZXh0Q29udGVudC5pbmNsdWRlcygnTGF1Z2hlZCcpKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2sobGF1Z2hlZE9wdGlvbik7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAnTGF1Z2hlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIHdpdGggY29ycmVjdCB2YWx1ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8RHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuXG4gICAgICAvLyBDbGljayBidXR0b24gdG8gb3BlbiBtZW51XG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhidXR0b24pO1xuXG4gICAgICAvLyBGaW5kIHRoZSBvcHRpb24gYnkgZ2V0dGluZyBhbGwgb3B0aW9ucyBhbmQgc2VsZWN0aW5nIHRoZSBvbmUgd2l0aCBcIlNtaWxlZFwiIHRleHRcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdvcHRpb24nKTtcbiAgICAgIGNvbnN0IHNtaWxlZE9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQudGV4dENvbnRlbnQuaW5jbHVkZXMoJ1NtaWxlZCcpKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soc21pbGVkT3B0aW9uKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnMScsICdTbWlsZWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUYsc0JBQUEsQ0FBQUgs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
|