Bug 1255919 - Convert the test for bug 629172 into a browser-chrome test that is enabled on e10s; r=mrbkap
☠☠ backed out by 4dceeab3d7c5 ☠ ☠
authorEhsan Akhgari <ehsan@mozilla.com>
Mon, 14 Mar 2016 15:57:40 -0400
changeset 288625 cc8b02b24319e086ddbf5ca4035818423ff0c8d5
parent 288624 d29d4a17954b86f4e390c847887f5b24b5d28fdc
child 288626 04ea7a18573df2a6b3b9f9e58f4a0c0d8a281d2f
push id30087
push usercbook@mozilla.com
push dateTue, 15 Mar 2016 09:43:43 +0000
treeherdermozilla-central@5e14887312d4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmrbkap
bugs1255919, 629172
milestone48.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 1255919 - Convert the test for bug 629172 into a browser-chrome test that is enabled on e10s; r=mrbkap
editor/libeditor/moz.build
editor/libeditor/tests/browser.ini
editor/libeditor/tests/browser_bug629172.js
editor/libeditor/tests/bug629172.html
editor/libeditor/tests/mochitest.ini
editor/libeditor/tests/test_bug629172.html
--- a/editor/libeditor/moz.build
+++ b/editor/libeditor/moz.build
@@ -6,16 +6,18 @@
 
 MOCHITEST_MANIFESTS += [
     'tests/browserscope/mochitest.ini',
     'tests/mochitest.ini',
 ]
 
 MOCHITEST_CHROME_MANIFESTS += ['tests/chrome.ini']
 
