271 lines
9.8 KiB
JavaScript
271 lines
9.8 KiB
JavaScript
// Copyright 2009 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.actionEventWrapperTest');
|
|
goog.setTestOnly('goog.events.actionEventWrapperTest');
|
|
|
|
goog.require('goog.a11y.aria');
|
|
goog.require('goog.a11y.aria.Role');
|
|
goog.require('goog.events');
|
|
goog.require('goog.events.EventHandler');
|
|
goog.require('goog.events.KeyCodes');
|
|
goog.require('goog.events.actionEventWrapper');
|
|
goog.require('goog.testing.events');
|
|
goog.require('goog.testing.jsunit');
|
|
var a, eh, events;
|
|
|
|
function setUpPage() {
|
|
a = document.getElementById('a');
|
|
}
|
|
|
|
function setUp() {
|
|
events = [];
|
|
eh = new goog.events.EventHandler();
|
|
|
|
assertEquals('No listeners registered yet', 0,
|
|
goog.events.getListeners(a).length);
|
|
}
|
|
|
|
|
|
function tearDown() {
|
|
eh.dispose();
|
|
}
|
|
|
|
var Foo = function() {};
|
|
Foo.prototype.test = function(e) {
|
|
events.push(e);
|
|
};
|
|
|
|
function assertListenersExist(el, listenerCount, capt) {
|
|
var EVENT_TYPES = goog.events.ActionEventWrapper_.EVENT_TYPES_;
|
|
for (var i = 0; i < EVENT_TYPES.length; ++i) {
|
|
assertEquals(listenerCount, goog.events.getListeners(
|
|
el, EVENT_TYPES[i], capt).length);
|
|
}
|
|
}
|
|
|
|
function testAddActionListener() {
|
|
var listener = function(e) { events.push(e);};
|
|
goog.events.listenWithWrapper(a, goog.events.actionEventWrapper, listener);
|
|
|
|
assertListenersExist(a, 1, false);
|
|
|
|
goog.testing.events.fireClickSequence(a);
|
|
assertEquals('1 event should have been dispatched', 1, events.length);
|
|
assertEquals('Should be an click event', 'click', events[0].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[1].type);
|
|
|
|
goog.a11y.aria.setRole(
|
|
/** @type {!Element} */ (a), goog.a11y.aria.Role.BUTTON);
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('3 events should have been dispatched', 3, events.length);
|
|
assertEquals('Should be a keyup event', 'keyup', events[2].type);
|
|
assertTrue('Should be default prevented.', events[2].defaultPrevented);
|
|
goog.a11y.aria.removeRole(/** @type {!Element} */ (a));
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('3 events should have been dispatched', 3, events.length);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ESC);
|
|
assertEquals('3 events should have been dispatched', 3, events.length);
|
|
|
|
goog.a11y.aria.setRole(
|
|
/** @type {!Element} */ (a), goog.a11y.aria.Role.TAB);
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('4 events should have been dispatched', 4, events.length);
|
|
assertEquals('Should be a keyup event', 'keyup', events[2].type);
|
|
assertTrue('Should be default prevented.', events[2].defaultPrevented);
|
|
goog.a11y.aria.removeRole(/** @type {!Element} */ (a));
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('4 events should have been dispatched', 4, events.length);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ESC);
|
|
assertEquals('4 events should have been dispatched', 4, events.length);
|
|
|
|
goog.events.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
listener);
|
|
assertListenersExist(a, 0, false);
|
|
}
|
|
|
|
|
|
function testAddActionListenerForHandleEvent() {
|
|
var listener = {
|
|
handleEvent: function(e) { events.push(e); }
|
|
};
|
|
goog.events.listenWithWrapper(a, goog.events.actionEventWrapper, listener);
|
|
|
|
assertListenersExist(a, 1, false);
|
|
|
|
goog.testing.events.fireClickSequence(a);
|
|
assertEquals('1 event should have been dispatched', 1, events.length);
|
|
assertEquals('Should be an click event', 'click', events[0].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[1].type);
|
|
|
|
goog.a11y.aria.setRole(
|
|
/** @type {!Element} */ (a), goog.a11y.aria.Role.BUTTON);
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('3 events should have been dispatched', 3, events.length);
|
|
assertEquals('Should be a keyup event', 'keyup', events[2].type);
|
|
assertTrue('Should be default prevented.', events[2].defaultPrevented);
|
|
goog.a11y.aria.removeRole(/** @type {!Element} */ (a));
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('3 events should have been dispatched', 3, events.length);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ESC);
|
|
assertEquals('3 events should have been dispatched', 3, events.length);
|
|
|
|
goog.events.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
listener);
|
|
assertListenersExist(a, 0, false);
|
|
}
|
|
|
|
|
|
function testAddActionListenerInCaptPhase() {
|
|
var count = 0;
|
|
var captListener = function(e) {
|
|
events.push(e);
|
|
assertEquals(0, count);
|
|
count++;
|
|
};
|
|
|
|
var bubbleListener = function(e) {
|
|
events.push(e);
|
|
assertEquals(1, count);
|
|
count = 0;
|
|
};
|
|
|
|
goog.events.listenWithWrapper(a, goog.events.actionEventWrapper,
|
|
captListener, true);
|
|
|
|
goog.events.listenWithWrapper(a, goog.events.actionEventWrapper,
|
|
bubbleListener);
|
|
|
|
assertListenersExist(a, 1, false);
|
|
assertListenersExist(a, 1, true);
|
|
|
|
goog.testing.events.fireClickSequence(a);
|
|
assertEquals('2 event should have been dispatched', 2, events.length);
|
|
assertEquals('Should be an click event', 'click', events[0].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('4 events should have been dispatched', 4, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[2].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('4 events should have been dispatched', 4, events.length);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ESC);
|
|
assertEquals('4 events should have been dispatched', 4, events.length);
|
|
|
|
goog.events.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
captListener, true);
|
|
goog.events.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
bubbleListener);
|
|
|
|
assertListenersExist(a, 0, false);
|
|
assertListenersExist(a, 0, true);
|
|
}
|
|
|
|
|
|
function testRemoveActionListener() {
|
|
var listener1 = function(e) { events.push(e); };
|
|
var listener2 = function(e) { events.push({type: 'err'}); };
|
|
|
|
goog.events.listenWithWrapper(a, goog.events.actionEventWrapper, listener1);
|
|
assertListenersExist(a, 1, false);
|
|
|
|
goog.events.listenWithWrapper(a, goog.events.actionEventWrapper, listener2);
|
|
assertListenersExist(a, 2, false);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[0].type);
|
|
assertEquals('Should be an err event', 'err', events[1].type);
|
|
|
|
goog.events.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
listener2);
|
|
assertListenersExist(a, 1, false);
|
|
|
|
events = [];
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('1 event should have been dispatched', 1, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[0].type);
|
|
|
|
goog.events.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
listener1);
|
|
assertListenersExist(a, 0, false);
|
|
}
|
|
|
|
|
|
function testEventHandlerActionListener() {
|
|
var listener = function(e) { events.push(e); };
|
|
eh.listenWithWrapper(a, goog.events.actionEventWrapper, listener);
|
|
|
|
assertListenersExist(a, 1, false);
|
|
|
|
goog.testing.events.fireClickSequence(a);
|
|
assertEquals('1 event should have been dispatched', 1, events.length);
|
|
assertEquals('Should be an click event', 'click', events[0].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[1].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ESC);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
|
|
eh.unlistenWithWrapper(a, goog.events.actionEventWrapper,
|
|
listener);
|
|
assertListenersExist(a, 0, false);
|
|
}
|
|
|
|
|
|
function testEventHandlerActionListenerWithScope() {
|
|
var foo = new Foo();
|
|
var eh2 = new goog.events.EventHandler(foo);
|
|
|
|
eh2.listenWithWrapper(a, goog.events.actionEventWrapper, foo.test);
|
|
|
|
assertListenersExist(a, 1, false);
|
|
|
|
goog.testing.events.fireClickSequence(a);
|
|
assertEquals('1 event should have been dispatched', 1, events.length);
|
|
assertEquals('Should be an click event', 'click', events[0].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ENTER);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
assertEquals('Should be a keypress event', 'keypress', events[1].type);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.SPACE);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
|
|
goog.testing.events.fireKeySequence(a, goog.events.KeyCodes.ESC);
|
|
assertEquals('2 events should have been dispatched', 2, events.length);
|
|
|
|
eh2.dispose();
|
|
assertListenersExist(a, 0, false);
|
|
delete foo;
|
|
}
|