<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=960946 --> <head> <title>Basic test for repeat sendKey events</title> <script type="application/javascript;version=1.7" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript;version=1.7" src="inputmethod_common.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=960946">Mozilla Bug 960946</a> <p id="display"></p> <pre id="test"> <script class="testbody" type="application/javascript;version=1.7"> // The input context. var gContext = null; var gCounter = 0; var gBackSpaceCounter = 0; var result = ["keydown", "keypress", "keydown","keypress", "keydown", "keypress", "keyup" ]; inputmethod_setup(function() { runTest(); }); var input; // The frame script running in file_test_backspace_event.html. function appFrameScript() { let input = content.document.getElementById('test-input'); input.onkeydown = input.onkeypress = input.onkeyup = function(event) { dump('key event was fired in file_test_backspace_event.html: ' + event.type +'\n'); sendAsyncMessage('test:KeyBoard:keyEvent', {'type':event.type}); }; } function runTest() { let im = navigator.mozInputMethod; im.oninputcontextchange = function() { ok(true, 'inputcontextchange event was fired.'); im.oninputcontextchange = null; gContext = im.inputcontext; if (!gContext) { ok(false, 'Should have a non-null inputcontext.'); inputmethod_cleanup(); return; } test_sendKey(); }; // Set current page as an input method. SpecialPowers.wrap(im).setActive(true); // Create an app frame to recieve keyboard inputs. let app = document.createElement('iframe'); app.src = 'file_test_app.html'; app.setAttribute('mozbrowser', true); document.body.appendChild(app); app.addEventListener('mozbrowserloadend', function() { let mm = SpecialPowers.getBrowserFrameMessageManager(app); mm.loadFrameScript('data:,(' + appFrameScript.toString() + ')();', false); mm.addMessageListener("test:KeyBoard:keyEvent", function(event) { ok(true, 'Keyboard input was received.'); is(SpecialPowers.wrap(event).json.type, result[gCounter], "expected event"); gCounter++; }); }); } function test_sendKey() { // Move cursor position to 4. gContext.setSelectionRange(4, 0).then(function() { is(gContext.selectionStart, 4, 'selectionStart was set successfully.'); is(gContext.selectionEnd, 4, 'selectionEnd was set successfully.'); for(let i = 0; i < 2; i++) { test_sendBackspace(true); } test_sendBackspace(false); }, function(e) { ok(false, 'setSelectionRange failed:' + e.name); inputmethod_cleanup(); }); } function test_sendBackspace(repeat) { // Send backspace gContext.sendKey(KeyEvent.DOM_VK_BACK_SPACE, 0, 0, repeat).then(function() { ok(true, 'sendKey success'); gBackSpaceCounter++; if (gBackSpaceCounter == 3) { inputmethod_cleanup(); } }, function(e) { ok(false, 'sendKey failed:' + e.name); inputmethod_cleanup(); }); } </script> </pre> </body> </html>