Skip to content

Commit 39dae0c

Browse files
committed
vertical mode tests
1 parent 3596a1b commit 39dae0c

File tree

1 file changed

+78
-5
lines changed

1 file changed

+78
-5
lines changed

src/lib/slider/slider.spec.ts

Lines changed: 78 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
9641025
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; }
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 {
10721142
function 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

Comments
 (0)