1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 base.require('base.key_event_manager');
9 base.unittest.testSuite('base.key_event_manager', function() {
10 var KeyEventManager = base.KeyEventManager;
12 function withElementAttachedToChild(element, callback) {
13 document.body.appendChild(element);
17 document.body.removeChild(element);
22 test('simpleDispatch', function() {
23 var kem = KeyEventManager.instance;
24 var div = document.createElement('div');
27 kem.addListener('keydown', function(e) {
31 // Send an event while its attached to the document.
32 withElementAttachedToChild(div, function() {
33 var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
34 assertTrue(ret == undefined);
35 assertEquals(1, fireCount);
39 // Send an event while it is detached.
40 var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
41 assertTrue(ret == undefined);
42 assertEquals(0, fireCount);
45 test('preventDefault', function() {
46 var kem = KeyEventManager.instance;
47 var div = document.createElement('div');
50 kem.addListener('keydown', function(e) {
55 withElementAttachedToChild(div, function() {
56 var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
57 assertTrue(ret == false);
58 assertEquals(1, fireCount);
63 test('stopPropagation', function() {
64 var kem = KeyEventManager.instance;
65 var div1 = document.createElement('div');
66 var div2 = document.createElement('div');
69 kem.addListener('keydown', function(e) {
72 kem.addListener('keydown', function(e) {
73 throw new Error('Should never get called');
76 withElementAttachedToChild(div1, function() {
77 withElementAttachedToChild(div2, function() {
78 var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
79 assertTrue(ret == undefined);
84 test('removeListener', function() {
85 var kem = KeyEventManager.instance;
86 var div = document.createElement('div');
88 var handlerFired = false;
92 kem.addListener('keydown', handler, div);
93 kem.removeListener('keydown', handler, div);
94 assertEquals(div.className, '');
96 withElementAttachedToChild(div, function() {
97 var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
98 assertFalse(handlerFired);
102 test('removeOneListener', function() {
103 var kem = KeyEventManager.instance;
104 var div = document.createElement('div');
106 var handlerAFired = false;
107 function handlerA(e) {
108 handlerAFired = true;
110 var handlerBFired = false;
111 function handlerB(e) {
112 handlerBFired = true;
114 kem.addListener('keydown', handlerA, div);
115 kem.addListener('keydown', handlerB, div);
116 kem.removeListener('keydown', handlerA, div);
117 assertTrue(div.classList.contains('key-event-manager-target'));
119 withElementAttachedToChild(div, function() {
120 var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73});
121 assertFalse(handlerAFired);
122 assertTrue(handlerBFired);