|
1 | 1 | import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
2 | 2 | import {ReactiveFormsModule, FormControl} from '@angular/forms';
|
3 | 3 | import {Component, DebugElement} from '@angular/core';
|
4 |
| -import {By} from '@angular/platform-browser'; |
| 4 | +import {By, HAMMER_GESTURE_CONFIG} from '@angular/platform-browser'; |
5 | 5 | import {MdSlider, MdSliderModule} from './slider';
|
6 |
| -import {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser'; |
7 | 6 | import {TestGestureConfig} from './test-gesture-config';
|
| 7 | +import { |
| 8 | + UP_ARROW, |
| 9 | + RIGHT_ARROW, |
| 10 | + DOWN_ARROW, |
| 11 | + PAGE_DOWN, |
| 12 | + PAGE_UP, |
| 13 | + END, |
| 14 | + HOME, LEFT_ARROW |
| 15 | +} from '../core/keyboard/keycodes'; |
8 | 16 |
|
9 | 17 |
|
10 | 18 | describe('MdSlider', () => {
|
@@ -746,6 +754,90 @@ describe('MdSlider', () => {
|
746 | 754 | expect(testComponent.onChange).toHaveBeenCalledTimes(1);
|
747 | 755 | });
|
748 | 756 | });
|
| 757 | + |
| 758 | + describe('keyboard support', () => { |
| 759 | + let fixture: ComponentFixture<StandardSlider>; |
| 760 | + let sliderDebugElement: DebugElement; |
| 761 | + let sliderNativeElement: HTMLElement; |
| 762 | + let sliderTrackElement: HTMLElement; |
| 763 | + let testComponent: StandardSlider; |
| 764 | + let sliderInstance: MdSlider; |
| 765 | + |
| 766 | + beforeEach(() => { |
| 767 | + fixture = TestBed.createComponent(StandardSlider); |
| 768 | + fixture.detectChanges(); |
| 769 | + |
| 770 | + testComponent = fixture.debugElement.componentInstance; |
| 771 | + sliderDebugElement = fixture.debugElement.query(By.directive(MdSlider)); |
| 772 | + sliderNativeElement = sliderDebugElement.nativeElement; |
| 773 | + sliderTrackElement = <HTMLElement>sliderNativeElement.querySelector('.md-slider-track'); |
| 774 | + sliderInstance = sliderDebugElement.injector.get(MdSlider); |
| 775 | + }); |
| 776 | + |
| 777 | + it('should increment slider by 1 on up arrow pressed', () => { |
| 778 | + dispatchKeydownEvent(sliderNativeElement, UP_ARROW); |
| 779 | + fixture.detectChanges(); |
| 780 | + |
| 781 | + expect(sliderInstance.value).toBe(1); |
| 782 | + }); |
| 783 | + |
| 784 | + it('should increment slider by 1 on right arrow pressed', () => { |
| 785 | + dispatchKeydownEvent(sliderNativeElement, RIGHT_ARROW); |
| 786 | + fixture.detectChanges(); |
| 787 | + |
| 788 | + expect(sliderInstance.value).toBe(1); |
| 789 | + }); |
| 790 | + |
| 791 | + it('should decrement slider by 1 on down arrow pressed', () => { |
| 792 | + sliderInstance.value = 100; |
| 793 | + |
| 794 | + dispatchKeydownEvent(sliderNativeElement, DOWN_ARROW); |
| 795 | + fixture.detectChanges(); |
| 796 | + |
| 797 | + expect(sliderInstance.value).toBe(99); |
| 798 | + }); |
| 799 | + |
| 800 | + it('should decrement slider by 1 on left arrow pressed', () => { |
| 801 | + sliderInstance.value = 100; |
| 802 | + |
| 803 | + dispatchKeydownEvent(sliderNativeElement, LEFT_ARROW); |
| 804 | + fixture.detectChanges(); |
| 805 | + |
| 806 | + expect(sliderInstance.value).toBe(99); |
| 807 | + }); |
| 808 | + |
| 809 | + it('should increment slider by 10 on page up pressed', () => { |
| 810 | + dispatchKeydownEvent(sliderNativeElement, PAGE_UP); |
| 811 | + fixture.detectChanges(); |
| 812 | + |
| 813 | + expect(sliderInstance.value).toBe(10); |
| 814 | + }); |
| 815 | + |
| 816 | + it('should decrement slider by 10 on page down pressed', () => { |
| 817 | + sliderInstance.value = 100; |
| 818 | + |
| 819 | + dispatchKeydownEvent(sliderNativeElement, PAGE_DOWN); |
| 820 | + fixture.detectChanges(); |
| 821 | + |
| 822 | + expect(sliderInstance.value).toBe(90); |
| 823 | + }); |
| 824 | + |
| 825 | + it('should set slider to max on end pressed', () => { |
| 826 | + dispatchKeydownEvent(sliderNativeElement, END); |
| 827 | + fixture.detectChanges(); |
| 828 | + |
| 829 | + expect(sliderInstance.value).toBe(100); |
| 830 | + }); |
| 831 | + |
| 832 | + it('should set slider to min on home pressed', () => { |
| 833 | + sliderInstance.value = 100; |
| 834 | + |
| 835 | + dispatchKeydownEvent(sliderNativeElement, HOME); |
| 836 | + fixture.detectChanges(); |
| 837 | + |
| 838 | + expect(sliderInstance.value).toBe(0); |
| 839 | + }); |
| 840 | + }); |
749 | 841 | });
|
750 | 842 |
|
751 | 843 | // Disable animations and make the slider an even 100px (+ 8px padding on either side)
|
@@ -953,3 +1045,9 @@ function dispatchMouseenterEvent(element: HTMLElement): void {
|
953 | 1045 | 'mouseenter', true, true, window, 0, x, y, x, y, false, false, false, false, 0, null);
|
954 | 1046 | element.dispatchEvent(event);
|
955 | 1047 | }
|
| 1048 | + |
| 1049 | +function dispatchKeydownEvent(element: HTMLElement, keyCode: number): void { |
| 1050 | + let event = new Event('keydown'); |
| 1051 | + (<any>event).keyCode = keyCode; |
| 1052 | + element.dispatchEvent(event); |
| 1053 | +} |
0 commit comments