@spectrum-web-components/number-field 0.3.13 → 0.4.1-devmode.7

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.
@@ -1,1143 +1,1143 @@
1
- /*
2
- Copyright 2020 Adobe. All rights reserved.
3
- This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License. You may obtain a copy
5
- of the License at http://www.apache.org/licenses/LICENSE-2.0
6
-
7
- Unless required by applicable law or agreed to in writing, software distributed under
8
- the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- OF ANY KIND, either express or implied. See the License for the specific language
10
- governing permissions and limitations under the License.
11
- */
12
- import { html } from '@spectrum-web-components/base';
13
- import { elementUpdated, expect, nextFrame, oneEvent } from '@open-wc/testing';
14
- import polyfillCheck from '@formatjs/intl-numberformat/should-polyfill.js';
15
- import { currency, decimals, Default, indeterminate, percents, pixels, units, } from '../stories/number-field.stories.js';
16
- import '../sp-number-field.js';
17
- import { FRAMES_PER_CHANGE, indeterminatePlaceholder } from '..';
18
- import { sendKeys, setUserAgent } from '@web/test-runner-commands';
19
- import { spy } from 'sinon';
20
- import { clickBySelector, createLanguageContext, getElFrom, } from './helpers.js';
21
- import { sendMouse } from '../../../test/plugins/browser.js';
22
- describe('NumberField', () => {
23
- before(async () => {
24
- if (polyfillCheck.shouldPolyfill()) {
25
- await import('@formatjs/intl-numberformat/polyfill.js');
26
- }
27
- if (Intl.NumberFormat.polyfilled) {
28
- await import('@formatjs/intl-numberformat/locale-data/en.js');
29
- await import('@formatjs/intl-numberformat/locale-data/fr.js');
30
- }
1
+ import { html } from "@spectrum-web-components/base";
2
+ import { elementUpdated, expect, nextFrame, oneEvent } from "@open-wc/testing";
3
+ import polyfillCheck from "@formatjs/intl-numberformat/should-polyfill.js";
4
+ import {
5
+ currency,
6
+ decimals,
7
+ Default,
8
+ indeterminate,
9
+ percents,
10
+ pixels,
11
+ units
12
+ } from "../stories/number-field.stories.js";
13
+ import "@spectrum-web-components/number-field/sp-number-field.js";
14
+ import {
15
+ FRAMES_PER_CHANGE,
16
+ indeterminatePlaceholder
17
+ } from "@spectrum-web-components/number-field";
18
+ import { sendKeys, setUserAgent } from "@web/test-runner-commands";
19
+ import { spy } from "sinon";
20
+ import {
21
+ clickBySelector,
22
+ createLanguageContext,
23
+ getElFrom
24
+ } from "./helpers.js";
25
+ import { sendMouse } from "../../../test/plugins/browser.js";
26
+ describe("NumberField", () => {
27
+ before(async () => {
28
+ if (polyfillCheck.shouldPolyfill()) {
29
+ await import("@formatjs/intl-numberformat/polyfill.js");
30
+ }
31
+ if (Intl.NumberFormat.polyfilled) {
32
+ await import("@formatjs/intl-numberformat/locale-data/en.js");
33
+ await import("@formatjs/intl-numberformat/locale-data/fr.js");
34
+ }
35
+ });
36
+ it("loads default number-field accessibly", async () => {
37
+ const el = await getElFrom(Default({}));
38
+ await elementUpdated(el);
39
+ await expect(el).to.be.accessible();
40
+ });
41
+ describe("receives input", () => {
42
+ it("without language context", async () => {
43
+ const el = await getElFrom(Default({ value: 1337 }));
44
+ expect(el.formattedValue).to.equal("1,337");
45
+ expect(el.valueAsString).to.equal("1337");
46
+ expect(el.value).to.equal(1337);
47
+ el.focus();
48
+ await sendKeys({ type: "7331" });
49
+ await elementUpdated(el);
50
+ await sendKeys({ press: "Enter" });
51
+ await elementUpdated(el);
52
+ expect(el.formattedValue).to.equal("13,377,331");
53
+ expect(el.valueAsString).to.equal("13377331");
54
+ expect(el.value).to.equal(13377331);
31
55
  });
32
- it('loads default number-field accessibly', async () => {
33
- const el = await getElFrom(Default({}));
34
- await elementUpdated(el);
35
- await expect(el).to.be.accessible();
36
- });
37
- describe('receives input', () => {
38
- it('without language context', async () => {
39
- const el = await getElFrom(Default({ value: 1337 }));
40
- expect(el.formattedValue).to.equal('1,337');
41
- expect(el.valueAsString).to.equal('1337');
42
- expect(el.value).to.equal(1337);
43
- el.focus();
44
- await sendKeys({ type: '7331' });
45
- await elementUpdated(el);
46
- await sendKeys({ press: 'Enter' });
47
- await elementUpdated(el);
48
- expect(el.formattedValue).to.equal('13,377,331');
49
- expect(el.valueAsString).to.equal('13377331');
50
- expect(el.value).to.equal(13377331);
51
- });
52
- it('with language context', async () => {
53
- const languageContext = createLanguageContext('fr');
54
- const el = await getElFrom(html `
56
+ it("with language context", async () => {
57
+ const languageContext = createLanguageContext("fr");
58
+ const el = await getElFrom(html`
55
59
  <div @sp-language-context=${languageContext}>
56
60
  ${Default({ value: 1337 })}
57
61
  </div>
58
62
  `);
59
- expect(el.formattedValue).to.equal('1 337');
60
- expect(el.valueAsString).to.equal('1337');
61
- expect(el.value).to.equal(1337);
62
- el.focus();
63
- await sendKeys({ type: '7331' });
64
- await elementUpdated(el);
65
- await sendKeys({ press: 'Enter' });
66
- await elementUpdated(el);
67
- expect(el.formattedValue).to.equal('13 377 331');
68
- expect(el.valueAsString).to.equal('13377331');
69
- expect(el.value).to.equal(13377331);
70
- });
71
- });
72
- describe('Step', () => {
73
- it('can be 0', async () => {
74
- const el = await getElFrom(Default({
75
- step: 0,
76
- min: 0,
77
- max: 10,
78
- value: 5,
79
- }));
80
- expect(el.value).to.equal(5);
81
- expect(el.formattedValue).to.equal('5');
82
- expect(el.valueAsString).to.equal('5');
83
- });
84
- });
85
- describe('Increments', () => {
86
- let el;
87
- beforeEach(async () => {
88
- el = await getElFrom(Default({}));
89
- expect(el.value).to.be.NaN;
90
- expect(el.formattedValue).to.equal('');
91
- expect(el.valueAsString).to.equal('NaN');
92
- });
93
- it('via pointer, only "left" button', async () => {
94
- await clickBySelector(el, '.stepUp', { button: 'middle' });
95
- expect(el.formattedValue).to.equal('');
96
- expect(el.valueAsString).to.equal('NaN');
97
- expect(el.value).to.be.NaN;
98
- });
99
- it('via pointer', async () => {
100
- await clickBySelector(el, '.stepUp');
101
- expect(el.formattedValue).to.equal('0');
102
- expect(el.valueAsString).to.equal('0');
103
- expect(el.value).to.equal(0);
104
- await clickBySelector(el, '.stepUp');
105
- expect(el.formattedValue).to.equal('1');
106
- expect(el.valueAsString).to.equal('1');
107
- expect(el.value).to.equal(1);
108
- });
109
- it('via arrow up', async () => {
110
- el.focus();
111
- await elementUpdated(el);
112
- await sendKeys({ press: 'ArrowUp' });
113
- await elementUpdated(el);
114
- expect(el.formattedValue).to.equal('0');
115
- expect(el.valueAsString).to.equal('0');
116
- expect(el.value).to.equal(0);
117
- await sendKeys({ press: 'ArrowUp' });
118
- await elementUpdated(el);
119
- expect(el.formattedValue).to.equal('1');
120
- expect(el.valueAsString).to.equal('1');
121
- expect(el.value).to.equal(1);
122
- });
123
- it('via arrow up (shift modified)', async () => {
124
- el.focus();
125
- await elementUpdated(el);
126
- await sendKeys({ press: 'ArrowUp' });
127
- await elementUpdated(el);
128
- expect(el.formattedValue).to.equal('0');
129
- expect(el.valueAsString).to.equal('0');
130
- expect(el.value).to.equal(0);
131
- await sendKeys({ press: 'Shift+ArrowUp' });
132
- await elementUpdated(el);
133
- expect(el.formattedValue).to.equal('10');
134
- expect(el.valueAsString).to.equal('10');
135
- expect(el.value).to.equal(10);
136
- });
137
- it('via arrow up (custom shift modified value)', async () => {
138
- el.focus();
139
- el.stepModifier = 5;
140
- el.step = 3;
141
- await elementUpdated(el);
142
- await sendKeys({ press: 'ArrowUp' });
143
- await elementUpdated(el);
144
- expect(el.formattedValue).to.equal('0');
145
- expect(el.valueAsString).to.equal('0');
146
- expect(el.value).to.equal(0);
147
- await sendKeys({ press: 'Shift+ArrowUp' });
148
- await elementUpdated(el);
149
- expect(el.formattedValue).to.equal('15');
150
- expect(el.valueAsString).to.equal('15');
151
- expect(el.value).to.equal(15);
152
- });
153
- it('via scroll', async () => {
154
- el.focus();
155
- await elementUpdated(el);
156
- expect(el.focused).to.be.true;
157
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));
158
- await elementUpdated(el);
159
- expect(el.formattedValue).to.equal('0');
160
- expect(el.valueAsString).to.equal('0');
161
- expect(el.value).to.equal(0);
162
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: 100 }));
163
- await elementUpdated(el);
164
- expect(el.formattedValue).to.equal('1');
165
- expect(el.valueAsString).to.equal('1');
166
- expect(el.value).to.equal(1);
167
- });
168
- it('via scroll (shift modified)', async () => {
169
- el.focus();
170
- await elementUpdated(el);
171
- expect(el.focused).to.be.true;
172
- el.dispatchEvent(new WheelEvent('wheel', {
173
- deltaX: 1,
174
- shiftKey: true,
175
- }));
176
- await elementUpdated(el);
177
- expect(el.formattedValue).to.equal('0');
178
- expect(el.valueAsString).to.equal('0');
179
- expect(el.value).to.equal(0);
180
- el.dispatchEvent(new WheelEvent('wheel', {
181
- deltaX: 100,
182
- shiftKey: true,
183
- }));
184
- await elementUpdated(el);
185
- expect(el.formattedValue).to.equal('10');
186
- expect(el.valueAsString).to.equal('10');
187
- expect(el.value).to.equal(10);
188
- });
189
- });
190
- describe('Decrements', () => {
191
- let el;
192
- beforeEach(async () => {
193
- el = await getElFrom(Default({}));
194
- expect(el.value).to.be.NaN;
195
- expect(el.formattedValue).to.equal('');
196
- expect(el.valueAsString).to.equal('NaN');
197
- });
198
- it('via pointer, only "left" button', async () => {
199
- await clickBySelector(el, '.stepDown', { button: 'middle' });
200
- expect(el.formattedValue).to.equal('');
201
- expect(el.valueAsString).to.equal('NaN');
202
- expect(el.value).to.be.NaN;
203
- });
204
- it('via pointer', async () => {
205
- await clickBySelector(el, '.stepDown');
206
- expect(el.formattedValue).to.equal('0');
207
- expect(el.valueAsString).to.equal('0');
208
- expect(el.value).to.equal(0);
209
- await clickBySelector(el, '.stepDown');
210
- expect(el.formattedValue).to.equal('-1');
211
- expect(el.valueAsString).to.equal('-1');
212
- expect(el.value).to.equal(-1);
213
- });
214
- it('via arrow down', async () => {
215
- el.focus();
216
- await elementUpdated(el);
217
- await sendKeys({ press: 'ArrowDown' });
218
- await elementUpdated(el);
219
- expect(el.formattedValue).to.equal('0');
220
- expect(el.valueAsString).to.equal('0');
221
- expect(el.value).to.equal(0);
222
- await sendKeys({ press: 'ArrowDown' });
223
- await elementUpdated(el);
224
- expect(el.formattedValue).to.equal('-1');
225
- expect(el.valueAsString).to.equal('-1');
226
- expect(el.value).to.equal(-1);
227
- });
228
- it('via arrow down (shift modified)', async () => {
229
- el.focus();
230
- await elementUpdated(el);
231
- await sendKeys({ press: 'ArrowDown' });
232
- await elementUpdated(el);
233
- expect(el.formattedValue).to.equal('0');
234
- expect(el.valueAsString).to.equal('0');
235
- expect(el.value).to.equal(0);
236
- await sendKeys({ press: 'Shift+ArrowDown' });
237
- await elementUpdated(el);
238
- expect(el.formattedValue).to.equal('-10');
239
- expect(el.valueAsString).to.equal('-10');
240
- expect(el.value).to.equal(-10);
241
- });
242
- it('via arrow up (custom shift modified value)', async () => {
243
- el.focus();
244
- el.stepModifier = 5;
245
- el.step = 3;
246
- await elementUpdated(el);
247
- await sendKeys({ press: 'ArrowDown' });
248
- await elementUpdated(el);
249
- expect(el.formattedValue).to.equal('0');
250
- expect(el.valueAsString).to.equal('0');
251
- expect(el.value).to.equal(0);
252
- await sendKeys({ press: 'Shift+ArrowDown' });
253
- await elementUpdated(el);
254
- expect(el.formattedValue).to.equal('-15');
255
- expect(el.valueAsString).to.equal('-15');
256
- expect(el.value).to.equal(-15);
257
- });
258
- it('via scroll', async () => {
259
- el.focus();
260
- await elementUpdated(el);
261
- expect(el.focused).to.be.true;
262
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));
263
- await elementUpdated(el);
264
- expect(el.formattedValue).to.equal('0');
265
- expect(el.valueAsString).to.equal('0');
266
- expect(el.value).to.equal(0);
267
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: -100 }));
268
- await elementUpdated(el);
269
- expect(el.formattedValue).to.equal('-1');
270
- expect(el.valueAsString).to.equal('-1');
271
- expect(el.value).to.equal(-1);
272
- });
273
- it('via scroll (shift modified)', async () => {
274
- el.focus();
275
- await elementUpdated(el);
276
- expect(el.focused).to.be.true;
277
- el.dispatchEvent(new WheelEvent('wheel', {
278
- deltaX: -1,
279
- shiftKey: true,
280
- }));
281
- await elementUpdated(el);
282
- expect(el.formattedValue).to.equal('0');
283
- expect(el.valueAsString).to.equal('0');
284
- expect(el.value).to.equal(0);
285
- el.dispatchEvent(new WheelEvent('wheel', {
286
- deltaX: -100,
287
- shiftKey: true,
288
- }));
289
- await elementUpdated(el);
290
- expect(el.formattedValue).to.equal('-10');
291
- expect(el.valueAsString).to.equal('-10');
292
- expect(el.value).to.equal(-10);
293
- });
294
- });
295
- describe('dispatched events', () => {
296
- const inputSpy = spy();
297
- const changeSpy = spy();
298
- let el;
299
- beforeEach(async () => {
300
- inputSpy.resetHistory();
301
- changeSpy.resetHistory();
302
- el = await getElFrom(Default({ value: 50 }));
303
- el.addEventListener('input', (event) => {
304
- var _a;
305
- inputSpy((_a = event.target) === null || _a === void 0 ? void 0 : _a.value);
306
- });
307
- el.addEventListener('change', (event) => {
308
- var _a;
309
- changeSpy((_a = event.target) === null || _a === void 0 ? void 0 : _a.value);
310
- });
311
- });
312
- it('has a useful `value`', async () => {
313
- el.focus();
314
- await sendKeys({ type: '7' });
315
- await sendKeys({ press: 'Enter' });
316
- expect(inputSpy.calledWith(507), 'input').to.be.true;
317
- expect(changeSpy.calledWith(507), 'change').to.be.true;
318
- await sendKeys({ type: ',00' });
319
- await sendKeys({ press: 'Enter' });
320
- expect(inputSpy.calledWith(5070), 'input').to.be.true;
321
- expect(inputSpy.calledWith(50700), 'input').to.be.true;
322
- expect(changeSpy.calledWith(50700), 'change').to.be.true;
323
- });
324
- it('has a useful `value` - percent', async () => {
325
- el.formatOptions = { style: 'percent' };
326
- el.value = 0.45;
327
- expect(el.value).to.equal(0.45);
328
- el.focus();
329
- await sendKeys({ type: '7' }); // Visible text: 45%7
330
- expect(inputSpy.calledWith(4.57), 'first input').to.be.true;
331
- await sendKeys({ press: 'Backspace' }); // Visible text: 45%
332
- await sendKeys({ press: 'Backspace' }); // Visible text: 45
333
- await sendKeys({ press: 'Backspace' }); // Visible text: 4
334
- await sendKeys({ press: 'Enter' });
335
- expect(el.value).to.equal(0.04);
336
- expect(inputSpy.calledWith(0.45), 'second input').to.be.true;
337
- expect(inputSpy.calledWith(0.04), 'third input').to.be.true;
338
- expect(changeSpy.calledWith(0.04), 'change').to.be.true;
339
- });
340
- it('has a useful `value` - currency', async () => {
341
- el.formatOptions = {
342
- style: 'currency',
343
- currency: 'EUR',
344
- currencyDisplay: 'code',
345
- currencySign: 'accounting',
346
- };
347
- await elementUpdated(el);
348
- el.value = 45;
349
- expect(el.value).to.equal(45);
350
- el.focus();
351
- await sendKeys({ type: '7' }); // Visible text: EUR 45.007
352
- expect(el.value).to.equal(45.007);
353
- expect(inputSpy.calledWith(el.value), 'first input').to.be.true;
354
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
355
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
356
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
357
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
358
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
359
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
360
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
361
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
362
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
363
- await sendKeys({ press: 'ArrowLeft' }); // Visible text: EUR 45.007
364
- await sendKeys({ type: '1' }); // Visible text: 1EUR 45.007
365
- await sendKeys({ press: 'Enter' }); // Visible text: EUR 145.01
366
- expect(el.value).to.equal(145.007);
367
- expect(inputSpy.calledWith(145.007), 'second input').to.be.true;
368
- expect(changeSpy.calledWith(145.007), 'change').to.be.true;
369
- });
370
- it('one input/one change for each Arrow*', async () => {
371
- el.focus();
372
- await sendKeys({ press: 'ArrowUp' });
373
- expect(inputSpy.callCount).to.equal(1);
374
- expect(changeSpy.callCount).to.equal(1);
375
- expect(el.value).to.equal(51);
376
- await sendKeys({ press: 'ArrowDown' });
377
- expect(inputSpy.callCount).to.equal(2);
378
- expect(changeSpy.callCount).to.equal(2);
379
- expect(el.value).to.equal(50);
380
- });
381
- it('one input/one change for each click', async () => {
382
- await clickBySelector(el, '.stepUp');
383
- expect(inputSpy.callCount).to.equal(1);
384
- expect(changeSpy.callCount).to.equal(1);
385
- expect(el.value).to.equal(51);
386
- await clickBySelector(el, '.stepDown');
387
- expect(inputSpy.callCount).to.equal(2);
388
- expect(changeSpy.callCount).to.equal(2);
389
- expect(el.value).to.equal(50);
390
- });
391
- it('click with modifier key', async () => {
392
- let target = el.shadowRoot.querySelector('.stepUp');
393
- const stepUpRect = target.getBoundingClientRect();
394
- const options = {
395
- bubbles: true,
396
- composed: true,
397
- shiftKey: true,
398
- clientX: stepUpRect.x + 1,
399
- clientY: stepUpRect.y + 1,
400
- };
401
- el.buttons.setPointerCapture = () => {
402
- return;
403
- };
404
- el.buttons.releasePointerCapture = () => {
405
- return;
406
- };
407
- let input = oneEvent(el, 'input');
408
- target.dispatchEvent(new PointerEvent('pointerdown', options));
409
- await input;
410
- target.dispatchEvent(new PointerEvent('pointerup', options));
411
- expect(inputSpy.callCount).to.equal(1);
412
- expect(changeSpy.callCount).to.equal(1);
413
- expect(el.value).to.equal(60);
414
- target = el.shadowRoot.querySelector('.stepDown');
415
- const stepDownRect = target.getBoundingClientRect();
416
- options.clientX = stepDownRect.x + 1;
417
- options.clientY = stepDownRect.y + 1;
418
- input = oneEvent(el, 'input');
419
- target.dispatchEvent(new PointerEvent('pointerdown', options));
420
- await input;
421
- target.dispatchEvent(new PointerEvent('pointerup', options));
422
- expect(inputSpy.callCount).to.equal(2);
423
- expect(changeSpy.callCount).to.equal(2);
424
- expect(el.value).to.equal(50);
425
- });
426
- it('many input, but one change', async () => {
427
- const buttonUp = el.shadowRoot.querySelector('.stepUp');
428
- const buttonUpRect = buttonUp.getBoundingClientRect();
429
- const buttonUpPosition = [
430
- buttonUpRect.x + buttonUpRect.width / 2,
431
- buttonUpRect.y + buttonUpRect.height / 2,
432
- ];
433
- const buttonDown = el.shadowRoot.querySelector('.stepDown');
434
- const buttonDownRect = buttonDown.getBoundingClientRect();
435
- const buttonDownPosition = [
436
- buttonDownRect.x + buttonDownRect.width / 2,
437
- buttonDownRect.y + buttonDownRect.height / 2,
438
- ];
439
- sendMouse({
440
- steps: [
441
- {
442
- type: 'move',
443
- position: buttonUpPosition,
444
- },
445
- {
446
- type: 'down',
447
- },
448
- ],
449
- });
450
- await oneEvent(el, 'input');
451
- expect(el.value).to.equal(51);
452
- expect(inputSpy.callCount).to.equal(1);
453
- expect(changeSpy.callCount).to.equal(0);
454
- await oneEvent(el, 'input');
455
- expect(el.value).to.equal(52);
456
- expect(inputSpy.callCount).to.equal(2);
457
- expect(changeSpy.callCount).to.equal(0);
458
- sendMouse({
459
- steps: [
460
- {
461
- type: 'move',
462
- position: buttonDownPosition,
463
- },
464
- ],
465
- });
466
- let framesToWait = FRAMES_PER_CHANGE * 2;
467
- while (framesToWait) {
468
- // input is only processed onces per FRAMES_PER_CHANGE number of frames
469
- framesToWait -= 1;
470
- await nextFrame();
471
- }
472
- expect(inputSpy.callCount).to.equal(4);
473
- expect(changeSpy.callCount).to.equal(0);
474
- await sendMouse({
475
- steps: [
476
- {
477
- type: 'up',
478
- },
479
- ],
480
- });
481
- expect(inputSpy.callCount).to.equal(4);
482
- expect(changeSpy.callCount).to.equal(1);
483
- });
484
- });
485
- it('accepts pointer interactions with the stepper UI', async () => {
486
- const inputSpy = spy();
487
- const el = await getElFrom(Default({ value: 50 }));
488
- el.addEventListener('input', () => inputSpy());
489
- expect(el.formattedValue).to.equal('50');
490
- expect(el.valueAsString).to.equal('50');
491
- expect(el.value).to.equal(50);
492
- const buttonUp = el.shadowRoot.querySelector('.stepUp');
493
- const buttonUpRect = buttonUp.getBoundingClientRect();
494
- const buttonUpPosition = [
495
- buttonUpRect.x + buttonUpRect.width / 2,
496
- buttonUpRect.y + buttonUpRect.height / 2,
497
- ];
498
- const buttonDown = el.shadowRoot.querySelector('.stepDown');
499
- const buttonDownRect = buttonDown.getBoundingClientRect();
500
- const buttonDownPosition = [
501
- buttonDownRect.x + buttonDownRect.width / 2,
502
- buttonDownRect.y + buttonDownRect.height / 2,
503
- ];
504
- const outsidePosition = [
505
- buttonDownRect.x + buttonDownRect.width + 5,
506
- buttonDownRect.y + buttonDownRect.height + 5,
507
- ];
508
- await sendMouse({
509
- steps: [
510
- {
511
- type: 'move',
512
- position: buttonUpPosition,
513
- },
514
- {
515
- type: 'down',
516
- },
517
- ],
518
- });
519
- await oneEvent(el, 'input');
520
- let value = 50 + inputSpy.callCount;
521
- expect(el.formattedValue).to.equal(String(value));
522
- expect(el.valueAsString).to.equal(String(value));
523
- expect(el.value).to.equal(value);
524
- inputSpy.resetHistory();
525
- await sendMouse({
526
- steps: [
527
- {
528
- type: 'move',
529
- position: buttonDownPosition,
530
- },
531
- ],
532
- });
533
- value = value - inputSpy.callCount;
534
- expect(el.formattedValue).to.equal(String(value));
535
- expect(el.valueAsString).to.equal(String(value));
536
- expect(el.value).to.equal(value);
537
- inputSpy.resetHistory();
538
- await sendMouse({
539
- steps: [
540
- {
541
- type: 'move',
542
- position: outsidePosition,
543
- },
544
- ],
545
- });
546
- value = value - inputSpy.callCount;
547
- expect(el.formattedValue).to.equal(String(value));
548
- expect(el.valueAsString).to.equal(String(value));
549
- expect(el.value).to.equal(value);
550
- inputSpy.resetHistory();
551
- await oneEvent(el, 'input');
552
- value = value - inputSpy.callCount;
553
- expect(el.formattedValue).to.equal(String(value));
554
- expect(el.valueAsString).to.equal(String(value));
555
- expect(el.value).to.equal(value);
556
- inputSpy.resetHistory();
557
- await sendMouse({
558
- steps: [
559
- {
560
- type: 'up',
561
- },
562
- ],
563
- });
564
- let framesToWait = FRAMES_PER_CHANGE;
565
- while (framesToWait) {
566
- // input is only processed onces per FRAMES_PER_CHANGE number of frames
567
- framesToWait -= 1;
568
- await nextFrame();
63
+ expect(el.formattedValue).to.equal("1\u202F337");
64
+ expect(el.valueAsString).to.equal("1337");
65
+ expect(el.value).to.equal(1337);
66
+ el.focus();
67
+ await sendKeys({ type: "7331" });
68
+ await elementUpdated(el);
69
+ await sendKeys({ press: "Enter" });
70
+ await elementUpdated(el);
71
+ expect(el.formattedValue).to.equal("13\u202F377\u202F331");
72
+ expect(el.valueAsString).to.equal("13377331");
73
+ expect(el.value).to.equal(13377331);
74
+ });
75
+ });
76
+ describe("Step", () => {
77
+ it("can be 0", async () => {
78
+ const el = await getElFrom(Default({
79
+ step: 0,
80
+ min: 0,
81
+ max: 10,
82
+ value: 5
83
+ }));
84
+ expect(el.value).to.equal(5);
85
+ expect(el.formattedValue).to.equal("5");
86
+ expect(el.valueAsString).to.equal("5");
87
+ });
88
+ });
89
+ describe("Increments", () => {
90
+ let el;
91
+ beforeEach(async () => {
92
+ el = await getElFrom(Default({}));
93
+ expect(el.value).to.be.NaN;
94
+ expect(el.formattedValue).to.equal("");
95
+ expect(el.valueAsString).to.equal("NaN");
96
+ });
97
+ it('via pointer, only "left" button', async () => {
98
+ await clickBySelector(el, ".stepUp", { button: "middle" });
99
+ expect(el.formattedValue).to.equal("");
100
+ expect(el.valueAsString).to.equal("NaN");
101
+ expect(el.value).to.be.NaN;
102
+ });
103
+ it("via pointer", async () => {
104
+ await clickBySelector(el, ".stepUp");
105
+ expect(el.formattedValue).to.equal("0");
106
+ expect(el.valueAsString).to.equal("0");
107
+ expect(el.value).to.equal(0);
108
+ await clickBySelector(el, ".stepUp");
109
+ expect(el.formattedValue).to.equal("1");
110
+ expect(el.valueAsString).to.equal("1");
111
+ expect(el.value).to.equal(1);
112
+ });
113
+ it("via arrow up", async () => {
114
+ el.focus();
115
+ await elementUpdated(el);
116
+ await sendKeys({ press: "ArrowUp" });
117
+ await elementUpdated(el);
118
+ expect(el.formattedValue).to.equal("0");
119
+ expect(el.valueAsString).to.equal("0");
120
+ expect(el.value).to.equal(0);
121
+ await sendKeys({ press: "ArrowUp" });
122
+ await elementUpdated(el);
123
+ expect(el.formattedValue).to.equal("1");
124
+ expect(el.valueAsString).to.equal("1");
125
+ expect(el.value).to.equal(1);
126
+ });
127
+ it("via arrow up (shift modified)", async () => {
128
+ el.focus();
129
+ await elementUpdated(el);
130
+ await sendKeys({ press: "ArrowUp" });
131
+ await elementUpdated(el);
132
+ expect(el.formattedValue).to.equal("0");
133
+ expect(el.valueAsString).to.equal("0");
134
+ expect(el.value).to.equal(0);
135
+ await sendKeys({ press: "Shift+ArrowUp" });
136
+ await elementUpdated(el);
137
+ expect(el.formattedValue).to.equal("10");
138
+ expect(el.valueAsString).to.equal("10");
139
+ expect(el.value).to.equal(10);
140
+ });
141
+ it("via arrow up (custom shift modified value)", async () => {
142
+ el.focus();
143
+ el.stepModifier = 5;
144
+ el.step = 3;
145
+ await elementUpdated(el);
146
+ await sendKeys({ press: "ArrowUp" });
147
+ await elementUpdated(el);
148
+ expect(el.formattedValue).to.equal("0");
149
+ expect(el.valueAsString).to.equal("0");
150
+ expect(el.value).to.equal(0);
151
+ await sendKeys({ press: "Shift+ArrowUp" });
152
+ await elementUpdated(el);
153
+ expect(el.formattedValue).to.equal("15");
154
+ expect(el.valueAsString).to.equal("15");
155
+ expect(el.value).to.equal(15);
156
+ });
157
+ it("via scroll", async () => {
158
+ el.focus();
159
+ await elementUpdated(el);
160
+ expect(el.focused).to.be.true;
161
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: 1 }));
162
+ await elementUpdated(el);
163
+ expect(el.formattedValue).to.equal("0");
164
+ expect(el.valueAsString).to.equal("0");
165
+ expect(el.value).to.equal(0);
166
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: 100 }));
167
+ await elementUpdated(el);
168
+ expect(el.formattedValue).to.equal("1");
169
+ expect(el.valueAsString).to.equal("1");
170
+ expect(el.value).to.equal(1);
171
+ });
172
+ it("via scroll (shift modified)", async () => {
173
+ el.focus();
174
+ await elementUpdated(el);
175
+ expect(el.focused).to.be.true;
176
+ el.dispatchEvent(new WheelEvent("wheel", {
177
+ deltaX: 1,
178
+ shiftKey: true
179
+ }));
180
+ await elementUpdated(el);
181
+ expect(el.formattedValue).to.equal("0");
182
+ expect(el.valueAsString).to.equal("0");
183
+ expect(el.value).to.equal(0);
184
+ el.dispatchEvent(new WheelEvent("wheel", {
185
+ deltaX: 100,
186
+ shiftKey: true
187
+ }));
188
+ await elementUpdated(el);
189
+ expect(el.formattedValue).to.equal("10");
190
+ expect(el.valueAsString).to.equal("10");
191
+ expect(el.value).to.equal(10);
192
+ });
193
+ });
194
+ describe("Decrements", () => {
195
+ let el;
196
+ beforeEach(async () => {
197
+ el = await getElFrom(Default({}));
198
+ expect(el.value).to.be.NaN;
199
+ expect(el.formattedValue).to.equal("");
200
+ expect(el.valueAsString).to.equal("NaN");
201
+ });
202
+ it('via pointer, only "left" button', async () => {
203
+ await clickBySelector(el, ".stepDown", { button: "middle" });
204
+ expect(el.formattedValue).to.equal("");
205
+ expect(el.valueAsString).to.equal("NaN");
206
+ expect(el.value).to.be.NaN;
207
+ });
208
+ it("via pointer", async () => {
209
+ await clickBySelector(el, ".stepDown");
210
+ expect(el.formattedValue).to.equal("0");
211
+ expect(el.valueAsString).to.equal("0");
212
+ expect(el.value).to.equal(0);
213
+ await clickBySelector(el, ".stepDown");
214
+ expect(el.formattedValue).to.equal("-1");
215
+ expect(el.valueAsString).to.equal("-1");
216
+ expect(el.value).to.equal(-1);
217
+ });
218
+ it("via arrow down", async () => {
219
+ el.focus();
220
+ await elementUpdated(el);
221
+ await sendKeys({ press: "ArrowDown" });
222
+ await elementUpdated(el);
223
+ expect(el.formattedValue).to.equal("0");
224
+ expect(el.valueAsString).to.equal("0");
225
+ expect(el.value).to.equal(0);
226
+ await sendKeys({ press: "ArrowDown" });
227
+ await elementUpdated(el);
228
+ expect(el.formattedValue).to.equal("-1");
229
+ expect(el.valueAsString).to.equal("-1");
230
+ expect(el.value).to.equal(-1);
231
+ });
232
+ it("via arrow down (shift modified)", async () => {
233
+ el.focus();
234
+ await elementUpdated(el);
235
+ await sendKeys({ press: "ArrowDown" });
236
+ await elementUpdated(el);
237
+ expect(el.formattedValue).to.equal("0");
238
+ expect(el.valueAsString).to.equal("0");
239
+ expect(el.value).to.equal(0);
240
+ await sendKeys({ press: "Shift+ArrowDown" });
241
+ await elementUpdated(el);
242
+ expect(el.formattedValue).to.equal("-10");
243
+ expect(el.valueAsString).to.equal("-10");
244
+ expect(el.value).to.equal(-10);
245
+ });
246
+ it("via arrow up (custom shift modified value)", async () => {
247
+ el.focus();
248
+ el.stepModifier = 5;
249
+ el.step = 3;
250
+ await elementUpdated(el);
251
+ await sendKeys({ press: "ArrowDown" });
252
+ await elementUpdated(el);
253
+ expect(el.formattedValue).to.equal("0");
254
+ expect(el.valueAsString).to.equal("0");
255
+ expect(el.value).to.equal(0);
256
+ await sendKeys({ press: "Shift+ArrowDown" });
257
+ await elementUpdated(el);
258
+ expect(el.formattedValue).to.equal("-15");
259
+ expect(el.valueAsString).to.equal("-15");
260
+ expect(el.value).to.equal(-15);
261
+ });
262
+ it("via scroll", async () => {
263
+ el.focus();
264
+ await elementUpdated(el);
265
+ expect(el.focused).to.be.true;
266
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: -1 }));
267
+ await elementUpdated(el);
268
+ expect(el.formattedValue).to.equal("0");
269
+ expect(el.valueAsString).to.equal("0");
270
+ expect(el.value).to.equal(0);
271
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: -100 }));
272
+ await elementUpdated(el);
273
+ expect(el.formattedValue).to.equal("-1");
274
+ expect(el.valueAsString).to.equal("-1");
275
+ expect(el.value).to.equal(-1);
276
+ });
277
+ it("via scroll (shift modified)", async () => {
278
+ el.focus();
279
+ await elementUpdated(el);
280
+ expect(el.focused).to.be.true;
281
+ el.dispatchEvent(new WheelEvent("wheel", {
282
+ deltaX: -1,
283
+ shiftKey: true
284
+ }));
285
+ await elementUpdated(el);
286
+ expect(el.formattedValue).to.equal("0");
287
+ expect(el.valueAsString).to.equal("0");
288
+ expect(el.value).to.equal(0);
289
+ el.dispatchEvent(new WheelEvent("wheel", {
290
+ deltaX: -100,
291
+ shiftKey: true
292
+ }));
293
+ await elementUpdated(el);
294
+ expect(el.formattedValue).to.equal("-10");
295
+ expect(el.valueAsString).to.equal("-10");
296
+ expect(el.value).to.equal(-10);
297
+ });
298
+ });
299
+ describe("dispatched events", () => {
300
+ const inputSpy = spy();
301
+ const changeSpy = spy();
302
+ let el;
303
+ beforeEach(async () => {
304
+ inputSpy.resetHistory();
305
+ changeSpy.resetHistory();
306
+ el = await getElFrom(Default({ value: 50 }));
307
+ el.addEventListener("input", (event) => {
308
+ var _a;
309
+ inputSpy((_a = event.target) == null ? void 0 : _a.value);
310
+ });
311
+ el.addEventListener("change", (event) => {
312
+ var _a;
313
+ changeSpy((_a = event.target) == null ? void 0 : _a.value);
314
+ });
315
+ });
316
+ it("has a useful `value`", async () => {
317
+ el.focus();
318
+ await sendKeys({ type: "7" });
319
+ await sendKeys({ press: "Enter" });
320
+ expect(inputSpy.calledWith(507), "input").to.be.true;
321
+ expect(changeSpy.calledWith(507), "change").to.be.true;
322
+ await sendKeys({ type: ",00" });
323
+ await sendKeys({ press: "Enter" });
324
+ expect(inputSpy.calledWith(5070), "input").to.be.true;
325
+ expect(inputSpy.calledWith(50700), "input").to.be.true;
326
+ expect(changeSpy.calledWith(50700), "change").to.be.true;
327
+ });
328
+ it("has a useful `value` - percent", async () => {
329
+ el.formatOptions = { style: "percent" };
330
+ el.value = 0.45;
331
+ expect(el.value).to.equal(0.45);
332
+ el.focus();
333
+ await sendKeys({ type: "7" });
334
+ expect(inputSpy.calledWith(4.57), "first input").to.be.true;
335
+ await sendKeys({ press: "Backspace" });
336
+ await sendKeys({ press: "Backspace" });
337
+ await sendKeys({ press: "Backspace" });
338
+ await sendKeys({ press: "Enter" });
339
+ expect(el.value).to.equal(0.04);
340
+ expect(inputSpy.calledWith(0.45), "second input").to.be.true;
341
+ expect(inputSpy.calledWith(0.04), "third input").to.be.true;
342
+ expect(changeSpy.calledWith(0.04), "change").to.be.true;
343
+ });
344
+ it("has a useful `value` - currency", async () => {
345
+ el.formatOptions = {
346
+ style: "currency",
347
+ currency: "EUR",
348
+ currencyDisplay: "code",
349
+ currencySign: "accounting"
350
+ };
351
+ await elementUpdated(el);
352
+ el.value = 45;
353
+ expect(el.value).to.equal(45);
354
+ el.focus();
355
+ await sendKeys({ type: "7" });
356
+ expect(el.value).to.equal(45.007);
357
+ expect(inputSpy.calledWith(el.value), "first input").to.be.true;
358
+ await sendKeys({ press: "ArrowLeft" });
359
+ await sendKeys({ press: "ArrowLeft" });
360
+ await sendKeys({ press: "ArrowLeft" });
361
+ await sendKeys({ press: "ArrowLeft" });
362
+ await sendKeys({ press: "ArrowLeft" });
363
+ await sendKeys({ press: "ArrowLeft" });
364
+ await sendKeys({ press: "ArrowLeft" });
365
+ await sendKeys({ press: "ArrowLeft" });
366
+ await sendKeys({ press: "ArrowLeft" });
367
+ await sendKeys({ press: "ArrowLeft" });
368
+ await sendKeys({ type: "1" });
369
+ await sendKeys({ press: "Enter" });
370
+ expect(el.value).to.equal(145.007);
371
+ expect(inputSpy.calledWith(145.007), "second input").to.be.true;
372
+ expect(changeSpy.calledWith(145.007), "change").to.be.true;
373
+ });
374
+ it("one input/one change for each Arrow*", async () => {
375
+ el.focus();
376
+ await sendKeys({ press: "ArrowUp" });
377
+ expect(inputSpy.callCount).to.equal(1);
378
+ expect(changeSpy.callCount).to.equal(1);
379
+ expect(el.value).to.equal(51);
380
+ await sendKeys({ press: "ArrowDown" });
381
+ expect(inputSpy.callCount).to.equal(2);
382
+ expect(changeSpy.callCount).to.equal(2);
383
+ expect(el.value).to.equal(50);
384
+ });
385
+ it("one input/one change for each click", async () => {
386
+ await clickBySelector(el, ".stepUp");
387
+ expect(inputSpy.callCount).to.equal(1);
388
+ expect(changeSpy.callCount).to.equal(1);
389
+ expect(el.value).to.equal(51);
390
+ await clickBySelector(el, ".stepDown");
391
+ expect(inputSpy.callCount).to.equal(2);
392
+ expect(changeSpy.callCount).to.equal(2);
393
+ expect(el.value).to.equal(50);
394
+ });
395
+ it("click with modifier key", async () => {
396
+ let target = el.shadowRoot.querySelector(".stepUp");
397
+ const stepUpRect = target.getBoundingClientRect();
398
+ const options = {
399
+ bubbles: true,
400
+ composed: true,
401
+ shiftKey: true,
402
+ clientX: stepUpRect.x + 1,
403
+ clientY: stepUpRect.y + 1
404
+ };
405
+ el.buttons.setPointerCapture = () => {
406
+ return;
407
+ };
408
+ el.buttons.releasePointerCapture = () => {
409
+ return;
410
+ };
411
+ let input = oneEvent(el, "input");
412
+ target.dispatchEvent(new PointerEvent("pointerdown", options));
413
+ await input;
414
+ target.dispatchEvent(new PointerEvent("pointerup", options));
415
+ expect(inputSpy.callCount).to.equal(1);
416
+ expect(changeSpy.callCount).to.equal(1);
417
+ expect(el.value).to.equal(60);
418
+ target = el.shadowRoot.querySelector(".stepDown");
419
+ const stepDownRect = target.getBoundingClientRect();
420
+ options.clientX = stepDownRect.x + 1;
421
+ options.clientY = stepDownRect.y + 1;
422
+ input = oneEvent(el, "input");
423
+ target.dispatchEvent(new PointerEvent("pointerdown", options));
424
+ await input;
425
+ target.dispatchEvent(new PointerEvent("pointerup", options));
426
+ expect(inputSpy.callCount).to.equal(2);
427
+ expect(changeSpy.callCount).to.equal(2);
428
+ expect(el.value).to.equal(50);
429
+ });
430
+ it("many input, but one change", async () => {
431
+ const buttonUp = el.shadowRoot.querySelector(".stepUp");
432
+ const buttonUpRect = buttonUp.getBoundingClientRect();
433
+ const buttonUpPosition = [
434
+ buttonUpRect.x + buttonUpRect.width / 2,
435
+ buttonUpRect.y + buttonUpRect.height / 2
436
+ ];
437
+ const buttonDown = el.shadowRoot.querySelector(".stepDown");
438
+ const buttonDownRect = buttonDown.getBoundingClientRect();
439
+ const buttonDownPosition = [
440
+ buttonDownRect.x + buttonDownRect.width / 2,
441
+ buttonDownRect.y + buttonDownRect.height / 2
442
+ ];
443
+ sendMouse({
444
+ steps: [
445
+ {
446
+ type: "move",
447
+ position: buttonUpPosition
448
+ },
449
+ {
450
+ type: "down"
451
+ }
452
+ ]
453
+ });
454
+ await oneEvent(el, "input");
455
+ expect(el.value).to.equal(51);
456
+ expect(inputSpy.callCount).to.equal(1);
457
+ expect(changeSpy.callCount).to.equal(0);
458
+ await oneEvent(el, "input");
459
+ expect(el.value).to.equal(52);
460
+ expect(inputSpy.callCount).to.equal(2);
461
+ expect(changeSpy.callCount).to.equal(0);
462
+ sendMouse({
463
+ steps: [
464
+ {
465
+ type: "move",
466
+ position: buttonDownPosition
467
+ }
468
+ ]
469
+ });
470
+ let framesToWait = FRAMES_PER_CHANGE * 2;
471
+ while (framesToWait) {
472
+ framesToWait -= 1;
473
+ await nextFrame();
474
+ }
475
+ expect(inputSpy.callCount).to.equal(4);
476
+ expect(changeSpy.callCount).to.equal(0);
477
+ await sendMouse({
478
+ steps: [
479
+ {
480
+ type: "up"
481
+ }
482
+ ]
483
+ });
484
+ expect(inputSpy.callCount).to.equal(4);
485
+ expect(changeSpy.callCount).to.equal(1);
486
+ });
487
+ });
488
+ it("accepts pointer interactions with the stepper UI", async () => {
489
+ const inputSpy = spy();
490
+ const el = await getElFrom(Default({ value: 50 }));
491
+ el.addEventListener("input", () => inputSpy());
492
+ expect(el.formattedValue).to.equal("50");
493
+ expect(el.valueAsString).to.equal("50");
494
+ expect(el.value).to.equal(50);
495
+ const buttonUp = el.shadowRoot.querySelector(".stepUp");
496
+ const buttonUpRect = buttonUp.getBoundingClientRect();
497
+ const buttonUpPosition = [
498
+ buttonUpRect.x + buttonUpRect.width / 2,
499
+ buttonUpRect.y + buttonUpRect.height / 2
500
+ ];
501
+ const buttonDown = el.shadowRoot.querySelector(".stepDown");
502
+ const buttonDownRect = buttonDown.getBoundingClientRect();
503
+ const buttonDownPosition = [
504
+ buttonDownRect.x + buttonDownRect.width / 2,
505
+ buttonDownRect.y + buttonDownRect.height / 2
506
+ ];
507
+ const outsidePosition = [
508
+ buttonDownRect.x + buttonDownRect.width + 5,
509
+ buttonDownRect.y + buttonDownRect.height + 5
510
+ ];
511
+ await sendMouse({
512
+ steps: [
513
+ {
514
+ type: "move",
515
+ position: buttonUpPosition
516
+ },
517
+ {
518
+ type: "down"
519
+ }
520
+ ]
521
+ });
522
+ await oneEvent(el, "input");
523
+ let value = 50 + inputSpy.callCount;
524
+ expect(el.formattedValue).to.equal(String(value));
525
+ expect(el.valueAsString).to.equal(String(value));
526
+ expect(el.value).to.equal(value);
527
+ inputSpy.resetHistory();
528
+ await sendMouse({
529
+ steps: [
530
+ {
531
+ type: "move",
532
+ position: buttonDownPosition
533
+ }
534
+ ]
535
+ });
536
+ value = value - inputSpy.callCount;
537
+ expect(el.formattedValue).to.equal(String(value));
538
+ expect(el.valueAsString).to.equal(String(value));
539
+ expect(el.value).to.equal(value);
540
+ inputSpy.resetHistory();
541
+ await sendMouse({
542
+ steps: [
543
+ {
544
+ type: "move",
545
+ position: outsidePosition
546
+ }
547
+ ]
548
+ });
549
+ value = value - inputSpy.callCount;
550
+ expect(el.formattedValue).to.equal(String(value));
551
+ expect(el.valueAsString).to.equal(String(value));
552
+ expect(el.value).to.equal(value);
553
+ inputSpy.resetHistory();
554
+ await oneEvent(el, "input");
555
+ value = value - inputSpy.callCount;
556
+ expect(el.formattedValue).to.equal(String(value));
557
+ expect(el.valueAsString).to.equal(String(value));
558
+ expect(el.value).to.equal(value);
559
+ inputSpy.resetHistory();
560
+ await sendMouse({
561
+ steps: [
562
+ {
563
+ type: "up"
569
564
  }
570
- await elementUpdated(el);
571
- value = value - inputSpy.callCount;
572
- expect(el.formattedValue).to.equal(String(value));
573
- expect(el.valueAsString).to.equal(String(value));
574
- expect(el.value).to.equal(value);
575
- });
576
- it('surfaces `valueAsNumber`', async () => {
577
- const el = await getElFrom(Default({}));
578
- el.value = 1000;
579
- await elementUpdated(el);
580
- expect(el.formattedValue).to.equal('1,000');
581
- expect(el.valueAsString).to.equal('1000');
582
- expect(el.value).to.equal(1000);
583
- el.valueAsString = '2222';
584
- await elementUpdated(el);
585
- expect(el.formattedValue).to.equal('2,222');
586
- expect(el.valueAsString).to.equal('2222');
587
- expect(el.value).to.equal(2222);
588
- });
589
- describe('manages `value` with `formatOptions`', () => {
590
- it('manages decimals', async () => {
591
- const el = await getElFrom(decimals({ value: 1.333333 }));
592
- expect(el.value).to.equal(1.33);
593
- expect(el.formattedValue).to.equal('+1.33');
594
- expect(el.valueAsString).to.equal('1.33');
595
- });
596
- it('manages precents', async () => {
597
- const el = await getElFrom(percents({ value: 0.45 }));
598
- expect(el.formattedValue).to.equal('45%');
599
- expect(el.valueAsString).to.equal('0.45');
600
- expect(el.value).to.equal(0.45);
601
- await clickBySelector(el, '.stepDown');
602
- await elementUpdated(el);
603
- expect(el.formattedValue).to.equal('44%');
604
- expect(el.valueAsString).to.equal('0.44');
605
- expect(el.value).to.equal(0.44);
606
- await clickBySelector(el, '.stepUp');
607
- await elementUpdated(el);
608
- expect(el.formattedValue).to.equal('45%');
609
- expect(el.valueAsString).to.equal('0.45');
610
- expect(el.value).to.equal(0.45);
611
- el.focus();
612
- el.value = 0;
613
- await sendKeys({ type: '54' });
614
- await sendKeys({ press: 'Enter' });
615
- expect(el.formattedValue).to.equal('54%');
616
- expect(el.valueAsString).to.equal('0.54');
617
- expect(el.value).to.equal(0.54);
618
- await elementUpdated(el);
619
- expect(el.formattedValue).to.equal('54%');
620
- expect(el.valueAsString).to.equal('0.54');
621
- expect(el.value).to.equal(0.54);
622
- });
623
- it('manages currency', async () => {
624
- const el = await getElFrom(currency({ value: 234.21 }));
625
- expect(el.formattedValue).to.equal('EUR 234.21');
626
- expect(el.valueAsString).to.equal('234.21');
627
- expect(el.value).to.equal(234.21);
628
- });
629
- it('manages units', async () => {
630
- const el = await getElFrom(units({ value: 17 }));
631
- expect(el.formattedValue).to.equal('17 inches');
632
- expect(el.valueAsString).to.equal('17');
633
- expect(el.value).to.equal(17);
634
- });
635
- it('manages units not supported by the browser', async () => {
636
- const el = await getElFrom(pixels({ value: 17 }));
637
- expect(el.formattedValue).to.equal('17px');
638
- expect(el.valueAsString).to.equal('17');
639
- expect(el.value).to.equal(17);
640
- });
641
- });
642
- describe('max', () => {
643
- let el;
644
- let lastInputValue = 0;
645
- let lastChangeValue = 0;
646
- beforeEach(async () => {
647
- el = await getElFrom(Default({
648
- max: 10,
649
- value: 10,
650
- onInput: (value) => (lastInputValue = value),
651
- onChange: (value) => (lastChangeValue = value),
652
- }));
653
- expect(el.formattedValue).to.equal('10');
654
- expect(el.valueAsString).to.equal('10');
655
- expect(el.value).to.equal(10);
656
- });
657
- it('constrains input', async () => {
658
- el.focus();
659
- await sendKeys({ type: '15' });
660
- await sendKeys({ press: 'Enter' });
661
- await elementUpdated(el);
662
- expect(lastInputValue, 'last input value').to.equal(10);
663
- expect(lastChangeValue, 'last change value').to.equal(10);
664
- expect(el.formattedValue).to.equal('10');
665
- expect(el.valueAsString).to.equal('10');
666
- expect(el.value).to.equal(10);
667
- });
668
- it('constrains `value`', async () => {
669
- el.value = 20;
670
- await elementUpdated(el);
671
- expect(el.formattedValue).to.equal('10');
672
- expect(el.valueAsString).to.equal('10');
673
- expect(el.value).to.equal(10);
674
- });
675
- it('validates on commit', async () => {
676
- el.focus();
677
- await sendKeys({ type: '15' });
678
- await sendKeys({ press: 'Enter' });
679
- await elementUpdated(el);
680
- expect(el.formattedValue).to.equal('10');
681
- expect(el.valueAsString).to.equal('10');
682
- expect(el.value).to.equal(10);
683
- });
684
- it('disabled `stepUp` button', async () => {
685
- await clickBySelector(el, '.stepUp');
686
- expect(el.formattedValue).to.equal('10');
687
- expect(el.valueAsString).to.equal('10');
688
- expect(el.value).to.equal(10);
689
- });
690
- it('validates late', async () => {
691
- el.max = 5;
692
- await elementUpdated(el);
693
- expect(el.formattedValue).to.equal('5');
694
- expect(el.valueAsString).to.equal('5');
695
- expect(el.value).to.equal(5);
696
- });
697
- });
698
- describe('min', () => {
699
- let el;
700
- let lastInputValue = 0;
701
- let lastChangeValue = 0;
702
- beforeEach(async () => {
703
- el = await getElFrom(Default({
704
- min: 10,
705
- value: 10,
706
- onInput: (value) => (lastInputValue = value),
707
- onChange: (value) => (lastChangeValue = value),
708
- }));
709
- expect(el.formattedValue).to.equal('10');
710
- expect(el.valueAsString).to.equal('10');
711
- expect(el.value).to.equal(10);
712
- });
713
- it('constrains input', async () => {
714
- el.focus();
715
- await sendKeys({ press: 'Backspace' });
716
- await sendKeys({ press: 'Backspace' });
717
- await sendKeys({ type: '5' });
718
- await sendKeys({ press: 'Enter' });
719
- await elementUpdated(el);
720
- expect(lastInputValue, 'last input value').to.equal(10);
721
- expect(lastChangeValue, 'last change value').to.equal(10);
722
- expect(el.formattedValue).to.equal('10');
723
- expect(el.valueAsString).to.equal('10');
724
- expect(el.value).to.equal(10);
725
- });
726
- xit('manages `inputMode` in iPhone', async () => {
727
- // setUserAgent is not currently supported by Playwright
728
- await setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148');
729
- el.min = 0;
730
- await elementUpdated(el);
731
- expect(el.focusElement.inputMode).to.equal('numeric');
732
- el.min = -10;
733
- await elementUpdated(el);
734
- expect(el.focusElement.inputMode).to.equal('text');
735
- el.formatOptions = {
736
- minimumFractionDigits: 1,
737
- maximumFractionDigits: 2,
738
- };
739
- el.min = 0;
740
- await elementUpdated(el);
741
- expect(el.focusElement.inputMode).to.equal('decimal');
742
- });
743
- xit('manages `inputMode` in Android', async () => {
744
- // setUserAgent is not currently supported by Playwright
745
- await setUserAgent('Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36');
746
- el.min = 0;
747
- await elementUpdated(el);
748
- expect(el.focusElement.inputMode).to.equal('numeric');
749
- el.min = -10;
750
- await elementUpdated(el);
751
- expect(el.focusElement.inputMode).to.equal('numeric');
752
- el.formatOptions = {
753
- minimumFractionDigits: 1,
754
- maximumFractionDigits: 2,
755
- };
756
- el.min = 0;
757
- await elementUpdated(el);
758
- expect(el.focusElement.inputMode).to.equal('decimal');
759
- });
760
- it('constrains `value`', async () => {
761
- el.value = 0;
762
- await elementUpdated(el);
763
- expect(el.formattedValue).to.equal('10');
764
- expect(el.valueAsString).to.equal('10');
765
- expect(el.value).to.equal(10);
766
- });
767
- it('validates on commit', async () => {
768
- el.focus();
769
- await sendKeys({ press: '0' });
770
- await sendKeys({ press: 'Enter' });
771
- await elementUpdated(el);
772
- expect(el.formattedValue).to.equal('100');
773
- expect(el.valueAsString).to.equal('100');
774
- expect(el.value).to.equal(100);
775
- });
776
- it('disabled `stepDown` button', async () => {
777
- await clickBySelector(el, '.stepDown');
778
- expect(el.formattedValue).to.equal('10');
779
- expect(el.valueAsString).to.equal('10');
780
- expect(el.value).to.equal(10);
781
- });
782
- it('validates late', async () => {
783
- el.min = 15;
784
- await elementUpdated(el);
785
- expect(el.formattedValue).to.equal('15');
786
- expect(el.valueAsString).to.equal('15');
787
- expect(el.value).to.equal(15);
788
- });
789
- });
790
- describe('step', () => {
791
- let el;
792
- beforeEach(async () => {
793
- el = await getElFrom(Default({ value: 10, step: 5 }));
794
- expect(el.formattedValue).to.equal('10');
795
- expect(el.valueAsString).to.equal('10');
796
- expect(el.value).to.equal(10);
797
- });
798
- it('via arrow up', async () => {
799
- el.focus();
800
- await elementUpdated(el);
801
- await sendKeys({ press: 'ArrowUp' });
802
- await elementUpdated(el);
803
- expect(el.formattedValue).to.equal('15');
804
- expect(el.valueAsString).to.equal('15');
805
- expect(el.value).to.equal(15);
806
- });
807
- it('via arrow down', async () => {
808
- el.focus();
809
- await elementUpdated(el);
810
- await sendKeys({ press: 'ArrowDown' });
811
- await elementUpdated(el);
812
- expect(el.formattedValue).to.equal('5');
813
- expect(el.valueAsString).to.equal('5');
814
- expect(el.value).to.equal(5);
815
- });
816
- it('step up via pointer', async () => {
817
- await clickBySelector(el, '.stepUp');
818
- expect(el.formattedValue).to.equal('15');
819
- expect(el.valueAsString).to.equal('15');
820
- expect(el.value).to.equal(15);
821
- });
822
- it('step down via pointer', async () => {
823
- await clickBySelector(el, '.stepDown');
824
- expect(el.formattedValue).to.equal('5');
825
- expect(el.valueAsString).to.equal('5');
826
- expect(el.value).to.equal(5);
827
- });
828
- });
829
- describe('step + constraints', () => {
830
- let el;
831
- beforeEach(async () => {
832
- el = await getElFrom(Default({ step: 5 }));
833
- expect(el.formattedValue).to.equal('');
834
- expect(el.valueAsString).to.equal('NaN');
835
- expect(el.value).to.be.NaN;
836
- });
837
- it('steps', async () => {
838
- el.focus();
839
- await elementUpdated(el);
840
- await sendKeys({ press: 'ArrowUp' });
841
- await elementUpdated(el);
842
- expect(el.formattedValue).to.equal('0');
843
- expect(el.valueAsString).to.equal('0');
844
- expect(el.value).to.equal(0);
845
- await sendKeys({ press: 'ArrowUp' });
846
- await elementUpdated(el);
847
- expect(el.formattedValue).to.equal('5');
848
- expect(el.valueAsString).to.equal('5');
849
- expect(el.value).to.equal(5);
850
- await sendKeys({ press: 'ArrowUp' });
851
- await elementUpdated(el);
852
- expect(el.formattedValue).to.equal('10');
853
- expect(el.valueAsString).to.equal('10');
854
- expect(el.value).to.equal(10);
855
- });
856
- it('steps from min', async () => {
857
- el.min = 5;
858
- await elementUpdated(el);
859
- el.focus();
860
- await elementUpdated(el);
861
- await sendKeys({ press: 'ArrowUp' });
862
- await elementUpdated(el);
863
- expect(el.formattedValue).to.equal('5');
864
- expect(el.valueAsString).to.equal('5');
865
- expect(el.value).to.equal(5);
866
- await sendKeys({ press: 'ArrowUp' });
867
- await elementUpdated(el);
868
- expect(el.formattedValue).to.equal('10');
869
- expect(el.valueAsString).to.equal('10');
870
- expect(el.value).to.equal(10);
871
- await sendKeys({ press: 'ArrowUp' });
872
- await elementUpdated(el);
873
- expect(el.formattedValue).to.equal('15');
874
- expect(el.valueAsString).to.equal('15');
875
- expect(el.value).to.equal(15);
876
- });
877
- it('steps from mismatched min', async () => {
878
- el.min = 2;
879
- await elementUpdated(el);
880
- el.focus();
881
- await elementUpdated(el);
882
- await sendKeys({ press: 'ArrowUp' });
883
- await elementUpdated(el);
884
- expect(el.formattedValue).to.equal('2');
885
- expect(el.valueAsString).to.equal('2');
886
- expect(el.value).to.equal(2);
887
- await sendKeys({ press: 'ArrowUp' });
888
- await elementUpdated(el);
889
- expect(el.formattedValue).to.equal('7');
890
- expect(el.valueAsString).to.equal('7');
891
- expect(el.value).to.equal(7);
892
- await sendKeys({ press: 'ArrowUp' });
893
- await elementUpdated(el);
894
- expect(el.formattedValue).to.equal('12');
895
- expect(el.valueAsString).to.equal('12');
896
- expect(el.value).to.equal(12);
897
- });
898
- it('steps to mismatched max', async () => {
899
- el.min = 2;
900
- el.max = 10;
901
- await elementUpdated(el);
902
- el.focus();
903
- await elementUpdated(el);
904
- await sendKeys({ press: 'ArrowUp' });
905
- await elementUpdated(el);
906
- expect(el.formattedValue).to.equal('2');
907
- expect(el.valueAsString).to.equal('2');
908
- expect(el.value).to.equal(2);
909
- await sendKeys({ press: 'ArrowUp' });
910
- await elementUpdated(el);
911
- expect(el.formattedValue).to.equal('7');
912
- expect(el.valueAsString).to.equal('7');
913
- expect(el.value).to.equal(7);
914
- await sendKeys({ press: 'ArrowUp' });
915
- await elementUpdated(el);
916
- expect(el.formattedValue).to.equal('7');
917
- expect(el.valueAsString).to.equal('7');
918
- expect(el.value).to.equal(7);
919
- });
920
- it('validates max + step', async () => {
921
- el.value = 2;
922
- el.min = 2;
923
- el.max = 10;
924
- await elementUpdated(el);
925
- expect(el.formattedValue).to.equal('2');
926
- expect(el.valueAsString).to.equal('2');
927
- expect(el.value).to.equal(2);
928
- el.value = 11;
929
- await elementUpdated(el);
930
- expect(el.formattedValue).to.equal('7');
931
- expect(el.valueAsString).to.equal('7');
932
- expect(el.value).to.equal(7);
933
- el.value = 27;
934
- await elementUpdated(el);
935
- expect(el.formattedValue).to.equal('7');
936
- expect(el.valueAsString).to.equal('7');
937
- expect(el.value).to.equal(7);
938
- });
939
- });
940
- describe('indeterminate', () => {
941
- let el;
942
- beforeEach(async () => {
943
- el = await getElFrom(indeterminate(indeterminate.args));
944
- expect(el.formattedValue).to.equal('100');
945
- expect(el.valueAsString).to.equal('100');
946
- expect(el.value).to.equal(100);
947
- expect(el.displayValue).to.equal(indeterminatePlaceholder);
948
- });
949
- it('remove "-" on focus', async () => {
950
- el.focus();
951
- await elementUpdated(el);
952
- expect(el.formattedValue).to.equal('100');
953
- expect(el.valueAsString).to.equal('100');
954
- expect(el.value).to.equal(100);
955
- expect(el.displayValue).to.equal('');
956
- el.blur();
957
- await elementUpdated(el);
958
- expect(el.formattedValue).to.equal('100');
959
- expect(el.valueAsString).to.equal('100');
960
- expect(el.value).to.equal(100);
961
- expect(el.displayValue).to.equal(indeterminatePlaceholder);
962
- });
963
- it('return to "-" after suplied value is removed', async () => {
964
- el.focus();
965
- await elementUpdated(el);
966
- expect(el.formattedValue).to.equal('100');
967
- expect(el.valueAsString).to.equal('100');
968
- expect(el.value).to.equal(100);
969
- expect(el.displayValue).to.equal('');
970
- await sendKeys({ type: '50' });
971
- await elementUpdated(el);
972
- expect(el.formattedValue).to.equal('50');
973
- expect(el.valueAsString).to.equal('50');
974
- expect(el.value).to.equal(50);
975
- expect(el.displayValue).to.equal('50');
976
- await sendKeys({ press: 'Backspace' });
977
- await sendKeys({ press: 'Backspace' });
978
- await elementUpdated(el);
979
- expect(el.formattedValue).to.equal('100');
980
- expect(el.valueAsString).to.equal('100');
981
- expect(el.value).to.equal(100);
982
- expect(el.displayValue).to.equal('');
983
- el.blur();
984
- await elementUpdated(el);
985
- expect(el.formattedValue).to.equal('100');
986
- expect(el.valueAsString).to.equal('100');
987
- expect(el.value).to.equal(100);
988
- expect(el.displayValue).to.equal(indeterminatePlaceholder);
989
- });
990
- it('starts from `value` on "ArrowUp" keypresses', async () => {
991
- el.focus();
992
- await elementUpdated(el);
993
- await sendKeys({ press: 'ArrowUp' });
994
- await elementUpdated(el);
995
- expect(el.formattedValue).to.equal('101');
996
- expect(el.valueAsString).to.equal('101');
997
- expect(el.value).to.equal(101);
998
- expect(el.displayValue).to.equal('101');
999
- el.blur();
1000
- await elementUpdated(el);
1001
- expect(el.formattedValue).to.equal('101');
1002
- expect(el.valueAsString).to.equal('101');
1003
- expect(el.value).to.equal(101);
1004
- expect(el.displayValue).to.equal('101');
1005
- });
1006
- it('starts from `value` on click `.stepUp`', async () => {
1007
- el.focus();
1008
- await elementUpdated(el);
1009
- await clickBySelector(el, '.stepUp');
1010
- await elementUpdated(el);
1011
- expect(el.formattedValue).to.equal('101');
1012
- expect(el.valueAsString).to.equal('101');
1013
- expect(el.value).to.equal(101);
1014
- expect(el.displayValue).to.equal('101');
1015
- el.blur();
1016
- await elementUpdated(el);
1017
- expect(el.formattedValue).to.equal('101');
1018
- expect(el.valueAsString).to.equal('101');
1019
- expect(el.value).to.equal(101);
1020
- expect(el.displayValue).to.equal('101');
1021
- });
1022
- it('starts from `value` on "ArrowDown" keypresses', async () => {
1023
- el.focus();
1024
- await elementUpdated(el);
1025
- await sendKeys({ press: 'ArrowDown' });
1026
- await elementUpdated(el);
1027
- expect(el.formattedValue).to.equal('99');
1028
- expect(el.valueAsString).to.equal('99');
1029
- expect(el.value).to.equal(99);
1030
- expect(el.displayValue).to.equal('99');
1031
- el.blur();
1032
- await elementUpdated(el);
1033
- expect(el.formattedValue).to.equal('99');
1034
- expect(el.valueAsString).to.equal('99');
1035
- expect(el.value).to.equal(99);
1036
- expect(el.displayValue).to.equal('99');
1037
- });
1038
- it('starts from `value` on click `.stepDown`', async () => {
1039
- el.focus();
1040
- await elementUpdated(el);
1041
- await clickBySelector(el, '.stepDown');
1042
- await elementUpdated(el);
1043
- expect(el.formattedValue).to.equal('99');
1044
- expect(el.valueAsString).to.equal('99');
1045
- expect(el.value).to.equal(99);
1046
- expect(el.displayValue).to.equal('99');
1047
- el.blur();
1048
- await elementUpdated(el);
1049
- expect(el.formattedValue).to.equal('99');
1050
- expect(el.valueAsString).to.equal('99');
1051
- expect(el.value).to.equal(99);
1052
- expect(el.displayValue).to.equal('99');
1053
- });
1054
- });
1055
- it('removes the stepper UI with [hide-stepper]', async () => {
1056
- const el = await getElFrom(Default({ hideStepper: true }));
1057
- const stepUp = el.shadowRoot.querySelector('.stepUp');
1058
- const stepDown = el.shadowRoot.querySelector('.stepDown');
1059
- expect(stepUp).to.be.null;
1060
- expect(stepDown).to.be.null;
1061
- });
1062
- describe('Disabled', () => {
1063
- let el;
1064
- beforeEach(async () => {
1065
- el = await getElFrom(Default({ disabled: true, value: 1337 }));
1066
- expect(el.formattedValue).to.equal('1,337');
1067
- expect(el.valueAsString).to.equal('1337');
1068
- expect(el.value).to.equal(1337);
1069
- el.focus();
1070
- await elementUpdated(el);
1071
- });
1072
- afterEach(async () => {
1073
- await elementUpdated(el);
1074
- expect(el.formattedValue).to.equal('1,337');
1075
- expect(el.valueAsString).to.equal('1337');
1076
- expect(el.value).to.equal(1337);
1077
- });
1078
- it('presents as `disabled`', async () => {
1079
- await sendKeys({ type: '12345' });
1080
- await elementUpdated(el);
1081
- await sendKeys({ press: 'Enter' });
1082
- });
1083
- it('prevents increment via keyboard', async () => {
1084
- await sendKeys({ press: 'ArrowUp' });
1085
- });
1086
- it('prevents decrement via keyboard', async () => {
1087
- await sendKeys({ press: 'ArrowDown' });
1088
- });
1089
- it('prevents increment via scroll', async () => {
1090
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));
1091
- });
1092
- it('prevents decrement via scroll', async () => {
1093
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));
1094
- });
1095
- it('prevents increment via stepper button', async () => {
1096
- await clickBySelector(el, '.stepUp');
1097
- });
1098
- it('prevents decrement via stepper button', async () => {
1099
- await clickBySelector(el, '.stepDown');
1100
- });
1101
- });
1102
- describe('Readonly', () => {
1103
- let el;
1104
- beforeEach(async () => {
1105
- el = await getElFrom(Default({ readonly: true, value: 1337 }));
1106
- expect(el.formattedValue).to.equal('1,337');
1107
- expect(el.valueAsString).to.equal('1337');
1108
- expect(el.value).to.equal(1337);
1109
- el.focus();
1110
- await elementUpdated(el);
1111
- });
1112
- afterEach(async () => {
1113
- await elementUpdated(el);
1114
- expect(el.formattedValue).to.equal('1,337');
1115
- expect(el.valueAsString).to.equal('1337');
1116
- expect(el.value).to.equal(1337);
1117
- });
1118
- it('presents as `readonly`', async () => {
1119
- await sendKeys({ type: '12345' });
1120
- await elementUpdated(el);
1121
- await sendKeys({ press: 'Enter' });
1122
- });
1123
- it('prevents increment via keyboard', async () => {
1124
- await sendKeys({ press: 'ArrowUp' });
1125
- });
1126
- it('prevents decrement via keyboard', async () => {
1127
- await sendKeys({ press: 'ArrowDown' });
1128
- });
1129
- it('prevents increment via scroll', async () => {
1130
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: 1 }));
1131
- });
1132
- it('prevents decrement via scroll', async () => {
1133
- el.dispatchEvent(new WheelEvent('wheel', { deltaY: -1 }));
1134
- });
1135
- it('prevents increment via stepper button', async () => {
1136
- await clickBySelector(el, '.stepUp');
1137
- });
1138
- it('prevents decrement via stepper button', async () => {
1139
- await clickBySelector(el, '.stepDown');
1140
- });
565
+ ]
566
+ });
567
+ let framesToWait = FRAMES_PER_CHANGE;
568
+ while (framesToWait) {
569
+ framesToWait -= 1;
570
+ await nextFrame();
571
+ }
572
+ await elementUpdated(el);
573
+ value = value - inputSpy.callCount;
574
+ expect(el.formattedValue).to.equal(String(value));
575
+ expect(el.valueAsString).to.equal(String(value));
576
+ expect(el.value).to.equal(value);
577
+ });
578
+ it("surfaces `valueAsNumber`", async () => {
579
+ const el = await getElFrom(Default({}));
580
+ el.value = 1e3;
581
+ await elementUpdated(el);
582
+ expect(el.formattedValue).to.equal("1,000");
583
+ expect(el.valueAsString).to.equal("1000");
584
+ expect(el.value).to.equal(1e3);
585
+ el.valueAsString = "2222";
586
+ await elementUpdated(el);
587
+ expect(el.formattedValue).to.equal("2,222");
588
+ expect(el.valueAsString).to.equal("2222");
589
+ expect(el.value).to.equal(2222);
590
+ });
591
+ describe("manages `value` with `formatOptions`", () => {
592
+ it("manages decimals", async () => {
593
+ const el = await getElFrom(decimals({ value: 1.333333 }));
594
+ expect(el.value).to.equal(1.33);
595
+ expect(el.formattedValue).to.equal("+1.33");
596
+ expect(el.valueAsString).to.equal("1.33");
597
+ });
598
+ it("manages precents", async () => {
599
+ const el = await getElFrom(percents({ value: 0.45 }));
600
+ expect(el.formattedValue).to.equal("45%");
601
+ expect(el.valueAsString).to.equal("0.45");
602
+ expect(el.value).to.equal(0.45);
603
+ await clickBySelector(el, ".stepDown");
604
+ await elementUpdated(el);
605
+ expect(el.formattedValue).to.equal("44%");
606
+ expect(el.valueAsString).to.equal("0.44");
607
+ expect(el.value).to.equal(0.44);
608
+ await clickBySelector(el, ".stepUp");
609
+ await elementUpdated(el);
610
+ expect(el.formattedValue).to.equal("45%");
611
+ expect(el.valueAsString).to.equal("0.45");
612
+ expect(el.value).to.equal(0.45);
613
+ el.focus();
614
+ el.value = 0;
615
+ await sendKeys({ type: "54" });
616
+ await sendKeys({ press: "Enter" });
617
+ expect(el.formattedValue).to.equal("54%");
618
+ expect(el.valueAsString).to.equal("0.54");
619
+ expect(el.value).to.equal(0.54);
620
+ await elementUpdated(el);
621
+ expect(el.formattedValue).to.equal("54%");
622
+ expect(el.valueAsString).to.equal("0.54");
623
+ expect(el.value).to.equal(0.54);
624
+ });
625
+ it("manages currency", async () => {
626
+ const el = await getElFrom(currency({ value: 234.21 }));
627
+ expect(el.formattedValue).to.equal("EUR\xA0234.21");
628
+ expect(el.valueAsString).to.equal("234.21");
629
+ expect(el.value).to.equal(234.21);
630
+ });
631
+ it("manages units", async () => {
632
+ const el = await getElFrom(units({ value: 17 }));
633
+ expect(el.formattedValue).to.equal("17 inches");
634
+ expect(el.valueAsString).to.equal("17");
635
+ expect(el.value).to.equal(17);
636
+ });
637
+ it("manages units not supported by the browser", async () => {
638
+ const el = await getElFrom(pixels({ value: 17 }));
639
+ expect(el.formattedValue).to.equal("17px");
640
+ expect(el.valueAsString).to.equal("17");
641
+ expect(el.value).to.equal(17);
642
+ });
643
+ });
644
+ describe("max", () => {
645
+ let el;
646
+ let lastInputValue = 0;
647
+ let lastChangeValue = 0;
648
+ beforeEach(async () => {
649
+ el = await getElFrom(Default({
650
+ max: 10,
651
+ value: 10,
652
+ onInput: (value) => lastInputValue = value,
653
+ onChange: (value) => lastChangeValue = value
654
+ }));
655
+ expect(el.formattedValue).to.equal("10");
656
+ expect(el.valueAsString).to.equal("10");
657
+ expect(el.value).to.equal(10);
658
+ });
659
+ it("constrains input", async () => {
660
+ el.focus();
661
+ await sendKeys({ type: "15" });
662
+ await sendKeys({ press: "Enter" });
663
+ await elementUpdated(el);
664
+ expect(lastInputValue, "last input value").to.equal(10);
665
+ expect(lastChangeValue, "last change value").to.equal(10);
666
+ expect(el.formattedValue).to.equal("10");
667
+ expect(el.valueAsString).to.equal("10");
668
+ expect(el.value).to.equal(10);
669
+ });
670
+ it("constrains `value`", async () => {
671
+ el.value = 20;
672
+ await elementUpdated(el);
673
+ expect(el.formattedValue).to.equal("10");
674
+ expect(el.valueAsString).to.equal("10");
675
+ expect(el.value).to.equal(10);
676
+ });
677
+ it("validates on commit", async () => {
678
+ el.focus();
679
+ await sendKeys({ type: "15" });
680
+ await sendKeys({ press: "Enter" });
681
+ await elementUpdated(el);
682
+ expect(el.formattedValue).to.equal("10");
683
+ expect(el.valueAsString).to.equal("10");
684
+ expect(el.value).to.equal(10);
685
+ });
686
+ it("disabled `stepUp` button", async () => {
687
+ await clickBySelector(el, ".stepUp");
688
+ expect(el.formattedValue).to.equal("10");
689
+ expect(el.valueAsString).to.equal("10");
690
+ expect(el.value).to.equal(10);
691
+ });
692
+ it("validates late", async () => {
693
+ el.max = 5;
694
+ await elementUpdated(el);
695
+ expect(el.formattedValue).to.equal("5");
696
+ expect(el.valueAsString).to.equal("5");
697
+ expect(el.value).to.equal(5);
698
+ });
699
+ });
700
+ describe("min", () => {
701
+ let el;
702
+ let lastInputValue = 0;
703
+ let lastChangeValue = 0;
704
+ beforeEach(async () => {
705
+ el = await getElFrom(Default({
706
+ min: 10,
707
+ value: 10,
708
+ onInput: (value) => lastInputValue = value,
709
+ onChange: (value) => lastChangeValue = value
710
+ }));
711
+ expect(el.formattedValue).to.equal("10");
712
+ expect(el.valueAsString).to.equal("10");
713
+ expect(el.value).to.equal(10);
714
+ });
715
+ it("constrains input", async () => {
716
+ el.focus();
717
+ await sendKeys({ press: "Backspace" });
718
+ await sendKeys({ press: "Backspace" });
719
+ await sendKeys({ type: "5" });
720
+ await sendKeys({ press: "Enter" });
721
+ await elementUpdated(el);
722
+ expect(lastInputValue, "last input value").to.equal(10);
723
+ expect(lastChangeValue, "last change value").to.equal(10);
724
+ expect(el.formattedValue).to.equal("10");
725
+ expect(el.valueAsString).to.equal("10");
726
+ expect(el.value).to.equal(10);
727
+ });
728
+ xit("manages `inputMode` in iPhone", async () => {
729
+ await setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148");
730
+ el.min = 0;
731
+ await elementUpdated(el);
732
+ expect(el.focusElement.inputMode).to.equal("numeric");
733
+ el.min = -10;
734
+ await elementUpdated(el);
735
+ expect(el.focusElement.inputMode).to.equal("text");
736
+ el.formatOptions = {
737
+ minimumFractionDigits: 1,
738
+ maximumFractionDigits: 2
739
+ };
740
+ el.min = 0;
741
+ await elementUpdated(el);
742
+ expect(el.focusElement.inputMode).to.equal("decimal");
743
+ });
744
+ xit("manages `inputMode` in Android", async () => {
745
+ await setUserAgent("Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36");
746
+ el.min = 0;
747
+ await elementUpdated(el);
748
+ expect(el.focusElement.inputMode).to.equal("numeric");
749
+ el.min = -10;
750
+ await elementUpdated(el);
751
+ expect(el.focusElement.inputMode).to.equal("numeric");
752
+ el.formatOptions = {
753
+ minimumFractionDigits: 1,
754
+ maximumFractionDigits: 2
755
+ };
756
+ el.min = 0;
757
+ await elementUpdated(el);
758
+ expect(el.focusElement.inputMode).to.equal("decimal");
759
+ });
760
+ it("constrains `value`", async () => {
761
+ el.value = 0;
762
+ await elementUpdated(el);
763
+ expect(el.formattedValue).to.equal("10");
764
+ expect(el.valueAsString).to.equal("10");
765
+ expect(el.value).to.equal(10);
766
+ });
767
+ it("validates on commit", async () => {
768
+ el.focus();
769
+ await sendKeys({ press: "0" });
770
+ await sendKeys({ press: "Enter" });
771
+ await elementUpdated(el);
772
+ expect(el.formattedValue).to.equal("100");
773
+ expect(el.valueAsString).to.equal("100");
774
+ expect(el.value).to.equal(100);
775
+ });
776
+ it("disabled `stepDown` button", async () => {
777
+ await clickBySelector(el, ".stepDown");
778
+ expect(el.formattedValue).to.equal("10");
779
+ expect(el.valueAsString).to.equal("10");
780
+ expect(el.value).to.equal(10);
781
+ });
782
+ it("validates late", async () => {
783
+ el.min = 15;
784
+ await elementUpdated(el);
785
+ expect(el.formattedValue).to.equal("15");
786
+ expect(el.valueAsString).to.equal("15");
787
+ expect(el.value).to.equal(15);
788
+ });
789
+ });
790
+ describe("step", () => {
791
+ let el;
792
+ beforeEach(async () => {
793
+ el = await getElFrom(Default({ value: 10, step: 5 }));
794
+ expect(el.formattedValue).to.equal("10");
795
+ expect(el.valueAsString).to.equal("10");
796
+ expect(el.value).to.equal(10);
797
+ });
798
+ it("via arrow up", async () => {
799
+ el.focus();
800
+ await elementUpdated(el);
801
+ await sendKeys({ press: "ArrowUp" });
802
+ await elementUpdated(el);
803
+ expect(el.formattedValue).to.equal("15");
804
+ expect(el.valueAsString).to.equal("15");
805
+ expect(el.value).to.equal(15);
806
+ });
807
+ it("via arrow down", async () => {
808
+ el.focus();
809
+ await elementUpdated(el);
810
+ await sendKeys({ press: "ArrowDown" });
811
+ await elementUpdated(el);
812
+ expect(el.formattedValue).to.equal("5");
813
+ expect(el.valueAsString).to.equal("5");
814
+ expect(el.value).to.equal(5);
815
+ });
816
+ it("step up via pointer", async () => {
817
+ await clickBySelector(el, ".stepUp");
818
+ expect(el.formattedValue).to.equal("15");
819
+ expect(el.valueAsString).to.equal("15");
820
+ expect(el.value).to.equal(15);
821
+ });
822
+ it("step down via pointer", async () => {
823
+ await clickBySelector(el, ".stepDown");
824
+ expect(el.formattedValue).to.equal("5");
825
+ expect(el.valueAsString).to.equal("5");
826
+ expect(el.value).to.equal(5);
827
+ });
828
+ });
829
+ describe("step + constraints", () => {
830
+ let el;
831
+ beforeEach(async () => {
832
+ el = await getElFrom(Default({ step: 5 }));
833
+ expect(el.formattedValue).to.equal("");
834
+ expect(el.valueAsString).to.equal("NaN");
835
+ expect(el.value).to.be.NaN;
836
+ });
837
+ it("steps", async () => {
838
+ el.focus();
839
+ await elementUpdated(el);
840
+ await sendKeys({ press: "ArrowUp" });
841
+ await elementUpdated(el);
842
+ expect(el.formattedValue).to.equal("0");
843
+ expect(el.valueAsString).to.equal("0");
844
+ expect(el.value).to.equal(0);
845
+ await sendKeys({ press: "ArrowUp" });
846
+ await elementUpdated(el);
847
+ expect(el.formattedValue).to.equal("5");
848
+ expect(el.valueAsString).to.equal("5");
849
+ expect(el.value).to.equal(5);
850
+ await sendKeys({ press: "ArrowUp" });
851
+ await elementUpdated(el);
852
+ expect(el.formattedValue).to.equal("10");
853
+ expect(el.valueAsString).to.equal("10");
854
+ expect(el.value).to.equal(10);
855
+ });
856
+ it("steps from min", async () => {
857
+ el.min = 5;
858
+ await elementUpdated(el);
859
+ el.focus();
860
+ await elementUpdated(el);
861
+ await sendKeys({ press: "ArrowUp" });
862
+ await elementUpdated(el);
863
+ expect(el.formattedValue).to.equal("5");
864
+ expect(el.valueAsString).to.equal("5");
865
+ expect(el.value).to.equal(5);
866
+ await sendKeys({ press: "ArrowUp" });
867
+ await elementUpdated(el);
868
+ expect(el.formattedValue).to.equal("10");
869
+ expect(el.valueAsString).to.equal("10");
870
+ expect(el.value).to.equal(10);
871
+ await sendKeys({ press: "ArrowUp" });
872
+ await elementUpdated(el);
873
+ expect(el.formattedValue).to.equal("15");
874
+ expect(el.valueAsString).to.equal("15");
875
+ expect(el.value).to.equal(15);
876
+ });
877
+ it("steps from mismatched min", async () => {
878
+ el.min = 2;
879
+ await elementUpdated(el);
880
+ el.focus();
881
+ await elementUpdated(el);
882
+ await sendKeys({ press: "ArrowUp" });
883
+ await elementUpdated(el);
884
+ expect(el.formattedValue).to.equal("2");
885
+ expect(el.valueAsString).to.equal("2");
886
+ expect(el.value).to.equal(2);
887
+ await sendKeys({ press: "ArrowUp" });
888
+ await elementUpdated(el);
889
+ expect(el.formattedValue).to.equal("7");
890
+ expect(el.valueAsString).to.equal("7");
891
+ expect(el.value).to.equal(7);
892
+ await sendKeys({ press: "ArrowUp" });
893
+ await elementUpdated(el);
894
+ expect(el.formattedValue).to.equal("12");
895
+ expect(el.valueAsString).to.equal("12");
896
+ expect(el.value).to.equal(12);
897
+ });
898
+ it("steps to mismatched max", async () => {
899
+ el.min = 2;
900
+ el.max = 10;
901
+ await elementUpdated(el);
902
+ el.focus();
903
+ await elementUpdated(el);
904
+ await sendKeys({ press: "ArrowUp" });
905
+ await elementUpdated(el);
906
+ expect(el.formattedValue).to.equal("2");
907
+ expect(el.valueAsString).to.equal("2");
908
+ expect(el.value).to.equal(2);
909
+ await sendKeys({ press: "ArrowUp" });
910
+ await elementUpdated(el);
911
+ expect(el.formattedValue).to.equal("7");
912
+ expect(el.valueAsString).to.equal("7");
913
+ expect(el.value).to.equal(7);
914
+ await sendKeys({ press: "ArrowUp" });
915
+ await elementUpdated(el);
916
+ expect(el.formattedValue).to.equal("7");
917
+ expect(el.valueAsString).to.equal("7");
918
+ expect(el.value).to.equal(7);
919
+ });
920
+ it("validates max + step", async () => {
921
+ el.value = 2;
922
+ el.min = 2;
923
+ el.max = 10;
924
+ await elementUpdated(el);
925
+ expect(el.formattedValue).to.equal("2");
926
+ expect(el.valueAsString).to.equal("2");
927
+ expect(el.value).to.equal(2);
928
+ el.value = 11;
929
+ await elementUpdated(el);
930
+ expect(el.formattedValue).to.equal("7");
931
+ expect(el.valueAsString).to.equal("7");
932
+ expect(el.value).to.equal(7);
933
+ el.value = 27;
934
+ await elementUpdated(el);
935
+ expect(el.formattedValue).to.equal("7");
936
+ expect(el.valueAsString).to.equal("7");
937
+ expect(el.value).to.equal(7);
938
+ });
939
+ });
940
+ describe("indeterminate", () => {
941
+ let el;
942
+ beforeEach(async () => {
943
+ el = await getElFrom(indeterminate(indeterminate.args));
944
+ expect(el.formattedValue).to.equal("100");
945
+ expect(el.valueAsString).to.equal("100");
946
+ expect(el.value).to.equal(100);
947
+ expect(el.displayValue).to.equal(indeterminatePlaceholder);
948
+ });
949
+ it('remove "-" on focus', async () => {
950
+ el.focus();
951
+ await elementUpdated(el);
952
+ expect(el.formattedValue).to.equal("100");
953
+ expect(el.valueAsString).to.equal("100");
954
+ expect(el.value).to.equal(100);
955
+ expect(el.displayValue).to.equal("");
956
+ el.blur();
957
+ await elementUpdated(el);
958
+ expect(el.formattedValue).to.equal("100");
959
+ expect(el.valueAsString).to.equal("100");
960
+ expect(el.value).to.equal(100);
961
+ expect(el.displayValue).to.equal(indeterminatePlaceholder);
962
+ });
963
+ it('return to "-" after suplied value is removed', async () => {
964
+ el.focus();
965
+ await elementUpdated(el);
966
+ expect(el.formattedValue).to.equal("100");
967
+ expect(el.valueAsString).to.equal("100");
968
+ expect(el.value).to.equal(100);
969
+ expect(el.displayValue).to.equal("");
970
+ await sendKeys({ type: "50" });
971
+ await elementUpdated(el);
972
+ expect(el.formattedValue).to.equal("50");
973
+ expect(el.valueAsString).to.equal("50");
974
+ expect(el.value).to.equal(50);
975
+ expect(el.displayValue).to.equal("50");
976
+ await sendKeys({ press: "Backspace" });
977
+ await sendKeys({ press: "Backspace" });
978
+ await elementUpdated(el);
979
+ expect(el.formattedValue).to.equal("100");
980
+ expect(el.valueAsString).to.equal("100");
981
+ expect(el.value).to.equal(100);
982
+ expect(el.displayValue).to.equal("");
983
+ el.blur();
984
+ await elementUpdated(el);
985
+ expect(el.formattedValue).to.equal("100");
986
+ expect(el.valueAsString).to.equal("100");
987
+ expect(el.value).to.equal(100);
988
+ expect(el.displayValue).to.equal(indeterminatePlaceholder);
989
+ });
990
+ it('starts from `value` on "ArrowUp" keypresses', async () => {
991
+ el.focus();
992
+ await elementUpdated(el);
993
+ await sendKeys({ press: "ArrowUp" });
994
+ await elementUpdated(el);
995
+ expect(el.formattedValue).to.equal("101");
996
+ expect(el.valueAsString).to.equal("101");
997
+ expect(el.value).to.equal(101);
998
+ expect(el.displayValue).to.equal("101");
999
+ el.blur();
1000
+ await elementUpdated(el);
1001
+ expect(el.formattedValue).to.equal("101");
1002
+ expect(el.valueAsString).to.equal("101");
1003
+ expect(el.value).to.equal(101);
1004
+ expect(el.displayValue).to.equal("101");
1005
+ });
1006
+ it("starts from `value` on click `.stepUp`", async () => {
1007
+ el.focus();
1008
+ await elementUpdated(el);
1009
+ await clickBySelector(el, ".stepUp");
1010
+ await elementUpdated(el);
1011
+ expect(el.formattedValue).to.equal("101");
1012
+ expect(el.valueAsString).to.equal("101");
1013
+ expect(el.value).to.equal(101);
1014
+ expect(el.displayValue).to.equal("101");
1015
+ el.blur();
1016
+ await elementUpdated(el);
1017
+ expect(el.formattedValue).to.equal("101");
1018
+ expect(el.valueAsString).to.equal("101");
1019
+ expect(el.value).to.equal(101);
1020
+ expect(el.displayValue).to.equal("101");
1021
+ });
1022
+ it('starts from `value` on "ArrowDown" keypresses', async () => {
1023
+ el.focus();
1024
+ await elementUpdated(el);
1025
+ await sendKeys({ press: "ArrowDown" });
1026
+ await elementUpdated(el);
1027
+ expect(el.formattedValue).to.equal("99");
1028
+ expect(el.valueAsString).to.equal("99");
1029
+ expect(el.value).to.equal(99);
1030
+ expect(el.displayValue).to.equal("99");
1031
+ el.blur();
1032
+ await elementUpdated(el);
1033
+ expect(el.formattedValue).to.equal("99");
1034
+ expect(el.valueAsString).to.equal("99");
1035
+ expect(el.value).to.equal(99);
1036
+ expect(el.displayValue).to.equal("99");
1037
+ });
1038
+ it("starts from `value` on click `.stepDown`", async () => {
1039
+ el.focus();
1040
+ await elementUpdated(el);
1041
+ await clickBySelector(el, ".stepDown");
1042
+ await elementUpdated(el);
1043
+ expect(el.formattedValue).to.equal("99");
1044
+ expect(el.valueAsString).to.equal("99");
1045
+ expect(el.value).to.equal(99);
1046
+ expect(el.displayValue).to.equal("99");
1047
+ el.blur();
1048
+ await elementUpdated(el);
1049
+ expect(el.formattedValue).to.equal("99");
1050
+ expect(el.valueAsString).to.equal("99");
1051
+ expect(el.value).to.equal(99);
1052
+ expect(el.displayValue).to.equal("99");
1053
+ });
1054
+ });
1055
+ it("removes the stepper UI with [hide-stepper]", async () => {
1056
+ const el = await getElFrom(Default({ hideStepper: true }));
1057
+ const stepUp = el.shadowRoot.querySelector(".stepUp");
1058
+ const stepDown = el.shadowRoot.querySelector(".stepDown");
1059
+ expect(stepUp).to.be.null;
1060
+ expect(stepDown).to.be.null;
1061
+ });
1062
+ describe("Disabled", () => {
1063
+ let el;
1064
+ beforeEach(async () => {
1065
+ el = await getElFrom(Default({ disabled: true, value: 1337 }));
1066
+ expect(el.formattedValue).to.equal("1,337");
1067
+ expect(el.valueAsString).to.equal("1337");
1068
+ expect(el.value).to.equal(1337);
1069
+ el.focus();
1070
+ await elementUpdated(el);
1071
+ });
1072
+ afterEach(async () => {
1073
+ await elementUpdated(el);
1074
+ expect(el.formattedValue).to.equal("1,337");
1075
+ expect(el.valueAsString).to.equal("1337");
1076
+ expect(el.value).to.equal(1337);
1077
+ });
1078
+ it("presents as `disabled`", async () => {
1079
+ await sendKeys({ type: "12345" });
1080
+ await elementUpdated(el);
1081
+ await sendKeys({ press: "Enter" });
1082
+ });
1083
+ it("prevents increment via keyboard", async () => {
1084
+ await sendKeys({ press: "ArrowUp" });
1085
+ });
1086
+ it("prevents decrement via keyboard", async () => {
1087
+ await sendKeys({ press: "ArrowDown" });
1088
+ });
1089
+ it("prevents increment via scroll", async () => {
1090
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: 1 }));
1091
+ });
1092
+ it("prevents decrement via scroll", async () => {
1093
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: -1 }));
1094
+ });
1095
+ it("prevents increment via stepper button", async () => {
1096
+ await clickBySelector(el, ".stepUp");
1097
+ });
1098
+ it("prevents decrement via stepper button", async () => {
1099
+ await clickBySelector(el, ".stepDown");
1100
+ });
1101
+ });
1102
+ describe("Readonly", () => {
1103
+ let el;
1104
+ beforeEach(async () => {
1105
+ el = await getElFrom(Default({ readonly: true, value: 1337 }));
1106
+ expect(el.formattedValue).to.equal("1,337");
1107
+ expect(el.valueAsString).to.equal("1337");
1108
+ expect(el.value).to.equal(1337);
1109
+ el.focus();
1110
+ await elementUpdated(el);
1111
+ });
1112
+ afterEach(async () => {
1113
+ await elementUpdated(el);
1114
+ expect(el.formattedValue).to.equal("1,337");
1115
+ expect(el.valueAsString).to.equal("1337");
1116
+ expect(el.value).to.equal(1337);
1117
+ });
1118
+ it("presents as `readonly`", async () => {
1119
+ await sendKeys({ type: "12345" });
1120
+ await elementUpdated(el);
1121
+ await sendKeys({ press: "Enter" });
1122
+ });
1123
+ it("prevents increment via keyboard", async () => {
1124
+ await sendKeys({ press: "ArrowUp" });
1125
+ });
1126
+ it("prevents decrement via keyboard", async () => {
1127
+ await sendKeys({ press: "ArrowDown" });
1128
+ });
1129
+ it("prevents increment via scroll", async () => {
1130
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: 1 }));
1131
+ });
1132
+ it("prevents decrement via scroll", async () => {
1133
+ el.dispatchEvent(new WheelEvent("wheel", { deltaY: -1 }));
1134
+ });
1135
+ it("prevents increment via stepper button", async () => {
1136
+ await clickBySelector(el, ".stepUp");
1137
+ });
1138
+ it("prevents decrement via stepper button", async () => {
1139
+ await clickBySelector(el, ".stepDown");
1141
1140
  });
1141
+ });
1142
1142
  });
1143
- //# sourceMappingURL=number-field.test.js.map
1143
+ //# sourceMappingURL=number-field.test.js.map