| // 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; |
| } |