@@ -38,6 +38,7 @@ describe('MdSlider', () => {
38
38
SliderWithValueGreaterThanMax ,
39
39
SliderWithChangeHandler ,
40
40
SliderWithDirAndInvert ,
41
+ VerticalSlider ,
41
42
] ,
42
43
providers : [
43
44
{ provide : HAMMER_GESTURE_CONFIG , useFactory : ( ) => {
@@ -957,12 +958,73 @@ describe('MdSlider', () => {
957
958
expect ( sliderInstance . value ) . toBe ( 1 ) ;
958
959
} ) ;
959
960
} ) ;
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
+ } ) ;
960
1021
} ) ;
961
1022
962
1023
// Disable animations and make the slider an even 100px (+ 8px padding on either side)
963
1024
// so we get nice round values in tests.
964
1025
const styles = `
965
- md-slider { min-width: 116px !important; }
1026
+ .md-slider-horizontal { min-width: 116px !important; }
1027
+ .md-slider-vertical { min-height: 116px !important; }
966
1028
.md-slider-track-fill { transition: none !important; }
967
1029
` ;
968
1030
@@ -1062,6 +1124,14 @@ class SliderWithDirAndInvert {
1062
1124
invert = false ;
1063
1125
}
1064
1126
1127
+ @Component ( {
1128
+ template : `<md-slider vertical [invert]="invert"></md-slider>` ,
1129
+ styles : [ styles ] ,
1130
+ } )
1131
+ class VerticalSlider {
1132
+ invert = false ;
1133
+ }
1134
+
1065
1135
/**
1066
1136
* Dispatches a click event sequence (consisting of moueseenter, click) from an element.
1067
1137
* Note: The mouse event truncates the position for the click.
@@ -1072,8 +1142,8 @@ class SliderWithDirAndInvert {
1072
1142
function dispatchClickEventSequence ( sliderElement : HTMLElement , percentage : number ) : void {
1073
1143
let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
1074
1144
let dimensions = trackElement . getBoundingClientRect ( ) ;
1075
- let y = dimensions . top ;
1076
1145
let x = dimensions . left + ( dimensions . width * percentage ) ;
1146
+ let y = dimensions . top + ( dimensions . height * percentage ) ;
1077
1147
1078
1148
dispatchMouseenterEvent ( sliderElement ) ;
1079
1149
@@ -1110,9 +1180,10 @@ function dispatchSlideEvent(sliderElement: HTMLElement, percent: number,
1110
1180
let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
1111
1181
let dimensions = trackElement . getBoundingClientRect ( ) ;
1112
1182
let x = dimensions . left + ( dimensions . width * percent ) ;
1183
+ let y = dimensions . top + ( dimensions . height * percent ) ;
1113
1184
1114
1185
gestureConfig . emitEventForElement ( 'slide' , sliderElement , {
1115
- center : { x : x } ,
1186
+ center : { x : x , y : y } ,
1116
1187
srcEvent : { preventDefault : jasmine . createSpy ( 'preventDefault' ) }
1117
1188
} ) ;
1118
1189
}
@@ -1128,11 +1199,12 @@ function dispatchSlideStartEvent(sliderElement: HTMLElement, percent: number,
1128
1199
let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
1129
1200
let dimensions = trackElement . getBoundingClientRect ( ) ;
1130
1201
let x = dimensions . left + ( dimensions . width * percent ) ;
1202
+ let y = dimensions . top + ( dimensions . height * percent ) ;
1131
1203
1132
1204
dispatchMouseenterEvent ( sliderElement ) ;
1133
1205
1134
1206
gestureConfig . emitEventForElement ( 'slidestart' , sliderElement , {
1135
- center : { x : x } ,
1207
+ center : { x : x , y : y } ,
1136
1208
srcEvent : { preventDefault : jasmine . createSpy ( 'preventDefault' ) }
1137
1209
} ) ;
1138
1210
}
@@ -1148,9 +1220,10 @@ function dispatchSlideEndEvent(sliderElement: HTMLElement, percent: number,
1148
1220
let trackElement = sliderElement . querySelector ( '.md-slider-track' ) ;
1149
1221
let dimensions = trackElement . getBoundingClientRect ( ) ;
1150
1222
let x = dimensions . left + ( dimensions . width * percent ) ;
1223
+ let y = dimensions . top + ( dimensions . height * percent ) ;
1151
1224
1152
1225
gestureConfig . emitEventForElement ( 'slideend' , sliderElement , {
1153
- center : { x : x } ,
1226
+ center : { x : x , y : y } ,
1154
1227
srcEvent : { preventDefault : jasmine . createSpy ( 'preventDefault' ) }
1155
1228
} ) ;
1156
1229
}
0 commit comments