+BROWSER_CHROME_MANIFESTS += ['tests/browser.ini']
+
 UNIFIED_SOURCES += [
     'ChangeAttributeTxn.cpp',
     'ChangeStyleTxn.cpp',
     'CreateElementTxn.cpp',
     'DeleteNodeTxn.cpp',
     'DeleteRangeTxn.cpp',
     'DeleteTextTxn.cpp',
     'EditAggregateTxn.cpp',
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/tests/browser.ini
@@ -0,0 +1,3 @@
+[browser_bug629172.js]
+skip-if = toolkit == 'android'
+support-files = bug629172.html
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/tests/browser_bug629172.js
@@ -0,0 +1,97 @@
+add_task(function*() {
+  yield new Promise(resolve => waitForFocus(resolve, window));
+
+  const kPageURL = "http://example.org/browser/editor/libeditor/tests/bug629172.html";
+  yield BrowserTestUtils.withNewTab({
+    gBrowser,
+    url: kPageURL
+  }, function*(aBrowser) {
+    yield ContentTask.spawn(aBrowser, {}, function*() {
+      var window = content.window.wrappedJSObject;
+      var document = window.document;
+
+      // Note: Using the with keyword, we would have been able to write this as:
+      //
+      // with (window) {
+      //   Screenshots = {};
+      //   // so on
+      // }
+      //
+      // However, browser-chrome tests are somehow forced to run in strict mode,
+      // which doesn't permit the usage of the with keyword, turning the following
+      // into the ugliest test you've ever seen.  :(
+      var LTRRef = document.getElementById("ltr-ref");
+      var RTLRef = document.getElementById("rtl-ref");
+      window.Screenshots = {};
+
+      // generate the reference screenshots
+      LTRRef.style.display = "";
+      document.body.clientWidth;
+      window.Screenshots.ltr = window.snapshotWindow(window);
+      LTRRef.parentNode.removeChild(LTRRef);
+      RTLRef.style.display = "";
+      document.body.clientWidth;
+      window.Screenshots.rtl = window.snapshotWindow(window);
+      RTLRef.parentNode.removeChild(RTLRef);
+      window.Screenshots.get = function(dir, flip) {
+        if (flip) {
+          return this[dir == "rtl" ? "ltr" : "rtl"];
+        } else {
+          return this[dir];
+        }
+      };
+    });
+
+    function* testDirection(initialDir) {
+      yield ContentTask.spawn(aBrowser, {initialDir}, function({initialDir}) {
+        var window = content.window.wrappedJSObject;
+        var document = window.document;
+
+        var t = window.t = document.createElement("textarea");
+        t.setAttribute("dir", initialDir);
+        t.value = "test.";
+        window.inputEventCount = 0;
+        t.oninput = function() { window.inputEventCount++; };
+        document.getElementById("content").appendChild(t);
+        document.body.clientWidth;
+        var s1 = window.snapshotWindow(window);
+        ok(window.compareSnapshots(s1, window.Screenshots.get(initialDir, false), true)[0],
+           "Textarea should appear correctly before switching the direction (" + initialDir + ")");
+        t.focus();
+        is(window.inputEventCount, 0, "input event count must be 0 before");
+      });
+      var waitForKeypress = BrowserTestUtils.waitForContentEvent(aBrowser, "keypress");
+      EventUtils.synthesizeKey("x", {accelKey: true, shiftKey: true});
+      yield waitForKeypress;
+      yield ContentTask.spawn(aBrowser, {initialDir}, function({initialDir}) {
+        var window = content.window.wrappedJSObject;
+
+        is(window.t.getAttribute("dir"), initialDir == "ltr" ? "rtl" : "ltr", "The dir attribute must be correctly updated");
+        is(window.inputEventCount, 1, "input event count must be 1 after");
+        window.t.blur();
+        var s2 = window.snapshotWindow(window);
+        ok(window.compareSnapshots(s2, window.Screenshots.get(initialDir, true), true)[0],
+           "Textarea should appear correctly after switching the direction (" + initialDir + ")");
+        window.t.focus();
+        is(window.inputEventCount, 1, "input event count must be 1 before");
+      });
+      waitForKeypress = BrowserTestUtils.waitForContentEvent(aBrowser, "keypress");
+      EventUtils.synthesizeKey("x", {accelKey: true, shiftKey: true});
+      yield waitForKeypress;
+      yield ContentTask.spawn(aBrowser, {initialDir}, function({initialDir}) {
+        var window = content.window.wrappedJSObject;
+
+        is(window.inputEventCount, 2, "input event count must be 2 after");
+        is(window.t.getAttribute("dir"), initialDir == "ltr" ? "ltr" : "rtl", "The dir attribute must be correctly updated");
+        window.t.blur();
+        var s3 = window.snapshotWindow(window);
+        ok(window.compareSnapshots(s3, window.Screenshots.get(initialDir, false), true)[0],
+           "Textarea should appear correctly after switching back the direction (" + initialDir + ")");
+        window.t.parentNode.removeChild(window.t);
+      });
+    }
+
+    yield testDirection("ltr");
+    yield testDirection("rtl");
+  });
+});
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/tests/bug629172.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
+<style>
+textarea { resize: none }
+</style>
+</head>
+<body>
+<div id="content">
+<textarea id="ltr-ref" style="display: none">test.</textarea>
+<textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea>
+</div
+</body>
+</html>
--- a/editor/libeditor/tests/mochitest.ini
+++ b/editor/libeditor/tests/mochitest.ini
@@ -97,18 +97,16 @@ skip-if = toolkit == 'android'
 skip-if = toolkit == 'android'
 [test_bug612128.html]
 [test_bug612447.html]
 [test_bug620906.html]
 skip-if = toolkit == 'android' #TIMED_OUT
 [test_bug622371.html]
 skip-if = toolkit == 'android' #bug 957797
 [test_bug625452.html]
-[test_bug629172.html]
-skip-if = toolkit == 'android' || e10s
 [test_bug629845.html]
 [test_bug638596.html]
 [test_bug640321.html]
 skip-if = android_version == '18' # bug 1147989
 [test_bug641466.html]
 [test_bug645914.html]
 [test_bug668599.html]
 [test_bug674770-1.html]
deleted file mode 100644
--- a/editor/libeditor/tests/test_bug629172.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=629172
--->
-<head>
-  <title>Test for Bug 629172</title>
-  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
-  <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.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=629172">Mozilla Bug 629172</a>
-<p id="display"></p>
-<div id="content">
-<textarea id="ltr-ref" style="display: none">test.</textarea>
-<textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea>
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 629172 **/
-SimpleTest.waitForExplicitFinish();
-SimpleTest.waitForFocus(function() {
-  var LTRRef = document.getElementById("ltr-ref");
-  var RTLRef = document.getElementById("rtl-ref");
-  var Screenshots = {};
-
-  // generate the reference screenshots
-  LTRRef.style.display = "";
-  document.body.clientWidth;
-  Screenshots.ltr = snapshotWindow(window);
-  LTRRef.parentNode.removeChild(LTRRef);
-  RTLRef.style.display = "";
-  document.body.clientWidth;
-  Screenshots.rtl = snapshotWindow(window);
-  RTLRef.parentNode.removeChild(RTLRef);
-  Screenshots.get = function(dir, flip) {
-    if (flip) {
-      return this[dir == "rtl" ? "ltr" : "rtl"];
-    } else {
-      return this[dir];
-    }
-  };
-
-  function testDirection(initialDir) {
-    var t = document.createElement("textarea");
-    t.setAttribute("dir", initialDir);
-    t.value = "test.";
-    var inputEventCount = 0;
-    t.oninput = function() { inputEventCount++; };
-    document.getElementById("content").appendChild(t);
-    document.body.clientWidth;
-    var s1 = snapshotWindow(window);
-    ok(compareSnapshots(s1, Screenshots.get(initialDir, false), true)[0],
-       "Textarea should appear correctly before switching the direction (" + initialDir + ")");
-    t.focus();
-    is(inputEventCount, 0, "input event count must be 0 before");
-    synthesizeKey("x", {accelKey: true, shiftKey: true});
-    is(t.getAttribute("dir"), initialDir == "ltr" ? "rtl" : "ltr", "The dir attribute must be correctly updated");
-    is(inputEventCount, 1, "input event count must be 1 after");
-    t.blur();
-    var s2 = snapshotWindow(window);
-    ok(compareSnapshots(s2, Screenshots.get(initialDir, true), true)[0],
-       "Textarea should appear correctly after switching the direction (" + initialDir + ")");
-    t.focus();
-    is(inputEventCount, 1, "input event count must be 1 before");
-    synthesizeKey("x", {accelKey: true, shiftKey: true});
-    is(inputEventCount, 2, "input event count must be 2 after");
-    is(t.getAttribute("dir"), initialDir == "ltr" ? "ltr" : "rtl", "The dir attribute must be correctly updated");
-    t.blur();
-    var s3 = snapshotWindow(window);
-    ok(compareSnapshots(s3, Screenshots.get(initialDir, false), true)[0],
-       "Textarea should appear correctly after switching back the direction (" + initialDir + ")");
-    t.parentNode.removeChild(t);
-  }
-
-  testDirection("ltr");
-  testDirection("rtl");
-
-  SimpleTest.finish();
-});
-
-</script>
-</pre>
-</body>
-</html>