blob: 1969c2c51d9495141bbedca97316ea6a95b07a35 [file] [log] [blame]
<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>