Bug 1470646 - Silence missing nodeType property warning. r?whimboo
If val does not have a property nodeType, a warning is emitted to
the browser console. This is observable when running the xpcshell
unit tests because we mock out val without a nodeType property.
MozReview-Commit-ID: GzqMoJQQdF8
--- a/testing/marionette/format.js
+++ b/testing/marionette/format.js
@@ -7,42 +7,41 @@
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
const {Log} = ChromeUtils.import("chrome://marionette/content/log.js", {});
XPCOMUtils.defineLazyGetter(this, "log", Log.get);
this.EXPORTED_SYMBOLS = ["pprint", "truncate"];
+const ELEMENT_NODE = 1;
const MAX_STRING_LENGTH = 250;
/**
* Pretty-print values passed to template strings.
*
- * Usage:
+ * Usage::
*
- * <pre><code>
* const {pprint} = Cu.import("chrome://marionette/content/error.js", {});
* let bool = {value: true};
* pprint`Expected boolean, got ${bool}`;
* => 'Expected boolean, got [object Object] {"value": true}'
*
* let htmlElement = document.querySelector("input#foo");
* pprint`Expected element ${htmlElement}`;
* => 'Expected element <input id="foo" class="bar baz" type="input">'
*
* pprint`Current window: ${window}`;
* => '[object Window https://www.mozilla.org/]'
- * </code></pre>
*/
function pprint(ss, ...values) {
function pretty(val) {
let proto = Object.prototype.toString.call(val);
-
- if (val && val.nodeType === 1) {
+ if (typeof val == "object" && val !== null &&
+ "nodeType" in val && val.nodeType === ELEMENT_NODE) {
return prettyElement(val);
} else if (["[object Window]", "[object ChromeWindow]"].includes(proto)) {
return prettyWindowGlobal(val);
} else if (proto == "[object Attr]") {
return prettyAttr(val);
}
return prettyObject(val);
}