Bug 1409040 - Add element.isSVGElement. r?maja_zf
MozReview-Commit-ID: 4VCjHCnO3QB
--- a/testing/marionette/element.js
+++ b/testing/marionette/element.js
@@ -14,16 +14,17 @@ const {
NoSuchElementError,
StaleElementReferenceError,
} = Cu.import("chrome://marionette/content/error.js", {});
const {pprint} = Cu.import("chrome://marionette/content/format.js", {});
const {PollPromise} = Cu.import("chrome://marionette/content/sync.js", {});
this.EXPORTED_SYMBOLS = ["element"];
+const SVGNS = "http://www.w3.org/2000/svg";
const XBLNS = "http://www.mozilla.org/xbl";
const XHTMLNS = "http://www.w3.org/1999/xhtml";
const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/** XUL elements that support checked property. */
const XUL_CHECKED_ELS = new Set([
"button",
"checkbox",
@@ -1060,17 +1061,33 @@ element.scrollIntoView = function(el) {
element.isDOMElement = function(node) {
return typeof node == "object" &&
node !== null &&
node.nodeType === node.ELEMENT_NODE &&
node.namespaceURI === XHTMLNS;
};
/**
- * Ascertains whether <var>node</var> is a XUL- or XBL element.
+ * Ascertains whether <var>node</var> is an SVG element.
+ *
+ * @param {*} node
+ * Object thought to be an <code>SVGElement</code>.
+ *
+ * @return {boolean}
+ * True if <var>node</var> is an SVG element, false otherwise.
+ */
+element.isSVGElement = function(node) {
+ return typeof node == "object" &&
+ node !== null &&
+ node.nodeType === node.ELEMENT_NODE &&
+ node.namespaceURI === SVGNS;
+};
+
+/**
+ * Ascertains whether <var>el</var> is a XUL- or XBL element.
*
* @param {*} node
* Element thought to be a XUL- or XBL element.
*
* @return {boolean}
* True if <var>node</var> is a XULElement or XBLElement,
* false otherwise.
*/
--- a/testing/marionette/test_element.js
+++ b/testing/marionette/test_element.js
@@ -1,16 +1,17 @@
/* 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/. */
const {utils: Cu} = Components;
Cu.import("chrome://marionette/content/element.js");
+const SVGNS = "http://www.w3.org/2000/svg";
const XBLNS = "http://www.mozilla.org/xbl";
const XHTMLNS = "http://www.w3.org/1999/xhtml";
const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
class Element {
constructor(tagName, attrs = {}) {
this.tagName = tagName;
this.localName = tagName;
@@ -44,31 +45,39 @@ class DOMElement extends Element {
top: 0,
left: 0,
width: 100,
height: 100,
};
}
}
+class SVGElement extends Element {
+ constructor(tagName, attrs = {}) {
+ super(tagName, attrs);
+ this.namespaceURI = SVGNS;
+ }
+}
+
class XULElement extends Element {
constructor(tagName, attrs = {}) {
super(tagName, attrs);
this.namespaceURI = XULNS;
}
}
class XBLElement extends XULElement {
constructor(tagName, attrs = {}) {
super(tagName, attrs);
this.namespaceURI = XBLNS;
}
}
const domEl = new DOMElement("p");
+const svgEl = new SVGElement("rect");
const xulEl = new XULElement("browser");
const xblEl = new XBLElement("framebox");
class WindowProxy {
get parent() { return this; }
get self() { return this; }
toString() { return "[object Window]"; }
}
@@ -103,43 +112,59 @@ add_test(function test_isSelected() {
ok(!element.isSelected(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));
}
run_next_test();
});
+add_test(function test_isSVGElement() {
+ ok(element.isSVGElement(svgEl));
+ ok(!element.isSVGElement(domEl));
+ ok(!element.isSVGElement(xulEl));
+ ok(!element.isSVGElement(domWin));
+ ok(!element.isSVGElement(domFrame));
+ for (let typ of [true, 42, {}, [], undefined, null]) {
+ ok(!element.isSVGElement(typ));
+ }
+
+ run_next_test();
+});
+
add_test(function test_isXULElement() {
ok(element.isXULElement(xulEl));
ok(element.isXULElement(xblEl));
ok(!element.isXULElement(domEl));
+ ok(!element.isXULElement(svgEl));
ok(!element.isDOMElement(domWin));
ok(!element.isDOMElement(domFrame));
for (let typ of [true, 42, {}, [], undefined, null]) {
ok(!element.isXULElement(typ));
}
run_next_test();
});
add_test(function test_isDOMWindow() {
ok(element.isDOMWindow(domWin));
ok(element.isDOMWindow(domFrame));
ok(!element.isDOMWindow(domEl));
+ ok(!element.isDOMWindow(svgEl));
ok(!element.isDOMWindow(xulEl));
for (let typ of [true, 42, {}, [], undefined, null]) {
ok(!element.isDOMWindow(typ));
}
run_next_test();
});