Bug 1280729 - split intermittent test browser_markup_tag_edit_04.js;r=bgrins draft
authorJulian Descottes <jdescottes@mozilla.com>
Tue, 05 Jul 2016 13:50:14 +0200
changeset 386781 0824eba94a5fe5286f14729f9d7ba416deeada1e
parent 386750 88d295b17727badd5b348041165b5632f0b25f33
child 525191 8508359b7cc5f76cdb8ff3229decf8fdb3c365bb
push id22790
push userjdescottes@mozilla.com
push dateTue, 12 Jul 2016 18:12:34 +0000
reviewersbgrins
bugs1280729
milestone50.0a1
Bug 1280729 - split intermittent test browser_markup_tag_edit_04.js;r=bgrins MozReview-Commit-ID: LrWkO2IEH37
devtools/client/inspector/markup/test/browser.ini
devtools/client/inspector/markup/test/browser_markup_tag_edit_04-backspace.js
devtools/client/inspector/markup/test/browser_markup_tag_edit_04-delete.js
devtools/client/inspector/markup/test/browser_markup_tag_edit_04.js
devtools/client/inspector/markup/test/head.js
--- a/devtools/client/inspector/markup/test/browser.ini
+++ b/devtools/client/inspector/markup/test/browser.ini
@@ -120,17 +120,18 @@ subsuite = clipboard
 [browser_markup_pagesize_01.js]
 [browser_markup_pagesize_02.js]
 [browser_markup_remove_xul_attributes.js]
 skip-if = e10s # Bug 1036409 - The last selected node isn't reselected
 [browser_markup_search_01.js]
 [browser_markup_tag_edit_01.js]
 [browser_markup_tag_edit_02.js]
 [browser_markup_tag_edit_03.js]
-[browser_markup_tag_edit_04.js]
+[browser_markup_tag_edit_04-backspace.js]
+[browser_markup_tag_edit_04-delete.js]
 [browser_markup_tag_edit_05.js]
 [browser_markup_tag_edit_06.js]
 [browser_markup_tag_edit_07.js]
 [browser_markup_tag_edit_08.js]
 [browser_markup_tag_edit_09.js]
 [browser_markup_tag_edit_10.js]
 [browser_markup_tag_edit_11.js]
 [browser_markup_tag_edit_12.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_04-backspace.js
@@ -0,0 +1,59 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests that a node can be deleted from the markup-view with the backspace key.
+// Also checks that after deletion the correct element is highlighted.
+// The previous sibling is preferred, but the parent is a fallback.
+
+const HTML = `<style type="text/css">
+                #pseudo::before { content: 'before'; }
+                #pseudo::after { content: 'after'; }
+              </style>
+              <div id="parent">
+                <div id="first"></div>
+                <div id="second"></div>
+                <div id="third"></div>
+              </div>
+              <div id="only-child">
+                <div id="fourth"></div>
+              </div>
+              <div id="pseudo">
+                <div id="fifth"></div>
+              </div>`;
+const TEST_URL = "data:text/html;charset=utf-8," + encodeURIComponent(HTML);
+
+// List of all the test cases. Each item is an object with the following props:
+// - selector: the css selector of the node that should be selected
+// - focusedSelector: the css selector of the node we expect to be selected as
+//   a result of the deletion
+// - pseudo: (optional) if the focused node is actually supposed to be a pseudo element
+//   of the specified selector.
+// Note that after each test case, undo is called.
+const TEST_DATA = [{
+  selector: "#first",
+  focusedSelector: "#second"
+}, {
+  selector: "#second",
+  focusedSelector: "#first"
+}, {
+  selector: "#third",
+  focusedSelector: "#second"
+}, {
+  selector: "#fourth",
+  focusedSelector: "#only-child"
+}, {
+  selector: "#fifth",
+  focusedSelector: "#pseudo",
+  pseudo: "before"
+}];
+
+add_task(function* () {
+  let {inspector} = yield openInspectorForURL(TEST_URL);
+
+  for (let data of TEST_DATA) {
+    yield checkDeleteAndSelection(inspector, "back_space", data);
+  }
+});
rename from devtools/client/inspector/markup/test/browser_markup_tag_edit_04.js
rename to devtools/client/inspector/markup/test/browser_markup_tag_edit_04-delete.js
--- a/devtools/client/inspector/markup/test/browser_markup_tag_edit_04.js
+++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_04-delete.js
@@ -22,100 +22,38 @@ const HTML = `<style type="text/css">
               </div>
               <div id="pseudo">
                 <div id="fifth"></div>
               </div>`;
 const TEST_URL = "data:text/html;charset=utf-8," + encodeURIComponent(HTML);
 
 // List of all the test cases. Each item is an object with the following props:
 // - selector: the css selector of the node that should be selected
-// - key: the key to press to delete the node (delete or back_space)
 // - focusedSelector: the css selector of the node we expect to be selected as
 //   a result of the deletion
 // - pseudo: (optional) if the focused node is actually supposed to be a pseudo element
 //   of the specified selector.
 // Note that after each test case, undo is called.
 const TEST_DATA = [{
   selector: "#first",
-  key: "delete",
   focusedSelector: "#second"
 }, {
   selector: "#second",
-  key: "delete",
   focusedSelector: "#third"
 }, {
   selector: "#third",
-  key: "delete",
   focusedSelector: "#second"
 }, {
   selector: "#fourth",
-  key: "delete",
   focusedSelector: "#only-child"
 }, {
   selector: "#fifth",
-  key: "delete",
   focusedSelector: "#pseudo",
   pseudo: "after"
-}, {
-  selector: "#first",
-  key: "back_space",
-  focusedSelector: "#second"
-}, {
-  selector: "#second",
-  key: "back_space",
-  focusedSelector: "#first"
-}, {
-  selector: "#third",
-  key: "back_space",
-  focusedSelector: "#second"
-}, {
-  selector: "#fourth",
-  key: "back_space",
-  focusedSelector: "#only-child"
-}, {
-  selector: "#fifth",
-  key: "back_space",
-  focusedSelector: "#pseudo",
-  pseudo: "before"
 }];
 
 add_task(function* () {
   let {inspector} = yield openInspectorForURL(TEST_URL);
 
   for (let data of TEST_DATA) {
-    yield checkDeleteAndSelection(inspector, data);
+    yield checkDeleteAndSelection(inspector, "delete", data);
   }
 });
-
-function* checkDeleteAndSelection(inspector, {key, selector, focusedSelector, pseudo}) {
-  info("Test deleting node " + selector + " with " + key + ", " +
-       "expecting " + focusedSelector + " to be focused");
-
-  info("Select node " + selector + " and make sure it is focused");
-  yield selectNode(selector, inspector);
-  yield clickContainer(selector, inspector);
-
-  info("Delete the node with: " + key);
-  let mutated = inspector.once("markupmutation");
-  EventUtils.sendKey(key, inspector.panelWin);
-  yield Promise.all([mutated, inspector.once("inspector-updated")]);
-
-  let nodeFront = yield getNodeFront(focusedSelector, inspector);
-  if (pseudo) {
-    // Update the selector for logging in case of failure.
-    focusedSelector = focusedSelector + "::" + pseudo;
-    // Retrieve the :before or :after pseudo element of the nodeFront.
-    let {nodes} = yield inspector.walker.children(nodeFront);
-    nodeFront = pseudo === "before" ? nodes[0] : nodes[nodes.length - 1];
-  }
-
-  is(inspector.selection.nodeFront, nodeFront,
-     focusedSelector + " is selected after deletion");
-
-  info("Check that the node was really removed");
-  let node = yield getNodeFront(selector, inspector);
-  ok(!node, "The node can't be found in the page anymore");
-
-  info("Undo the deletion to restore the original markup");
-  yield undoChange(inspector);
-  node = yield getNodeFront(selector, inspector);
-  ok(node, "The node is back");
-}
--- a/devtools/client/inspector/markup/test/head.js
+++ b/devtools/client/inspector/markup/test/head.js
@@ -605,8 +605,58 @@ function* waitForScrollStop(doc) {
       // The element has scrolled. Reset the frame counter.
       stopFrameCount = 0;
       lastScrollTop = el.scrollTop;
     }
   }
 
   return lastScrollTop;
 }
