| <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> |