11import { HarnessLoader } from '@angular/cdk-experimental/testing' ;
22import { TestbedHarnessEnvironment } from '@angular/cdk-experimental/testing/testbed' ;
3- import { Component } from '@angular/core' ;
3+ import { Component , CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' ;
44import { ComponentFixture , TestBed } from '@angular/core/testing' ;
55import { MatSliderModule } from '@angular/material/slider' ;
6+ import { MatSliderModule as MatMdcSliderModule } from '../module' ;
7+ import { MatSliderHarness as MatMdcSliderHarness } from './mdc-slider-harness' ;
68import { MatSliderHarness } from './slider-harness' ;
79
810let fixture : ComponentFixture < SliderHarnessTest > ;
@@ -25,18 +27,37 @@ describe('MatSliderHarness', () => {
2527 sliderHarness = MatSliderHarness ;
2628 } ) ;
2729
28- runTests ( ) ;
30+ // Standard slider supports vertical and inverted sliders.
31+ createTests ( true , true ) ;
2932 } ) ;
3033
3134 describe (
3235 'MDC-based' ,
3336 ( ) => {
34- // TODO: run tests for MDC based slider once implemented.
37+ beforeEach ( async ( ) => {
38+ await TestBed
39+ . configureTestingModule ( {
40+ imports : [ MatMdcSliderModule ] ,
41+ declarations : [ SliderHarnessTest ] ,
42+ schemas : [ CUSTOM_ELEMENTS_SCHEMA ]
43+ } )
44+ . compileComponents ( ) ;
45+
46+ fixture = TestBed . createComponent ( SliderHarnessTest ) ;
47+ fixture . detectChanges ( ) ;
48+ loader = TestbedHarnessEnvironment . loader ( fixture ) ;
49+ // Public APIs are the same as "MatSliderHarness", but cast is necessary because
50+ // of different private fields.
51+ sliderHarness = MatMdcSliderHarness as any ;
52+ } ) ;
53+
54+ // MDC slider does not support vertical or inverted sliders.
55+ createTests ( false , false ) ;
3556 } ) ;
3657} ) ;
3758
3859/** Shared tests to run on both the original and MDC-based sliders. */
39- function runTests ( ) {
60+ function createTests ( supportsVertical : boolean , supportsInvert : boolean ) {
4061 it ( 'should load all slider harnesses' , async ( ) => {
4162 const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
4263 expect ( sliders . length ) . toBe ( 3 ) ;
@@ -84,7 +105,7 @@ function runTests() {
84105
85106 it ( 'should get display value of slider' , async ( ) => {
86107 const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
87- expect ( await sliders [ 0 ] . getDisplayValue ( ) ) . toBe ( '50' ) ;
108+ expect ( await sliders [ 0 ] . getDisplayValue ( ) ) . toBe ( null ) ;
88109 expect ( await sliders [ 1 ] . getDisplayValue ( ) ) . toBe ( 'Null' ) ;
89110 expect ( await sliders [ 2 ] . getDisplayValue ( ) ) . toBe ( '#225' ) ;
90111 } ) ;
@@ -93,18 +114,20 @@ function runTests() {
93114 const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
94115 expect ( await sliders [ 0 ] . getOrientation ( ) ) . toBe ( 'horizontal' ) ;
95116 expect ( await sliders [ 1 ] . getOrientation ( ) ) . toBe ( 'horizontal' ) ;
96- expect ( await sliders [ 2 ] . getOrientation ( ) ) . toBe ( 'vertical' ) ;
117+ expect ( await sliders [ 2 ] . getOrientation ( ) ) . toBe ( supportsVertical ? 'vertical' : 'horizontal ') ;
97118 } ) ;
98119
99120 it ( 'should be able to focus slider' , async ( ) => {
100- const [ slider ] = await loader . getAllHarnesses ( sliderHarness ) ;
121+ // the first slider is disabled.
122+ const slider = ( await loader . getAllHarnesses ( sliderHarness ) ) [ 1 ] ;
101123 expect ( getActiveElementTagName ( ) ) . not . toBe ( 'mat-slider' ) ;
102124 await slider . focus ( ) ;
103125 expect ( getActiveElementTagName ( ) ) . toBe ( 'mat-slider' ) ;
104126 } ) ;
105127
106128 it ( 'should be able to blur slider' , async ( ) => {
107- const [ slider ] = await loader . getAllHarnesses ( sliderHarness ) ;
129+ // the first slider is disabled.
130+ const slider = ( await loader . getAllHarnesses ( sliderHarness ) ) [ 1 ] ;
108131 expect ( getActiveElementTagName ( ) ) . not . toBe ( 'mat-slider' ) ;
109132 await slider . focus ( ) ;
110133 expect ( getActiveElementTagName ( ) ) . toBe ( 'mat-slider' ) ;
@@ -139,43 +162,45 @@ function runTests() {
139162 expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 80 ) ;
140163 } ) ;
141164
142- it ( 'should be able to set value of inverted slider' , async ( ) => {
165+ it ( 'should get disabled state of slider' , async ( ) => {
143166 const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
144- expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 0 ) ;
145- expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 225 ) ;
167+ expect ( await sliders [ 0 ] . isDisabled ( ) ) . toBe ( true ) ;
168+ expect ( await sliders [ 1 ] . isDisabled ( ) ) . toBe ( false ) ;
169+ expect ( await sliders [ 2 ] . isDisabled ( ) ) . toBe ( false ) ;
170+ } ) ;
146171
147- fixture . componentInstance . invertSliders = true ;
148- fixture . detectChanges ( ) ;
172+ if ( supportsInvert ) {
173+ it ( 'should be able to set value of inverted slider' , async ( ) => {
174+ const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
175+ expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 0 ) ;
176+ expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 225 ) ;
149177
150- await sliders [ 1 ] . setValue ( 75 ) ;
151- await sliders [ 2 ] . setValue ( 210 ) ;
178+ fixture . componentInstance . invertSliders = true ;
179+ fixture . detectChanges ( ) ;
152180
153- expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 75 ) ;
154- expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 210 ) ;
155- } ) ;
181+ await sliders [ 1 ] . setValue ( 75 ) ;
182+ await sliders [ 2 ] . setValue ( 210 ) ;
156183
157- it ( 'should be able to set value of inverted slider in rtl' , async ( ) => {
158- const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
159- expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 0 ) ;
160- expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 225 ) ;
184+ expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 75 ) ;
185+ expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 210 ) ;
186+ } ) ;
161187
162- fixture . componentInstance . invertSliders = true ;
163- fixture . componentInstance . dir = 'rtl' ;
164- fixture . detectChanges ( ) ;
188+ it ( 'should be able to set value of inverted slider in rtl' , async ( ) => {
189+ const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
190+ expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 0 ) ;
191+ expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 225 ) ;
165192
166- await sliders [ 1 ] . setValue ( 75 ) ;
167- await sliders [ 2 ] . setValue ( 210 ) ;
193+ fixture . componentInstance . invertSliders = true ;
194+ fixture . componentInstance . dir = 'rtl' ;
195+ fixture . detectChanges ( ) ;
168196
169- expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 75 ) ;
170- expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 210 ) ;
171- } ) ;
197+ await sliders [ 1 ] . setValue ( 75 ) ;
198+ await sliders [ 2 ] . setValue ( 210 ) ;
172199
173- it ( 'should get disabled state of slider' , async ( ) => {
174- const sliders = await loader . getAllHarnesses ( sliderHarness ) ;
175- expect ( await sliders [ 0 ] . isDisabled ( ) ) . toBe ( true ) ;
176- expect ( await sliders [ 1 ] . isDisabled ( ) ) . toBe ( false ) ;
177- expect ( await sliders [ 2 ] . isDisabled ( ) ) . toBe ( false ) ;
178- } ) ;
200+ expect ( await sliders [ 1 ] . getValue ( ) ) . toBe ( 75 ) ;
201+ expect ( await sliders [ 2 ] . getValue ( ) ) . toBe ( 210 ) ;
202+ } ) ;
203+ }
179204}
180205
181206function getActiveElementTagName ( ) {
@@ -187,12 +212,12 @@ function getActiveElementTagName() {
187212 <mat-slider value="50" disabled></mat-slider>
188213 <div [dir]="dir">
189214 <mat-slider [id]="sliderId" [displayWith]="displayFn"
190- [invert]="invertSliders"></mat-slider>
215+ [invert]="invertSliders" thumbLabel ></mat-slider>
191216 </div>
192217 <mat-slider min="200" max="250" value="225" [displayWith]="displayFn" vertical
193- [invert]="invertSliders">
218+ [invert]="invertSliders" thumbLabel >
194219 </mat-slider>
195- `
220+ ` ,
196221} )
197222class SliderHarnessTest {
198223 sliderId = 'my-slider' ;
0 commit comments