|
9 | 9 | import { |
10 | 10 | clearElement, |
11 | 11 | dispatchMouseEvent, |
12 | | - isTextInput, |
| 12 | + isTextInput, ModifierKeys, |
13 | 13 | triggerBlur, |
14 | 14 | triggerFocus, |
15 | 15 | typeInElement |
16 | 16 | } from '@angular/cdk/testing'; |
17 | | -import {TestElement} from '../test-element'; |
| 17 | +import {TestElement, TestKey} from '../test-element'; |
| 18 | +import * as keyCodes from '@angular/cdk/keycodes'; |
| 19 | + |
| 20 | +const keyMap = { |
| 21 | + [TestKey.BACKSPACE]: {keyCode: keyCodes.BACKSPACE, key: 'Backspace'}, |
| 22 | + [TestKey.TAB]: {keyCode: keyCodes.TAB, key: 'Tab'}, |
| 23 | + [TestKey.ENTER]: {keyCode: keyCodes.ENTER, key: 'Enter'}, |
| 24 | + [TestKey.SHIFT]: {keyCode: keyCodes.SHIFT, key: 'Shift'}, |
| 25 | + [TestKey.CONTROL]: {keyCode: keyCodes.CONTROL, key: 'Control'}, |
| 26 | + [TestKey.ALT]: {keyCode: keyCodes.ALT, key: 'Alt'}, |
| 27 | + [TestKey.ESCAPE]: {keyCode: keyCodes.ESCAPE, key: 'Escape'}, |
| 28 | + [TestKey.PAGE_UP]: {keyCode: keyCodes.PAGE_UP, key: 'PageUp'}, |
| 29 | + [TestKey.PAGE_DOWN]: {keyCode: keyCodes.PAGE_DOWN, key: 'PageDown'}, |
| 30 | + [TestKey.END]: {keyCode: keyCodes.END, key: 'End'}, |
| 31 | + [TestKey.HOME]: {keyCode: keyCodes.HOME, key: 'Home'}, |
| 32 | + [TestKey.LEFT_ARROW]: {keyCode: keyCodes.LEFT_ARROW, key: 'ArrowLeft'}, |
| 33 | + [TestKey.UP_ARROW]: {keyCode: keyCodes.UP_ARROW, key: 'ArrowUp'}, |
| 34 | + [TestKey.RIGHT_ARROW]: {keyCode: keyCodes.RIGHT_ARROW, key: 'ArrowRight'}, |
| 35 | + [TestKey.DOWN_ARROW]: {keyCode: keyCodes.DOWN_ARROW, key: 'ArrowDown'}, |
| 36 | + [TestKey.INSERT]: {keyCode: keyCodes.INSERT, key: 'Insert'}, |
| 37 | + [TestKey.DELETE]: {keyCode: keyCodes.DELETE, key: 'Delete'}, |
| 38 | + [TestKey.F1]: {keyCode: keyCodes.F1, key: 'F1'}, |
| 39 | + [TestKey.F2]: {keyCode: keyCodes.F2, key: 'F2'}, |
| 40 | + [TestKey.F3]: {keyCode: keyCodes.F3, key: 'F3'}, |
| 41 | + [TestKey.F4]: {keyCode: keyCodes.F4, key: 'F4'}, |
| 42 | + [TestKey.F5]: {keyCode: keyCodes.F5, key: 'F5'}, |
| 43 | + [TestKey.F6]: {keyCode: keyCodes.F6, key: 'F6'}, |
| 44 | + [TestKey.F7]: {keyCode: keyCodes.F7, key: 'F7'}, |
| 45 | + [TestKey.F8]: {keyCode: keyCodes.F8, key: 'F8'}, |
| 46 | + [TestKey.F9]: {keyCode: keyCodes.F9, key: 'F9'}, |
| 47 | + [TestKey.F10]: {keyCode: keyCodes.F10, key: 'F10'}, |
| 48 | + [TestKey.F11]: {keyCode: keyCodes.F11, key: 'F11'}, |
| 49 | + [TestKey.F12]: {keyCode: keyCodes.F12, key: 'F12'}, |
| 50 | + [TestKey.META]: {keyCode: keyCodes.META, key: 'Meta'} |
| 51 | +}; |
18 | 52 |
|
19 | 53 | /** A `TestElement` implementation for unit tests. */ |
20 | 54 | export class UnitTestElement implements TestElement { |
@@ -60,9 +94,12 @@ export class UnitTestElement implements TestElement { |
60 | 94 | await this._stabilize(); |
61 | 95 | } |
62 | 96 |
|
63 | | - async sendKeys(keys: string): Promise<void> { |
| 97 | + async sendKeys(...keys: (string | TestKey)[]): Promise<void>; |
| 98 | + async sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>; |
| 99 | + async sendKeys(...modifiersAndKeys: any[]): Promise<void> { |
64 | 100 | await this._stabilize(); |
65 | | - typeInElement(this.element as HTMLElement, keys); |
| 101 | + const args = modifiersAndKeys.map(k => typeof k === 'number' ? keyMap[k as TestKey] : k); |
| 102 | + typeInElement(this.element as HTMLElement, ...args); |
66 | 103 | await this._stabilize(); |
67 | 104 | } |
68 | 105 |
|
|
0 commit comments