@pie-lib/math-input-mathlive 1.0.12 → 1.0.13
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/lib/__tests__/composites.test.js +255 -0
- package/lib/__tests__/drop-in-compat.test.js +133 -0
- package/lib/__tests__/index.test.js +118 -0
- package/lib/__tests__/input-imperative.test.js +155 -0
- package/lib/__tests__/keypad-label.test.js +216 -0
- package/lib/__tests__/keypad-render.test.js +206 -0
- package/lib/__tests__/latex-bridge.test.js +301 -0
- package/lib/__tests__/mathlive-instance.test.js +415 -0
- package/lib/__tests__/mount-race.test.js +198 -0
- package/lib/__tests__/static-prompts.test.js +405 -0
- package/lib/__tests__/tmp-markup.test.js +26 -0
- package/lib/keypad/index.js +4 -4
- package/lib/keypad/index.js.map +1 -1
- package/lib/mathlive-instance.js +6 -1
- package/lib/mathlive-instance.js.map +1 -1
- package/lib/mf/common-styles.js +41 -6
- package/lib/mf/common-styles.js.map +1 -1
- package/lib/mf/index.js +6 -0
- package/lib/mf/index.js.map +1 -1
- package/lib/mf/static.js +2 -2
- package/lib/mf/static.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/keypad-label.test.jsx +73 -0
- package/src/__tests__/mathlive-instance.test.js +22 -0
- package/src/keypad/index.jsx +4 -1
- package/src/mathlive-instance.js +6 -1
- package/src/mf/common-styles.js +45 -4
- package/src/mf/index.js +2 -0
- package/src/mf/static.jsx +4 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _mathInput = _interopRequireDefault(require("../math-input"));
|
|
7
|
+
var _horizontalKeypad = _interopRequireDefault(require("../horizontal-keypad"));
|
|
8
|
+
var _input = _interopRequireDefault(require("../mf/input"));
|
|
9
|
+
/**
|
|
10
|
+
* The pieces that sit between the keypad and the field: how a pressed key is
|
|
11
|
+
* routed into the field, and the legacy `{value,type}` shape math-toolbar
|
|
12
|
+
* consumes.
|
|
13
|
+
*/
|
|
14
|
+
describe('MathInput.keypadPress routing', function () {
|
|
15
|
+
var withInput = function withInput() {
|
|
16
|
+
var mi = new _mathInput["default"]({});
|
|
17
|
+
var calls = {
|
|
18
|
+
write: [],
|
|
19
|
+
keystroke: []
|
|
20
|
+
};
|
|
21
|
+
mi.input = {
|
|
22
|
+
write: function write(v) {
|
|
23
|
+
return calls.write.push(v);
|
|
24
|
+
},
|
|
25
|
+
keystroke: function keystroke(v) {
|
|
26
|
+
return calls.keystroke.push(v);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
mi: mi,
|
|
31
|
+
calls: calls
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
it('routes an insert action to write()', function () {
|
|
35
|
+
var _withInput = withInput(),
|
|
36
|
+
mi = _withInput.mi,
|
|
37
|
+
calls = _withInput.calls;
|
|
38
|
+
mi.keypadPress({
|
|
39
|
+
latex: '\\pi'
|
|
40
|
+
});
|
|
41
|
+
expect(calls.write).toEqual(['\\pi']);
|
|
42
|
+
expect(calls.keystroke).toEqual([]);
|
|
43
|
+
});
|
|
44
|
+
it('expands an argument-taking command before writing', function () {
|
|
45
|
+
var _withInput2 = withInput(),
|
|
46
|
+
mi = _withInput2.mi,
|
|
47
|
+
calls = _withInput2.calls;
|
|
48
|
+
mi.keypadPress({
|
|
49
|
+
command: '\\frac'
|
|
50
|
+
});
|
|
51
|
+
expect(calls.write).toEqual(['\\frac{#?}{#?}']);
|
|
52
|
+
});
|
|
53
|
+
it('routes a cursor keystroke to keystroke()', function () {
|
|
54
|
+
var _withInput3 = withInput(),
|
|
55
|
+
mi = _withInput3.mi,
|
|
56
|
+
calls = _withInput3.calls;
|
|
57
|
+
mi.keypadPress({
|
|
58
|
+
keystroke: 'Left'
|
|
59
|
+
});
|
|
60
|
+
expect(calls.keystroke).toEqual(['moveToPreviousChar']);
|
|
61
|
+
expect(calls.write).toEqual([]);
|
|
62
|
+
});
|
|
63
|
+
it('ignores keys with no action', function () {
|
|
64
|
+
var _withInput4 = withInput(),
|
|
65
|
+
mi = _withInput4.mi,
|
|
66
|
+
calls = _withInput4.calls;
|
|
67
|
+
mi.keypadPress({});
|
|
68
|
+
mi.keypadPress({
|
|
69
|
+
keystroke: 'Nonsense'
|
|
70
|
+
});
|
|
71
|
+
expect(calls.write).toEqual([]);
|
|
72
|
+
expect(calls.keystroke).toEqual([]);
|
|
73
|
+
});
|
|
74
|
+
it('is a no-op before the field ref exists', function () {
|
|
75
|
+
var mi = new _mathInput["default"]({});
|
|
76
|
+
expect(function () {
|
|
77
|
+
return mi.keypadPress({
|
|
78
|
+
latex: '\\pi'
|
|
79
|
+
});
|
|
80
|
+
}).not.toThrow();
|
|
81
|
+
});
|
|
82
|
+
it('changeLatex only fires onChange when the value differs', function () {
|
|
83
|
+
var onChange = jest.fn();
|
|
84
|
+
var mi = new _mathInput["default"]({
|
|
85
|
+
latex: 'x',
|
|
86
|
+
onChange: onChange
|
|
87
|
+
});
|
|
88
|
+
mi.changeLatex('x');
|
|
89
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
90
|
+
mi.changeLatex('y');
|
|
91
|
+
expect(onChange).toHaveBeenCalledWith('y');
|
|
92
|
+
});
|
|
93
|
+
it('tracks focus state', function () {
|
|
94
|
+
var mi = new _mathInput["default"]({});
|
|
95
|
+
mi.setState = function (s) {
|
|
96
|
+
return Object.assign(mi.state, s);
|
|
97
|
+
};
|
|
98
|
+
mi.inputFocus();
|
|
99
|
+
expect(mi.state.focused).toBe(true);
|
|
100
|
+
mi.inputBlur();
|
|
101
|
+
expect(mi.state.focused).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('HorizontalKeypad legacy {value,type} model', function () {
|
|
105
|
+
var pressed = function pressed(key) {
|
|
106
|
+
var onClick = jest.fn();
|
|
107
|
+
var hk = new _horizontalKeypad["default"]({
|
|
108
|
+
onClick: onClick
|
|
109
|
+
});
|
|
110
|
+
hk.keypadPress(key);
|
|
111
|
+
return onClick.mock.calls[0][0];
|
|
112
|
+
};
|
|
113
|
+
it('maps a command to {value, type: command}', function () {
|
|
114
|
+
expect(pressed({
|
|
115
|
+
command: '\\frac'
|
|
116
|
+
})).toEqual({
|
|
117
|
+
value: '\\frac',
|
|
118
|
+
type: 'command'
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
it('maps a write to {value}', function () {
|
|
122
|
+
expect(pressed({
|
|
123
|
+
write: 'x'
|
|
124
|
+
})).toEqual({
|
|
125
|
+
value: 'x'
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
it('maps a keystroke to {type: cursor}', function () {
|
|
129
|
+
expect(pressed({
|
|
130
|
+
keystroke: 'Left'
|
|
131
|
+
})).toEqual({
|
|
132
|
+
type: 'cursor',
|
|
133
|
+
value: 'Left'
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
it('renders without throwing', function () {
|
|
137
|
+
expect(function () {
|
|
138
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_horizontalKeypad["default"], {
|
|
139
|
+
onClick: function onClick() {}
|
|
140
|
+
}));
|
|
141
|
+
}).not.toThrow();
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('Input: controlled-value sync and events', function () {
|
|
145
|
+
var withField = function withField() {
|
|
146
|
+
var input = new _input["default"]({});
|
|
147
|
+
input.mathField = {
|
|
148
|
+
value: '',
|
|
149
|
+
getValue: function getValue() {
|
|
150
|
+
return input.mathField.value;
|
|
151
|
+
},
|
|
152
|
+
insert: function insert(v) {
|
|
153
|
+
input.mathField.value += v;
|
|
154
|
+
},
|
|
155
|
+
executeCommand: function executeCommand() {},
|
|
156
|
+
focus: function focus() {},
|
|
157
|
+
blur: function blur() {},
|
|
158
|
+
addEventListener: function addEventListener() {},
|
|
159
|
+
removeEventListener: function removeEventListener() {},
|
|
160
|
+
remove: function remove() {}
|
|
161
|
+
};
|
|
162
|
+
return input;
|
|
163
|
+
};
|
|
164
|
+
it('emits stored-form latex on edit', function () {
|
|
165
|
+
var onChange = jest.fn();
|
|
166
|
+
var input = withField();
|
|
167
|
+
input.props = {
|
|
168
|
+
onChange: onChange
|
|
169
|
+
};
|
|
170
|
+
input.mathField.value = '\\longdiv{\\placeholder{}}';
|
|
171
|
+
input.onInputEdit();
|
|
172
|
+
|
|
173
|
+
// \placeholder is MathLive-internal and must not reach the model
|
|
174
|
+
expect(onChange).toHaveBeenCalledWith('\\longdiv{}');
|
|
175
|
+
expect(input.lastEmitted).toEqual('\\longdiv{}');
|
|
176
|
+
});
|
|
177
|
+
it('does not push a prop echo back into the field', function () {
|
|
178
|
+
var input = withField();
|
|
179
|
+
input.mathField.value = 'x';
|
|
180
|
+
input.lastEmitted = 'x';
|
|
181
|
+
input.props = {
|
|
182
|
+
latex: 'x'
|
|
183
|
+
};
|
|
184
|
+
input.componentDidUpdate({
|
|
185
|
+
latex: ''
|
|
186
|
+
});
|
|
187
|
+
expect(input.mathField.value).toEqual('x');
|
|
188
|
+
});
|
|
189
|
+
it('pushes a genuinely new latex prop into the field', function () {
|
|
190
|
+
var input = withField();
|
|
191
|
+
input.mathField.value = 'x';
|
|
192
|
+
input.lastEmitted = 'x';
|
|
193
|
+
input.props = {
|
|
194
|
+
latex: 'y'
|
|
195
|
+
};
|
|
196
|
+
input.componentDidUpdate({
|
|
197
|
+
latex: 'x'
|
|
198
|
+
});
|
|
199
|
+
expect(input.mathField.value).toEqual('y');
|
|
200
|
+
});
|
|
201
|
+
it('bridges stored latex on the way in', function () {
|
|
202
|
+
var input = withField();
|
|
203
|
+
input.props = {
|
|
204
|
+
latex: '\\longdiv{5}'
|
|
205
|
+
};
|
|
206
|
+
input.componentDidUpdate({
|
|
207
|
+
latex: ''
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// must become native \enclose so the content stays editable
|
|
211
|
+
expect(input.mathField.value).toEqual('\\enclose{longdiv}{5}');
|
|
212
|
+
});
|
|
213
|
+
it('toggles readOnly', function () {
|
|
214
|
+
var input = withField();
|
|
215
|
+
input.props = {
|
|
216
|
+
readOnly: true
|
|
217
|
+
};
|
|
218
|
+
input.componentDidUpdate({
|
|
219
|
+
readOnly: false
|
|
220
|
+
});
|
|
221
|
+
expect(input.mathField.readOnly).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
it('clear() empties the field', function () {
|
|
224
|
+
var input = withField();
|
|
225
|
+
input.mathField.value = 'abc';
|
|
226
|
+
expect(input.clear()).toEqual('');
|
|
227
|
+
expect(input.mathField.value).toEqual('');
|
|
228
|
+
});
|
|
229
|
+
it('suppresses Enter so it cannot insert a line break', function () {
|
|
230
|
+
var input = withField();
|
|
231
|
+
var preventDefault = jest.fn();
|
|
232
|
+
input.onKeyDown({
|
|
233
|
+
key: 'Enter',
|
|
234
|
+
preventDefault: preventDefault
|
|
235
|
+
});
|
|
236
|
+
expect(preventDefault).toHaveBeenCalled();
|
|
237
|
+
preventDefault.mockClear();
|
|
238
|
+
input.onKeyDown({
|
|
239
|
+
key: 'a',
|
|
240
|
+
preventDefault: preventDefault
|
|
241
|
+
});
|
|
242
|
+
expect(preventDefault).not.toHaveBeenCalled();
|
|
243
|
+
});
|
|
244
|
+
it('componentDidUpdate is safe before the field exists', function () {
|
|
245
|
+
var input = new _input["default"]({
|
|
246
|
+
latex: 'x'
|
|
247
|
+
});
|
|
248
|
+
expect(function () {
|
|
249
|
+
return input.componentDidUpdate({
|
|
250
|
+
latex: ''
|
|
251
|
+
});
|
|
252
|
+
}).not.toThrow();
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfbWF0aElucHV0IiwiX2hvcml6b250YWxLZXlwYWQiLCJfaW5wdXQiLCJkZXNjcmliZSIsIndpdGhJbnB1dCIsIm1pIiwiTWF0aElucHV0IiwiY2FsbHMiLCJ3cml0ZSIsImtleXN0cm9rZSIsImlucHV0IiwidiIsInB1c2giLCJpdCIsIl93aXRoSW5wdXQiLCJrZXlwYWRQcmVzcyIsImxhdGV4IiwiZXhwZWN0IiwidG9FcXVhbCIsIl93aXRoSW5wdXQyIiwiY29tbWFuZCIsIl93aXRoSW5wdXQzIiwiX3dpdGhJbnB1dDQiLCJub3QiLCJ0b1Rocm93Iiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJjaGFuZ2VMYXRleCIsInRvSGF2ZUJlZW5DYWxsZWQiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNldFN0YXRlIiwicyIsIk9iamVjdCIsImFzc2lnbiIsInN0YXRlIiwiaW5wdXRGb2N1cyIsImZvY3VzZWQiLCJ0b0JlIiwiaW5wdXRCbHVyIiwicHJlc3NlZCIsImtleSIsIm9uQ2xpY2siLCJoayIsIkhvcml6b250YWxLZXlwYWQiLCJtb2NrIiwidmFsdWUiLCJ0eXBlIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIndpdGhGaWVsZCIsIklucHV0IiwibWF0aEZpZWxkIiwiZ2V0VmFsdWUiLCJpbnNlcnQiLCJleGVjdXRlQ29tbWFuZCIsImZvY3VzIiwiYmx1ciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVtb3ZlIiwicHJvcHMiLCJvbklucHV0RWRpdCIsImxhc3RFbWl0dGVkIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVhZE9ubHkiLCJjbGVhciIsInByZXZlbnREZWZhdWx0Iiwib25LZXlEb3duIiwibW9ja0NsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9jb21wb3NpdGVzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcblxuaW1wb3J0IE1hdGhJbnB1dCBmcm9tICcuLi9tYXRoLWlucHV0JztcbmltcG9ydCBIb3Jpem9udGFsS2V5cGFkIGZyb20gJy4uL2hvcml6b250YWwta2V5cGFkJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9tZi9pbnB1dCc7XG5cbi8qKlxuICogVGhlIHBpZWNlcyB0aGF0IHNpdCBiZXR3ZWVuIHRoZSBrZXlwYWQgYW5kIHRoZSBmaWVsZDogaG93IGEgcHJlc3NlZCBrZXkgaXNcbiAqIHJvdXRlZCBpbnRvIHRoZSBmaWVsZCwgYW5kIHRoZSBsZWdhY3kgYHt2YWx1ZSx0eXBlfWAgc2hhcGUgbWF0aC10b29sYmFyXG4gKiBjb25zdW1lcy5cbiAqL1xuZGVzY3JpYmUoJ01hdGhJbnB1dC5rZXlwYWRQcmVzcyByb3V0aW5nJywgKCkgPT4ge1xuICBjb25zdCB3aXRoSW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbWkgPSBuZXcgTWF0aElucHV0KHt9KTtcbiAgICBjb25zdCBjYWxscyA9IHsgd3JpdGU6IFtdLCBrZXlzdHJva2U6IFtdIH07XG5cbiAgICBtaS5pbnB1dCA9IHtcbiAgICAgIHdyaXRlOiAodikgPT4gY2FsbHMud3JpdGUucHVzaCh2KSxcbiAgICAgIGtleXN0cm9rZTogKHYpID0+IGNhbGxzLmtleXN0cm9rZS5wdXNoKHYpLFxuICAgIH07XG5cbiAgICByZXR1cm4geyBtaSwgY2FsbHMgfTtcbiAgfTtcblxuICBpdCgncm91dGVzIGFuIGluc2VydCBhY3Rpb24gdG8gd3JpdGUoKScsICgpID0+IHtcbiAgICBjb25zdCB7IG1pLCBjYWxscyB9ID0gd2l0aElucHV0KCk7XG5cbiAgICBtaS5rZXlwYWRQcmVzcyh7IGxhdGV4OiAnXFxcXHBpJyB9KTtcblxuICAgIGV4cGVjdChjYWxscy53cml0ZSkudG9FcXVhbChbJ1xcXFxwaSddKTtcbiAgICBleHBlY3QoY2FsbHMua2V5c3Ryb2tlKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoJ2V4cGFuZHMgYW4gYXJndW1lbnQtdGFraW5nIGNvbW1hbmQgYmVmb3JlIHdyaXRpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBtaSwgY2FsbHMgfSA9IHdpdGhJbnB1dCgpO1xuXG4gICAgbWkua2V5cGFkUHJlc3MoeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0pO1xuXG4gICAgZXhwZWN0KGNhbGxzLndyaXRlKS50b0VxdWFsKFsnXFxcXGZyYWN7Iz99eyM/fSddKTtcbiAgfSk7XG5cbiAgaXQoJ3JvdXRlcyBhIGN1cnNvciBrZXlzdHJva2UgdG8ga2V5c3Ryb2tlKCknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBtaSwgY2FsbHMgfSA9IHdpdGhJbnB1dCgpO1xuXG4gICAgbWkua2V5cGFkUHJlc3MoeyBrZXlzdHJva2U6ICdMZWZ0JyB9KTtcblxuICAgIGV4cGVjdChjYWxscy5rZXlzdHJva2UpLnRvRXF1YWwoWydtb3ZlVG9QcmV2aW91c0NoYXInXSk7XG4gICAgZXhwZWN0KGNhbGxzLndyaXRlKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMga2V5cyB3aXRoIG5vIGFjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB7IG1pLCBjYWxscyB9ID0gd2l0aElucHV0KCk7XG5cbiAgICBtaS5rZXlwYWRQcmVzcyh7fSk7XG4gICAgbWkua2V5cGFkUHJlc3MoeyBrZXlzdHJva2U6ICdOb25zZW5zZScgfSk7XG5cbiAgICBleHBlY3QoY2FsbHMud3JpdGUpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChjYWxscy5rZXlzdHJva2UpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnaXMgYSBuby1vcCBiZWZvcmUgdGhlIGZpZWxkIHJlZiBleGlzdHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWkgPSBuZXcgTWF0aElucHV0KHt9KTtcblxuICAgIGV4cGVjdCgoKSA9PiBtaS5rZXlwYWRQcmVzcyh7IGxhdGV4OiAnXFxcXHBpJyB9KSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ2NoYW5nZUxhdGV4IG9ubHkgZmlyZXMgb25DaGFuZ2Ugd2hlbiB0aGUgdmFsdWUgZGlmZmVycycsICgpID0+IHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICBjb25zdCBtaSA9IG5ldyBNYXRoSW5wdXQoeyBsYXRleDogJ3gnLCBvbkNoYW5nZSB9KTtcblxuICAgIG1pLmNoYW5nZUxhdGV4KCd4Jyk7XG4gICAgZXhwZWN0KG9uQ2hhbmdlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgbWkuY2hhbmdlTGF0ZXgoJ3knKTtcbiAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd5Jyk7XG4gIH0pO1xuXG4gIGl0KCd0cmFja3MgZm9jdXMgc3RhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgbWkgPSBuZXcgTWF0aElucHV0KHt9KTtcblxuICAgIG1pLnNldFN0YXRlID0gKHMpID0+IE9iamVjdC5hc3NpZ24obWkuc3RhdGUsIHMpO1xuICAgIG1pLmlucHV0Rm9jdXMoKTtcbiAgICBleHBlY3QobWkuc3RhdGUuZm9jdXNlZCkudG9CZSh0cnVlKTtcblxuICAgIG1pLmlucHV0Qmx1cigpO1xuICAgIGV4cGVjdChtaS5zdGF0ZS5mb2N1c2VkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0hvcml6b250YWxLZXlwYWQgbGVnYWN5IHt2YWx1ZSx0eXBlfSBtb2RlbCcsICgpID0+IHtcbiAgY29uc3QgcHJlc3NlZCA9IChrZXkpID0+IHtcbiAgICBjb25zdCBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgIGNvbnN0IGhrID0gbmV3IEhvcml6b250YWxLZXlwYWQoeyBvbkNsaWNrIH0pO1xuXG4gICAgaGsua2V5cGFkUHJlc3Moa2V5KTtcblxuICAgIHJldHVybiBvbkNsaWNrLm1vY2suY2FsbHNbMF1bMF07XG4gIH07XG5cbiAgaXQoJ21hcHMgYSBjb21tYW5kIHRvIHt2YWx1ZSwgdHlwZTogY29tbWFuZH0nLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByZXNzZWQoeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0pKS50b0VxdWFsKHsgdmFsdWU6ICdcXFxcZnJhYycsIHR5cGU6ICdjb21tYW5kJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ21hcHMgYSB3cml0ZSB0byB7dmFsdWV9JywgKCkgPT4ge1xuICAgIGV4cGVjdChwcmVzc2VkKHsgd3JpdGU6ICd4JyB9KSkudG9FcXVhbCh7IHZhbHVlOiAneCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdtYXBzIGEga2V5c3Ryb2tlIHRvIHt0eXBlOiBjdXJzb3J9JywgKCkgPT4ge1xuICAgIGV4cGVjdChwcmVzc2VkKHsga2V5c3Ryb2tlOiAnTGVmdCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnY3Vyc29yJywgdmFsdWU6ICdMZWZ0JyB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgd2l0aG91dCB0aHJvd2luZycsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxIb3Jpem9udGFsS2V5cGFkIG9uQ2xpY2s9eygpID0+IHt9fSAvPikpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdJbnB1dDogY29udHJvbGxlZC12YWx1ZSBzeW5jIGFuZCBldmVudHMnLCAoKSA9PiB7XG4gIGNvbnN0IHdpdGhGaWVsZCA9ICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7fSk7XG5cbiAgICBpbnB1dC5tYXRoRmllbGQgPSB7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gaW5wdXQubWF0aEZpZWxkLnZhbHVlLFxuICAgICAgaW5zZXJ0KHYpIHtcbiAgICAgICAgaW5wdXQubWF0aEZpZWxkLnZhbHVlICs9IHY7XG4gICAgICB9LFxuICAgICAgZXhlY3V0ZUNvbW1hbmQoKSB7fSxcbiAgICAgIGZvY3VzKCkge30sXG4gICAgICBibHVyKCkge30sXG4gICAgICBhZGRFdmVudExpc3RlbmVyKCkge30sXG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gICAgICByZW1vdmUoKSB7fSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIGl0KCdlbWl0cyBzdG9yZWQtZm9ybSBsYXRleCBvbiBlZGl0JywgKCkgPT4ge1xuICAgIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgIGNvbnN0IGlucHV0ID0gd2l0aEZpZWxkKCk7XG5cbiAgICBpbnB1dC5wcm9wcyA9IHsgb25DaGFuZ2UgfTtcbiAgICBpbnB1dC5tYXRoRmllbGQudmFsdWUgPSAnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVye319JztcbiAgICBpbnB1dC5vbklucHV0RWRpdCgpO1xuXG4gICAgLy8gXFxwbGFjZWhvbGRlciBpcyBNYXRoTGl2ZS1pbnRlcm5hbCBhbmQgbXVzdCBub3QgcmVhY2ggdGhlIG1vZGVsXG4gICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnXFxcXGxvbmdkaXZ7fScpO1xuICAgIGV4cGVjdChpbnB1dC5sYXN0RW1pdHRlZCkudG9FcXVhbCgnXFxcXGxvbmdkaXZ7fScpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgcHVzaCBhIHByb3AgZWNobyBiYWNrIGludG8gdGhlIGZpZWxkJywgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gd2l0aEZpZWxkKCk7XG5cbiAgICBpbnB1dC5tYXRoRmllbGQudmFsdWUgPSAneCc7XG4gICAgaW5wdXQubGFzdEVtaXR0ZWQgPSAneCc7XG4gICAgaW5wdXQucHJvcHMgPSB7IGxhdGV4OiAneCcgfTtcblxuICAgIGlucHV0LmNvbXBvbmVudERpZFVwZGF0ZSh7IGxhdGV4OiAnJyB9KTtcblxuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQudmFsdWUpLnRvRXF1YWwoJ3gnKTtcbiAgfSk7XG5cbiAgaXQoJ3B1c2hlcyBhIGdlbnVpbmVseSBuZXcgbGF0ZXggcHJvcCBpbnRvIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuXG4gICAgaW5wdXQubWF0aEZpZWxkLnZhbHVlID0gJ3gnO1xuICAgIGlucHV0Lmxhc3RFbWl0dGVkID0gJ3gnO1xuICAgIGlucHV0LnByb3BzID0geyBsYXRleDogJ3knIH07XG5cbiAgICBpbnB1dC5jb21wb25lbnREaWRVcGRhdGUoeyBsYXRleDogJ3gnIH0pO1xuXG4gICAgZXhwZWN0KGlucHV0Lm1hdGhGaWVsZC52YWx1ZSkudG9FcXVhbCgneScpO1xuICB9KTtcblxuICBpdCgnYnJpZGdlcyBzdG9yZWQgbGF0ZXggb24gdGhlIHdheSBpbicsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuXG4gICAgaW5wdXQucHJvcHMgPSB7IGxhdGV4OiAnXFxcXGxvbmdkaXZ7NX0nIH07XG4gICAgaW5wdXQuY29tcG9uZW50RGlkVXBkYXRlKHsgbGF0ZXg6ICcnIH0pO1xuXG4gICAgLy8gbXVzdCBiZWNvbWUgbmF0aXZlIFxcZW5jbG9zZSBzbyB0aGUgY29udGVudCBzdGF5cyBlZGl0YWJsZVxuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQudmFsdWUpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9ezV9Jyk7XG4gIH0pO1xuXG4gIGl0KCd0b2dnbGVzIHJlYWRPbmx5JywgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gd2l0aEZpZWxkKCk7XG5cbiAgICBpbnB1dC5wcm9wcyA9IHsgcmVhZE9ubHk6IHRydWUgfTtcbiAgICBpbnB1dC5jb21wb25lbnREaWRVcGRhdGUoeyByZWFkT25seTogZmFsc2UgfSk7XG5cbiAgICBleHBlY3QoaW5wdXQubWF0aEZpZWxkLnJlYWRPbmx5KS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnY2xlYXIoKSBlbXB0aWVzIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuXG4gICAgaW5wdXQubWF0aEZpZWxkLnZhbHVlID0gJ2FiYyc7XG4gICAgZXhwZWN0KGlucHV0LmNsZWFyKCkpLnRvRXF1YWwoJycpO1xuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQudmFsdWUpLnRvRXF1YWwoJycpO1xuICB9KTtcblxuICBpdCgnc3VwcHJlc3NlcyBFbnRlciBzbyBpdCBjYW5ub3QgaW5zZXJ0IGEgbGluZSBicmVhaycsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuICAgIGNvbnN0IHByZXZlbnREZWZhdWx0ID0gamVzdC5mbigpO1xuXG4gICAgaW5wdXQub25LZXlEb3duKHsga2V5OiAnRW50ZXInLCBwcmV2ZW50RGVmYXVsdCB9KTtcbiAgICBleHBlY3QocHJldmVudERlZmF1bHQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgIHByZXZlbnREZWZhdWx0Lm1vY2tDbGVhcigpO1xuICAgIGlucHV0Lm9uS2V5RG93bih7IGtleTogJ2EnLCBwcmV2ZW50RGVmYXVsdCB9KTtcbiAgICBleHBlY3QocHJldmVudERlZmF1bHQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdjb21wb25lbnREaWRVcGRhdGUgaXMgc2FmZSBiZWZvcmUgdGhlIGZpZWxkIGV4aXN0cycsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7IGxhdGV4OiAneCcgfSk7XG5cbiAgICBleHBlY3QoKCkgPT4gaW5wdXQuY29tcG9uZW50RGlkVXBkYXRlKHsgbGF0ZXg6ICcnIH0pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFB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
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _styles = require("@mui/material/styles");
|
|
8
|
+
var _index = require("../index");
|
|
9
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
+
/**
|
|
12
|
+
* Exercises the exact call patterns real consumers use against
|
|
13
|
+
* @pie-lib/math-input, to catch drop-in incompatibilities.
|
|
14
|
+
*
|
|
15
|
+
* Sources:
|
|
16
|
+
* - packages/math-toolbar/src/editor-and-pad.jsx:16,185
|
|
17
|
+
* - packages/math-toolbar/src/math-preview.jsx:8,156
|
|
18
|
+
* - packages/editable-html/src/plugins/respArea/math-templated/index.jsx:92
|
|
19
|
+
* - packages/editable-html-tip-tap/src/components/respArea/MathTemplated.jsx:111
|
|
20
|
+
*/
|
|
21
|
+
describe('drop-in compatibility with @pie-lib/math-input consumers', function () {
|
|
22
|
+
describe('mq.CommonMqStyles destructuring', function () {
|
|
23
|
+
it('math-preview.jsx: { commonMqFontStyles, longdivStyles, supsubStyles }', function () {
|
|
24
|
+
var _mq$CommonMqStyles = _index.mq.CommonMqStyles,
|
|
25
|
+
commonMqFontStyles = _mq$CommonMqStyles.commonMqFontStyles,
|
|
26
|
+
longdivStyles = _mq$CommonMqStyles.longdivStyles,
|
|
27
|
+
supsubStyles = _mq$CommonMqStyles.supsubStyles;
|
|
28
|
+
expect(commonMqFontStyles).toBeDefined();
|
|
29
|
+
expect(longdivStyles).toBeDefined();
|
|
30
|
+
expect(supsubStyles).toBeDefined();
|
|
31
|
+
});
|
|
32
|
+
it('editor-and-pad.jsx: also { commonMqKeyboardStyles }', function () {
|
|
33
|
+
var _mq$CommonMqStyles2 = _index.mq.CommonMqStyles,
|
|
34
|
+
commonMqFontStyles = _mq$CommonMqStyles2.commonMqFontStyles,
|
|
35
|
+
commonMqKeyboardStyles = _mq$CommonMqStyles2.commonMqKeyboardStyles,
|
|
36
|
+
longdivStyles = _mq$CommonMqStyles2.longdivStyles,
|
|
37
|
+
supsubStyles = _mq$CommonMqStyles2.supsubStyles;
|
|
38
|
+
expect(commonMqKeyboardStyles).toBeDefined();
|
|
39
|
+
// All four must be spreadable into an emotion style object.
|
|
40
|
+
expect(function () {
|
|
41
|
+
return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, commonMqFontStyles), commonMqKeyboardStyles), longdivStyles), supsubStyles);
|
|
42
|
+
}).not.toThrow();
|
|
43
|
+
});
|
|
44
|
+
it('the destructured groups survive being spread into a styled component', function () {
|
|
45
|
+
var _mq$CommonMqStyles3 = _index.mq.CommonMqStyles,
|
|
46
|
+
commonMqFontStyles = _mq$CommonMqStyles3.commonMqFontStyles,
|
|
47
|
+
longdivStyles = _mq$CommonMqStyles3.longdivStyles,
|
|
48
|
+
supsubStyles = _mq$CommonMqStyles3.supsubStyles;
|
|
49
|
+
var Styled = (0, _styles.styled)('div')(_objectSpread(_objectSpread(_objectSpread({}, commonMqFontStyles), longdivStyles), supsubStyles));
|
|
50
|
+
expect(function () {
|
|
51
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(Styled, null));
|
|
52
|
+
}).not.toThrow();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('mq.Input', function () {
|
|
56
|
+
it('editor-and-pad.jsx: styled(mq.Input) renders', function () {
|
|
57
|
+
var MathEditor = (0, _styles.styled)(_index.mq.Input)(function () {
|
|
58
|
+
return {
|
|
59
|
+
width: '100%'
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
expect(function () {
|
|
63
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(MathEditor, {
|
|
64
|
+
latex: "\\\\frac{1}{2}",
|
|
65
|
+
onChange: function onChange() {}
|
|
66
|
+
}));
|
|
67
|
+
}).not.toThrow();
|
|
68
|
+
});
|
|
69
|
+
it('accepts the className that styled() injects', function () {
|
|
70
|
+
var Styled = (0, _styles.styled)(_index.mq.Input)({
|
|
71
|
+
padding: 4
|
|
72
|
+
});
|
|
73
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(Styled, {
|
|
74
|
+
latex: "x",
|
|
75
|
+
onChange: function onChange() {}
|
|
76
|
+
})),
|
|
77
|
+
container = _render.container;
|
|
78
|
+
expect(container.firstChild).toBeTruthy();
|
|
79
|
+
expect(container.firstChild.className).toBeTruthy();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('mq.Static', function () {
|
|
83
|
+
it('math-preview.jsx: <mq.Static latex onFocus onBlur />', function () {
|
|
84
|
+
expect(function () {
|
|
85
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mq.Static, {
|
|
86
|
+
latex: '\\frac{1}{2}',
|
|
87
|
+
onFocus: function onFocus() {},
|
|
88
|
+
onBlur: function onBlur() {}
|
|
89
|
+
}));
|
|
90
|
+
}).not.toThrow();
|
|
91
|
+
});
|
|
92
|
+
it('math-templated respArea: <mq.Static latex={value} />', function () {
|
|
93
|
+
expect(function () {
|
|
94
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mq.Static, {
|
|
95
|
+
latex: 'x=1'
|
|
96
|
+
}));
|
|
97
|
+
}).not.toThrow();
|
|
98
|
+
});
|
|
99
|
+
it('renders answer-block latex (the templated-math case) without throwing', function () {
|
|
100
|
+
expect(function () {
|
|
101
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mq.Static, {
|
|
102
|
+
latex: 'x=\\MathQuillMathField[r1]{}',
|
|
103
|
+
onSubFieldChange: function onSubFieldChange() {}
|
|
104
|
+
}));
|
|
105
|
+
}).not.toThrow();
|
|
106
|
+
});
|
|
107
|
+
it('is styleable, as keypad labels were in math-input', function () {
|
|
108
|
+
var Styled = (0, _styles.styled)(_index.mq.Static)({
|
|
109
|
+
pointerEvents: 'none'
|
|
110
|
+
});
|
|
111
|
+
expect(function () {
|
|
112
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(Styled, {
|
|
113
|
+
latex: '\\pi'
|
|
114
|
+
}));
|
|
115
|
+
}).not.toThrow();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('surface parity', function () {
|
|
119
|
+
it('exposes exactly the names math-input exported', function () {
|
|
120
|
+
// eslint-disable-next-line global-require
|
|
121
|
+
var pkg = require('../index');
|
|
122
|
+
['keysForGrade', 'addBrackets', 'removeBrackets', 'keys', 'HorizontalKeypad', 'mq', 'updateSpans', 'registerEmbed', 'applyStaticMath'].forEach(function (name) {
|
|
123
|
+
expect(pkg[name]).toBeDefined();
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
it('mq exposes Input, Static and CommonMqStyles', function () {
|
|
127
|
+
['Input', 'Static', 'CommonMqStyles'].forEach(function (name) {
|
|
128
|
+
expect(_index.mq[name]).toBeDefined();
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2luZGV4Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZXNjcmliZSIsIml0IiwiX21xJENvbW1vbk1xU3R5bGVzIiwibXEiLCJDb21tb25NcVN0eWxlcyIsImNvbW1vbk1xRm9udFN0eWxlcyIsImxvbmdkaXZTdHlsZXMiLCJzdXBzdWJTdHlsZXMiLCJleHBlY3QiLCJ0b0JlRGVmaW5lZCIsIl9tcSRDb21tb25NcVN0eWxlczIiLCJjb21tb25NcUtleWJvYXJkU3R5bGVzIiwibm90IiwidG9UaHJvdyIsIl9tcSRDb21tb25NcVN0eWxlczMiLCJTdHlsZWQiLCJzdHlsZWQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTWF0aEVkaXRvciIsIklucHV0Iiwid2lkdGgiLCJsYXRleCIsIm9uQ2hhbmdlIiwicGFkZGluZyIsIl9yZW5kZXIiLCJjb250YWluZXIiLCJmaXJzdENoaWxkIiwidG9CZVRydXRoeSIsImNsYXNzTmFtZSIsIlN0YXRpYyIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblN1YkZpZWxkQ2hhbmdlIiwicG9pbnRlckV2ZW50cyIsInBrZyIsIm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Ryb3AtaW4tY29tcGF0LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcblxuaW1wb3J0IHsgbXEgfSBmcm9tICcuLi9pbmRleCc7XG5cbi8qKlxuICogRXhlcmNpc2VzIHRoZSBleGFjdCBjYWxsIHBhdHRlcm5zIHJlYWwgY29uc3VtZXJzIHVzZSBhZ2FpbnN0XG4gKiBAcGllLWxpYi9tYXRoLWlucHV0LCB0byBjYXRjaCBkcm9wLWluIGluY29tcGF0aWJpbGl0aWVzLlxuICpcbiAqIFNvdXJjZXM6XG4gKiAgLSBwYWNrYWdlcy9tYXRoLXRvb2xiYXIvc3JjL2VkaXRvci1hbmQtcGFkLmpzeDoxNiwxODVcbiAqICAtIHBhY2thZ2VzL21hdGgtdG9vbGJhci9zcmMvbWF0aC1wcmV2aWV3LmpzeDo4LDE1NlxuICogIC0gcGFja2FnZXMvZWRpdGFibGUtaHRtbC9zcmMvcGx1Z2lucy9yZXNwQXJlYS9tYXRoLXRlbXBsYXRlZC9pbmRleC5qc3g6OTJcbiAqICAtIHBhY2thZ2VzL2VkaXRhYmxlLWh0bWwtdGlwLXRhcC9zcmMvY29tcG9uZW50cy9yZXNwQXJlYS9NYXRoVGVtcGxhdGVkLmpzeDoxMTFcbiAqL1xuZGVzY3JpYmUoJ2Ryb3AtaW4gY29tcGF0aWJpbGl0eSB3aXRoIEBwaWUtbGliL21hdGgtaW5wdXQgY29uc3VtZXJzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnbXEuQ29tbW9uTXFTdHlsZXMgZGVzdHJ1Y3R1cmluZycsICgpID0+IHtcbiAgICBpdCgnbWF0aC1wcmV2aWV3LmpzeDogeyBjb21tb25NcUZvbnRTdHlsZXMsIGxvbmdkaXZTdHlsZXMsIHN1cHN1YlN0eWxlcyB9JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb21tb25NcUZvbnRTdHlsZXMsIGxvbmdkaXZTdHlsZXMsIHN1cHN1YlN0eWxlcyB9ID0gbXEuQ29tbW9uTXFTdHlsZXM7XG5cbiAgICAgIGV4cGVjdChjb21tb25NcUZvbnRTdHlsZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QobG9uZ2RpdlN0eWxlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChzdXBzdWJTdHlsZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZWRpdG9yLWFuZC1wYWQuanN4OiBhbHNvIHsgY29tbW9uTXFLZXlib2FyZFN0eWxlcyB9JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb21tb25NcUZvbnRTdHlsZXMsIGNvbW1vbk1xS2V5Ym9hcmRTdHlsZXMsIGxvbmdkaXZTdHlsZXMsIHN1cHN1YlN0eWxlcyB9ID0gbXEuQ29tbW9uTXFTdHlsZXM7XG5cbiAgICAgIGV4cGVjdChjb21tb25NcUtleWJvYXJkU3R5bGVzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgLy8gQWxsIGZvdXIgbXVzdCBiZSBzcHJlYWRhYmxlIGludG8gYW4gZW1vdGlvbiBzdHlsZSBvYmplY3QuXG4gICAgICBleHBlY3QoKCkgPT4gKHtcbiAgICAgICAgLi4uY29tbW9uTXFGb250U3R5bGVzLFxuICAgICAgICAuLi5jb21tb25NcUtleWJvYXJkU3R5bGVzLFxuICAgICAgICAuLi5sb25nZGl2U3R5bGVzLFxuICAgICAgICAuLi5zdXBzdWJTdHlsZXMsXG4gICAgICB9KSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aGUgZGVzdHJ1Y3R1cmVkIGdyb3VwcyBzdXJ2aXZlIGJlaW5nIHNwcmVhZCBpbnRvIGEgc3R5bGVkIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29tbW9uTXFGb250U3R5bGVzLCBsb25nZGl2U3R5bGVzLCBzdXBzdWJTdHlsZXMgfSA9IG1xLkNvbW1vbk1xU3R5bGVzO1xuICAgICAgY29uc3QgU3R5bGVkID0gc3R5bGVkKCdkaXYnKSh7IC4uLmNvbW1vbk1xRm9udFN0eWxlcywgLi4ubG9uZ2RpdlN0eWxlcywgLi4uc3Vwc3ViU3R5bGVzIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxTdHlsZWQgLz4pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbXEuSW5wdXQnLCAoKSA9PiB7XG4gICAgaXQoJ2VkaXRvci1hbmQtcGFkLmpzeDogc3R5bGVkKG1xLklucHV0KSByZW5kZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgTWF0aEVkaXRvciA9IHN0eWxlZChtcS5JbnB1dCkoKCkgPT4gKHsgd2lkdGg6ICcxMDAlJyB9KSk7XG5cbiAgICAgIGV4cGVjdCgoKSA9PiByZW5kZXIoPE1hdGhFZGl0b3IgbGF0ZXg9XCJcXFxcZnJhY3sxfXsyfVwiIG9uQ2hhbmdlPXsoKSA9PiB7fX0gLz4pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgdGhlIGNsYXNzTmFtZSB0aGF0IHN0eWxlZCgpIGluamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBTdHlsZWQgPSBzdHlsZWQobXEuSW5wdXQpKHsgcGFkZGluZzogNCB9KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN0eWxlZCBsYXRleD1cInhcIiBvbkNoYW5nZT17KCkgPT4ge319IC8+KTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQuY2xhc3NOYW1lKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtcS5TdGF0aWMnLCAoKSA9PiB7XG4gICAgaXQoJ21hdGgtcHJldmlldy5qc3g6IDxtcS5TdGF0aWMgbGF0ZXggb25Gb2N1cyBvbkJsdXIgLz4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxtcS5TdGF0aWMgbGF0ZXg9eydcXFxcZnJhY3sxfXsyfSd9IG9uRm9jdXM9eygpID0+IHt9fSBvbkJsdXI9eygpID0+IHt9fSAvPikpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0aC10ZW1wbGF0ZWQgcmVzcEFyZWE6IDxtcS5TdGF0aWMgbGF0ZXg9e3ZhbHVlfSAvPicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiByZW5kZXIoPG1xLlN0YXRpYyBsYXRleD17J3g9MSd9IC8+KSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGFuc3dlci1ibG9jayBsYXRleCAodGhlIHRlbXBsYXRlZC1tYXRoIGNhc2UpIHdpdGhvdXQgdGhyb3dpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgcmVuZGVyKDxtcS5TdGF0aWMgbGF0ZXg9eyd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30nfSBvblN1YkZpZWxkQ2hhbmdlPXsoKSA9PiB7fX0gLz4pLFxuICAgICAgKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzIHN0eWxlYWJsZSwgYXMga2V5cGFkIGxhYmVscyB3ZXJlIGluIG1hdGgtaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBTdHlsZWQgPSBzdHlsZWQobXEuU3RhdGljKSh7IHBvaW50ZXJFdmVudHM6ICdub25lJyB9KTtcblxuICAgICAgZXhwZWN0KCgpID0+IHJlbmRlcig8U3R5bGVkIGxhdGV4PXsnXFxcXHBpJ30gLz4pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3VyZmFjZSBwYXJpdHknLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9zZXMgZXhhY3RseSB0aGUgbmFtZXMgbWF0aC1pbnB1dCBleHBvcnRlZCcsICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgICAgY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vaW5kZXgnKTtcblxuICAgICAgW1xuICAgICAgICAna2V5c0ZvckdyYWRlJyxcbiAgICAgICAgJ2FkZEJyYWNrZXRzJyxcbiAgICAgICAgJ3JlbW92ZUJyYWNrZXRzJyxcbiAgICAgICAgJ2tleXMnLFxuICAgICAgICAnSG9yaXpvbnRhbEtleXBhZCcsXG4gICAgICAgICdtcScsXG4gICAgICAgICd1cGRhdGVTcGFucycsXG4gICAgICAgICdyZWdpc3RlckVtYmVkJyxcbiAgICAgICAgJ2FwcGx5U3RhdGljTWF0aCcsXG4gICAgICBdLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgZXhwZWN0KHBrZ1tuYW1lXSkudG9CZURlZmluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21xIGV4cG9zZXMgSW5wdXQsIFN0YXRpYyBhbmQgQ29tbW9uTXFTdHlsZXMnLCAoKSA9PiB7XG4gICAgICBbJ0lucHV0JywgJ1N0YXRpYycsICdDb21tb25NcVN0eWxlcyddLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgZXhwZWN0KG1xW25hbWVdKS50b0JlRGVmaW5lZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFBOEIsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxD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
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _index = require("../index");
|
|
8
|
+
describe('math-input-mathlive public API', function () {
|
|
9
|
+
it('mirrors the @pie-lib/math-input export surface', function () {
|
|
10
|
+
expect((0, _typeof2["default"])(_index.keysForGrade)).toBe('function');
|
|
11
|
+
expect((0, _typeof2["default"])(_index.addBrackets)).toBe('function');
|
|
12
|
+
expect((0, _typeof2["default"])(_index.removeBrackets)).toBe('function');
|
|
13
|
+
expect((0, _typeof2["default"])(_index.registerEmbed)).toBe('function');
|
|
14
|
+
expect((0, _typeof2["default"])(_index.applyStaticMath)).toBe('function');
|
|
15
|
+
expect((0, _typeof2["default"])(_index.updateSpans)).toBe('function');
|
|
16
|
+
expect(_index.keys).toBeDefined();
|
|
17
|
+
expect(_index.keys.baseSet).toBeDefined();
|
|
18
|
+
});
|
|
19
|
+
it('exports the field wrappers under both mf and mq', function () {
|
|
20
|
+
expect(_index.mf.Input).toBeDefined();
|
|
21
|
+
expect(_index.mf.Static).toBeDefined();
|
|
22
|
+
// `mq` alias lets a consumer swap packages by changing only the import.
|
|
23
|
+
expect(_index.mq).toBe(_index.mf);
|
|
24
|
+
});
|
|
25
|
+
it('updateSpans is a safe no-op', function () {
|
|
26
|
+
expect(function () {
|
|
27
|
+
return (0, _index.updateSpans)();
|
|
28
|
+
}).not.toThrow();
|
|
29
|
+
});
|
|
30
|
+
it('CommonMqStyles keeps the shape consumers destructure', function () {
|
|
31
|
+
// math-toolbar does:
|
|
32
|
+
// const { commonMqFontStyles, commonMqKeyboardStyles, longdivStyles, supsubStyles }
|
|
33
|
+
// = mq.CommonMqStyles;
|
|
34
|
+
var _mf$CommonMqStyles = _index.mf.CommonMqStyles,
|
|
35
|
+
commonMqFontStyles = _mf$CommonMqStyles.commonMqFontStyles,
|
|
36
|
+
commonMqKeyboardStyles = _mf$CommonMqStyles.commonMqKeyboardStyles,
|
|
37
|
+
longdivStyles = _mf$CommonMqStyles.longdivStyles,
|
|
38
|
+
supsubStyles = _mf$CommonMqStyles.supsubStyles;
|
|
39
|
+
[commonMqFontStyles, commonMqKeyboardStyles, longdivStyles, supsubStyles].forEach(function (s) {
|
|
40
|
+
expect(s).toBeDefined();
|
|
41
|
+
expect((0, _typeof2["default"])(s)).toBe('object');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it('bracket helpers round-trip', function () {
|
|
45
|
+
expect((0, _index.addBrackets)('x')).toEqual('\\(x\\)');
|
|
46
|
+
expect((0, _index.removeBrackets)('\\(x\\)')).toEqual('x');
|
|
47
|
+
expect((0, _index.removeBrackets)((0, _index.addBrackets)('\\frac{1}{2}'))).toEqual('\\frac{1}{2}');
|
|
48
|
+
});
|
|
49
|
+
it('keysForGrade returns a 5-row keyset', function () {
|
|
50
|
+
var set = (0, _index.keysForGrade)('geometry');
|
|
51
|
+
expect(Array.isArray(set)).toBe(true);
|
|
52
|
+
expect(set.length).toBe(5);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('rendering', function () {
|
|
56
|
+
// MathLive is a browser-only custom element; loadMathLive() resolves async and
|
|
57
|
+
// is a no-op-ish under jsdom. These assert the components mount without
|
|
58
|
+
// throwing, which is what regressed most often in the MathQuill version.
|
|
59
|
+
it('KeyPad renders without a live MathLive instance', function () {
|
|
60
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.KeyPad, {
|
|
61
|
+
onPress: function onPress() {}
|
|
62
|
+
})),
|
|
63
|
+
container = _render.container;
|
|
64
|
+
expect(container.querySelectorAll('button').length).toBeGreaterThan(0);
|
|
65
|
+
});
|
|
66
|
+
it('KeyPad falls back to raw latex for labels before MathLive loads', function () {
|
|
67
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.KeyPad, {
|
|
68
|
+
onPress: function onPress() {},
|
|
69
|
+
baseSet: [[{
|
|
70
|
+
name: 'pi',
|
|
71
|
+
latex: '\\pi',
|
|
72
|
+
category: 'constants'
|
|
73
|
+
}]]
|
|
74
|
+
})),
|
|
75
|
+
container = _render2.container;
|
|
76
|
+
expect(container.textContent).toContain('\\pi');
|
|
77
|
+
});
|
|
78
|
+
it('KeyPad fires onPress with the key definition', function () {
|
|
79
|
+
var onPress = jest.fn();
|
|
80
|
+
var key = {
|
|
81
|
+
name: 'x',
|
|
82
|
+
label: 'x',
|
|
83
|
+
write: 'x',
|
|
84
|
+
category: 'vars'
|
|
85
|
+
};
|
|
86
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.KeyPad, {
|
|
87
|
+
onPress: onPress,
|
|
88
|
+
baseSet: [[key]]
|
|
89
|
+
})),
|
|
90
|
+
container = _render3.container;
|
|
91
|
+
container.querySelector('button').click();
|
|
92
|
+
expect(onPress).toHaveBeenCalledWith(key);
|
|
93
|
+
});
|
|
94
|
+
it('MathInput mounts', function () {
|
|
95
|
+
expect(function () {
|
|
96
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.MathInput, {
|
|
97
|
+
latex: "\\\\frac{1}{2}",
|
|
98
|
+
onChange: function onChange() {}
|
|
99
|
+
}));
|
|
100
|
+
}).not.toThrow();
|
|
101
|
+
});
|
|
102
|
+
it('HorizontalKeypad mounts and reports the legacy {value,type} model', function () {
|
|
103
|
+
var onClick = jest.fn();
|
|
104
|
+
expect(function () {
|
|
105
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.HorizontalKeypad, {
|
|
106
|
+
onClick: onClick
|
|
107
|
+
}));
|
|
108
|
+
}).not.toThrow();
|
|
109
|
+
});
|
|
110
|
+
it('Static renders display-mode latex without a mathfield', function () {
|
|
111
|
+
expect(function () {
|
|
112
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mf.Static, {
|
|
113
|
+
latex: "\\\\frac{1}{2}"
|
|
114
|
+
}));
|
|
115
|
+
}).not.toThrow();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfaW5kZXgiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwiX3R5cGVvZjIiLCJrZXlzRm9yR3JhZGUiLCJ0b0JlIiwiYWRkQnJhY2tldHMiLCJyZW1vdmVCcmFja2V0cyIsInJlZ2lzdGVyRW1iZWQiLCJhcHBseVN0YXRpY01hdGgiLCJ1cGRhdGVTcGFucyIsImtleXMiLCJ0b0JlRGVmaW5lZCIsImJhc2VTZXQiLCJtZiIsIklucHV0IiwiU3RhdGljIiwibXEiLCJub3QiLCJ0b1Rocm93IiwiX21mJENvbW1vbk1xU3R5bGVzIiwiQ29tbW9uTXFTdHlsZXMiLCJjb21tb25NcUZvbnRTdHlsZXMiLCJjb21tb25NcUtleWJvYXJkU3R5bGVzIiwibG9uZ2RpdlN0eWxlcyIsInN1cHN1YlN0eWxlcyIsImZvckVhY2giLCJzIiwidG9FcXVhbCIsInNldCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiS2V5UGFkIiwib25QcmVzcyIsImNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ0b0JlR3JlYXRlclRoYW4iLCJfcmVuZGVyMiIsIm5hbWUiLCJsYXRleCIsImNhdGVnb3J5IiwidGV4dENvbnRlbnQiLCJ0b0NvbnRhaW4iLCJqZXN0IiwiZm4iLCJrZXkiLCJsYWJlbCIsIndyaXRlIiwiX3JlbmRlcjMiLCJxdWVyeVNlbGVjdG9yIiwiY2xpY2siLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIk1hdGhJbnB1dCIsIm9uQ2hhbmdlIiwib25DbGljayIsIkhvcml6b250YWxLZXlwYWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2luZGV4LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcblxuaW1wb3J0IHtcbiAga2V5cyxcbiAga2V5c0ZvckdyYWRlLFxuICBhZGRCcmFja2V0cyxcbiAgcmVtb3ZlQnJhY2tldHMsXG4gIHJlZ2lzdGVyRW1iZWQsXG4gIGFwcGx5U3RhdGljTWF0aCxcbiAgdXBkYXRlU3BhbnMsXG4gIG1mLFxuICBtcSxcbiAgTWF0aElucHV0LFxuICBIb3Jpem9udGFsS2V5cGFkLFxuICBLZXlQYWQsXG59IGZyb20gJy4uL2luZGV4JztcblxuZGVzY3JpYmUoJ21hdGgtaW5wdXQtbWF0aGxpdmUgcHVibGljIEFQSScsICgpID0+IHtcbiAgaXQoJ21pcnJvcnMgdGhlIEBwaWUtbGliL21hdGgtaW5wdXQgZXhwb3J0IHN1cmZhY2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHR5cGVvZiBrZXlzRm9yR3JhZGUpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgZXhwZWN0KHR5cGVvZiBhZGRCcmFja2V0cykudG9CZSgnZnVuY3Rpb24nKTtcbiAgICBleHBlY3QodHlwZW9mIHJlbW92ZUJyYWNrZXRzKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIGV4cGVjdCh0eXBlb2YgcmVnaXN0ZXJFbWJlZCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICBleHBlY3QodHlwZW9mIGFwcGx5U3RhdGljTWF0aCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICBleHBlY3QodHlwZW9mIHVwZGF0ZVNwYW5zKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIGV4cGVjdChrZXlzKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChrZXlzLmJhc2VTZXQpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KCdleHBvcnRzIHRoZSBmaWVsZCB3cmFwcGVycyB1bmRlciBib3RoIG1mIGFuZCBtcScsICgpID0+IHtcbiAgICBleHBlY3QobWYuSW5wdXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KG1mLlN0YXRpYykudG9CZURlZmluZWQoKTtcbiAgICAvLyBgbXFgIGFsaWFzIGxldHMgYSBjb25zdW1lciBzd2FwIHBhY2thZ2VzIGJ5IGNoYW5naW5nIG9ubHkgdGhlIGltcG9ydC5cbiAgICBleHBlY3QobXEpLnRvQmUobWYpO1xuICB9KTtcblxuICBpdCgndXBkYXRlU3BhbnMgaXMgYSBzYWZlIG5vLW9wJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB1cGRhdGVTcGFucygpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdCgnQ29tbW9uTXFTdHlsZXMga2VlcHMgdGhlIHNoYXBlIGNvbnN1bWVycyBkZXN0cnVjdHVyZScsICgpID0+IHtcbiAgICAvLyBtYXRoLXRvb2xiYXIgZG9lczpcbiAgICAvLyAgIGNvbnN0IHsgY29tbW9uTXFGb250U3R5bGVzLCBjb21tb25NcUtleWJvYXJkU3R5bGVzLCBsb25nZGl2U3R5bGVzLCBzdXBzdWJTdHlsZXMgfVxuICAgIC8vICAgICA9IG1xLkNvbW1vbk1xU3R5bGVzO1xuICAgIGNvbnN0IHsgY29tbW9uTXFGb250U3R5bGVzLCBjb21tb25NcUtleWJvYXJkU3R5bGVzLCBsb25nZGl2U3R5bGVzLCBzdXBzdWJTdHlsZXMgfSA9IG1mLkNvbW1vbk1xU3R5bGVzO1xuXG4gICAgW2NvbW1vbk1xRm9udFN0eWxlcywgY29tbW9uTXFLZXlib2FyZFN0eWxlcywgbG9uZ2RpdlN0eWxlcywgc3Vwc3ViU3R5bGVzXS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBleHBlY3QocykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcykudG9CZSgnb2JqZWN0Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdicmFja2V0IGhlbHBlcnMgcm91bmQtdHJpcCcsICgpID0+IHtcbiAgICBleHBlY3QoYWRkQnJhY2tldHMoJ3gnKSkudG9FcXVhbCgnXFxcXCh4XFxcXCknKTtcbiAgICBleHBlY3QocmVtb3ZlQnJhY2tldHMoJ1xcXFwoeFxcXFwpJykpLnRvRXF1YWwoJ3gnKTtcbiAgICBleHBlY3QocmVtb3ZlQnJhY2tldHMoYWRkQnJhY2tldHMoJ1xcXFxmcmFjezF9ezJ9JykpKS50b0VxdWFsKCdcXFxcZnJhY3sxfXsyfScpO1xuICB9KTtcblxuICBpdCgna2V5c0ZvckdyYWRlIHJldHVybnMgYSA1LXJvdyBrZXlzZXQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2V0ID0ga2V5c0ZvckdyYWRlKCdnZW9tZXRyeScpO1xuXG4gICAgZXhwZWN0KEFycmF5LmlzQXJyYXkoc2V0KSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3Qoc2V0Lmxlbmd0aCkudG9CZSg1KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgLy8gTWF0aExpdmUgaXMgYSBicm93c2VyLW9ubHkgY3VzdG9tIGVsZW1lbnQ7IGxvYWRNYXRoTGl2ZSgpIHJlc29sdmVzIGFzeW5jIGFuZFxuICAvLyBpcyBhIG5vLW9wLWlzaCB1bmRlciBqc2RvbS4gVGhlc2UgYXNzZXJ0IHRoZSBjb21wb25lbnRzIG1vdW50IHdpdGhvdXRcbiAgLy8gdGhyb3dpbmcsIHdoaWNoIGlzIHdoYXQgcmVncmVzc2VkIG1vc3Qgb2Z0ZW4gaW4gdGhlIE1hdGhRdWlsbCB2ZXJzaW9uLlxuICBpdCgnS2V5UGFkIHJlbmRlcnMgd2l0aG91dCBhIGxpdmUgTWF0aExpdmUgaW5zdGFuY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8S2V5UGFkIG9uUHJlc3M9eygpID0+IHt9fSAvPik7XG5cbiAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KTtcblxuICBpdCgnS2V5UGFkIGZhbGxzIGJhY2sgdG8gcmF3IGxhdGV4IGZvciBsYWJlbHMgYmVmb3JlIE1hdGhMaXZlIGxvYWRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICA8S2V5UGFkIG9uUHJlc3M9eygpID0+IHt9fSBiYXNlU2V0PXtbW3sgbmFtZTogJ3BpJywgbGF0ZXg6ICdcXFxccGknLCBjYXRlZ29yeTogJ2NvbnN0YW50cycgfV1dfSAvPixcbiAgICApO1xuXG4gICAgZXhwZWN0KGNvbnRhaW5lci50ZXh0Q29udGVudCkudG9Db250YWluKCdcXFxccGknKTtcbiAgfSk7XG5cbiAgaXQoJ0tleVBhZCBmaXJlcyBvblByZXNzIHdpdGggdGhlIGtleSBkZWZpbml0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uUHJlc3MgPSBqZXN0LmZuKCk7XG4gICAgY29uc3Qga2V5ID0geyBuYW1lOiAneCcsIGxhYmVsOiAneCcsIHdyaXRlOiAneCcsIGNhdGVnb3J5OiAndmFycycgfTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxLZXlQYWQgb25QcmVzcz17b25QcmVzc30gYmFzZVNldD17W1trZXldXX0gLz4pO1xuXG4gICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLmNsaWNrKCk7XG5cbiAgICBleHBlY3Qob25QcmVzcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoa2V5KTtcbiAgfSk7XG5cbiAgaXQoJ01hdGhJbnB1dCBtb3VudHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHJlbmRlcig8TWF0aElucHV0IGxhdGV4PVwiXFxcXGZyYWN7MX17Mn1cIiBvbkNoYW5nZT17KCkgPT4ge319IC8+KSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ0hvcml6b250YWxLZXlwYWQgbW91bnRzIGFuZCByZXBvcnRzIHRoZSBsZWdhY3kge3ZhbHVlLHR5cGV9IG1vZGVsJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uQ2xpY2sgPSBqZXN0LmZuKCk7XG5cbiAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxIb3Jpem9udGFsS2V5cGFkIG9uQ2xpY2s9e29uQ2xpY2t9IC8+KSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ1N0YXRpYyByZW5kZXJzIGRpc3BsYXktbW9kZSBsYXRleCB3aXRob3V0IGEgbWF0aGZpZWxkJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiByZW5kZXIoPG1mLlN0YXRpYyBsYXRleD1cIlxcXFxmcmFjezF9ezJ9XCIgLz4pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBZUFHLFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRSxZQUFNO0VBQy9DQyxFQUFFLENBQUMsZ0RBQWdELEVBQUUsWUFBTTtJQUN6REMsTUFBTSxLQUFBQyxRQUFBLGFBQVFDLG1CQUFZLEVBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1Q0gsTUFBTSxLQUFBQyxRQUFBLGFBQVFHLGtCQUFXLEVBQUMsQ0FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQ0gsTUFBTSxLQUFBQyxRQUFBLGFBQVFJLHFCQUFjLEVBQUMsQ0FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM5Q0gsTUFBTSxLQUFBQyxRQUFBLGFBQVFLLG9CQUFhLEVBQUMsQ0FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM3Q0gsTUFBTSxLQUFBQyxRQUFBLGFBQVFNLHNCQUFlLEVBQUMsQ0FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvQ0gsTUFBTSxLQUFBQyxRQUFBLGFBQVFPLGtCQUFXLEVBQUMsQ0FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQ0gsTUFBTSxDQUFDUyxXQUFJLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7SUFDMUJWLE1BQU0sQ0FBQ1MsV0FBSSxDQUFDRSxPQUFPLENBQUMsQ0FBQ0QsV0FBVyxDQUFDLENBQUM7RUFDcEMsQ0FBQyxDQUFDO0VBRUZYLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxZQUFNO0lBQzFEQyxNQUFNLENBQUNZLFNBQUUsQ0FBQ0MsS0FBSyxDQUFDLENBQUNILFdBQVcsQ0FB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
|