blob: 06bf07f3745f70e7de2a921f393a84d4f14e5765 [file] [log] [blame]
<!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>