Bug 1470646 - Silence missing nodeType property warning. r?whimboo draft
authorAndreas Tolfsen <ato@sny.no>
Sat, 23 Jun 2018 14:00:50 +0100
changeset 813587 030abe5e4debefb745f881c89de6db0581ba7a92
parent 813581 a0e47ebc4c06e652b919dabee711fdbd6bfd31b5
child 813588 1fceed04bab512a6548206a4c31420276398cfdd
push id114929
push userbmo:ato@sny.no
push dateTue, 03 Jul 2018 11:58:17 +0000
reviewerswhimboo
bugs1470646
milestone63.0a1
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
testing/marionette/format.js
--- 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);
   }