11import { async , ComponentFixture , TestBed } from '@angular/core/testing' ;
2- import { ReactiveFormsModule , FormControl } from '@angular/forms' ;
2+ import { ReactiveFormsModule , FormControl , FormsModule } from '@angular/forms' ;
33import { Component , DebugElement } from '@angular/core' ;
44import { By , HAMMER_GESTURE_CONFIG } from '@angular/platform-browser' ;
55import { MdSlider , MdSliderModule } from './slider' ;
@@ -22,7 +22,7 @@ describe('MdSlider', () => {
2222
2323 beforeEach ( async ( ( ) => {
2424 TestBed . configureTestingModule ( {
25- imports : [ MdSliderModule . forRoot ( ) , RtlModule . forRoot ( ) , ReactiveFormsModule ] ,
25+ imports : [ MdSliderModule . forRoot ( ) , RtlModule . forRoot ( ) , ReactiveFormsModule , FormsModule ] ,
2626 declarations : [
2727 StandardSlider ,
2828 DisabledSlider ,
@@ -33,7 +33,8 @@ describe('MdSlider', () => {
3333 SliderWithSetTickInterval ,
3434 SliderWithThumbLabel ,
3535 SliderWithOneWayBinding ,
36- SliderWithTwoWayBinding ,
36+ SliderWithFormControl ,
37+ SliderWithNgModel ,
3738 SliderWithValueSmallerThanMin ,
3839 SliderWithValueGreaterThanMax ,
3940 SliderWithChangeHandler ,
@@ -585,15 +586,15 @@ describe('MdSlider', () => {
585586 } ) ;
586587
587588 describe ( 'slider as a custom form control' , ( ) => {
588- let fixture : ComponentFixture < SliderWithTwoWayBinding > ;
589+ let fixture : ComponentFixture < SliderWithFormControl > ;
589590 let sliderDebugElement : DebugElement ;
590591 let sliderNativeElement : HTMLElement ;
591592 let sliderInstance : MdSlider ;
592593 let sliderWrapperElement : HTMLElement ;
593- let testComponent : SliderWithTwoWayBinding ;
594+ let testComponent : SliderWithFormControl ;
594595
595596 beforeEach ( ( ) => {
596- fixture = TestBed . createComponent ( SliderWithTwoWayBinding ) ;
597+ fixture = TestBed . createComponent ( SliderWithFormControl ) ;
597598 fixture . detectChanges ( ) ;
598599
599600 testComponent = fixture . debugElement . componentInstance ;
@@ -684,7 +685,54 @@ describe('MdSlider', () => {
684685 expect ( sliderControl . pristine ) . toBe ( false ) ;
685686 expect ( sliderControl . touched ) . toBe ( true ) ;
686687 } ) ;
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 ) ;
687712
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+ } ) ;
688736 } ) ;
689737
690738 describe ( 'slider with value property binding' , ( ) => {
@@ -1222,10 +1270,18 @@ class SliderWithOneWayBinding {
12221270 template : `<md-slider [formControl]="control"></md-slider>` ,
12231271 styles : [ styles ] ,
12241272} )
1225- class SliderWithTwoWayBinding {
1273+ class SliderWithFormControl {
12261274 control = new FormControl ( 0 ) ;
12271275}
12281276
1277+ @Component ( {
1278+ template : `<md-slider [(ngModel)]="val"></md-slider>` ,
1279+ styles : [ styles ] ,
1280+ } )
1281+ class SliderWithNgModel {
1282+ val = 0 ;
1283+ }
1284+
12291285@Component ( {
12301286 template : `<md-slider value="3" min="4" max="6"></md-slider>` ,
12311287 styles : [ styles ] ,
0 commit comments