goog.events.keyhandler_test.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of google-closure-library
Show all versions of google-closure-library
The Google Closure Library is a collection of JavaScript code
designed for use with the Google Closure JavaScript Compiler.
This non-official distribution was prepared by the ClojureScript
team at http://clojure.org/
// Copyright 2008 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.provide('goog.events.KeyEventTest');
goog.setTestOnly('goog.events.KeyEventTest');
goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('goog.events');
goog.require('goog.events.BrowserEvent');
goog.require('goog.events.EventType');
goog.require('goog.events.KeyCodes');
goog.require('goog.events.KeyHandler');
goog.require('goog.testing.events');
goog.require('goog.testing.jsunit');
goog.require('goog.userAgent');
function setUp() {
// Have this based on a fictitious DOCUMENT_MODE constant.
goog.userAgent.isDocumentMode = function(mode) {
return mode <= goog.userAgent.DOCUMENT_MODE;
};
}
/**
* Tests the key handler for the IE 8 and lower behavior.
*/
function testIe8StyleKeyHandling() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = true;
goog.userAgent.GECKO = false;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = false;
goog.userAgent.WINDOWS = true;
goog.userAgent.LINUX = false;
goog.userAgent.VERSION = 8;
goog.userAgent.DOCUMENT_MODE = 8;
goog.events.KeyHandler.USES_KEYDOWN_ = true;
assertIe8StyleKeyHandling();
}
/**
* Tests the key handler for the IE 8 and lower behavior.
*/
function testIe8StyleKeyHandlingInIe9DocumentMode() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = true;
goog.userAgent.GECKO = false;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = false;
goog.userAgent.WINDOWS = true;
goog.userAgent.LINUX = false;
goog.userAgent.VERSION = 9; // Try IE9 in IE8 document mode.
goog.userAgent.DOCUMENT_MODE = 8;
goog.events.KeyHandler.USES_KEYDOWN_ = true;
assertIe8StyleKeyHandling();
}
function assertIe8StyleKeyHandling() {
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, goog.events.KeyCodes.ENTER);
fireKeyPress(keyHandler, goog.events.KeyCodes.ENTER);
assertEquals(
'Enter should fire a key event with the keycode 13',
goog.events.KeyCodes.ENTER, keyEvent.keyCode);
assertEquals(
'Enter should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.ESC);
fireKeyPress(keyHandler, goog.events.KeyCodes.ESC);
assertEquals(
'Esc should fire a key event with the keycode 27',
goog.events.KeyCodes.ESC, keyEvent.keyCode);
assertEquals(
'Esc should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.UP);
assertEquals(
'Up should fire a key event with the keycode 38', goog.events.KeyCodes.UP,
keyEvent.keyCode);
assertEquals(
'Up should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(
keyHandler, goog.events.KeyCodes.SEVEN, undefined, undefined, undefined,
undefined, true);
fireKeyPress(
keyHandler, 38, undefined, undefined, undefined, undefined, true);
assertEquals(
'Shift+7 should fire a key event with the keycode 55',
goog.events.KeyCodes.SEVEN, keyEvent.keyCode);
assertEquals(
'Shift+7 should fire a key event with the charcode 38', 38,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, 97);
assertEquals(
'Lower case a should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Lower case a should fire a key event with the charcode 97', 97,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, 65);
assertEquals(
'Upper case A should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Upper case A should fire a key event with the charcode 65', 65,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.DELETE);
assertEquals(
'Delete should fire a key event with the keycode 46',
goog.events.KeyCodes.DELETE, keyEvent.keyCode);
assertEquals(
'Delete should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.PERIOD);
fireKeyPress(keyHandler, 46);
assertEquals(
'Period should fire a key event with the keycode 190',
goog.events.KeyCodes.PERIOD, keyEvent.keyCode);
assertEquals(
'Period should fire a key event with the charcode 46', 46,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.CTRL);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
assertEquals(
'A with control down should fire a key event', goog.events.KeyCodes.A,
keyEvent.keyCode);
// On IE, when Ctrl+ is held down, there is a KEYDOWN, a KEYPRESS, and
// then a series of KEYDOWN events for each repeat.
fireKeyDown(keyHandler, goog.events.KeyCodes.B, undefined, undefined, true);
fireKeyPress(keyHandler, goog.events.KeyCodes.B, undefined, undefined, true);
assertEquals(
'B with control down should fire a key event', goog.events.KeyCodes.B,
keyEvent.keyCode);
assertTrue('Ctrl should be down.', keyEvent.ctrlKey);
assertFalse(
'Should not have repeat=true on the first key press.', keyEvent.repeat);
// Fire one repeated keydown event.
fireKeyDown(keyHandler, goog.events.KeyCodes.B, undefined, undefined, true);
assertEquals(
'A with control down should fire a key event', goog.events.KeyCodes.B,
keyEvent.keyCode);
assertTrue('Should have repeat=true on key repeat.', keyEvent.repeat);
assertTrue('Ctrl should be down.', keyEvent.ctrlKey);
}
/**
* Tests special cases for IE9.
*/
function testIe9StyleKeyHandling() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = true;
goog.userAgent.GECKO = false;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = false;
goog.userAgent.WINDOWS = true;
goog.userAgent.LINUX = false;
goog.userAgent.VERSION = 9;
goog.userAgent.DOCUMENT_MODE = 9;
goog.events.KeyHandler.USES_KEYDOWN_ = true;
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, goog.events.KeyCodes.ENTER);
fireKeyPress(keyHandler, goog.events.KeyCodes.ENTER);
assertEquals(
'Enter should fire a key event with the keycode 13',
goog.events.KeyCodes.ENTER, keyEvent.keyCode);
assertEquals(
'Enter should fire a key event with the charcode 0', 0,
keyEvent.charCode);
}
/**
* Tests the key handler for the Gecko behavior.
*/
function testGeckoStyleKeyHandling() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = false;
goog.userAgent.GECKO = true;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = false;
goog.userAgent.WINDOWS = true;
goog.userAgent.LINUX = false;
goog.events.KeyHandler.USES_KEYDOWN_ = false;
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, goog.events.KeyCodes.ENTER);
fireKeyPress(keyHandler, goog.events.KeyCodes.ENTER);
assertEquals(
'Enter should fire a key event with the keycode 13',
goog.events.KeyCodes.ENTER, keyEvent.keyCode);
assertEquals(
'Enter should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.ESC);
fireKeyPress(keyHandler, goog.events.KeyCodes.ESC);
assertEquals(
'Esc should fire a key event with the keycode 27',
goog.events.KeyCodes.ESC, keyEvent.keyCode);
assertEquals(
'Esc should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.UP);
fireKeyPress(keyHandler, goog.events.KeyCodes.UP);
assertEquals(
'Up should fire a key event with the keycode 38', goog.events.KeyCodes.UP,
keyEvent.keyCode);
assertEquals(
'Up should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(
keyHandler, goog.events.KeyCodes.SEVEN, undefined, undefined, undefined,
undefined, true);
fireKeyPress(
keyHandler, undefined, 38, undefined, undefined, undefined, true);
assertEquals(
'Shift+7 should fire a key event with the keycode 55',
goog.events.KeyCodes.SEVEN, keyEvent.keyCode);
assertEquals(
'Shift+7 should fire a key event with the charcode 38', 38,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, undefined, 97);
assertEquals(
'Lower case a should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Lower case a should fire a key event with the charcode 97', 97,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, undefined, 65);
assertEquals(
'Upper case A should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Upper case A should fire a key event with the charcode 65', 65,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.DELETE);
fireKeyPress(keyHandler, goog.events.KeyCodes.DELETE);
assertEquals(
'Delete should fire a key event with the keycode 46',
goog.events.KeyCodes.DELETE, keyEvent.keyCode);
assertEquals(
'Delete should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.PERIOD);
fireKeyPress(keyHandler, undefined, 46);
assertEquals(
'Period should fire a key event with the keycode 190',
goog.events.KeyCodes.PERIOD, keyEvent.keyCode);
assertEquals(
'Period should fire a key event with the charcode 46', 46,
keyEvent.charCode);
}
/**
* Tests the key handler for the Safari 3 behavior.
*/
function testSafari3StyleKeyHandling() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = false;
goog.userAgent.GECKO = false;
goog.userAgent.WEBKIT = true;
goog.userAgent.MAC = true;
goog.userAgent.WINDOWS = false;
goog.userAgent.LINUX = false;
goog.events.KeyHandler.USES_KEYDOWN_ = true;
goog.userAgent.VERSION = 525.3;
var keyEvent, keyHandler = new goog.events.KeyHandler();
// Make sure all events are caught while testing
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, goog.events.KeyCodes.ENTER);
fireKeyPress(keyHandler, goog.events.KeyCodes.ENTER);
assertEquals(
'Enter should fire a key event with the keycode 13',
goog.events.KeyCodes.ENTER, keyEvent.keyCode);
assertEquals(
'Enter should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyUp(keyHandler, goog.events.KeyCodes.ENTER);
// Add a listener to ensure that an extra ENTER event is not dispatched
// by a subsequent keypress.
var enterCheck = goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY, function(e) {
assertNotEquals(
'Unexpected ENTER keypress dispatched', e.keyCode,
goog.events.KeyCodes.ENTER);
});
fireKeyDown(keyHandler, goog.events.KeyCodes.ESC);
assertEquals(
'Esc should fire a key event with the keycode 27',
goog.events.KeyCodes.ESC, keyEvent.keyCode);
assertEquals(
'Esc should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyPress(keyHandler, goog.events.KeyCodes.ESC);
goog.events.unlistenByKey(enterCheck);
fireKeyDown(keyHandler, goog.events.KeyCodes.UP);
assertEquals(
'Up should fire a key event with the keycode 38', goog.events.KeyCodes.UP,
keyEvent.keyCode);
assertEquals(
'Up should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(
keyHandler, goog.events.KeyCodes.SEVEN, undefined, undefined, undefined,
undefined, true);
fireKeyPress(keyHandler, 38, 38, undefined, undefined, undefined, true);
assertEquals(
'Shift+7 should fire a key event with the keycode 55',
goog.events.KeyCodes.SEVEN, keyEvent.keyCode);
assertEquals(
'Shift+7 should fire a key event with the charcode 38', 38,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, 97, 97);
assertEquals(
'Lower case a should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Lower case a should fire a key event with the charcode 97', 97,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, 65, 65);
assertEquals(
'Upper case A should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Upper case A should fire a key event with the charcode 65', 65,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.CTRL);
fireKeyDown(keyHandler, goog.events.KeyCodes.A, null, null, true /*ctrl*/);
assertEquals(
'A with control down should fire a key event', goog.events.KeyCodes.A,
keyEvent.keyCode);
// Test that Alt-Tab outside the window doesn't break things.
fireKeyDown(keyHandler, goog.events.KeyCodes.ALT);
keyEvent.keyCode = -1; // Reset the event.
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
assertEquals('Should not have dispatched an Alt-A', -1, keyEvent.keyCode);
fireKeyPress(keyHandler, 65, 65);
assertEquals(
'Alt should be ignored since it isn\'t currently depressed',
goog.events.KeyCodes.A, keyEvent.keyCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.DELETE);
assertEquals(
'Delete should fire a key event with the keycode 46',
goog.events.KeyCodes.DELETE, keyEvent.keyCode);
assertEquals(
'Delete should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.PERIOD);
fireKeyPress(keyHandler, 46, 46);
assertEquals(
'Period should fire a key event with the keycode 190',
goog.events.KeyCodes.PERIOD, keyEvent.keyCode);
assertEquals(
'Period should fire a key event with the charcode 46', 46,
keyEvent.charCode);
// Safari sends zero key code for non-latin characters.
fireKeyDown(keyHandler, 0, 0);
fireKeyPress(keyHandler, 1092, 1092);
assertEquals(
'Cyrillic small letter "Ef" should fire a key event with ' +
'the keycode 0',
0, keyEvent.keyCode);
assertEquals(
'Cyrillic small letter "Ef" should fire a key event with ' +
'the charcode 1092',
1092, keyEvent.charCode);
}
/**
* Tests the key handler for the Opera behavior.
*/
function testOperaStyleKeyHandling() {
goog.userAgent.OPERA = true;
goog.userAgent.IE = false;
goog.userAgent.GECKO = false;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = false;
goog.userAgent.WINDOWS = true;
goog.userAgent.LINUX = false;
goog.events.KeyHandler.USES_KEYDOWN_ = false;
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, goog.events.KeyCodes.ENTER);
fireKeyPress(keyHandler, goog.events.KeyCodes.ENTER);
assertEquals(
'Enter should fire a key event with the keycode 13',
goog.events.KeyCodes.ENTER, keyEvent.keyCode);
assertEquals(
'Enter should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.ESC);
fireKeyPress(keyHandler, goog.events.KeyCodes.ESC);
assertEquals(
'Esc should fire a key event with the keycode 27',
goog.events.KeyCodes.ESC, keyEvent.keyCode);
assertEquals(
'Esc should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.UP);
fireKeyPress(keyHandler, goog.events.KeyCodes.UP);
assertEquals(
'Up should fire a key event with the keycode 38', goog.events.KeyCodes.UP,
keyEvent.keyCode);
assertEquals(
'Up should fire a key event with the charcode 0', 0, keyEvent.charCode);
fireKeyDown(
keyHandler, goog.events.KeyCodes.SEVEN, undefined, undefined, undefined,
undefined, true);
fireKeyPress(
keyHandler, 38, undefined, undefined, undefined, undefined, true);
assertEquals(
'Shift+7 should fire a key event with the keycode 55',
goog.events.KeyCodes.SEVEN, keyEvent.keyCode);
assertEquals(
'Shift+7 should fire a key event with the charcode 38', 38,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, 97);
assertEquals(
'Lower case a should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Lower case a should fire a key event with the charcode 97', 97,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.A);
fireKeyPress(keyHandler, 65);
assertEquals(
'Upper case A should fire a key event with the keycode 65',
goog.events.KeyCodes.A, keyEvent.keyCode);
assertEquals(
'Upper case A should fire a key event with the charcode 65', 65,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.DELETE);
fireKeyPress(keyHandler, goog.events.KeyCodes.DELETE);
assertEquals(
'Delete should fire a key event with the keycode 46',
goog.events.KeyCodes.DELETE, keyEvent.keyCode);
assertEquals(
'Delete should fire a key event with the charcode 0', 0,
keyEvent.charCode);
fireKeyDown(keyHandler, goog.events.KeyCodes.PERIOD);
fireKeyPress(keyHandler, 46);
assertEquals(
'Period should fire a key event with the keycode 190',
goog.events.KeyCodes.PERIOD, keyEvent.keyCode);
assertEquals(
'Period should fire a key event with the charcode 46', 46,
keyEvent.charCode);
}
function testGeckoOnMacAltHandling() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = false;
goog.userAgent.GECKO = true;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = true;
goog.userAgent.WINDOWS = false;
goog.userAgent.LINUX = false;
goog.userAgent.EDGE = false;
goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_ = true;
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(
keyHandler, goog.events.KeyCodes.COMMA, 0, null, false, true, false);
fireKeyPress(keyHandler, 0, 8804, null, false, false, false);
assertEquals(
'should fire a key event with COMMA', goog.events.KeyCodes.COMMA,
keyEvent.keyCode);
assertEquals(
'should fire a key event with alt key set', true, keyEvent.altKey);
// Scenario: alt down, a down, a press, a up (should say alt is true),
// alt up.
keyEvent = undefined;
fireKeyDown(keyHandler, 18, 0, null, false, true, false);
fireKeyDown(keyHandler, goog.events.KeyCodes.A, 0, null, false, true, false);
fireKeyPress(keyHandler, 0, 229, null, false, false, false);
assertEquals(
'should fire a key event with alt key set', true, keyEvent.altKey);
fireKeyUp(keyHandler, 0, 229, null, false, true, false);
assertEquals('alt key should still be set', true, keyEvent.altKey);
fireKeyUp(keyHandler, 18, 0, null, false, false, false);
}
function testGeckoEqualSign() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = false;
goog.userAgent.GECKO = true;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = false;
goog.userAgent.WINDOWS = true;
goog.userAgent.LINUX = false;
goog.events.KeyHandler.USES_KEYDOWN_ = false;
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, 61, 0);
fireKeyPress(keyHandler, 0, 61);
assertEquals(
'= should fire should fire a key event with the keyCode 187',
goog.events.KeyCodes.EQUALS, keyEvent.keyCode);
assertEquals(
'= should fire a key event with the charCode 61',
goog.events.KeyCodes.FF_EQUALS, keyEvent.charCode);
}
function testMacGeckoSlash() {
goog.userAgent.OPERA = false;
goog.userAgent.IE = false;
goog.userAgent.GECKO = true;
goog.userAgent.WEBKIT = false;
goog.userAgent.MAC = true;
goog.userAgent.WINDOWS = false;
goog.userAgent.LINUX = false;
goog.events.KeyHandler.USES_KEYDOWN_ = false;
var keyEvent, keyHandler = new goog.events.KeyHandler();
goog.events.listen(
keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) { keyEvent = e; });
fireKeyDown(keyHandler, 0, 63, null, false, false, true);
fireKeyPress(keyHandler, 0, 63, null, false, false, true);
assertEquals(
'/ should fire a key event with the keyCode 191',
goog.events.KeyCodes.SLASH, keyEvent.keyCode);
assertEquals(
'? should fire a key event with the charCode 63',
goog.events.KeyCodes.QUESTION_MARK, keyEvent.charCode);
}
function testGetElement() {
var target = goog.dom.createDom(goog.dom.TagName.DIV);
var target2 = goog.dom.createDom(goog.dom.TagName.DIV);
var keyHandler = new goog.events.KeyHandler();
assertNull(keyHandler.getElement());
keyHandler.attach(target);
assertEquals(target, keyHandler.getElement());
keyHandler.attach(target2);
assertNotEquals(target, keyHandler.getElement());
assertEquals(target2, keyHandler.getElement());
var doc = goog.dom.getDocument();
keyHandler.attach(doc);
assertEquals(doc, keyHandler.getElement());
keyHandler = new goog.events.KeyHandler(doc);
assertEquals(doc, keyHandler.getElement());
keyHandler = new goog.events.KeyHandler(target);
assertEquals(target, keyHandler.getElement());
}
function testDetach() {
var target = goog.dom.createDom(goog.dom.TagName.DIV);
var keyHandler = new goog.events.KeyHandler(target);
assertEquals(target, keyHandler.getElement());
fireKeyDown(keyHandler, 0, 63, null, false, false, true);
fireKeyPress(keyHandler, 0, 63, null, false, false, true);
keyHandler.detach();
assertNull(keyHandler.getElement());
// All listeners should be cleared.
assertNull(keyHandler.keyDownKey_);
assertNull(keyHandler.keyPressKey_);
assertNull(keyHandler.keyUpKey_);
// All key related state should be cleared.
assertEquals('Last key should be -1', -1, keyHandler.lastKey_);
assertEquals('keycode should be -1', -1, keyHandler.keyCode_);
}
function testCapturePhase() {
var gotInCapturePhase;
var gotInBubblePhase;
var target = goog.dom.createDom(goog.dom.TagName.DIV);
goog.events.listen(
new goog.events.KeyHandler(target, false /* bubble */),
goog.events.KeyHandler.EventType.KEY, function() {
gotInBubblePhase = true;
assertTrue(gotInCapturePhase);
});
goog.events.listen(
new goog.events.KeyHandler(target, true /* capture */),
goog.events.KeyHandler.EventType.KEY,
function() { gotInCapturePhase = true; });
goog.testing.events.fireKeySequence(target, goog.events.KeyCodes.ESC);
assertTrue(gotInBubblePhase);
}
function fireKeyDown(
keyHandler, keyCode, opt_charCode, opt_keyIdentifier, opt_ctrlKey,
opt_altKey, opt_shiftKey) {
var fakeEvent = createFakeKeyEvent(
goog.events.EventType.KEYDOWN, keyCode, opt_charCode, opt_keyIdentifier,
opt_ctrlKey, opt_altKey, opt_shiftKey);
keyHandler.handleKeyDown_(fakeEvent);
return fakeEvent.returnValue_;
}
function fireKeyPress(
keyHandler, keyCode, opt_charCode, opt_keyIdentifier, opt_ctrlKey,
opt_altKey, opt_shiftKey) {
var fakeEvent = createFakeKeyEvent(
goog.events.EventType.KEYPRESS, keyCode, opt_charCode, opt_keyIdentifier,
opt_ctrlKey, opt_altKey, opt_shiftKey);
keyHandler.handleEvent(fakeEvent);
return fakeEvent.returnValue_;
}
function fireKeyUp(
keyHandler, keyCode, opt_charCode, opt_keyIdentifier, opt_ctrlKey,
opt_altKey, opt_shiftKey) {
var fakeEvent = createFakeKeyEvent(
goog.events.EventType.KEYUP, keyCode, opt_charCode, opt_keyIdentifier,
opt_ctrlKey, opt_altKey, opt_shiftKey);
keyHandler.handleKeyup_(fakeEvent);
return fakeEvent.returnValue_;
}
function createFakeKeyEvent(
type, keyCode, opt_charCode, opt_keyIdentifier, opt_ctrlKey, opt_altKey,
opt_shiftKey) {
var event = {
type: type,
keyCode: keyCode,
charCode: opt_charCode || undefined,
keyIdentifier: opt_keyIdentifier || undefined,
ctrlKey: opt_ctrlKey || false,
altKey: opt_altKey || false,
shiftKey: opt_shiftKey || false,
timeStamp: goog.now()
};
return new goog.events.BrowserEvent(event);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy