summaryrefslogtreecommitdiffstats
path: root/dom/inputmethod/mochitest/test_bug1026997.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/inputmethod/mochitest/test_bug1026997.html')
-rw-r--r--dom/inputmethod/mochitest/test_bug1026997.html101
1 files changed, 101 insertions, 0 deletions
diff --git a/dom/inputmethod/mochitest/test_bug1026997.html b/dom/inputmethod/mochitest/test_bug1026997.html
new file mode 100644
index 000000000..3d44e6cbd
--- /dev/null
+++ b/dom/inputmethod/mochitest/test_bug1026997.html
@@ -0,0 +1,101 @@
+<!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>
+