@@ -5,6 +5,7 @@ import {ComponentFixture, fakeAsync, flushMicrotasks, TestBed, tick} from '@angu
5
5
import { FormControl , FormsModule , NgModel , ReactiveFormsModule } from '@angular/forms' ;
6
6
import { defaultRippleAnimationConfig } from '@angular/material/core' ;
7
7
import { By , HAMMER_GESTURE_CONFIG } from '@angular/platform-browser' ;
8
+ import { BidiModule , Direction } from '@angular/cdk/bidi' ;
8
9
import { TestGestureConfig } from '../slider/test-gesture-config' ;
9
10
import { MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS } from './slide-toggle-config' ;
10
11
import { MatSlideToggle , MatSlideToggleChange , MatSlideToggleModule } from './index' ;
@@ -18,7 +19,7 @@ describe('MatSlideToggle without forms', () => {
18
19
mutationObserverCallbacks = [ ] ;
19
20
20
21
TestBed . configureTestingModule ( {
21
- imports : [ MatSlideToggleModule ] ,
22
+ imports : [ MatSlideToggleModule , BidiModule ] ,
22
23
declarations : [
23
24
SlideToggleBasic ,
24
25
SlideToggleWithTabindexAttr ,
@@ -493,6 +494,29 @@ describe('MatSlideToggle without forms', () => {
493
494
expect ( slideThumbContainer . classList ) . not . toContain ( 'mat-dragging' ) ;
494
495
} ) ) ;
495
496
497
+ it ( 'should drag from start to end in RTL' , fakeAsync ( ( ) => {
498
+ testComponent . direction = 'rtl' ;
499
+ fixture . detectChanges ( ) ;
500
+
501
+ expect ( slideToggle . checked ) . toBe ( false ) ;
502
+
503
+ gestureConfig . emitEventForElement ( 'slidestart' , slideThumbContainer ) ;
504
+
505
+ expect ( slideThumbContainer . classList ) . toContain ( 'mat-dragging' ) ;
506
+
507
+ gestureConfig . emitEventForElement ( 'slide' , slideThumbContainer , {
508
+ deltaX : - 200 // Arbitrary, large delta that will be clamped to the end of the slide-toggle.
509
+ } ) ;
510
+
511
+ gestureConfig . emitEventForElement ( 'slideend' , slideThumbContainer ) ;
512
+
513
+ // Flush the timeout for the slide ending.
514
+ tick ( ) ;
515
+
516
+ expect ( slideToggle . checked ) . toBe ( true ) ;
517
+ expect ( slideThumbContainer . classList ) . not . toContain ( 'mat-dragging' ) ;
518
+ } ) ) ;
519
+
496
520
it ( 'should drag from end to start' , fakeAsync ( ( ) => {
497
521
slideToggle . checked = true ;
498
522
@@ -513,6 +537,29 @@ describe('MatSlideToggle without forms', () => {
513
537
expect ( slideThumbContainer . classList ) . not . toContain ( 'mat-dragging' ) ;
514
538
} ) ) ;
515
539
540
+ it ( 'should drag from end to start in RTL' , fakeAsync ( ( ) => {
541
+ testComponent . direction = 'rtl' ;
542
+ fixture . detectChanges ( ) ;
543
+
544
+ slideToggle . checked = true ;
545
+
546
+ gestureConfig . emitEventForElement ( 'slidestart' , slideThumbContainer ) ;
547
+
548
+ expect ( slideThumbContainer . classList ) . toContain ( 'mat-dragging' ) ;
549
+
550
+ gestureConfig . emitEventForElement ( 'slide' , slideThumbContainer , {
551
+ deltaX : 200 // Arbitrary, large delta that will be clamped to the end of the slide-toggle.
552
+ } ) ;
553
+
554
+ gestureConfig . emitEventForElement ( 'slideend' , slideThumbContainer ) ;
555
+
556
+ // Flush the timeout for the slide ending.
557
+ tick ( ) ;
558
+
559
+ expect ( slideToggle . checked ) . toBe ( false ) ;
560
+ expect ( slideThumbContainer . classList ) . not . toContain ( 'mat-dragging' ) ;
561
+ } ) ) ;
562
+
516
563
it ( 'should not drag when disabled' , fakeAsync ( ( ) => {
517
564
slideToggle . disabled = true ;
518
565
@@ -943,7 +990,7 @@ describe('MatSlideToggle with forms', () => {
943
990
944
991
@Component ( {
945
992
template : `
946
- <mat-slide-toggle [required]="isRequired"
993
+ <mat-slide-toggle [dir]="direction" [ required]="isRequired"
947
994
[disabled]="isDisabled"
948
995
[color]="slideColor"
949
996
[id]="slideId"
@@ -976,6 +1023,7 @@ class SlideToggleBasic {
976
1023
labelPosition : string ;
977
1024
toggleTriggered : number = 0 ;
978
1025
dragTriggered : number = 0 ;
1026
+ direction : Direction = 'ltr' ;
979
1027
980
1028
onSlideClick : ( event ?: Event ) => void = ( ) => { } ;
981
1029
onSlideChange = ( event : MatSlideToggleChange ) => this . lastEvent = event ;
0 commit comments