@@ -19,6 +19,7 @@ import userEvent from '@testing-library/user-event';
19
19
20
20
describe ( 'ColorSlider' , ( ) => {
21
21
let onChangeSpy = jest . fn ( ) ;
22
+ let onChangeEndSpy = jest . fn ( ) ;
22
23
23
24
beforeAll ( ( ) => {
24
25
jest . spyOn ( window . HTMLElement . prototype , 'offsetWidth' , 'get' ) . mockImplementation ( ( ) => 100 ) ;
@@ -31,6 +32,7 @@ describe('ColorSlider', () => {
31
32
32
33
afterEach ( ( ) => {
33
34
onChangeSpy . mockClear ( ) ;
35
+ onChangeEndSpy . mockClear ( ) ;
34
36
// for restoreTextSelection
35
37
act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
36
38
} ) ;
@@ -264,16 +266,65 @@ describe('ColorSlider', () => {
264
266
describe ( 'keyboard events' , ( ) => {
265
267
it ( 'works' , ( ) => {
266
268
let defaultColor = parseColor ( '#000000' ) ;
267
- let { getByRole} = render ( < ColorSlider defaultValue = { defaultColor } onChange = { onChangeSpy } channel = "red" /> ) ;
269
+ let { getByRole} = render ( < ColorSlider defaultValue = { defaultColor } onChange = { onChangeSpy } onChangeEnd = { onChangeEndSpy } channel = "red" /> ) ;
268
270
let slider = getByRole ( 'slider' ) ;
269
271
act ( ( ) => { slider . focus ( ) ; } ) ;
270
272
271
273
fireEvent . keyDown ( slider , { key : 'Right' } ) ;
274
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
272
275
expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
273
276
expect ( onChangeSpy . mock . calls [ 0 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 1 ) . toString ( 'hexa' ) ) ;
277
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 1 ) ;
278
+ expect ( onChangeEndSpy . mock . calls [ 0 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 1 ) . toString ( 'hexa' ) ) ;
279
+
274
280
fireEvent . keyDown ( slider , { key : 'Left' } ) ;
281
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
275
282
expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
276
283
expect ( onChangeSpy . mock . calls [ 1 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 0 ) . toString ( 'hexa' ) ) ;
284
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 2 ) ;
285
+ expect ( onChangeEndSpy . mock . calls [ 1 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 0 ) . toString ( 'hexa' ) ) ;
286
+
287
+ fireEvent . keyDown ( slider , { key : 'PageUp' } ) ;
288
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
289
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 3 ) ;
290
+ expect ( onChangeSpy . mock . calls [ 2 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 17 ) . toString ( 'hexa' ) ) ;
291
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 3 ) ;
292
+ expect ( onChangeEndSpy . mock . calls [ 2 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 17 ) . toString ( 'hexa' ) ) ;
293
+
294
+ fireEvent . keyDown ( slider , { key : 'Right' } ) ;
295
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
296
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 4 ) ;
297
+ expect ( onChangeSpy . mock . calls [ 3 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 18 ) . toString ( 'hexa' ) ) ;
298
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 4 ) ;
299
+ expect ( onChangeEndSpy . mock . calls [ 3 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 18 ) . toString ( 'hexa' ) ) ;
300
+
301
+ fireEvent . keyDown ( slider , { key : 'PageDown' } ) ;
302
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
303
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 5 ) ;
304
+ expect ( onChangeSpy . mock . calls [ 4 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 1 ) . toString ( 'hexa' ) ) ;
305
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 5 ) ;
306
+ expect ( onChangeEndSpy . mock . calls [ 4 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 1 ) . toString ( 'hexa' ) ) ;
307
+
308
+ fireEvent . keyDown ( slider , { key : 'End' } ) ;
309
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
310
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 6 ) ;
311
+ expect ( onChangeSpy . mock . calls [ 5 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 255 ) . toString ( 'hexa' ) ) ;
312
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 6 ) ;
313
+ expect ( onChangeEndSpy . mock . calls [ 5 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 255 ) . toString ( 'hexa' ) ) ;
314
+
315
+ fireEvent . keyDown ( slider , { key : 'PageDown' } ) ;
316
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
317
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 7 ) ;
318
+ expect ( onChangeSpy . mock . calls [ 6 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 238 ) . toString ( 'hexa' ) ) ;
319
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 7 ) ;
320
+ expect ( onChangeEndSpy . mock . calls [ 6 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 238 ) . toString ( 'hexa' ) ) ;
321
+
322
+ fireEvent . keyDown ( slider , { key : 'Home' } ) ;
323
+ act ( ( ) => { jest . runAllTimers ( ) ; } ) ;
324
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 8 ) ;
325
+ expect ( onChangeSpy . mock . calls [ 7 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 0 ) . toString ( 'hexa' ) ) ;
326
+ expect ( onChangeEndSpy ) . toHaveBeenCalledTimes ( 8 ) ;
327
+ expect ( onChangeEndSpy . mock . calls [ 7 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 0 ) . toString ( 'hexa' ) ) ;
277
328
} ) ;
278
329
279
330
it ( 'doesn\'t work when disabled' , ( ) => {
@@ -287,20 +338,6 @@ describe('ColorSlider', () => {
287
338
fireEvent . keyDown ( slider , { key : 'Left' } ) ;
288
339
expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 0 ) ;
289
340
} ) ;
290
-
291
- it ( 'respects step' , ( ) => {
292
- let defaultColor = parseColor ( '#000000' ) ;
293
- let { getByRole} = render ( < ColorSlider defaultValue = { defaultColor } onChange = { onChangeSpy } channel = "red" step = { 10 } /> ) ;
294
- let slider = getByRole ( 'slider' ) ;
295
- act ( ( ) => { slider . focus ( ) ; } ) ;
296
-
297
- fireEvent . keyDown ( slider , { key : 'Right' } ) ;
298
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
299
- expect ( onChangeSpy . mock . calls [ 0 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 10 ) . toString ( 'hexa' ) ) ;
300
- fireEvent . keyDown ( slider , { key : 'Left' } ) ;
301
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
302
- expect ( onChangeSpy . mock . calls [ 1 ] [ 0 ] . toString ( 'hexa' ) ) . toBe ( defaultColor . withChannelValue ( 'red' , 0 ) . toString ( 'hexa' ) ) ;
303
- } ) ;
304
341
} ) ;
305
342
306
343
describe . each `
@@ -385,21 +422,6 @@ describe('ColorSlider', () => {
385
422
expect ( document . activeElement ) . not . toBe ( slider ) ;
386
423
} ) ;
387
424
388
- it ( 'dragging the thumb respects the step' , ( ) => {
389
- let defaultColor = parseColor ( 'hsl(0, 100%, 50%)' ) ;
390
- let { getByRole} = render ( < ColorSlider channel = "hue" defaultValue = { defaultColor } onChange = { onChangeSpy } step = { 120 } /> ) ;
391
- let slider = getByRole ( 'slider' ) ;
392
- let thumb = slider . parentElement ;
393
-
394
- start ( thumb , { pageX : 0 } ) ;
395
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 0 ) ;
396
- move ( thumb , { pageX : 20 } ) ;
397
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
398
- expect ( onChangeSpy . mock . calls [ 0 ] [ 0 ] . toString ( 'hsla' ) ) . toBe ( defaultColor . withChannelValue ( 'hue' , 120 ) . toString ( 'hsla' ) ) ;
399
- end ( thumb , { pageX : 20 } ) ;
400
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
401
- } ) ;
402
-
403
425
it ( 'clicking and dragging on the track works' , ( ) => {
404
426
let defaultColor = parseColor ( 'hsl(0, 100%, 50%)' ) ;
405
427
let { getByRole} = render ( < ColorSlider channel = "hue" defaultValue = { defaultColor } onChange = { onChangeSpy } /> ) ;
@@ -465,22 +487,5 @@ describe('ColorSlider', () => {
465
487
expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 0 ) ;
466
488
expect ( document . activeElement ) . not . toBe ( slider ) ;
467
489
} ) ;
468
-
469
- it ( 'clicking and dragging on the track respects the step' , ( ) => {
470
- let defaultColor = parseColor ( 'hsl(0, 100%, 50%)' ) ;
471
- let { getByRole} = render ( < ColorSlider channel = "saturation" defaultValue = { defaultColor } onChange = { onChangeSpy } step = { 25 } /> ) ;
472
- let slider = getByRole ( 'slider' ) ;
473
- let thumb = slider . parentElement ;
474
- let container = getByRole ( 'group' ) ;
475
-
476
- start ( container , { pageX : 30 } ) ;
477
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
478
- expect ( onChangeSpy . mock . calls [ 0 ] [ 0 ] . toString ( 'hsla' ) ) . toBe ( defaultColor . withChannelValue ( 'saturation' , 25 ) . toString ( 'hsla' ) ) ;
479
- move ( thumb , { pageX : 50 } ) ;
480
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
481
- expect ( onChangeSpy . mock . calls [ 1 ] [ 0 ] . toString ( 'hsla' ) ) . toBe ( defaultColor . withChannelValue ( 'saturation' , 50 ) . toString ( 'hsla' ) ) ;
482
- end ( thumb , { pageX : 50 } ) ;
483
- expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
484
- } ) ;
485
490
} ) ;
486
491
} ) ;
0 commit comments