Bug 1170484 - Test. r=ehsan
authorBobby Holley <bobbyholley@gmail.com>
Wed, 19 Aug 2015 23:31:16 -0700
changeset 259055 a94b60f1a7a73e45af867e9c9b1329ae251ae4a6
parent 259054 d528e1ac009c720f294168279cb79ca4969f07f9
child 259056 cf3c8f3091346a0d08184bbfae9011350afcf46c
push id29268
push userryanvm@gmail.com
push dateTue, 25 Aug 2015 00:37:23 +0000
treeherderautoland@08015770c9d6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersehsan
bugs1170484
milestone43.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 1170484 - Test. r=ehsan
extensions/spellcheck/moz.build
extensions/spellcheck/tests/mochitest/helper_bug1170484.js
extensions/spellcheck/tests/mochitest/mochitest.ini
extensions/spellcheck/tests/mochitest/test_bug1170484.html
--- a/extensions/spellcheck/moz.build
+++ b/extensions/spellcheck/moz.build
@@ -2,8 +2,9 @@
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS += ['idl', 'locales', 'hunspell', 'src']
 
 MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
+MOCHITEST_MANIFESTS += ['tests/mochitest/mochitest.ini']
new file mode 100644
--- /dev/null
+++ b/extensions/spellcheck/tests/mochitest/helper_bug1170484.js
@@ -0,0 +1,15 @@
+const Cu = Components.utils;
+const Ci = Components.interfaces;
+
+Cu.import("resource://gre/modules/Services.jsm");
+
+// Chrome scripts are run with synchronous messages, so make sure we're completely
+// decoupled from the content process before doing this work.
+Cu.dispatch(function() {
+  let chromeWin = Services.ww.activeWindow.QueryInterface(Ci.nsIDOMChromeWindow);
+  contextMenu = chromeWin.document.getElementById("contentAreaContextMenu");
+  var suggestion = contextMenu.querySelector(".spell-suggestion");
+  suggestion.doCommand();
+  contextMenu.hidePopup();
+  sendAsyncMessage("spellingCorrected");
+});
new file mode 100644
--- /dev/null
+++ b/extensions/spellcheck/tests/mochitest/mochitest.ini
@@ -0,0 +1,7 @@
+[DEFAULT]
+skip-if = buildapp == 'b2g' || os == 'android'
+
+[test_bug1170484.html]
+
+support-files =
+  helper_bug1170484.js
new file mode 100644
--- /dev/null
+++ b/extensions/spellcheck/tests/mochitest/test_bug1170484.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1170484
+-->
+<head>
+  <meta charset="utf-8">
+  <title>Test for Bug 1170484</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+  <script type="application/javascript">
+
+  /** Test for Bug 1170484 **/
+  SimpleTest.waitForExplicitFinish();
+  SpecialPowers.Cu.import("resource://gre/modules/AsyncSpellCheckTestHelper.jsm", window);
+
+  SimpleTest.waitForFocus(doTest, window);
+  function doTest() {
+    var mutations = 0;
+    var observer = new MutationObserver(() => { mutations++; });
+    observer.observe($('area'), { childList: true, characterData: true, characterDataOldValue: true, subtree: true });
+    var inputEvents = 0;
+    $('area').addEventListener('input', () => ++inputEvents);
+
+    // Clicking the contentEditable during onload doesn't seem  to do anything.
+    // Not sure why, but postponing through the event loop seems to be enough.
+    SimpleTest.executeSoon(function() {
+      synthesizeMouseAtCenter($('misspelled'), {}, window);
+      onSpellCheck($('area'), function() {
+        synthesizeMouseAtCenter($('misspelled'), {type: 'contextmenu'}, window);
+        var mm = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('helper_bug1170484.js'))
+        info("Loaded chrome script");
+        mm.addMessageListener('spellingCorrected', function() {
+          is($('area').textContent, 'testing spellcheck', "Spelling corrected properly");
+          is(mutations, 1, "Got correct number of mutations");
+          is(inputEvents, 1, "Got correct number of input events");
+          SimpleTest.finish();
+        });
+      });
+    });
+  }
+
+  </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1170484">Mozilla Bug 1170484</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+  <div id="area" contenteditable="true">testing <span id="misspelled">spellechek</span></div>
+</pre>
+</body>
+</html>