@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.
- package/package.json +26 -13
- package/sp-number-field.dev.js +3 -0
- package/sp-number-field.dev.js.map +7 -0
- package/sp-number-field.js +3 -14
- package/sp-number-field.js.map +7 -1
- package/src/NumberField.dev.js +499 -0
- package/src/NumberField.dev.js.map +7 -0
- package/src/NumberField.js +452 -504
- package/src/NumberField.js.map +7 -1
- package/src/index.dev.js +2 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +2 -13
- package/src/index.js.map +7 -1
- package/src/number-field.css.dev.js +147 -0
- package/src/number-field.css.dev.js.map +7 -0
- package/src/number-field.css.js +6 -15
- package/src/number-field.css.js.map +7 -1
- package/src/spectrum-number-field.css.dev.js +143 -0
- package/src/spectrum-number-field.css.dev.js.map +7 -0
- package/src/spectrum-number-field.css.js +3 -14
- package/src/spectrum-number-field.css.js.map +7 -1
- package/stories/number-field.stories.js +215 -229
- package/stories/number-field.stories.js.map +7 -1
- package/test/benchmark/basic-test.js +5 -16
- package/test/benchmark/basic-test.js.map +7 -1
- package/test/helpers.js +44 -55
- package/test/helpers.js.map +7 -1
- package/test/inputs.test.js +340 -350
- package/test/inputs.test.js.map +7 -1
- package/test/number-field.test-vrt.js +4 -15
- package/test/number-field.test-vrt.js.map +7 -1
- package/test/number-field.test.js +1135 -1135
- package/test/number-field.test.js.map +7 -1
|
@@ -1,1143 +1,1143 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
import { sendKeys, setUserAgent } from
|
|
19
|
-
import { spy } from
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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(
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
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
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
});
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
});
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
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
|