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 232793 986b480432804bee64cb9c8bd75bb01f22ade9c8
parent 232792 f589902d878343e52b2acfed6b07128aba4138be
child 232794 78627d76c4ecaaf1c78e2dec92ded6e035883bed
push id4187
push userbhearsum@mozilla.com
push dateFri, 28 Nov 2014 15:29:12 +0000
treeherdermozilla-beta@f23cc6a30c11 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersyxl
bugs1066515
milestone35.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
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>