123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <!DOCTYPE HTML>
- <html>
- <!--
- https://bugzilla.mozilla.org/show_bug.cgi?id=1026997
- -->
- <head>
- <title>SelectionChange on InputMethod API.</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=1026997">Mozilla Bug 1026997</a>
- <p id="display"></p>
- <pre id="test">
- <script class="testbody" type="application/javascript;version=1.7">
- inputmethod_setup(function() {
- runTest();
- });
- // The frame script running in file_test_app.html.
- function appFrameScript() {
- let input = content.document.getElementById('test-input');
- input.focus();
- function next(start, end) {
- input.setSelectionRange(start, end);
- }
- addMessageListener("test:KeyBoard:nextSelection", function(event) {
- let json = event.json;
- next(json[0], json[1]);
- });
- }
- function runTest() {
- let actions = [
- [0, 4],
- [1, 1],
- [3, 3],
- [2, 3]
- ];
- let counter = 0;
- let mm = null;
- let ic = null;
- let im = navigator.mozInputMethod;
- im.oninputcontextchange = function() {
- ok(true, 'inputcontextchange event was fired.');
- im.oninputcontextchange = null;
- ic = im.inputcontext;
- if (!ic) {
- ok(false, 'Should have a non-null inputcontext.');
- inputmethod_cleanup();
- return;
- }
- ic.onselectionchange = function() {
- is(ic.selectionStart, actions[counter][0], "start");
- is(ic.selectionEnd, actions[counter][1], "end");
- if (++counter === actions.length) {
- inputmethod_cleanup();
- return;
- }
- next();
- };
- next();
- };
- // 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() {
- mm = SpecialPowers.getBrowserFrameMessageManager(app);
- mm.loadFrameScript('data:,(' + appFrameScript.toString() + ')();', false);
- next();
- });
- function next() {
- if (ic && mm) {
- mm.sendAsyncMessage('test:KeyBoard:nextSelection', actions[counter]);
- }
- }
- }
- </script>
- </pre>
- </body>
- </html>
|