@@ -138,37 +138,6 @@ describe('MdSlider', () => {
138
138
expect ( thumbDimensions . left ) . toBe ( sliderDimensions . width * 0.5 + sliderDimensions . left ) ;
139
139
} ) ;
140
140
141
- it ( 'should update the track fill on drag' , ( ) => {
142
- let trackFillElement = sliderNativeElement . querySelector ( '.md-slider-track-fill' ) ;
143
- let trackFillDimensions = trackFillElement . getBoundingClientRect ( ) ;
144
- let sliderDimensions =
145
- sliderNativeElement . querySelector ( '.md-slider-track' ) . getBoundingClientRect ( ) ;
146
-
147
- expect ( trackFillDimensions . width ) . toBe ( 0 ) ;
148
- dispatchDragEvent ( sliderNativeElement , 0 , 0.5 , gestureConfig ) ;
149
-
150
- trackFillDimensions = trackFillElement . getBoundingClientRect ( ) ;
151
- expect ( trackFillDimensions . width ) . toBe ( sliderDimensions . width * 0.5 ) ;
152
- } ) ;
153
-
154
- it ( 'should update the thumb position on drag' , ( ) => {
155
- let thumbElement = sliderNativeElement . querySelector ( '.md-slider-thumb-position' ) ;
156
- let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
157
- let thumbWidth =
158
- sliderNativeElement . querySelector ( '.md-slider-thumb' ) . getBoundingClientRect ( ) . width ;
159
- let sliderDimensions =
160
- sliderNativeElement . querySelector ( '.md-slider-track' ) . getBoundingClientRect ( ) ;
161
-
162
- expect ( thumbDimensions . left ) . toBe ( sliderDimensions . left - ( thumbWidth / 2 ) ) ;
163
- dispatchDragEvent ( sliderNativeElement , 0 , 0.5 , gestureConfig ) ;
164
-
165
- thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
166
- // The thumb's offset is expected to be equal to the slider's offset + half the slider's width
167
- // (from the click event) - half the thumb width (to center the thumb).
168
- let offset = sliderDimensions . left + ( sliderDimensions . width * 0.5 ) - ( thumbWidth / 2 ) ;
169
- expect ( thumbDimensions . left ) . toBe ( offset ) ;
170
- } ) ;
171
-
172
141
it ( 'should add the md-slider-active class on click' , ( ) => {
173
142
let containerElement = sliderNativeElement . querySelector ( '.md-slider-container' ) ;
174
143
expect ( containerElement . classList ) . not . toContain ( 'md-slider-active' ) ;
@@ -319,8 +288,9 @@ describe('MdSlider', () => {
319
288
let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
320
289
let thumbPosition = thumbDimensions . left - trackFillDimensions . left ;
321
290
322
- expect ( Math . round ( trackFillDimensions . width ) ) . toEqual ( Math . round ( thumbPosition ) ) ;
291
+ // The closest snap is halfway on the slider.
323
292
expect ( thumbDimensions . left ) . toBe ( sliderDimensions . width * 0.5 + sliderDimensions . left ) ;
293
+ expect ( Math . round ( trackFillDimensions . width ) ) . toEqual ( Math . round ( thumbPosition ) ) ;
324
294
} ) ;
325
295
326
296
it ( 'should snap the thumb and fill to the nearest value on drag' , ( ) => {
@@ -334,8 +304,10 @@ describe('MdSlider', () => {
334
304
let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
335
305
let thumbPosition = thumbDimensions . left - trackFillDimensions . left ;
336
306
337
- expect ( Math . round ( trackFillDimensions . width ) ) . toEqual ( Math . round ( thumbPosition ) ) ;
307
+ // The closest snap is at the beginning of the slider.
338
308
expect ( thumbDimensions . left ) . toBe ( sliderDimensions . left ) ;
309
+ expect ( Math . round ( trackFillDimensions . width ) ) . toEqual ( Math . round ( thumbPosition ) ) ;
310
+
339
311
} ) ;
340
312
} ) ;
341
313
@@ -374,6 +346,77 @@ describe('MdSlider', () => {
374
346
expect ( sliderInstance . value ) . toBe ( 32 ) ;
375
347
} ) ;
376
348
} ) ;
349
+
350
+ describe ( 'slider with set step' , ( ) => {
351
+ let fixture : ComponentFixture < SliderWithStep > ;
352
+ let sliderDebugElement : DebugElement ;
353
+ let sliderNativeElement : HTMLElement ;
354
+ let sliderInstance : MdSlider ;
355
+ let sliderTrackElement : HTMLElement ;
356
+ let sliderDimensions : ClientRect ;
357
+ let trackFillElement : HTMLElement ;
358
+ let thumbElement : HTMLElement ;
359
+
360
+ beforeEach ( async ( ( ) => {
361
+ builder . createAsync ( SliderWithStep ) . then ( f => {
362
+ fixture = f ;
363
+ fixture . detectChanges ( ) ;
364
+
365
+ sliderDebugElement = fixture . debugElement . query ( By . directive ( MdSlider ) ) ;
366
+ sliderNativeElement = sliderDebugElement . nativeElement ;
367
+ sliderInstance = sliderDebugElement . injector . get ( MdSlider ) ;
368
+ sliderTrackElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track' ) ;
369
+ sliderDimensions = sliderTrackElement . getBoundingClientRect ( ) ;
370
+ trackFillElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track-fill' ) ;
371
+ thumbElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-thumb-position' ) ;
372
+ } ) ;
373
+ } ) ) ;
374
+
375
+ it ( 'should set the correct step value on click' , ( ) => {
376
+ expect ( sliderInstance . value ) . toBe ( 0 ) ;
377
+
378
+ dispatchClickEvent ( sliderTrackElement , 0.13 ) ;
379
+ fixture . detectChanges ( ) ;
380
+
381
+ expect ( sliderInstance . value ) . toBe ( 25 ) ;
382
+ } ) ;
383
+
384
+ it ( 'should snap the thumb and fill to a step on click' , ( ) => {
385
+ dispatchClickEvent ( sliderNativeElement , 0.66 ) ;
386
+ fixture . detectChanges ( ) ;
387
+
388
+ let trackFillDimensions = trackFillElement . getBoundingClientRect ( ) ;
389
+ let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
390
+ let thumbPosition = thumbDimensions . left - trackFillDimensions . left ;
391
+
392
+ // The closest step is at 75% of the slider.
393
+ expect ( thumbDimensions . left ) . toBe ( sliderDimensions . width * 0.75 + sliderDimensions . left ) ;
394
+ expect ( Math . round ( trackFillDimensions . width ) ) . toEqual ( Math . round ( thumbPosition ) ) ;
395
+ } ) ;
396
+
397
+ it ( 'should set the correct step value on drag' , ( ) => {
398
+ dispatchDragEvent ( sliderTrackElement , sliderNativeElement , 0 , 0.07 , gestureConfig ) ;
399
+ fixture . detectChanges ( ) ;
400
+
401
+ expect ( sliderInstance . value ) . toBe ( 0 ) ;
402
+ } ) ;
403
+
404
+ it ( 'should snap the thumb and fill to a step on drag' , ( ) => {
405
+ dispatchDragStartEvent ( sliderNativeElement , 0 , gestureConfig ) ;
406
+ fixture . detectChanges ( ) ;
407
+
408
+ dispatchDragEndEvent ( sliderNativeElement , 0.88 , gestureConfig ) ;
409
+ fixture . detectChanges ( ) ;
410
+
411
+ let trackFillDimensions = trackFillElement . getBoundingClientRect ( ) ;
412
+ let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
413
+ let thumbPosition = thumbDimensions . left - trackFillDimensions . left ;
414
+
415
+ // The closest snap is at the beginning of the slider.
416
+ expect ( thumbDimensions . left ) . toBe ( sliderDimensions . width + sliderDimensions . left ) ;
417
+ expect ( Math . round ( trackFillDimensions . width ) ) . toEqual ( Math . round ( thumbPosition ) ) ;
418
+ } ) ;
419
+ } ) ;
377
420
} ) ;
378
421
379
422
// The transition has to be removed in order to test the updated positions without setTimeout.
@@ -413,6 +456,18 @@ class SliderWithMinAndMax { }
413
456
} )
414
457
class SliderWithValue { }
415
458
459
+ @Component ( {
460
+ directives : [ MD_SLIDER_DIRECTIVES ] ,
461
+ template : `<md-slider step="25"></md-slider>` ,
462
+ styles : [ `
463
+ .md-slider-track-fill, .md-slider-thumb-position {
464
+ transition: none !important;
465
+ }
466
+ ` ] ,
467
+ encapsulation : ViewEncapsulation . None
468
+ } )
469
+ class SliderWithStep { }
470
+
416
471
/**
417
472
* Dispatches a click event from an element.
418
473
* Note: The mouse event truncates the position for the click.
0 commit comments