| <div> |
| This tests a subset of pseudo-kotoeri behaviour: |
| <ul> |
| <li>All keydown events never result in keypress during composition</li> |
| <li>During composition all keydown events should have keyCode 229, this is necessary to match the behaviour of windows browsers, including WebKit/Win</li> |
| </ul> |
| To test this manually switch to the Kotoeri/Hiragana input method, and type 'toukyou'<enter><enter>.<br /> |
| You should see only a single keypress event, as the very last reported event. |
| </div> |
| <input id="targetInput" onkeydown="keyDown()" onkeyup="keyUp()" onkeypress="keyPress()"> |
| <ul id="console"></console> |
| |
| <script src="resources/logger.js"></script> |
| <script src="resources/kotoeri.js"></script> |
| <script> |
| var shouldBeCompositionEvent = false; |
| function keyDown() { |
| log("keydown : keyCode == " + event.keyCode + ", key: " + event.key + ", isComposing: " + event.isComposing); |
| if (!window.testRunner) |
| return; |
| |
| if (shouldBeCompositionEvent && event.keyCode != 229) |
| log("FAILURE: received keyCode " + event.keyCode + " in a keydown when VK_PROCESSKEY is expected"); |
| else if (!shouldBeCompositionEvent && event.keyCode == 229) |
| log("FAILURE: received a keyDown with VK_PROCESSKEY as the keyCode, when an actual key code was expected."); |
| else |
| log("Received valid keydown event"); |
| } |
| |
| function keyUp() { |
| log("keyup : keyCode == " + event.keyCode + ", key: " + event.key + ", isComposing: " + event.isComposing); |
| } |
| |
| function keyPress() { |
| if (!window.testRunner) { |
| log("keypress : keyCode == " + event.keyCode); |
| return; |
| } |
| if (shouldBeCompositionEvent) |
| log("FAILURE: received keypress event during composition"); |
| else |
| log("Received valid keypress event"); |
| } |
| |
| var targetInput = document.getElementById('targetInput'); |
| targetInput.addEventListener("compositionstart", function() { log("compositionstart"); }); |
| targetInput.addEventListener("compositionupdate", function() { log("compositionupdate"); }); |
| targetInput.addEventListener("compositionend", function() { log("compositionend"); }); |
| targetInput.focus(); |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| textInputController.setInputMethodHandler(kotoeri); |
| shouldBeCompositionEvent = true; |
| eventSender.keyDown('t'); |
| eventSender.keyDown('o'); |
| eventSender.keyDown('u'); |
| eventSender.keyDown('k'); |
| eventSender.keyDown('y'); |
| eventSender.keyDown('o'); |
| eventSender.keyDown('u'); |
| eventSender.keyDown('\n'); |
| shouldBeCompositionEvent = false; |
| eventSender.keyDown('\n'); |
| if (targetInput.value != "toukyou") |
| log("FAILED: Input field should countain the text 'toukyou'"); |
| else |
| log("PASSED: Successfully typed 'toukyou'"); |
| } |
| </script> |