| <html> |
| <head> |
| <title></title> |
| </head> |
| <body> |
| <p>This tests that calling input-method functions sends Composition Events and Text Events introduced in DOM Level 3.</p> |
| <p>To test manually, enable an IME, input CJK characters, and see this page doesn't show 'FAILED' lines.</p> |
| <input id="test" type="text"/> |
| <ul id="console"></ul> |
| <script language="javascript" type="text/javascript"> |
| function log(str) { |
| var li = document.createElement('li'); |
| li.appendChild(document.createTextNode(str)); |
| var console = document.getElementById('console'); |
| console.appendChild(li); |
| } |
| |
| function logEvent(e) { |
| var target = e.target; |
| var type = e.type; |
| if (e.type == 'compositionstart' || e.type == 'compositionupdate' || e.type == 'compositionend' || e.type == 'textInput') |
| log('SUCCESS: ' + target.tagName + ' - ' + e.type + ' - "' + e.data + '"'); |
| else |
| log('FAILED: ' + target.tagName + ' - ' + e.type + ' - "' + e.data + '"'); |
| } |
| |
| var test = document.getElementById('test'); |
| test.focus(); |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| |
| // Add event listeners to the <input> node. |
| test.addEventListener("compositionstart", logEvent, false); |
| test.addEventListener("compositionupdate", logEvent, false); |
| test.addEventListener("compositionend", logEvent, false); |
| test.addEventListener("textInput", logEvent, false); |
| |
| // Case 1: Compose a text and commit it. |
| textInputController.setMarkedText('1', 0, 1); |
| textInputController.setMarkedText('2', 0, 1); |
| textInputController.setMarkedText('3', 0, 1); |
| textInputController.insertText('4'); |
| |
| // Case 2: Compose a text but cancel it. |
| textInputController.setMarkedText('5', 0, 1); |
| textInputController.setMarkedText('6', 0, 1); |
| textInputController.setMarkedText('7', 0, 1); |
| textInputController.setMarkedText('', 0, 0); |
| |
| // Case 3: Insert a text without composition. |
| textInputController.insertText('8'); |
| |
| // Case 4: Compose a text and commit it by removing the mark. |
| // Only Mac and Chromium ports support unmarkText. |
| if (textInputController.unmarkText) { |
| textInputController.setMarkedText('9', 0, 1); |
| textInputController.unmarkText(); |
| } |
| |
| // Case 5: Compose a text on selection and commit it. |
| test.value = 'I have a pen'; |
| test.selectionStart = 2; |
| test.selectionEnd = 6; |
| textInputController.setMarkedText('lost', 0, 1); |
| textInputController.insertText('made'); |
| if (test.value == 'I made a pen') |
| log('SUCCESS: ' + test.value); |
| else |
| log('FAILURE: ' + test.value + ' is not "I made a pen".'); |
| } |
| </script> |
| </body> |
| </html> |