Bug 1066515 - Part 2: Add replaceSurroundingText() test cases for content editable element. r=yxl
authorTing-Yu Chou <janus926@gmail.com>
Thu, 09 Oct 2014 16:24:50 +0800
changeset 209578 986b480432804bee64cb9c8bd75bb01f22ade9c8
parent 209577 f589902d878343e52b2acfed6b07128aba4138be
child 209579 78627d76c4ecaaf1c78e2dec92ded6e035883bed
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewersyxl
bugs1066515
milestone35.0a1
Bug 1066515 - Part 2: Add replaceSurroundingText() test cases for content editable element. r=yxl
dom/inputmethod/mochitest/file_test_sms_app_1066515.html
dom/inputmethod/mochitest/mochitest.ini
dom/inputmethod/mochitest/test_bug1066515.html
new file mode 100644
--- /dev/null
+++ b/dom/inputmethod/mochitest/file_test_sms_app_1066515.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML>
+<html>
+<body>
+  <div id="messages-input" x-inputmode="-moz-sms" contenteditable="true"
+    autofocus="autofocus">fxos<br>hello <b>world</b></div>
+  <script type="application/javascript;version=1.7">
+    let input = document.getElementById('messages-input');
+    input.focus();
+  </script>
+</body>
+</html>
+ </div>
+</body>
+</html>
--- a/dom/inputmethod/mochitest/mochitest.ini
+++ b/dom/inputmethod/mochitest/mochitest.ini
@@ -3,20 +3,22 @@
 skip-if = (toolkit == 'android' || toolkit == 'gonk') || e10s
 support-files =
   inputmethod_common.js
   file_inputmethod.html
   file_inputmethod_1043828.html
   file_test_app.html
   file_test_sendkey_cancel.html
   file_test_sms_app.html
+  file_test_sms_app_1066515.html
 
 [test_basic.html]
 [test_bug944397.html]
 [test_bug949059.html]
 [test_bug953044.html]
 [test_bug960946.html]
 [test_bug978918.html]
 [test_bug1026997.html]
 [test_bug1043828.html]
+[test_bug1066515.html]
 [test_delete_focused_element.html]
 [test_sendkey_cancel.html]
 [test_two_inputs.html]
new file mode 100644
--- /dev/null
+++ b/dom/inputmethod/mochitest/test_bug1066515.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1066515
+-->
+<head>
+  <meta charset="utf-8">
+  <title>Test for Bug 1066515</title>
+  <script type="application/javascript;version=1.7" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript;version=1.7" src="inputmethod_common.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1066515">Mozilla Bug 1066515</a>
+<p id="display"></p>
+<pre id="test">
+<script class="testbody" type="application/javascript;version=1.7">
+
+// The input context.
+var gContext = null;
+
+inputmethod_setup(function() {
+  runTest();
+});
+
+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_replaceSurroundingTextWithinTextNode();
+  };
+
+  // Set current page as an input method.
+  SpecialPowers.wrap(im).setActive(true);
+
+  let iframe = document.createElement('iframe');
+  iframe.src = 'file_test_sms_app_1066515.html';
+  iframe.setAttribute('mozbrowser', true);
+  document.body.appendChild(iframe);
+}
+
+function test_replaceSurroundingTextWithinTextNode() {
+  // Set cursor position after 'f'.
+  gContext.setSelectionRange(1, 0);
+
+  // Replace 'fxos' to 'Hitooo' which the range is within current text node.
+  gContext.replaceSurroundingText('Hitooo', -1, 4).then(function() {
+    gContext.getText().then(function(text) {
+      is(text, 'Hitooo\nhello world', 'replaceSurroundingText successfully.');
+      test_replaceSurroundingTextSpanMultipleNodes();
+    }, function(e) {
+      ok(false, 'getText failed: ' + e.name);
+      inputmethod_cleanup();
+    });
+  }, function(e) {
+    ok(false, 'replaceSurroundingText failed: ' + e.name);
+    inputmethod_cleanup();
+  });
+}
+
+function test_replaceSurroundingTextSpanMultipleNodes() {
+  // Set cursor position to the beginning.
+  gContext.setSelectionRange(0, 0);
+
+  // Replace whole content editable element to 'abc'.
+  gContext.replaceSurroundingText('abc', 0, 100).then(function() {
+    gContext.getText().then(function(text) {
+      is(text, 'abc', 'replaceSurroundingText successfully.');
+      inputmethod_cleanup();
+    }, function(e) {
+      ok(false, 'getText failed: ' + e.name);
+      inputmethod_cleanup();
+    });
+  }, function(e) {
+    ok(false, 'replaceSurroundingText failed: ' + e.name);
+    inputmethod_cleanup();
+  });
+}
+
+</script>
+</pre>
+</body>
+</html>