diff options
Diffstat (limited to 'dom/inputmethod/mochitest/test_two_selects.html')
-rw-r--r-- | dom/inputmethod/mochitest/test_two_selects.html | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/dom/inputmethod/mochitest/test_two_selects.html b/dom/inputmethod/mochitest/test_two_selects.html new file mode 100644 index 000000000..9869b8c14 --- /dev/null +++ b/dom/inputmethod/mochitest/test_two_selects.html @@ -0,0 +1,182 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1079728 +--> +<head> + <title>Test switching between two inputs</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=1079728">Mozilla Bug 1079728</a> +<p id="display"></p> +<pre id="test"> +<script class="testbody" type="application/javascript;version=1.7"> + +inputmethod_setup(function() { + runTest(); +}); + +let appFrameScript = function appFrameScript() { + let select1 = content.document.body.firstElementChild; + let select2 = content.document.body.children[1]; + + let i = 1; + + select1.focus(); + + addMessageListener('test:next', function() { + i++; + switch (i) { + case 2: + select2.focus(); + i++; // keep the same count with the parent frame. + + break; + + case 4: + select2.blur(); + + break; + + case 5: + select2.focus(); + + break; + + case 6: + select1.focus(); + i++; // keep the same count with the parent frame. + + break; + + case 8: + content.document.body.removeChild(select1); + + break; + + case 9: + select2.focus(); + + break; + + case 10: + content.document.body.removeChild(select2); + + break; + } + }); +}; + +function runTest() { + let im = navigator.mozInputMethod; + + let i = 0; + im.oninputcontextchange = function(evt) { + var inputcontext = navigator.mozInputMethod.inputcontext; + + i++; + switch (i) { + // focus on the first input receives the first input context. + case 1: + ok(!!inputcontext, '1) Receving the first input context'); + is(inputcontext.textAfterCursor, 'First'); + + mm.sendAsyncMessage('test:next'); + break; + + // focus on the second input should implicitly blur the first input + case 2: + is(inputcontext, null, '2) Receving null inputcontext'); + + break; + + // ... and results the second input context. + case 3: + ok(!!inputcontext, '3) Receving the second input context'); + is(inputcontext.textAfterCursor, 'Second'); + + mm.sendAsyncMessage('test:next'); + break; + + // blur on the second input results null input context + case 4: + is(inputcontext, null, '4) Receving null inputcontext'); + + mm.sendAsyncMessage('test:next'); + break; + + // focus on the second input receives the second input context. + case 5: + ok(!!inputcontext, '5) Receving the second input context'); + is(inputcontext.textAfterCursor, 'Second'); + + mm.sendAsyncMessage('test:next'); + break; + + // focus on the second input should implicitly blur the first input + case 6: + is(inputcontext, null, '6) Receving null inputcontext'); + + break; + + // ... and results the second input context. + case 7: + ok(!!inputcontext, '7) Receving the first input context'); + is(inputcontext.textAfterCursor, 'First'); + + mm.sendAsyncMessage('test:next'); + break; + + // remove on the first focused input results null input context + case 8: + is(inputcontext, null, '8) Receving null inputcontext'); + + mm.sendAsyncMessage('test:next'); + break; + + // input context for the second input. + case 9: + ok(!!inputcontext, '9) Receving the second input context'); + is(inputcontext.textAfterCursor, 'Second'); + + mm.sendAsyncMessage('test:next'); + break; + + // remove on the second focused input results null input context + case 10: + is(inputcontext, null, '10) Receving null inputcontext'); + + inputmethod_cleanup(); + break; + + default: + ok(false, 'Receving extra inputcontextchange calls'); + inputmethod_cleanup(); + + break; + } + }; + + // Set current page as an input method. + SpecialPowers.wrap(im).setActive(true); + + let iframe = document.createElement('iframe'); + iframe.src = 'file_test_two_selects.html'; + iframe.setAttribute('mozbrowser', true); + document.body.appendChild(iframe); + + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + + iframe.addEventListener('mozbrowserloadend', function() { + mm.loadFrameScript('data:,(' + encodeURIComponent(appFrameScript.toString()) + ')();', false); + }); +} + +</script> +</pre> +</body> +</html> + |