+
+/**
+ * Select a node in the inspector and try to delete it using the provided key. After that,
+ * check that the expected element is focused.
+ *
+ * @param {InspectorPanel} inspector
+ *        The current inspector-panel instance.
+ * @param {String} key
+ *        The key to simulate to delete the node
+ * @param {Object}
+ *        - {String} selector: selector of the element to delete.
+ *        - {String} focusedSelector: selector of the element that should be selected
+ *        after deleting the node.
+ *        - {String} pseudo: optional, "before" or "after" if the element focused after
+ *        deleting the node is supposed to be a before/after pseudo-element.
+ */
+function* checkDeleteAndSelection(inspector, key, {selector, focusedSelector, pseudo}) {
+  info("Test deleting node " + selector + " with " + key + ", " +
+       "expecting " + focusedSelector + " to be focused");
+
+  info("Select node " + selector + " and make sure it is focused");
+  yield selectNode(selector, inspector);
+  yield clickContainer(selector, inspector);
+
+  info("Delete the node with: " + key);
+  let mutated = inspector.once("markupmutation");
+  EventUtils.sendKey(key, inspector.panelWin);
+  yield Promise.all([mutated, inspector.once("inspector-updated")]);
+
+  let nodeFront = yield getNodeFront(focusedSelector, inspector);
+  if (pseudo) {
+    // Update the selector for logging in case of failure.
+    focusedSelector = focusedSelector + "::" + pseudo;
+    // Retrieve the :before or :after pseudo element of the nodeFront.
+    let {nodes} = yield inspector.walker.children(nodeFront);
+    nodeFront = pseudo === "before" ? nodes[0] : nodes[nodes.length - 1];
+  }
+
+  is(inspector.selection.nodeFront, nodeFront,
+     focusedSelector + " is selected after deletion");
+
+  info("Check that the node was really removed");
+  let node = yield getNodeFront(selector, inspector);
+  ok(!node, "The node can't be found in the page anymore");
+
+  info("Undo the deletion to restore the original markup");
+  yield undoChange(inspector);
+  node = yield getNodeFront(selector, inspector);
+  ok(node, "The node is back");
+}