Bug 1409040 - Add element.isElement shorthand. r?maja_zf draft
authorAndreas Tolfsen <ato@sny.no>
Tue, 17 Oct 2017 14:53:42 +0100
changeset 682767 1fc1c2ed416ce10167cecc5cf4dfae5733ff0cad
parent 682766 cd5f4be9dceeed7da9fdae6f52868b2b72f0c752
child 736423 96b3862d87eeeca87852034990b5ca2a01564192
push id85136
push userbmo:ato@sny.no
push dateWed, 18 Oct 2017 18:18:02 +0000
reviewersmaja_zf
bugs1409040
milestone58.0a1
Bug 1409040 - Add element.isElement shorthand. r?maja_zf Introduces new element.isElement shorthand API for identifying DOM-, SVG-, and XUL elements. It is the equivalent of this: if (element.isDOMElement(el) || element.isSVGElement(el) || element.isXULElement(el)) { // ... } MozReview-Commit-ID: H8MDkP5bQmW
testing/marionette/element.js
testing/marionette/evaluate.js
testing/marionette/test_element.js
--- a/testing/marionette/element.js
+++ b/testing/marionette/element.js
@@ -1045,16 +1045,32 @@ element.isKeyboardInteractable = () => t
  */
 element.scrollIntoView = function(el) {
   if (el.scrollIntoView) {
     el.scrollIntoView({block: "end", inline: "nearest", behavior: "instant"});
   }
 };
 
 /**
+ * Ascertains whether <var>node</var> is a DOM-, SVG-, or XUL element.
+ *
+ * @param {*} node
+ *     Element thought to be an <code>Element</code>,
+ *     <code>SVGElement</code>, or <code>XULElement</code>.
+ *
+ * @return {boolean}
+ *     True if <var>node</var> is an element, false otherwise.
+ */
+element.isElement = function(node) {
+  return element.isDOMElement(node) ||
+      element.isSVGElement(node) ||
+      element.isXULElement(node);
+};
+
+/**
  * Ascertains whether <var>node</var> is a DOM element.
  *
  * @param {*} node
  *     Element thought to be an <code>Element</code>.
  *
  * @return {boolean}
  *     True if <var>node</var> is a DOM element, false otherwise.
  */
--- a/testing/marionette/evaluate.js
+++ b/testing/marionette/evaluate.js
@@ -264,18 +264,18 @@ evaluate.toJSON = function(obj, seenEls)
       t == "[object Number]" ||
       t == "[object String]") {
     return obj;
 
   // Array, NodeList, HTMLCollection, et al.
   } else if (element.isCollection(obj)) {
     return [...obj].map(el => evaluate.toJSON(el, seenEls));
 
-  // HTMLElement
-  } else if ("nodeType" in obj && obj.nodeType == obj.ELEMENT_NODE) {
+  // Element, SVGElement, XULElement
+  } else if (element.isElement(obj)) {
     let uuid = seenEls.add(obj);
     return element.makeWebElement(uuid);
 
   // custom JSON representation
   } else if (typeof obj.toJSON == "function") {
     let unsafeJSON = obj.toJSON();
     return evaluate.toJSON(unsafeJSON, seenEls);
   }
--- a/testing/marionette/test_element.js
+++ b/testing/marionette/test_element.js
@@ -110,16 +110,29 @@ add_test(function test_isSelected() {
   // anything else should not be selected
   for (let typ of [domEl, undefined, null, "foo", true, [], {}]) {
     ok(!element.isSelected(typ));
   }
 
   run_next_test();
 });
 
+add_test(function test_isElement() {
+  ok(element.isElement(domEl));
+  ok(element.isElement(svgEl));
+  ok(element.isElement(xulEl));
+  ok(!element.isElement(domWin));
+  ok(!element.isElement(domFrame));
+  for (let typ of [true, 42, {}, [], undefined, null]) {
+    ok(!element.isElement(typ));
+  }
+
+  run_next_test();
+});
+
 add_test(function test_isDOMElement() {
   ok(element.isDOMElement(domEl));
   ok(!element.isDOMElement(svgEl));
   ok(!element.isDOMElement(xulEl));
   ok(!element.isDOMElement(domWin));
   ok(!element.isDOMElement(domFrame));
   for (let typ of [true, 42, {}, [], undefined, null]) {
     ok(!element.isDOMElement(typ));