93 lines
2.5 KiB
HTML
93 lines
2.5 KiB
HTML
<p>This test tabs with different combinations of modifiers pressed, where some should advance focus and some should not.</p>
|
|
<div id="testDiv"></div>
|
|
<pre id="console"></pre>
|
|
|
|
<script>
|
|
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
function log(s)
|
|
{
|
|
document.getElementById('console').appendChild(document.createTextNode(s));
|
|
}
|
|
|
|
function description(element)
|
|
{
|
|
return element.getAttribute("id");
|
|
}
|
|
|
|
function keydownListener(event)
|
|
{
|
|
log("- keydown event: " + description(event.target) + "\n");
|
|
}
|
|
|
|
function blurListener(event)
|
|
{
|
|
log("- blur event: " + description(event.target) + "\n");
|
|
}
|
|
|
|
var lastFocusedElement = null;
|
|
function focusListener(event)
|
|
{
|
|
log('- focus event: ' + description(event.target) + '\n');
|
|
lastFocusedElement = event.target;
|
|
}
|
|
|
|
function addEventListeners(element)
|
|
{
|
|
element.addEventListener('keydown', keydownListener, false);
|
|
element.addEventListener('focus', focusListener, false);
|
|
element.addEventListener('blur', blurListener, false);
|
|
}
|
|
|
|
function addElements(parentElement)
|
|
{
|
|
// Add 3 input elements
|
|
var input = parentElement.ownerDocument.createElement('input');
|
|
addEventListeners(input);
|
|
input.setAttribute("id", "a");
|
|
parentElement.appendChild(input);
|
|
input = parentElement.ownerDocument.createElement('input');
|
|
addEventListeners(input);
|
|
input.setAttribute("id", "b");
|
|
parentElement.appendChild(input);
|
|
input = parentElement.ownerDocument.createElement('input');
|
|
addEventListeners(input);
|
|
input.setAttribute("id", "c");
|
|
parentElement.appendChild(input);
|
|
}
|
|
|
|
function dispatchTab(element, shiftKey, metaKey, ctrlKey, altGraphKey)
|
|
{
|
|
var event = document.createEvent("KeyboardEvents");
|
|
var tabKeyIdentifier = "U+0009";
|
|
event.initKeyboardEvent("keydown", true, true, document.defaultView, tabKeyIdentifier, 0, ctrlKey, false, shiftKey, metaKey, altGraphKey);
|
|
element.dispatchEvent(event);
|
|
}
|
|
|
|
function setup()
|
|
{
|
|
var testDiv = document.getElementById('testDiv');
|
|
addElements(testDiv);
|
|
}
|
|
|
|
setup();
|
|
|
|
var middleInput = document.getElementsByTagName('input')[1];
|
|
|
|
for (i = 0; i < 2; ++i) {
|
|
log("resetting focus to middle input\n");
|
|
middleInput.focus();
|
|
log("test tab case that should advance focus\n");
|
|
dispatchTab(middleInput, (i & 1) != 0, false, false, false);
|
|
}
|
|
for (i = 2; i < 16; ++i) {
|
|
log("resetting focus to middle input\n");
|
|
middleInput.focus();
|
|
log("test tab case that should not advance focus\n");
|
|
dispatchTab(middleInput, (i & 1) != 0, (i & 2) != 0, (i & 4) != 0, (i & 8) != 0);
|
|
}
|
|
|
|
</script>
|