| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| <link rel="import" href="/base/key_event_manager.html"> |
| <script> |
| 'use strict'; |
| |
| tr.b.unittest.testSuite(function() { |
| var KeyEventManager = tr.b.KeyEventManager; |
| |
| function withElementAttachedToChild(element, callback) { |
| document.body.appendChild(element); |
| try { |
| callback(); |
| } finally { |
| document.body.removeChild(element); |
| } |
| } |
| |
| |
| test('simpleDispatch', function() { |
| var kem = KeyEventManager.instance; |
| var div = document.createElement('div'); |
| |
| var fireCount = 0; |
| kem.addListener('keydown', function(e) { |
| fireCount++; |
| }, div); |
| |
| // Send an event while its attached to the document. |
| withElementAttachedToChild(div, function() { |
| var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73}); |
| assert.isUndefined(ret); |
| assert.equal(fireCount, 1); |
| }); |
| fireCount = 0; |
| |
| // Send an event while it is detached. |
| var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73}); |
| assert.isUndefined(ret); |
| assert.equal(fireCount, 0); |
| }); |
| |
| test('preventDefault', function() { |
| var kem = KeyEventManager.instance; |
| var div = document.createElement('div'); |
| |
| var fireCount = 0; |
| kem.addListener('keydown', function(e) { |
| fireCount++; |
| e.preventDefault(); |
| }, div); |
| |
| withElementAttachedToChild(div, function() { |
| var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73}); |
| assert.isFalse(ret); |
| assert.equal(fireCount, 1); |
| }); |
| |
| }); |
| |
| test('stopPropagation', function() { |
| var kem = KeyEventManager.instance; |
| var div1 = document.createElement('div'); |
| var div2 = document.createElement('div'); |
| |
| var didFire = false; |
| kem.addListener('keydown', function(e) { |
| e.stopPropagation(); |
| }, div1); |
| kem.addListener('keydown', function(e) { |
| throw new Error('Should never get called'); |
| }, div2); |
| |
| withElementAttachedToChild(div1, function() { |
| withElementAttachedToChild(div2, function() { |
| var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73}); |
| assert.isUndefined(ret); |
| }); |
| }); |
| }); |
| |
| test('removeListener', function() { |
| var kem = KeyEventManager.instance; |
| var div = document.createElement('div'); |
| |
| var handlerFired = false; |
| function handler(e) { |
| handlerFired = true; |
| } |
| kem.addListener('keydown', handler, div); |
| kem.removeListener('keydown', handler, div); |
| assert.equal('', div.className); |
| |
| withElementAttachedToChild(div, function() { |
| var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73}); |
| assert.isFalse(handlerFired); |
| }); |
| }); |
| |
| test('removeOneListener', function() { |
| var kem = KeyEventManager.instance; |
| var div = document.createElement('div'); |
| |
| var handlerAFired = false; |
| function handlerA(e) { |
| handlerAFired = true; |
| } |
| var handlerBFired = false; |
| function handlerB(e) { |
| handlerBFired = true; |
| } |
| kem.addListener('keydown', handlerA, div); |
| kem.addListener('keydown', handlerB, div); |
| kem.removeListener('keydown', handlerA, div); |
| assert.isTrue(div.classList.contains('key-event-manager-target')); |
| |
| withElementAttachedToChild(div, function() { |
| var ret = kem.dispatchFakeEvent('keydown', {keyCode: 73}); |
| assert.isFalse(handlerAFired); |
| assert.isTrue(handlerBFired); |
| }); |
| }); |
| |
| |
| }); |
| </script> |