Skip to content

Commit 9469cd0

Browse files
committed
address feedback
1 parent 7f8c2a1 commit 9469cd0

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

src/cdk-experimental/testing/protractor/protractor-element.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {ModifierKeys} from '@angular/cdk/testing';
1010
import {browser, ElementFinder, Key} from 'protractor';
1111
import {TestElement, TestKey} from '../test-element';
1212

13+
/** Maps the `TestKey` constants to Protractor's `Key` constants. */
1314
const keyMap = {
1415
[TestKey.BACKSPACE]: Key.BACK_SPACE,
1516
[TestKey.TAB]: Key.TAB,
@@ -43,6 +44,24 @@ const keyMap = {
4344
[TestKey.META]: Key.META
4445
};
4546

47+
/** Converts a `ModifierKeys` object to a list of Protractor `Key`s. */
48+
function toProtractorModifierKeys(modifiers: ModifierKeys): string[] {
49+
const result: string[] = [];
50+
if (modifiers.control) {
51+
result.push(Key.CONTROL);
52+
}
53+
if (modifiers.alt) {
54+
result.push(Key.ALT);
55+
}
56+
if (modifiers.shift) {
57+
result.push(Key.SHIFT);
58+
}
59+
if (modifiers.meta) {
60+
result.push(Key.META);
61+
}
62+
return result;
63+
}
64+
4665
/** A `TestElement` implementation for Protractor. */
4766
export class ProtractorElement implements TestElement {
4867
constructor(readonly element: ElementFinder) {}
@@ -87,12 +106,7 @@ export class ProtractorElement implements TestElement {
87106
rest = modifiersAndKeys;
88107
}
89108

90-
const modifierKeys = [
91-
modifiers.control ? Key.CONTROL : '',
92-
modifiers.alt ? Key.ALT : '',
93-
modifiers.shift ? Key.SHIFT : '',
94-
modifiers.meta ? Key.META : ''
95-
].filter(k => k);
109+
const modifierKeys = toProtractorModifierKeys(modifiers);
96110
const keys = rest.map(k => typeof k === 'string' ? k.split('') : [keyMap[k]])
97111
.reduce((arr, k) => arr.concat(k), [])
98112
.map(k => Key.chord(...modifierKeys, k));

src/cdk-experimental/testing/testbed/unit-test-element.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9+
import * as keyCodes from '@angular/cdk/keycodes';
910
import {
1011
clearElement,
1112
dispatchMouseEvent,
12-
isTextInput, ModifierKeys,
13+
isTextInput,
14+
ModifierKeys,
1315
triggerBlur,
1416
triggerFocus,
1517
typeInElement
1618
} from '@angular/cdk/testing';
1719
import {TestElement, TestKey} from '../test-element';
18-
import * as keyCodes from '@angular/cdk/keycodes';
1920

21+
/** Maps `TestKey` constants to the `keyCode` and `key` values used by native browser events. */
2022
const keyMap = {
2123
[TestKey.BACKSPACE]: {keyCode: keyCodes.BACKSPACE, key: 'Backspace'},
2224
[TestKey.TAB]: {keyCode: keyCodes.TAB, key: 'Tab'},

src/cdk/testing/event-objects.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ export function createKeyboardEvent(type: string, keyCode: number = 0, key: stri
8181
event.initKeyEvent(type, true, true, window, modifiers.control, modifiers.alt, modifiers.shift,
8282
modifiers.meta, keyCode);
8383
} else {
84-
let modifiersStr = (modifiers.control ? 'Control ' : '' + modifiers.alt ? 'Alt ' : '' +
84+
// `initKeyboardEvent` expects to receive modifiers as a whitespace-delimited string
85+
// See https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent
86+
const modifiersStr = (modifiers.control ? 'Control ' : '' + modifiers.alt ? 'Alt ' : '' +
8587
modifiers.shift ? 'Shift ' : '' + modifiers.meta ? 'Meta' : '').trim();
8688
event.initKeyboardEvent(type, true, true, window, 0, key, 0, modifiersStr, false);
8789
}

0 commit comments

Comments
 (0)