diff options
Diffstat (limited to 'dom/inputmethod/mochitest/test_bug960946.html')
-rw-r--r-- | dom/inputmethod/mochitest/test_bug960946.html | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/dom/inputmethod/mochitest/test_bug960946.html b/dom/inputmethod/mochitest/test_bug960946.html new file mode 100644 index 000000000..f65ff42e7 --- /dev/null +++ b/dom/inputmethod/mochitest/test_bug960946.html @@ -0,0 +1,108 @@ +<!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> + |