1
1
import { async , ComponentFixture , TestBed } from '@angular/core/testing' ;
2
- import { ReactiveFormsModule , FormControl } from '@angular/forms' ;
2
+ import { ReactiveFormsModule , FormControl , FormsModule } from '@angular/forms' ;
3
3
import { Component , DebugElement } from '@angular/core' ;
4
4
import { By , HAMMER_GESTURE_CONFIG } from '@angular/platform-browser' ;
5
5
import { MdSlider , MdSliderModule } from './slider' ;
@@ -22,7 +22,7 @@ describe('MdSlider', () => {
22
22
23
23
beforeEach ( async ( ( ) => {
24
24
TestBed . configureTestingModule ( {
25
- imports : [ MdSliderModule . forRoot ( ) , RtlModule . forRoot ( ) , ReactiveFormsModule ] ,
25
+ imports : [ MdSliderModule . forRoot ( ) , RtlModule . forRoot ( ) , ReactiveFormsModule , FormsModule ] ,
26
26
declarations : [
27
27
StandardSlider ,
28
28
DisabledSlider ,
@@ -33,7 +33,8 @@ describe('MdSlider', () => {
33
33
SliderWithSetTickInterval ,
34
34
SliderWithThumbLabel ,
35
35
SliderWithOneWayBinding ,
36
- SliderWithTwoWayBinding ,
36
+ SliderWithFormControl ,
37
+ SliderWithNgModel ,
37
38
SliderWithValueSmallerThanMin ,
38
39
SliderWithValueGreaterThanMax ,
39
40
SliderWithChangeHandler ,
@@ -585,15 +586,15 @@ describe('MdSlider', () => {
585
586
} ) ;
586
587
587
588
describe ( 'slider as a custom form control' , ( ) => {
588
- let fixture : ComponentFixture < SliderWithTwoWayBinding > ;
589
+ let fixture : ComponentFixture < SliderWithFormControl > ;
589
590
let sliderDebugElement : DebugElement ;
590
591
let sliderNativeElement : HTMLElement ;
591
592
let sliderInstance : MdSlider ;
592
593
let sliderWrapperElement : HTMLElement ;
593
- let testComponent : SliderWithTwoWayBinding ;
594
+ let testComponent : SliderWithFormControl ;
594
595
595
596
beforeEach ( ( ) => {
596
- fixture = TestBed . createComponent ( SliderWithTwoWayBinding ) ;
597
+ fixture = TestBed . createComponent ( SliderWithFormControl ) ;
597
598
fixture . detectChanges ( ) ;
598
599
599
600
testComponent = fixture . debugElement . componentInstance ;
@@ -684,7 +685,54 @@ describe('MdSlider', () => {
684
685
expect ( sliderControl . pristine ) . toBe ( false ) ;
685
686
expect ( sliderControl . touched ) . toBe ( true ) ;
686
687
} ) ;
688
+ } ) ;
689
+
690
+ describe ( 'slider with ngModel' , ( ) => {
691
+ let fixture : ComponentFixture < SliderWithNgModel > ;
692
+ let sliderDebugElement : DebugElement ;
693
+ let sliderNativeElement : HTMLElement ;
694
+ let sliderInstance : MdSlider ;
695
+ let sliderWrapperElement : HTMLElement ;
696
+ let testComponent : SliderWithNgModel ;
697
+
698
+ beforeEach ( ( ) => {
699
+ fixture = TestBed . createComponent ( SliderWithNgModel ) ;
700
+ fixture . detectChanges ( ) ;
701
+
702
+ testComponent = fixture . debugElement . componentInstance ;
703
+
704
+ sliderDebugElement = fixture . debugElement . query ( By . directive ( MdSlider ) ) ;
705
+ sliderNativeElement = sliderDebugElement . nativeElement ;
706
+ sliderInstance = sliderDebugElement . injector . get ( MdSlider ) ;
707
+ sliderWrapperElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-wrapper' ) ;
708
+ } ) ;
709
+
710
+ it ( 'should update the model on click' , ( ) => {
711
+ expect ( testComponent . val ) . toBe ( 0 ) ;
687
712
713
+ dispatchClickEventSequence ( sliderNativeElement , 0.76 ) ;
714
+ fixture . detectChanges ( ) ;
715
+
716
+ expect ( testComponent . val ) . toBe ( 76 ) ;
717
+ } ) ;
718
+
719
+ it ( 'should update the model on slide' , ( ) => {
720
+ expect ( testComponent . val ) . toBe ( 0 ) ;
721
+
722
+ dispatchSlideEventSequence ( sliderNativeElement , 0 , 0.19 , gestureConfig ) ;
723
+ fixture . detectChanges ( ) ;
724
+
725
+ expect ( testComponent . val ) . toBe ( 19 ) ;
726
+ } ) ;
727
+
728
+ it ( 'should update the model on keydown' , ( ) => {
729
+ expect ( testComponent . val ) . toBe ( 0 ) ;
730
+
731
+ dispatchKeydownEvent ( sliderNativeElement , UP_ARROW ) ;
732
+ fixture . detectChanges ( ) ;
733
+
734
+ expect ( testComponent . val ) . toBe ( 1 ) ;
735
+ } ) ;
688
736
} ) ;
689
737
690
738
describe ( 'slider with value property binding' , ( ) => {
@@ -1222,10 +1270,18 @@ class SliderWithOneWayBinding {
1222
1270
template : `<md-slider [formControl]="control"></md-slider>` ,
1223
1271
styles : [ styles ] ,
1224
1272
} )
1225
- class SliderWithTwoWayBinding {
1273
+ class SliderWithFormControl {
1226
1274
control = new FormControl ( 0 ) ;
1227
1275
}
1228
1276
1277
+ @Component ( {
1278
+ template : `<md-slider [(ngModel)]="val"></md-slider>` ,
1279
+ styles : [ styles ] ,
1280
+ } )
1281
+ class SliderWithNgModel {
1282
+ val = 0 ;
1283
+ }
1284
+
1229
1285
@Component ( {
1230
1286
template : `<md-slider value="3" min="4" max="6"></md-slider>` ,
1231
1287
styles : [ styles ] ,
0 commit comments