@pie-lib/mask-markup 2.0.0-beta.2 → 2.1.0-next.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 (80) hide show
  1. package/CHANGELOG.json +1 -871
  2. package/CHANGELOG.md +296 -2
  3. package/LICENSE.md +5 -0
  4. package/NEXT.CHANGELOG.json +1 -0
  5. package/lib/__tests__/drag-in-the-blank.test.js +129 -0
  6. package/lib/__tests__/index.test.js +42 -0
  7. package/lib/__tests__/mask.test.js +163 -0
  8. package/lib/__tests__/serialization.test.js +44 -0
  9. package/lib/__tests__/utils.js +14 -0
  10. package/lib/__tests__/with-mask.test.js +110 -0
  11. package/lib/choices/__tests__/index.test.js +101 -0
  12. package/lib/choices/choice.js +100 -119
  13. package/lib/choices/choice.js.map +1 -1
  14. package/lib/choices/index.js +24 -20
  15. package/lib/choices/index.js.map +1 -1
  16. package/lib/componentize.js +2 -3
  17. package/lib/componentize.js.map +1 -1
  18. package/lib/components/__tests__/blank.test.js +189 -0
  19. package/lib/components/__tests__/correct-input.test.js +132 -0
  20. package/lib/components/__tests__/dropdown.test.js +134 -0
  21. package/lib/components/__tests__/input.test.js +129 -0
  22. package/lib/components/blank.js +316 -222
  23. package/lib/components/blank.js.map +1 -1
  24. package/lib/components/correct-input.js +40 -43
  25. package/lib/components/correct-input.js.map +1 -1
  26. package/lib/components/dropdown.js +394 -125
  27. package/lib/components/dropdown.js.map +1 -1
  28. package/lib/components/input.js +2 -3
  29. package/lib/components/input.js.map +1 -1
  30. package/lib/constructed-response.js +83 -27
  31. package/lib/constructed-response.js.map +1 -1
  32. package/lib/customizable.js +44 -0
  33. package/lib/customizable.js.map +1 -0
  34. package/lib/drag-in-the-blank.js +155 -62
  35. package/lib/drag-in-the-blank.js.map +1 -1
  36. package/lib/index.js +8 -1
  37. package/lib/index.js.map +1 -1
  38. package/lib/inline-dropdown.js +5 -4
  39. package/lib/inline-dropdown.js.map +1 -1
  40. package/lib/mask.js +90 -57
  41. package/lib/mask.js.map +1 -1
  42. package/lib/serialization.js +31 -43
  43. package/lib/serialization.js.map +1 -1
  44. package/lib/with-mask.js +49 -21
  45. package/lib/with-mask.js.map +1 -1
  46. package/package.json +18 -15
  47. package/src/__tests__/drag-in-the-blank.test.js +111 -0
  48. package/src/__tests__/index.test.js +39 -0
  49. package/src/__tests__/mask.test.js +187 -0
  50. package/src/__tests__/serialization.test.js +54 -0
  51. package/src/__tests__/utils.js +1 -0
  52. package/src/__tests__/with-mask.test.js +76 -0
  53. package/src/choices/__tests__/index.test.js +75 -0
  54. package/src/choices/choice.jsx +83 -96
  55. package/src/choices/index.jsx +11 -5
  56. package/src/components/__tests__/blank.test.js +138 -0
  57. package/src/components/__tests__/correct-input.test.js +90 -0
  58. package/src/components/__tests__/dropdown.test.js +93 -0
  59. package/src/components/__tests__/input.test.js +102 -0
  60. package/src/components/blank.jsx +316 -204
  61. package/src/components/correct-input.jsx +37 -38
  62. package/src/components/dropdown.jsx +371 -125
  63. package/src/constructed-response.jsx +71 -18
  64. package/src/customizable.jsx +35 -0
  65. package/src/drag-in-the-blank.jsx +152 -40
  66. package/src/index.js +10 -1
  67. package/src/inline-dropdown.jsx +2 -0
  68. package/src/mask.jsx +71 -25
  69. package/src/serialization.js +22 -34
  70. package/src/with-mask.jsx +43 -3
  71. package/README.md +0 -14
  72. package/lib/new-serialization.js +0 -267
  73. package/lib/new-serialization.js.map +0 -1
  74. package/lib/parse-html.js +0 -17
  75. package/lib/parse-html.js.map +0 -1
  76. package/lib/test-serializer.js +0 -164
  77. package/lib/test-serializer.js.map +0 -1
  78. package/src/new-serialization.jsx +0 -291
  79. package/src/parse-html.js +0 -8
  80. package/src/test-serializer.js +0 -163
