
+ This does not cover on-keydown handlers within elements. A follow-up change will account for those. + Keyboard shortcuts are disabled within gr-overlay, input, and textarea elements. + Added tests for new behavior (plus some missing ones covering broken behavior). + Removed blur hacks used on elements to placate the kb shortcuts due to restrictions that have been removed. Bug: Issue 4198 Change-Id: Ide8009a3bfc340a35a8ec8b9189a85b49c8a95aa
106 lines
3.3 KiB
HTML
106 lines
3.3 KiB
HTML
<!DOCTYPE html>
|
||
<!--
|
||
Copyright (C) 2016 The Android Open Source Project
|
||
|
||
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.
|
||
-->
|
||
|
||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
|
||
<title>keyboard-shortcut-behavior</title>
|
||
|
||
<script src="../../../bower_components/webcomponentsjs/webcomponents.min.js"></script>
|
||
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
||
|
||
<link rel="import" href="../../../bower_components/iron-test-helpers/iron-test-helpers.html">
|
||
<link rel="import" href="keyboard-shortcut-behavior.html">
|
||
|
||
<test-fixture id="basic">
|
||
<template>
|
||
<test-element></test-element>
|
||
</template>
|
||
</test-fixture>
|
||
|
||
<test-fixture id="within-overlay">
|
||
<template>
|
||
<gr-overlay>
|
||
<test-element></test-element>
|
||
</gr-overlay>
|
||
</template>
|
||
</test-fixture>
|
||
|
||
<script>
|
||
suite('keyboard-shortcut-behavior tests', function() {
|
||
var element;
|
||
var overlay;
|
||
|
||
suiteSetup(function() {
|
||
// Define a Polymer element that uses this behavior.
|
||
Polymer({
|
||
is: 'test-element',
|
||
behaviors: [Gerrit.KeyboardShortcutBehavior],
|
||
keyBindings: {
|
||
'k': '_handleKey'
|
||
},
|
||
_handleKey: function() {},
|
||
});
|
||
});
|
||
|
||
setup(function() {
|
||
element = fixture('basic');
|
||
overlay = fixture('within-overlay');
|
||
});
|
||
|
||
test('doesn’t block kb shortcuts for non-whitelisted els', function(done) {
|
||
var divEl = document.createElement('div');
|
||
element.appendChild(divEl);
|
||
element._handleKey = function(e) {
|
||
assert.isFalse(element.shouldSuppressKeyboardShortcut(e));
|
||
done();
|
||
};
|
||
MockInteractions.keyDownOn(divEl, 75, null, 'k');
|
||
});
|
||
|
||
test('blocks kb shortcuts for input els', function(done) {
|
||
var inputEl = document.createElement('input');
|
||
element.appendChild(inputEl);
|
||
element._handleKey = function(e) {
|
||
assert.isTrue(element.shouldSuppressKeyboardShortcut(e));
|
||
done();
|
||
};
|
||
MockInteractions.keyDownOn(inputEl, 75, null, 'k');
|
||
});
|
||
|
||
test('blocks kb shortcuts for textarea els', function(done) {
|
||
var textareaEl = document.createElement('textarea');
|
||
element.appendChild(textareaEl);
|
||
element._handleKey = function(e) {
|
||
assert.isTrue(element.shouldSuppressKeyboardShortcut(e));
|
||
done();
|
||
};
|
||
MockInteractions.keyDownOn(textareaEl, 75, null, 'k');
|
||
});
|
||
|
||
test('blocks kb shortcuts for anything in a gr-overlay', function(done) {
|
||
var divEl = document.createElement('div');
|
||
var element = overlay.querySelector('test-element');
|
||
element.appendChild(divEl);
|
||
element._handleKey = function(e) {
|
||
assert.isTrue(element.shouldSuppressKeyboardShortcut(e));
|
||
done();
|
||
};
|
||
MockInteractions.keyDownOn(divEl, 75, null, 'k');
|
||
});
|
||
|
||
});
|
||
</script>
|