feat(keyEvents): support for <div (keyup.enter)="callback()">
This commit adds a plugin for the event manager, to allow a key name to be appended to the event name (for keyup and keydown events), so that the callback is only called for that key. Here are some examples: (keydown.shift.enter) (keyup.space) (keydown.control.shift.a) (keyup.f1) Key names mostly follow the DOM Level 3 event key values: http://www.w3.org/TR/DOM-Level-3-Events-key/#key-value-tables There are some limitations to be worked on (cf details in https://github.com/angular/angular/pull/1136) but for now, this implementation is reliable for the following keys (by "reliable" I mean compatible with Chrome and Firefox and not depending on the keyboard layout): - alt, control, shift, meta (those keys can be combined with other keys) - tab, enter, backspace, pause, scrolllock, capslock, numlock - insert, delete, home, end, pageup, pagedown - arrowup, arrowdown, arrowleft, arrowright - latin letters (a-z), function keys (f1-f12) - numbers on the numeric keypad (but those keys are not correctly simulated by Chromedriver) There is a sample to play with in examples/src/key_events/. close #523 close #1136
This commit is contained in:
69
modules/examples/e2e_test/key_events/key_events_spec.es6
Normal file
69
modules/examples/e2e_test/key_events/key_events_spec.es6
Normal file
@ -0,0 +1,69 @@
|
||||
var testUtil = require('angular2/src/test_lib/e2e_util');
|
||||
describe('key_events', function () {
|
||||
|
||||
var URL = 'examples/src/key_events/index.html';
|
||||
|
||||
afterEach(testUtil.verifyNoBrowserErrors);
|
||||
beforeEach(() => {
|
||||
browser.get(URL);
|
||||
});
|
||||
|
||||
it('should display correct key names', function() {
|
||||
var firstArea = element.all(by.css('.sample-area')).get(0);
|
||||
expect(firstArea.getText()).toBe('(none)');
|
||||
|
||||
// testing different key categories:
|
||||
firstArea.sendKeys(protractor.Key.ENTER);
|
||||
expect(firstArea.getText()).toBe('enter');
|
||||
|
||||
firstArea.sendKeys(protractor.Key.SHIFT, protractor.Key.ENTER);
|
||||
expect(firstArea.getText()).toBe('shift.enter');
|
||||
|
||||
firstArea.sendKeys(protractor.Key.CONTROL, protractor.Key.SHIFT, protractor.Key.ENTER);
|
||||
expect(firstArea.getText()).toBe('control.shift.enter');
|
||||
|
||||
firstArea.sendKeys(' ');
|
||||
expect(firstArea.getText()).toBe('space');
|
||||
|
||||
firstArea.sendKeys('a');
|
||||
expect(firstArea.getText()).toBe('a');
|
||||
|
||||
firstArea.sendKeys(protractor.Key.CONTROL, 'b');
|
||||
expect(firstArea.getText()).toBe('control.b');
|
||||
|
||||
firstArea.sendKeys(protractor.Key.F1);
|
||||
expect(firstArea.getText()).toBe('f1');
|
||||
|
||||
firstArea.sendKeys(protractor.Key.ALT, protractor.Key.F1);
|
||||
expect(firstArea.getText()).toBe('alt.f1');
|
||||
|
||||
firstArea.sendKeys(protractor.Key.CONTROL, protractor.Key.F1);
|
||||
expect(firstArea.getText()).toBe('control.f1');
|
||||
|
||||
// There is an issue with protractor.Key.NUMPAD0 (and other NUMPADx):
|
||||
// chromedriver does not correctly set the location property on the event to
|
||||
// specify that the key is on the numeric keypad (event.location = 3)
|
||||
// so the following test fails:
|
||||
// firstArea.sendKeys(protractor.Key.NUMPAD0);
|
||||
// expect(firstArea.getText()).toBe('0');
|
||||
});
|
||||
|
||||
it('should correctly react to the specified key', function() {
|
||||
var secondArea = element.all(by.css('.sample-area')).get(1);
|
||||
secondArea.sendKeys(protractor.Key.SHIFT, protractor.Key.ENTER);
|
||||
expect(secondArea.getText()).toEqual('You pressed shift.enter!');
|
||||
});
|
||||
|
||||
it('should not react to incomplete keys', function() {
|
||||
var secondArea = element.all(by.css('.sample-area')).get(1);
|
||||
secondArea.sendKeys(protractor.Key.ENTER);
|
||||
expect(secondArea.getText()).toEqual('');
|
||||
});
|
||||
|
||||
it('should not react to keys with more modifiers', function() {
|
||||
var secondArea = element.all(by.css('.sample-area')).get(1);
|
||||
secondArea.sendKeys(protractor.Key.CONTROL, protractor.Key.SHIFT, protractor.Key.ENTER);
|
||||
expect(secondArea.getText()).toEqual('');
|
||||
});
|
||||
|
||||
});
|
Reference in New Issue
Block a user