@@ -38,6 +38,7 @@ describe('MdSlider', () => {
3838 SliderWithValueGreaterThanMax ,
3939 SliderWithChangeHandler ,
4040 SliderWithDirAndInvert ,
41+ VerticalSlider ,
4142 ] ,
4243 providers : [
4344 { provide : HAMMER_GESTURE_CONFIG , useFactory : ( ) => {
@@ -957,12 +958,73 @@ describe('MdSlider', () => {
957958 expect ( sliderInstance . value ) . toBe ( 1 ) ;
958959 } ) ;
959960 } ) ;
961+
962+ describe ( 'vertical slider' , ( ) => {
963+ let fixture : ComponentFixture < VerticalSlider > ;
964+ let sliderDebugElement : DebugElement ;
965+ let sliderNativeElement : HTMLElement ;
966+ let sliderTrackElement : HTMLElement ;
967+ let trackFillElement : HTMLElement ;
968+ let sliderInstance : MdSlider ;
969+ let testComponent : VerticalSlider ;
970+
971+ beforeEach ( ( ) => {
972+ fixture = TestBed . createComponent ( VerticalSlider ) ;
973+ fixture . detectChanges ( ) ;
974+
975+ testComponent = fixture . debugElement . componentInstance ;
976+ sliderDebugElement = fixture . debugElement . query ( By . directive ( MdSlider ) ) ;
977+ sliderInstance = sliderDebugElement . injector . get ( MdSlider ) ;
978+ sliderNativeElement = sliderDebugElement . nativeElement ;
979+ sliderTrackElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track' ) ;
980+ trackFillElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track-fill' ) ;
981+ } ) ;
982+
983+ it ( 'updates value on click' , ( ) => {
984+ dispatchClickEventSequence ( sliderNativeElement , 0.3 ) ;
985+ fixture . detectChanges ( ) ;
986+
987+ expect ( sliderInstance . value ) . toBe ( 70 ) ;
988+ } ) ;
989+
990+ it ( 'updates value on click in inverted mode' , ( ) => {
991+ testComponent . invert = true ;
992+ fixture . detectChanges ( ) ;
993+
994+ dispatchClickEventSequence ( sliderNativeElement , 0.3 ) ;
995+ fixture . detectChanges ( ) ;
996+
997+ expect ( sliderInstance . value ) . toBe ( 30 ) ;
998+ } ) ;
999+
1000+ it ( 'should update the track fill on click' , ( ) => {
1001+ expect ( trackFillElement . style . transform ) . toBe ( 'scaleY(0)' ) ;
1002+
1003+ dispatchClickEventSequence ( sliderNativeElement , 0.39 ) ;
1004+ fixture . detectChanges ( ) ;
1005+
1006+ expect ( trackFillElement . style . transform ) . toBe ( 'scaleY(0.61)' ) ;
1007+ } ) ;
1008+
1009+ it ( 'should update the track fill on click in inverted mode' , ( ) => {
1010+ testComponent . invert = true ;
1011+ fixture . detectChanges ( ) ;
1012+
1013+ expect ( trackFillElement . style . transform ) . toBe ( 'scaleY(0)' ) ;
1014+
1015+ dispatchClickEventSequence ( sliderNativeElement , 0.39 ) ;
1016+ fixture . detectChanges ( ) ;
1017+
1018+ expect ( trackFillElement . style . transform ) . toBe ( 'scaleY(0.39)' ) ;
1019+ } ) ;
1020+ } ) ;
9601021} ) ;
9611022
9621023// Disable animations and make the slider an even 100px (+ 8px padding on either side)
9631024// so we get nice round values in tests.
9641025const styles = `
965- md-slider { min-width: 116px !important; }
1026+ .md-slider-horizontal { min-width: 116px !important; }
1027+ .md-slider-vertical { min-height: 116px !important; }
9661028 .md-slider-track-fill { transition: none !important; }
9671029` ;
9681030
@@ -1062,6 +1124,14 @@ class SliderWithDirAndInvert {
10621124 invert = false ;
10631125}
10641126
1127+ @Component ( {
1128+ template : `<md-slider vertical [invert]="invert"></md-slider>` ,
1129+ styles : [ styles ] ,
1130+ } )
1131+ class VerticalSlider {
1132+ invert = false ;
1133+ }
1134+
10651135/**
10661136 * Dispatches a click event sequence (consisting of moueseenter, click) from an element.
10671137 * Note: The mouse event truncates the position for the click.
@@ -1072,8 +1142,8 @@ class SliderWithDirAndInvert {
10721142function dispatchClickEventSequence ( sliderElement : HTMLElement , percentage : number ) : void {
10731143 let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
10741144 let dimensions = trackElement . getBoundingClientRect ( ) ;
1075- let y = dimensions . top ;
10761145 let x = dimensions . left + ( dimensions . width * percentage ) ;
1146+ let y = dimensions . top + ( dimensions . height * percentage ) ;
10771147
10781148 dispatchMouseenterEvent ( sliderElement ) ;
10791149
@@ -1110,9 +1180,10 @@ function dispatchSlideEvent(sliderElement: HTMLElement, percent: number,
11101180 let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
11111181 let dimensions = trackElement . getBoundingClientRect ( ) ;
11121182 let x = dimensions . left + ( dimensions . width * percent ) ;
1183+ let y = dimensions . top + ( dimensions . height * percent ) ;
11131184
11141185 gestureConfig . emitEventForElement ( 'slide' , sliderElement , {
1115- center : { x : x } ,
1186+ center : { x : x , y : y } ,
11161187 srcEvent : { preventDefault : jasmine . createSpy ( 'preventDefault' ) }
11171188 } ) ;
11181189}
@@ -1128,11 +1199,12 @@ function dispatchSlideStartEvent(sliderElement: HTMLElement, percent: number,
11281199 let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
11291200 let dimensions = trackElement . getBoundingClientRect ( ) ;
11301201 let x = dimensions . left + ( dimensions . width * percent ) ;
1202+ let y = dimensions . top + ( dimensions . height * percent ) ;
11311203
11321204 dispatchMouseenterEvent ( sliderElement ) ;
11331205
11341206 gestureConfig . emitEventForElement ( 'slidestart' , sliderElement , {
1135- center : { x : x } ,
1207+ center : { x : x , y : y } ,
11361208 srcEvent : { preventDefault : jasmine . createSpy ( 'preventDefault' ) }
11371209 } ) ;
11381210}
@@ -1148,9 +1220,10 @@ function dispatchSlideEndEvent(sliderElement: HTMLElement, percent: number,
11481220 let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
11491221 let dimensions = trackElement . getBoundingClientRect ( ) ;
11501222 let x = dimensions . left + ( dimensions . width * percent ) ;
1223+ let y = dimensions . top + ( dimensions . height * percent ) ;
11511224
11521225 gestureConfig . emitEventForElement ( 'slideend' , sliderElement , {
1153- center : { x : x } ,
1226+ center : { x : x , y : y } ,
11541227 srcEvent : { preventDefault : jasmine . createSpy ( 'preventDefault' ) }
11551228 } ) ;
11561229}
0 commit comments