@@ -0,0 +1,189 @@
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 _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
9
+ var _blank = _interopRequireDefault(require("../blank"));
10
+ 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); }
11
+ // Mock @dnd-kit hooks to avoid DndContext requirement
12
+ jest.mock('@dnd-kit/core', function () {
13
+ return {
14
+ useDraggable: jest.fn(function () {
15
+ return {
16
+ attributes: {},
17
+ listeners: {},
18
+ setNodeRef: jest.fn(),
19
+ transform: null,
20
+ isDragging: false
21
+ };
22
+ }),
23
+ useDroppable: jest.fn(function () {
24
+ return {
25
+ setNodeRef: jest.fn(),
26
+ isOver: false,
27
+ active: null
28
+ };
29
+ })
30
+ };
31
+ });
32
+ jest.mock('@dnd-kit/utilities', function () {
33
+ return {
34
+ CSS: {
35
+ Translate: {
36
+ toString: jest.fn(function () {
37
+ return 'translate3d(0, 0, 0)';
38
+ })
39
+ }
40
+ }
41
+ };
42
+ });
43
+ describe('Blank', function () {
44
+ var onChange = jest.fn();
45
+ var defaultProps = {
46
+ disabled: false,
47
+ choice: {
48
+ value: 'Cow'
49
+ },
50
+ isOver: false,
51
+ dragItem: {},
52
+ correct: false,
53
+ onChange: onChange
54
+ };
55
+ beforeEach(function () {
56
+ onChange.mockClear();
57
+ });
58
+ describe('rendering', function () {
59
+ it('renders with default props', function () {
60
+ var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
61
+ container = _render.container;
62
+ expect(container.firstChild).toBeInTheDocument();
63
+ });
64
+ it('displays the value when provided', function () {
65
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
66
+ expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
67
+ });
68
+ it('renders as disabled when disabled prop is true', function () {
69
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
70
+ disabled: true
71
+ })));
72
+ // Check that delete button is not present when disabled
73
+ expect(_react2.screen.queryByRole('button', {
74
+ name: /delete/i
75
+ })).not.toBeInTheDocument();
76
+ });
77
+ it('renders with dragged item preview', function () {
78
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
79
+ dragItem: {
80
+ choice: {
81
+ value: 'Dog'
82
+ }
83
+ }
84
+ })));
85
+ // Blank component should render
86
+ expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
87
+ });
88
+ it('shows hover state when isOver is true', function () {
89
+ var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
90
+ dragItem: {
91
+ choice: {
92
+ value: 'Dog'
93
+ }
94
+ },
95
+ isOver: true
96
+ }))),
97
+ container = _render2.container;
98
+ // Component should have hover styling
99
+ expect(container.firstChild).toBeInTheDocument();
100
+ });
101
+ it('shows correct state when correct is true', function () {
102
+ var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
103
+ correct: true
104
+ }))),
105
+ container = _render3.container;
106
+ // Component should indicate correctness
107
+ expect(container.firstChild).toBeInTheDocument();
108
+ });
109
+ });
110
+ describe('delete functionality', function () {
111
+ it('does not show delete button when disabled', function () {
112
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
113
+ disabled: true
114
+ })));
115
+ expect(_react2.screen.queryByRole('button', {
116
+ name: /delete/i
117
+ })).not.toBeInTheDocument();
118
+ });
119
+ it('does not show delete button when no value is set', function () {
120
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
121
+ choice: undefined
122
+ })));
123
+ expect(_react2.screen.queryByRole('button', {
124
+ name: /delete/i
125
+ })).not.toBeInTheDocument();
126
+ });
127
+ it('shows delete button when value is present and not disabled', function () {
128
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
129
+ // If delete button is present, it should be clickable
130
+ var deleteButton = _react2.screen.queryByRole('button');
131
+ if (deleteButton) {
132
+ expect(deleteButton).toBeInTheDocument();
133
+ }
134
+ });
135
+ });
136
+ describe('dimensions', function () {
137
+ it('renders with custom dimensions when provided', function () {
138
+ var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
139
+ emptyResponseAreaHeight: 100,
140
+ emptyResponseAreaWidth: 200
141
+ }))),
142
+ container = _render4.container;
143
+ var element = container.firstChild;
144
+ expect(element).toBeInTheDocument();
145
+ });
146
+ it('renders with min dimensions by default', function () {
147
+ var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
148
+ container = _render5.container;
149
+ var element = container.firstChild;
150
+ expect(element).toBeInTheDocument();
151
+ // Component should have minimum dimensions applied
152
+ });
153
+ it('handles non-numeric dimension props gracefully', function () {
154
+ var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
155
+ emptyResponseAreaHeight: "non-numeric",
156
+ emptyResponseAreaWidth: "non-numeric"
157
+ }))),
158
+ container = _render6.container;
159
+ expect(container.firstChild).toBeInTheDocument();
160
+ });
161
+ });
162
+ describe('drag and drop', function () {
163
+ it('accepts drag item when not disabled', function () {
164
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
165
+ isOver: true,
166
+ dragItem: {
167
+ choice: {
168
+ value: 'Dog'
169
+ }
170
+ }
171
+ })));
172
+ expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
173
+ });
174
+ it('shows drag preview when dragging over', function () {
175
+ var _render7 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
176
+ isOver: true,
177
+ dragItem: {
178
+ choice: {
179
+ value: 'Dog'
180
+ }
181
+ }
182
+ }))),
183
+ container = _render7.container;
184
+ expect(container.firstChild).toBeInTheDocument();
185
+ // Should show visual feedback for drag over
186
+ });
187
+ });
188
+ });
189
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibGFuayIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiamVzdCIsIm1vY2siLCJ1c2VEcmFnZ2FibGUiLCJmbiIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwidHJhbnNmb3JtIiwiaXNEcmFnZ2luZyIsInVzZURyb3BwYWJsZSIsImlzT3ZlciIsImFjdGl2ZSIsIkNTUyIsIlRyYW5zbGF0ZSIsInRvU3RyaW5nIiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImRlZmF1bHRQcm9wcyIsImRpc2FibGVkIiwiY2hvaWNlIiwidmFsdWUiLCJkcmFnSXRlbSIsImNvcnJlY3QiLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJfcmVuZGVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsIl9leHRlbmRzMiIsInF1ZXJ5QnlSb2xlIiwibmFtZSIsIm5vdCIsIl9yZW5kZXIyIiwiX3JlbmRlcjMiLCJ1bmRlZmluZWQiLCJkZWxldGVCdXR0b24iLCJfcmVuZGVyNCIsImVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0IiwiZW1wdHlSZXNwb25zZUFyZWFXaWR0aCIsImVsZW1lbnQiLCJfcmVuZGVyNSIsIl9yZW5kZXI2IiwiX3JlbmRlcjciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9fX3Rlc3RzX18vYmxhbmsudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IEJsYW5rIGZyb20gJy4uL2JsYW5rJztcblxuLy8gTW9jayBAZG5kLWtpdCBob29rcyB0byBhdm9pZCBEbmRDb250ZXh0IHJlcXVpcmVtZW50XG5qZXN0Lm1vY2soJ0BkbmQta2l0L2NvcmUnLCAoKSA9PiAoe1xuICB1c2VEcmFnZ2FibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBsaXN0ZW5lcnM6IHt9LFxuICAgIHNldE5vZGVSZWY6IGplc3QuZm4oKSxcbiAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gIH0pKSxcbiAgdXNlRHJvcHBhYmxlOiBqZXN0LmZuKCgpID0+ICh7XG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIGlzT3ZlcjogZmFsc2UsXG4gICAgYWN0aXZlOiBudWxsLFxuICB9KSksXG59KSk7XG5cbmplc3QubW9jaygnQGRuZC1raXQvdXRpbGl0aWVzJywgKCkgPT4gKHtcbiAgQ1NTOiB7XG4gICAgVHJhbnNsYXRlOiB7XG4gICAgICB0b1N0cmluZzogamVzdC5mbigoKSA9PiAndHJhbnNsYXRlM2QoMCwgMCwgMCknKSxcbiAgICB9LFxuICB9LFxufSkpO1xuXG5kZXNjcmliZSgnQmxhbmsnLCAoKSA9PiB7XG4gIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGNob2ljZTogeyB2YWx1ZTogJ0NvdycgfSxcbiAgICBpc092ZXI6IGZhbHNlLFxuICAgIGRyYWdJdGVtOiB7fSxcbiAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICBvbkNoYW5nZSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZS5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGlzcGxheXMgdGhlIHZhbHVlIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDb3cnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGFzIGRpc2FibGVkIHdoZW4gZGlzYWJsZWQgcHJvcCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkaXNhYmxlZD17dHJ1ZX0gLz4pO1xuICAgICAgLy8gQ2hlY2sgdGhhdCBkZWxldGUgYnV0dG9uIGlzIG5vdCBwcmVzZW50IHdoZW4gZGlzYWJsZWRcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL2RlbGV0ZS9pIH0pKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggZHJhZ2dlZCBpdGVtIHByZXZpZXcnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGRyYWdJdGVtPXt7IGNob2ljZTogeyB2YWx1ZTogJ0RvZycgfSB9fSAvPik7XG4gICAgICAvLyBCbGFuayBjb21wb25lbnQgc2hvdWxkIHJlbmRlclxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NvdycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3dzIGhvdmVyIHN0YXRlIHdoZW4gaXNPdmVyIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkcmFnSXRlbT17eyBjaG9pY2U6IHsgdmFsdWU6ICdEb2cnIH0gfX0gaXNPdmVyPXt0cnVlfSAvPik7XG4gICAgICAvLyBDb21wb25lbnQgc2hvdWxkIGhhdmUgaG92ZXIgc3R5bGluZ1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3dzIGNvcnJlY3Qgc3RhdGUgd2hlbiBjb3JyZWN0IGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBjb3JyZWN0PXt0cnVlfSAvPik7XG4gICAgICAvLyBDb21wb25lbnQgc2hvdWxkIGluZGljYXRlIGNvcnJlY3RuZXNzXG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWxldGUgZnVuY3Rpb25hbGl0eScsICgpID0+IHtcbiAgICBpdCgnZG9lcyBub3Qgc2hvdyBkZWxldGUgYnV0dG9uIHdoZW4gZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVkPXt0cnVlfSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9kZWxldGUvaSB9KSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3Qgc2hvdyBkZWxldGUgYnV0dG9uIHdoZW4gbm8gdmFsdWUgaXMgc2V0JywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBjaG9pY2U9e3VuZGVmaW5lZH0gLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAvZGVsZXRlL2kgfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3dzIGRlbGV0ZSBidXR0b24gd2hlbiB2YWx1ZSBpcyBwcmVzZW50IGFuZCBub3QgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIC8vIElmIGRlbGV0ZSBidXR0b24gaXMgcHJlc2VudCwgaXQgc2hvdWxkIGJlIGNsaWNrYWJsZVxuICAgICAgY29uc3QgZGVsZXRlQnV0dG9uID0gc2NyZWVuLnF1ZXJ5QnlSb2xlKCdidXR0b24nKTtcbiAgICAgIGlmIChkZWxldGVCdXR0b24pIHtcbiAgICAgICAgZXhwZWN0KGRlbGV0ZUJ1dHRvbikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RpbWVuc2lvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBjdXN0b20gZGltZW5zaW9ucyB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0PXsxMDB9IGVtcHR5UmVzcG9uc2VBcmVhV2lkdGg9ezIwMH0gLz4sXG4gICAgICApO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgZXhwZWN0KGVsZW1lbnQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIG1pbiBkaW1lbnNpb25zIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBjb25zdCBlbGVtZW50ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICBleHBlY3QoZWxlbWVudCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIC8vIENvbXBvbmVudCBzaG91bGQgaGF2ZSBtaW5pbXVtIGRpbWVuc2lvbnMgYXBwbGllZFxuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbm9uLW51bWVyaWMgZGltZW5zaW9uIHByb3BzIGdyYWNlZnVsbHknLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQ9XCJub24tbnVtZXJpY1wiIGVtcHR5UmVzcG9uc2VBcmVhV2lkdGg9XCJub24tbnVtZXJpY1wiIC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RyYWcgYW5kIGRyb3AnLCAoKSA9PiB7XG4gICAgaXQoJ2FjY2VwdHMgZHJhZyBpdGVtIHdoZW4gbm90IGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBpc092ZXI9e3RydWV9IGRyYWdJdGVtPXt7IGNob2ljZTogeyB2YWx1ZTogJ0RvZycgfSB9fSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ293JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgZHJhZyBwcmV2aWV3IHdoZW4gZHJhZ2dpbmcgb3ZlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGlzT3Zlcj17dHJ1ZX0gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIC8vIFNob3VsZCBzaG93IHZpc3VhbCBmZWVkYmFjayBmb3IgZHJhZyBvdmVyXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQTZCLFNBQUFELHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUix1QkFBQSxZQUFBQSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxPQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FB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
@@ -0,0 +1,132 @@
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+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94Jyk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoaW5wdXQsICd0ZXN0Jyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgLy8gQ2hlY2sgdGhhdCBvbkNoYW5nZSByZWNlaXZlcyBhbiBldmVudC1saWtlIG9iamVjdFxuICAgICAgY29uc3QgbGFzdENhbGwgPSBvbkNoYW5nZS5tb2NrLmNhbGxzW29uQ2hhbmdlLm1vY2suY2FsbHMubGVuZ3RoIC0gMV1bMF07XG4gICAgICBleHBlY3QobGFzdENhbGwpLnRvSGF2ZVByb3BlcnR5KCd0YXJnZXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCd1cGRhdGVzIHZhbHVlIHdoZW4gdXNlciBjaGFuZ2VzIGlucHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyKDxDb3JyZWN0SW5wdXQgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xlYXIoaW5wdXQpO1xuICAgICAgYXdhaXQgdXNlci50eXBlKGlucHV0LCAnRG9nJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQTRDLFNBQUFELHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUix1QkFBQSxZQUFBQSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxPQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsY0FBQU0sRUFBQSxJQUFBZCxDQUFBLGdCQUFBYyxFQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxFQUFBLE9BQUFQLENBQUEsSUFBQUQsQ0FBQSxHQUFBVyxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbkIsQ0FBQSxFQUFBYyxFQUFBLE9BQUFQLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFNLEVBQUEsRUFBQVAsQ0FBQSxJQUFBQyxDQUFBLENBQUFNLEVBQUEsSUFBQWQsQ0FBQSxDQUFBYyxFQUFBLFdBQUFOLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBRTVDbUIsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFNO0VBQzdCLElBQU1DLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUMxQixJQUFNQyxZQUFZLEdBQUc7SUFDbkJDLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLE9BQU8sRUFBRSxLQUFLO0lBQ2RDLE9BQU8sRUFBRSxVQUFVO0lBQ25CQyxLQUFLLEVBQUUsS0FBSztJQUNaUCxRQUFRLEVBQVJBO0VBQ0YsQ0FBQztFQUVEUSxVQUFVLENBQUMsWUFBTTtJQUNmUixRQUFRLENBQUNTLFNBQVMsQ0FBQyxDQUFDO0VBQ3RCLENBQUMsQ0FBQztFQUVGVixRQUFRLENBQUMsV0FBVyxFQUFFLFlBQU07SUFDMUJXLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxZQUFNO01BQzNDLElBQUFDLGNBQU0sZUFBQ3ZDLEtBQUEsQ0FBQXdDLGFBQUEsQ0FBQ2xDLGFBQUEsV0FBWSxFQUFLeUIsWUFBZSxDQUFDLENBQUM7TUFDMUMsSUFBTVUsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUM7TUFDekNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLGlCQUFpQixDQUFDLENBQUM7TUFDakNELE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNLLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBRUZSLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxZQUFNO01BQ3pELElBQUFDLGNBQU0sZUFBQ3ZDLEtBQUEsQ0FBQXdDLGFBQUEsQ0FBQ2xDLGFBQUEsV0FBWSxNQUFBeUMsU0FBQSxpQkFBS2hCLFlBQVk7UUFBRUMsUUFBUSxFQUFFO01BQUssRUFBRSxDQUFDLENBQUM7TUFDMUQsSUFBTVMsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUM7TUFDekNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNPLFlBQVksQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVGVixFQUFFLENBQUMscUNBQXFDLEVBQUUsWUFBTTtNQUM5QyxJQUFBVyxPQUFBLEdBQXNCLElBQUFWLGNBQU0sZUFBQ3ZDLEtBQUEsQ0FBQXdDLGFBQUEsQ0FBQ2xDLGFBQUEsV0FBWSxNQUFBeUMsU0FBQSxpQkFBS2hCLFlBQVk7VUFBRUUsT0FBTyxFQUFFO1FBQU0sRUFBRSxDQUFDLENBQUM7UUFBeEVpQixTQUFTLEdBQUFELE9BQUEsQ0FBVEMsU0FBUztNQUNqQixJQUFNVCxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFNBQVMsQ0FBQztNQUN6Q0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ0ksaUJBQWlCLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07TUFDN0MsSUFBQWEsUUFBQSxHQUFzQixJQUFBWixjQUFNLGVBQUN2QyxLQUFBLENBQUF3QyxhQUFBLENBQUNsQyxhQUFBLFdBQVksTUFBQXlDLFNBQUEsaUJBQUtoQixZQUFZO1VBQUVFLE9BQU8sRUFBRTtRQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQXZFaUIsU0FBUyxHQUFBQyxRQUFBLENBQVRELFNBQVM7TUFDakIsSUFBTVQsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUM7TUFDekNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLGlCQUFpQixDQUFDLENBQUM7TUFDakM7SUFDRixDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLCtCQUErQixFQUFFLFlBQU07TUFDeEMsSUFBQUMsY0FBTSxlQUFDdkMsS0FBQSxDQUFBd0MsYUFBQSxDQUFDbEMsYUFBQSxXQUFZLE1BQUF5QyxTQUFBLGlCQUFLaEIsWUFBWTtRQUFFRyxPQUFPLEVBQUM7TUFBVSxFQUFFLENBQUMsQ0FBQztNQUM3RCxJQUFNTyxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFNBQVMsQ0FBQztNQUN6Q0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ0ksaUJBQWlCLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRmxCLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO0lBQ2xDVyxFQUFFLENBQUMsZ0NBQWdDLG1CQUFBYyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUUsU0FBQUMsUUFBQTtNQUFBLElBQUFDLElBQUEsRUFBQWYsS0FBQTtNQUFBLE9BQUFZLFlBQUEsWUFBQUksSUFBQSxXQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7VUFBQTtZQUM3QkosSUFBSSxHQUFHSyxxQkFBUyxDQUFDQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFBdkIsY0FBTSxlQUFDdkMsS0FBQSxDQUFBd0MsYUFBQSxDQUFDbEMsYUFBQSxXQUFZLEVBQUt5QixZQUFlLENBQUMsQ0FBQztZQUVwQ1UsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFBQWUsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FDbkNKLElBQUksQ0FBQ08sS0FBSyxDQUFDdEIsS0FBSyxDQUFDO1VBQUE7WUFBQWlCLFFBQUEsQ0FBQUUsSUFBQTtZQUFBLE9BQ2pCSixJQUFJLENBQUNRLElBQUksQ0FBQ3ZCLEtBQUssRUFBRSxHQUFHLENBQUM7VUFBQTtZQUUzQkcsTUFBTSxDQUFDaEIsUUFBUSxDQUFDLENBQUNxQyxnQkFBZ0IsQ0FBQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFQLFFBQUEsQ0FBQVEsSUFBQTtRQUFBO01BQUEsR0FBQVgsT0FBQTtJQUFBLENBQ3JDLEdBQUM7SUFFRmpCLEVBQUUsQ0FBQyxrQ0FBa0MsbUJBQUFjLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRSxTQUFBYSxTQUFBO01BQUEsSUFBQVgsSUFBQSxFQUFBZixLQUFBLEVBQUEyQixRQUFBO01BQUEsT0FBQWYsWUFBQSxZQUFBSSxJQUFBLFdBQUFZLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBVixJQUFBLEdBQUFVLFNBQUEsQ0FBQVQsSUFBQTtVQUFBO1lBQy9CSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUF2QixjQUFNLGVBQUN2QyxLQUFBLENBQUF3QyxhQUFBLENBQUNsQyxhQUFBLFdBQVksTUFBQXlDLFNBQUEsaUJBQUtoQixZQUFZO2NBQUVJLEtBQUssRUFBQztZQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTdDTSxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUFBMEIsU0FBQSxDQUFBVCxJQUFBO1lBQUEsT0FDbkNKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkIsS0FBSyxFQUFFLE1BQU0sQ0FBQztVQUFBO1lBRTlCRyxNQUFNLENBQUNoQixRQUFRLENBQUMsQ0FBQ3FDLGdCQUFnQixDQUFDLENBQUM7WUFDbkM7WUFDTUcsUUFBUSxHQUFHeEMsUUFBUSxDQUFDMEMsSUFBSSxDQUFDQyxLQUFLLENBQUMzQyxRQUFRLENBQUMwQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RTVCLE1BQU0sQ0FBQ3dCLFFBQVEsQ0FBQyxDQUFDSyxjQUFjLENBQUMsUUFBUSxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFKLFNBQUEsQ0FBQUgsSUFBQTtRQUFBO01BQUEsR0FBQUMsUUFBQTtJQUFBLENBQzNDLEdBQUM7SUFFRjdCLEVBQUUsQ0FBQyx1Q0FBdUMsbUJBQUFjLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRSxTQUFBb0IsU0FBQTtNQUFBLElBQUFsQixJQUFBLEVBQUFmLEtBQUE7TUFBQSxPQUFBWSxZQUFBLFlBQUFJLElBQUEsV0FBQWtCLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBaEIsSUFBQSxHQUFBZ0IsU0FBQSxDQUFBZixJQUFBO1VBQUE7WUFDcENKLElBQUksR0FBR0sscUJBQVMsQ0FBQ0MsS0FBSyxDQUFDLENBQUM7WUFDOUIsSUFBQXZCLGNBQU0sZUFBQ3ZDLEtBQUEsQ0FBQXdDLGFBQUEsQ0FBQ2xDLGFBQUEsV0FBWSxFQUFLeUIsWUFBZSxDQUFDLENBQUM7WUFFcENVLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQUFnQyxTQUFBLENBQUFmLElBQUE7WUFBQSxPQUNuQ0osSUFBSSxDQUFDTyxLQUFLLENBQUN0QixLQUFLLENBQUM7VUFBQTtZQUFBa0MsU0FBQSxDQUFBZixJQUFBO1lBQUEsT0FDakJKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkIsS0FBSyxFQUFFLEtBQUssQ0FBQztVQUFBO1lBRTdCRyxNQUFNLENBQUNoQixRQUFRLENBQUMsQ0FBQ3FDLGdCQUFnQixDQUFDLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQVUsU0FBQSxDQUFBVCxJQUFBO1FBQUE7TUFBQSxHQUFBUSxRQUFBO0lBQUEsQ0FDckMsR0FBQztFQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,134 @@
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+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8RHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuXG4gICAgICAvLyBDbGljayBidXR0b24gdG8gb3BlbiBtZW51XG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhidXR0b24pO1xuXG4gICAgICAvLyBGaW5kIHRoZSBvcHRpb24gYnkgZ2V0dGluZyBhbGwgb3B0aW9ucyBhbmQgc2VsZWN0aW5nIHRoZSBvbmUgd2l0aCBcIkxhdWdoZWRcIiB0ZXh0XG4gICAgICBjb25zdCBvcHRpb25zID0gc2NyZWVuLmdldEFsbEJ5Um9sZSgnb3B0aW9uJyk7XG4gICAgICBjb25zdCBsYXVnaGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudGV4dENvbnRlbnQuaW5jbHVkZXMoJ0xhdWdoZWQnKSk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKGxhdWdoZWRPcHRpb24pO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcxJywgJ0xhdWdoZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIGNvcnJlY3QgdmFsdWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXIoPERyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcblxuICAgICAgLy8gQ2xpY2sgYnV0dG9uIHRvIG9wZW4gbWVudVxuICAgICAgY29uc3QgYnV0dG9uID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soYnV0dG9uKTtcblxuICAgICAgLy8gRmluZCB0aGUgb3B0aW9uIGJ5IGdldHRpbmcgYWxsIG9wdGlvbnMgYW5kIHNlbGVjdGluZyB0aGUgb25lIHdpdGggXCJTbWlsZWRcIiB0ZXh0XG4gICAgICBjb25zdCBvcHRpb25zID0gc2NyZWVuLmdldEFsbEJ5Um9sZSgnb3B0aW9uJyk7XG4gICAgICBjb25zdCBzbWlsZWRPcHRpb24gPSBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC50ZXh0Q29udGVudC5pbmNsdWRlcygnU21pbGVkJykpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzbWlsZWRPcHRpb24pO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcxJywgJ1NtaWxlZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssU0FBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFB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