@@ -4,14 +4,16 @@ import {Component, DebugElement} from '@angular/core';
44import { By , HAMMER_GESTURE_CONFIG } from '@angular/platform-browser' ;
55import { MdSlider , MdSliderModule } from './slider' ;
66import { TestGestureConfig } from './test-gesture-config' ;
7+ import { RtlModule } from '../core/rtl/dir' ;
78import {
89 UP_ARROW ,
910 RIGHT_ARROW ,
1011 DOWN_ARROW ,
1112 PAGE_DOWN ,
1213 PAGE_UP ,
1314 END ,
14- HOME , LEFT_ARROW
15+ HOME ,
16+ LEFT_ARROW
1517} from '../core/keyboard/keycodes' ;
1618
1719
@@ -20,7 +22,7 @@ describe('MdSlider', () => {
2022
2123 beforeEach ( async ( ( ) => {
2224 TestBed . configureTestingModule ( {
23- imports : [ MdSliderModule . forRoot ( ) , ReactiveFormsModule ] ,
25+ imports : [ MdSliderModule . forRoot ( ) , RtlModule . forRoot ( ) , ReactiveFormsModule ] ,
2426 declarations : [
2527 StandardSlider ,
2628 DisabledSlider ,
@@ -35,6 +37,7 @@ describe('MdSlider', () => {
3537 SliderWithValueSmallerThanMin ,
3638 SliderWithValueGreaterThanMax ,
3739 SliderWithChangeHandler ,
40+ SliderWithDirAndInvert ,
3841 ] ,
3942 providers : [
4043 { provide : HAMMER_GESTURE_CONFIG , useFactory : ( ) => {
@@ -838,6 +841,122 @@ describe('MdSlider', () => {
838841 expect ( sliderInstance . value ) . toBe ( 0 ) ;
839842 } ) ;
840843 } ) ;
844+
845+ describe ( 'slider with direction and invert' , ( ) => {
846+ let fixture : ComponentFixture < SliderWithDirAndInvert > ;
847+ let sliderDebugElement : DebugElement ;
848+ let sliderNativeElement : HTMLElement ;
849+ let sliderTrackElement : HTMLElement ;
850+ let sliderInstance : MdSlider ;
851+ let testComponent : SliderWithDirAndInvert ;
852+
853+ beforeEach ( ( ) => {
854+ fixture = TestBed . createComponent ( SliderWithDirAndInvert ) ;
855+ fixture . detectChanges ( ) ;
856+
857+ testComponent = fixture . debugElement . componentInstance ;
858+ sliderDebugElement = fixture . debugElement . query ( By . directive ( MdSlider ) ) ;
859+ sliderInstance = sliderDebugElement . injector . get ( MdSlider ) ;
860+ sliderNativeElement = sliderDebugElement . nativeElement ;
861+ sliderTrackElement = < HTMLElement > sliderNativeElement . querySelector ( '.md-slider-track' ) ;
862+ } ) ;
863+
864+ it ( 'works in inverted mode' , ( ) => {
865+ testComponent . invert = true ;
866+ fixture . detectChanges ( ) ;
867+
868+ dispatchClickEventSequence ( sliderNativeElement , 0.3 ) ;
869+ fixture . detectChanges ( ) ;
870+
871+ expect ( sliderInstance . value ) . toBe ( 70 ) ;
872+ } ) ;
873+
874+ it ( 'works in RTL languages' , ( ) => {
875+ testComponent . dir = 'rtl' ;
876+ fixture . detectChanges ( ) ;
877+
878+ dispatchClickEventSequence ( sliderNativeElement , 0.3 ) ;
879+ fixture . detectChanges ( ) ;
880+
881+ expect ( sliderInstance . value ) . toBe ( 70 ) ;
882+ } ) ;
883+
884+ it ( 'works in RTL languages in inverted mode' , ( ) => {
885+ testComponent . dir = 'rtl' ;
886+ testComponent . invert = true ;
887+ fixture . detectChanges ( ) ;
888+
889+ dispatchClickEventSequence ( sliderNativeElement , 0.3 ) ;
890+ fixture . detectChanges ( ) ;
891+
892+ expect ( sliderInstance . value ) . toBe ( 30 ) ;
893+ } ) ;
894+
895+ it ( 'should decrement inverted slider by 1 on right arrow pressed' , ( ) => {
896+ testComponent . invert = true ;
897+ sliderInstance . value = 100 ;
898+ fixture . detectChanges ( ) ;
899+
900+ dispatchKeydownEvent ( sliderNativeElement , RIGHT_ARROW ) ;
901+ fixture . detectChanges ( ) ;
902+
903+ expect ( sliderInstance . value ) . toBe ( 99 ) ;
904+ } ) ;
905+
906+ it ( 'should increment inverted slider by 1 on left arrow pressed' , ( ) => {
907+ testComponent . invert = true ;
908+ fixture . detectChanges ( ) ;
909+
910+ dispatchKeydownEvent ( sliderNativeElement , LEFT_ARROW ) ;
911+ fixture . detectChanges ( ) ;
912+
913+ expect ( sliderInstance . value ) . toBe ( 1 ) ;
914+ } ) ;
915+
916+ it ( 'should decrement RTL slider by 1 on right arrow pressed' , ( ) => {
917+ testComponent . dir = 'rtl' ;
918+ sliderInstance . value = 100 ;
919+ fixture . detectChanges ( ) ;
920+
921+ dispatchKeydownEvent ( sliderNativeElement , RIGHT_ARROW ) ;
922+ fixture . detectChanges ( ) ;
923+
924+ expect ( sliderInstance . value ) . toBe ( 99 ) ;
925+ } ) ;
926+
927+ it ( 'should increment RTL slider by 1 on left arrow pressed' , ( ) => {
928+ testComponent . dir = 'rtl' ;
929+ fixture . detectChanges ( ) ;
930+
931+ dispatchKeydownEvent ( sliderNativeElement , LEFT_ARROW ) ;
932+ fixture . detectChanges ( ) ;
933+
934+ expect ( sliderInstance . value ) . toBe ( 1 ) ;
935+ } ) ;
936+
937+ it ( 'should increment inverted RTL slider by 1 on right arrow pressed' , ( ) => {
938+ testComponent . dir = 'rtl' ;
939+ testComponent . invert = true ;
940+ fixture . detectChanges ( ) ;
941+
942+ dispatchKeydownEvent ( sliderNativeElement , RIGHT_ARROW ) ;
943+ fixture . detectChanges ( ) ;
944+
945+ expect ( sliderInstance . value ) . toBe ( 1 ) ;
946+ } ) ;
947+
948+ it ( 'should decrement inverted RTL slider by 1 on left arrow pressed' , ( ) => {
949+ testComponent . dir = 'rtl' ;
950+ testComponent . invert = true ;
951+ sliderInstance . value = 100 ;
952+ fixture . detectChanges ( ) ;
953+
954+ dispatchKeydownEvent ( sliderNativeElement , LEFT_ARROW ) ;
955+ fixture . detectChanges ( ) ;
956+
957+ expect ( sliderInstance . value ) . toBe ( 99 ) ;
958+ } ) ;
959+ } ) ;
841960} ) ;
842961
843962// Disable animations and make the slider an even 100px (+ 8px padding on either side)
@@ -934,6 +1053,15 @@ class SliderWithChangeHandler {
9341053 onChange ( ) { }
9351054}
9361055
1056+ @Component ( {
1057+ template : `<div [dir]="dir"><md-slider [invert]="invert"></md-slider></div>` ,
1058+ styles : [ styles ] ,
1059+ } )
1060+ class SliderWithDirAndInvert {
1061+ dir = 'ltr' ;
1062+ invert = false ;
1063+ }
1064+
9371065/**
9381066 * Dispatches a click event sequence (consisting of moueseenter, click) from an element.
9391067 * Note: The mouse event truncates the position for the click.
0 commit comments