@@ -22,6 +22,7 @@ describe('MdSlider', () => {
2222 SliderWithAutoTickInterval ,
2323 SliderWithSetTickInterval ,
2424 SliderWithThumbLabel ,
25+ SliderWithOneWayBinding ,
2526 SliderWithTwoWayBinding ,
2627 ] ,
2728 providers : [
@@ -621,6 +622,54 @@ describe('MdSlider', () => {
621622
622623 // TODO: Add tests for ng-pristine, ng-touched, ng-invalid.
623624 } ) ;
625+
626+ describe ( 'slider with value property binding' , ( ) => {
627+ let fixture : ComponentFixture < SliderWithOneWayBinding > ;
628+ let sliderDebugElement : DebugElement ;
629+ let sliderNativeElement : HTMLElement ;
630+ let sliderInstance : MdSlider ;
631+ let sliderTrackElement : HTMLElement ;
632+ let testComponent : SliderWithOneWayBinding ;
633+ let trackFillElement : HTMLElement ;
634+ let thumbElement : HTMLElement ;
635+ let sliderDimensions : ClientRect ;
636+
637+ beforeEach ( ( ) => {
638+ fixture = TestBed . createComponent ( SliderWithOneWayBinding ) ;
639+ fixture . detectChanges ( ) ;
640+
641+ testComponent = fixture . debugElement . componentInstance ;
642+
643+ sliderDebugElement = fixture . debugElement . query ( By . directive ( MdSlider ) ) ;
644+ sliderNativeElement = sliderDebugElement . nativeElement ;
645+ sliderInstance = sliderDebugElement . injector . get ( MdSlider ) ;
646+ sliderTrackElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track' ) ;
647+ trackFillElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track-fill' ) ;
648+ thumbElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-thumb-position' ) ;
649+ sliderDimensions = sliderTrackElement . getBoundingClientRect ( ) ;
650+ } ) ;
651+
652+ it ( 'should initialize based on bound value' , ( ) => {
653+ let trackFillDimensions = trackFillElement . getBoundingClientRect ( ) ;
654+ let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
655+ let thumbPosition = thumbDimensions . left - trackFillDimensions . left ;
656+
657+ expect ( sliderInstance . value ) . toBe ( 50 ) ;
658+ expect ( thumbPosition ) . toBe ( sliderDimensions . width / 2 ) ;
659+ } ) ;
660+
661+ it ( 'should update when bound value changes' , ( ) => {
662+ testComponent . val = 75 ;
663+ fixture . detectChanges ( ) ;
664+
665+ let trackFillDimensions = trackFillElement . getBoundingClientRect ( ) ;
666+ let thumbDimensions = thumbElement . getBoundingClientRect ( ) ;
667+ let thumbPosition = thumbDimensions . left - trackFillDimensions . left ;
668+
669+ expect ( sliderInstance . value ) . toBe ( 75 ) ;
670+ expect ( thumbPosition ) . toBe ( sliderDimensions . width * 3 / 4 ) ;
671+ } ) ;
672+ } ) ;
624673} ) ;
625674
626675// The transition has to be removed in order to test the updated positions without setTimeout.
@@ -671,6 +720,13 @@ class SliderWithSetTickInterval { }
671720} )
672721class SliderWithThumbLabel { }
673722
723+ @Component ( {
724+ template : `<md-slider [value]="val"></md-slider>`
725+ } )
726+ class SliderWithOneWayBinding {
727+ val = 50 ;
728+ }
729+
674730@Component ( {
675731 template : `<md-slider [formControl]="control"></md-slider>`
676732} )
0 commit comments