| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script> |
| description('Test that ensure textInput events should not fired when preceding key events are cancelled'); |
| |
| var targetRoot = document.createElement("div"); |
| targetRoot.innerHTML += "<input type='text' id='targetInput' />"; |
| targetRoot.innerHTML += "<textarea id='targetTextarea'></textarea>"; |
| targetRoot.innerHTML += "<div id='targetEditable' contentEditable></div>"; |
| document.body.appendChild(targetRoot); |
| |
| var targetInput = document.getElementById("targetInput"); |
| var targetTextarea = document.getElementById("targetTextarea"); |
| var targetEditable = document.getElementById("targetEditable"); |
| |
| var receivedEventTarget = null; |
| |
| function handleTextInput(evt) |
| { |
| receivedEventTarget = evt.target; |
| } |
| |
| var shouldCancel = false; |
| |
| function mayCancel(evt) |
| { |
| if (shouldCancel) |
| evt.preventDefault(); |
| } |
| |
| targetInput.addEventListener("textInput", handleTextInput); |
| targetInput.addEventListener("keydown", mayCancel); |
| targetTextarea.addEventListener("textInput", handleTextInput); |
| targetTextarea.addEventListener("keydown", mayCancel); |
| targetEditable.addEventListener("textInput", handleTextInput); |
| targetEditable.addEventListener("keydown", mayCancel); |
| |
| function setup(tocancel) |
| { |
| receivedEventTarget = null; |
| shouldCancel = tocancel; |
| } |
| |
| function test(targetNode) |
| { |
| window.targetNode = targetNode; |
| setup(false); |
| eventSender.keyDown("a"); |
| shouldBe("window.targetNode", "receivedEventTarget"); |
| setup(true); |
| eventSender.keyDown("a"); |
| shouldBe("null", "receivedEventTarget"); |
| } |
| |
| targetInput.focus(); |
| test(targetInput); |
| |
| targetTextarea.focus(); |
| test(targetTextarea); |
| |
| window.getSelection().setBaseAndExtent(targetEditable, 0, targetEditable, 0); |
| test(targetEditable); |
| |
| targetRoot.style.display = "none"; |
| |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |