blob: 2ef4c5bb7374687e974583e0e8d4cd46d656deef [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="/tracing/base/event.html">
<link rel="import" href="/tracing/ui/base/hotkey_controller.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var KeyEventManager = tr.b.KeyEventManager;
function newKeyEvent(eventType, dict) {
var e = new tr.b.Event(eventType, true, true);
if (dict.keyCode === undefined)
throw new Error('keyCode required');
e.keyCode = dict.keyCode;
return e;
}
test('simpleHotkeyManager', function() {
var rootElement = document.createElement('div');
Polymer.dom(document.body).appendChild(rootElement);
try {
var elementShadow = rootElement.createShadowRoot();
var hkc = document.createElement('tv-ui-b-hotkey-controller');
Polymer.dom(elementShadow).appendChild(hkc);
var subElement = document.createElement('div');
Polymer.dom(elementShadow).appendChild(subElement);
assert.equal(tr.b.getHotkeyControllerForElement(subElement), hkc);
var didGetCalled = false;
hkc.addHotKey(new tr.ui.b.HotKey({
eventType: 'keydown',
keyCode: 73, useCapture: true,
callback: function() {
didGetCalled = true;
}
}));
// Ensure it is called when events target the root element.
var e = newKeyEvent('keydown', {keyCode: 73});
rootElement.dispatchEvent(e);
assert.isTrue(didGetCalled);
// Ensure it is still called when we target the sub element.
didGetCalled = false;
var e = newKeyEvent('keydown', {keyCode: 73});
subElement.dispatchEvent(e);
assert.isTrue(didGetCalled);
} finally {
Polymer.dom(document.body).removeChild(rootElement);
}
});
test('nestedHotkeyController', function() {
var rootElement = document.createElement('div');
Polymer.dom(document.body).appendChild(rootElement);
try {
var elementShadow = rootElement.createShadowRoot();
var hkc = document.createElement('tv-ui-b-hotkey-controller');
Polymer.dom(elementShadow).appendChild(hkc);
var subElement = document.createElement('div');
Polymer.dom(elementShadow).appendChild(subElement);
assert.equal(tr.b.getHotkeyControllerForElement(elementShadow), hkc);
var subHKC = document.createElement('tv-ui-b-hotkey-controller');
Polymer.dom(subElement).appendChild(subHKC);
assert.equal(tr.b.getHotkeyControllerForElement(subElement), subHKC);
var didGetCalled = false;
subHKC.addHotKey(new tr.ui.b.HotKey({
eventType: 'keydown',
keyCode: 73, useCapture: true,
callback: function() {
didGetCalled = true;
}
}));
// Ensure it is called when events target the root element.
var e = newKeyEvent('keydown', {keyCode: 73});
rootElement.dispatchEvent(e);
assert.isTrue(didGetCalled);
} finally {
Polymer.dom(document.body).removeChild(rootElement);
}
});
test('inputInsideHKC', function() {
var rootElement = document.createElement('div');
Polymer.dom(document.body).appendChild(rootElement);
try {
var elementShadow = rootElement.createShadowRoot();
var hkc = document.createElement('tv-ui-b-hotkey-controller');
Polymer.dom(elementShadow).appendChild(hkc);
var inputEl = document.createElement('input');
Polymer.dom(elementShadow).appendChild(inputEl);
var didGetCalled = false;
hkc.addHotKey(new tr.ui.b.HotKey({
eventType: 'keypress',
keyCode: 'a'.charCodeAt(0), useCapture: false,
callback: function() {
didGetCalled = true;
}
}));
// Ensure it is called when events target the root element.
didGetCalled = false;
var e = newKeyEvent('keypress', {keyCode: 'a'.charCodeAt(0)});
rootElement.dispatchEvent(e);
assert.isTrue(didGetCalled);
// Handler should NOT be called when events target the input element.
didGetCalled = false;
var e = newKeyEvent('keypress', {keyCode: 'a'.charCodeAt(0)});
inputEl.dispatchEvent(e);
assert.isFalse(didGetCalled);
} finally {
Polymer.dom(document.body).removeChild(rootElement);
}
});
});
</script>