Bug 1376128 - Use selective imports from error module; r?automatedtester draft
authorAndreas Tolfsen <ato@sny.no>
Wed, 28 Jun 2017 11:01:49 -0700
changeset 602386 960ce8f85ee96487f0e1dd301c3c113f3d49664d
parent 602385 2d4dc30ddb9655f0ee34b0bc196081b4e1d0e735
child 602387 8a92a335387f47b26ac93d2bca020eb1bd60078c
push id66419
push userbmo:ato@sny.no
push dateThu, 29 Jun 2017 23:42:10 +0000
reviewersautomatedtester
bugs1376128
milestone56.0a1
Bug 1376128 - Use selective imports from error module; r?automatedtester Instead of importing everything from the testing/marionette/error.js module into the global scope, we need to be selective about what symbols we want. MozReview-Commit-ID: HZDAS0bs0GD
testing/marionette/accessibility.js
testing/marionette/action.js
testing/marionette/addon.js
testing/marionette/assert.js
testing/marionette/browser.js
testing/marionette/cookie.js
testing/marionette/driver.js
testing/marionette/element.js
testing/marionette/error.js
testing/marionette/evaluate.js
testing/marionette/event.js
testing/marionette/interaction.js
testing/marionette/l10n.js
testing/marionette/listener.js
testing/marionette/proxy.js
testing/marionette/reftest.js
testing/marionette/server.js
testing/marionette/session.js
--- a/testing/marionette/accessibility.js
+++ b/testing/marionette/accessibility.js
@@ -7,17 +7,18 @@
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import('resource://gre/modules/Services.jsm');
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Log.jsm");
 
 const logger = Log.repository.getLogger("Marionette");
 
-Cu.import("chrome://marionette/content/error.js");
+const {ElementNotAccessibleError} =
+    Cu.import("chrome://marionette/content/error.js", {});
 
 XPCOMUtils.defineLazyModuleGetter(
     this, "setInterval", "resource://gre/modules/Timer.jsm");
 XPCOMUtils.defineLazyModuleGetter(
     this, "clearInterval", "resource://gre/modules/Timer.jsm");
 
 XPCOMUtils.defineLazyGetter(this, "service", () => {
   let service;
--- a/testing/marionette/action.js
+++ b/testing/marionette/action.js
@@ -5,17 +5,22 @@
 "use strict";
 
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Task.jsm");
 
 Cu.import("chrome://marionette/content/assert.js");
 Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  InvalidArgumentError,
+  MoveTargetOutOfBoundsError,
+  UnsupportedOperationError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/event.js");
 Cu.import("chrome://marionette/content/interaction.js");
 
 this.EXPORTED_SYMBOLS = ["action"];
 
 // TODO? With ES 2016 and Symbol you can make a safer approximation
 // to an enum e.g. https://gist.github.com/xmlking/e86e4f15ec32b12c4689
 /**
--- a/testing/marionette/addon.js
+++ b/testing/marionette/addon.js
@@ -4,17 +4,17 @@
 
 "use strict";
 
 const {interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/AddonManager.jsm");
 Cu.import("resource://gre/modules/FileUtils.jsm");
 
-Cu.import("chrome://marionette/content/error.js");
+const {UnknownError} = Cu.import("chrome://marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["addon"];
 
 this.addon = {};
 
 // from https://developer.mozilla.org/en-US/Add-ons/Add-on_Manager/AddonManager#AddonInstall_errors
 addon.Errors = {
   [-1]: "ERROR_NETWORK_FAILURE: A network error occured.",
--- a/testing/marionette/assert.js
+++ b/testing/marionette/assert.js
@@ -5,17 +5,24 @@
 "use strict";
 
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  InvalidArgumentError,
+  InvalidSessionIDError,
+  NoSuchWindowError,
+  UnexpectedAlertOpenError,
+  UnsupportedOperationError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["assert"];
 
 const isFennec = () => AppConstants.platform == "android";
 const isFirefox = () => Services.appinfo.name == "Firefox";
 
 /** Shorthands for common assertions made in Marionette. */
 this.assert = {};
--- a/testing/marionette/browser.js
+++ b/testing/marionette/browser.js
@@ -2,17 +2,20 @@
  * 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/. */
 
 "use strict";
 
 const {utils: Cu} = Components;
 
 Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  NoSuchWindowError,
+  UnsupportedOperationError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/frame.js");
 
 this.EXPORTED_SYMBOLS = ["browser"];
 
 this.browser = {};
 
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
--- a/testing/marionette/cookie.js
+++ b/testing/marionette/cookie.js
@@ -4,17 +4,20 @@
 
 "use strict";
 
 const {interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 
 Cu.import("chrome://marionette/content/assert.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  InvalidCookieDomainError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["cookie"];
 
 const IPV4_PORT_EXPR = /:\d+$/;
 
 this.cookie = {
   manager: Services.cookies,
 };
--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -18,17 +18,31 @@ Cu.import("chrome://marionette/content/a
 Cu.import("chrome://marionette/content/addon.js");
 Cu.import("chrome://marionette/content/assert.js");
 Cu.import("chrome://marionette/content/atom.js");
 Cu.import("chrome://marionette/content/browser.js");
 Cu.import("chrome://marionette/content/capture.js");
 Cu.import("chrome://marionette/content/cert.js");
 Cu.import("chrome://marionette/content/cookie.js");
 Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  ElementNotInteractableError,
+  error,
+  InsecureCertificateError,
+  InvalidArgumentError,
+  InvalidCookieDomainError,
+  InvalidSelectorError,
+  NoAlertOpenError,
+  NoSuchFrameError,
+  NoSuchWindowError,
+  SessionNotCreatedError,
+  UnknownError,
+  UnsupportedOperationError,
+  WebDriverError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/evaluate.js");
 Cu.import("chrome://marionette/content/event.js");
 Cu.import("chrome://marionette/content/interaction.js");
 Cu.import("chrome://marionette/content/l10n.js");
 Cu.import("chrome://marionette/content/legacyaction.js");
 Cu.import("chrome://marionette/content/modal.js");
 Cu.import("chrome://marionette/content/proxy.js");
 Cu.import("chrome://marionette/content/reftest.js");
--- a/testing/marionette/element.js
+++ b/testing/marionette/element.js
@@ -5,17 +5,23 @@
 "use strict";
 
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 
 Cu.import("chrome://marionette/content/assert.js");
 Cu.import("chrome://marionette/content/atom.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  InvalidSelectorError,
+  JavaScriptError,
+  NoSuchElementError,
+  StaleElementReferenceError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/wait.js");
 
 const logger = Log.repository.getLogger("Marionette");
 
 /**
  * This module provides shared functionality for dealing with DOM-
  * and web elements in Marionette.
  *
--- a/testing/marionette/error.js
+++ b/testing/marionette/error.js
@@ -531,8 +531,16 @@ const STATUSES = new Map([
   ["timeout", TimeoutError],
   ["unable to set cookie", UnableToSetCookieError],
   ["unexpected alert open", UnexpectedAlertOpenError],
   ["unknown command", UnknownCommandError],
   ["unknown error", UnknownError],
   ["unsupported operation", UnsupportedOperationError],
   ["webdriver error", WebDriverError],
 ]);
+
+// Errors must be expored on the local this scope so that the
+// EXPORTED_SYMBOLS and the Cu.import("foo", {}) machinery sees them.
+// We could assign each error definition directly to |this|, but
+// because they are Error prototypes this would mess up their names.
+for (let cls of STATUSES.values()) {
+  this[cls.name] = cls;
+}
--- a/testing/marionette/evaluate.js
+++ b/testing/marionette/evaluate.js
@@ -7,17 +7,22 @@
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://gre/modules/Timer.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  JavaScriptError,
+  ScriptTimeoutError,
+  WebDriverError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 
 const logger = Log.repository.getLogger("Marionette");
 
 this.EXPORTED_SYMBOLS = ["evaluate", "sandbox", "Sandboxes"];
 
 const ARGUMENTS = "__webDriverArguments";
 const CALLBACK = "__webDriverCallback";
 const COMPLETE = "__webDriverComplete";
--- a/testing/marionette/event.js
+++ b/testing/marionette/event.js
@@ -7,17 +7,18 @@
 "use strict";
 
 const {interfaces: Ci, utils: Cu, classes: Cc} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 const logger = Log.repository.getLogger("Marionette");
 
 Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {ElementNotInteractableError} =
+    Cu.import("chrome://marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["event"];
 
 // must be synchronised with nsIDOMWindowUtils
 const COMPOSITION_ATTR_RAWINPUT = 0x02;
 const COMPOSITION_ATTR_SELECTEDRAWTEXT = 0x03;
 const COMPOSITION_ATTR_CONVERTEDTEXT = 0x04;
 const COMPOSITION_ATTR_SELECTEDCONVERTEDTEXT = 0x05;
--- a/testing/marionette/interaction.js
+++ b/testing/marionette/interaction.js
@@ -3,17 +3,24 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 const {utils: Cu} = Components;
 
 Cu.import("chrome://marionette/content/accessibility.js");
 Cu.import("chrome://marionette/content/atom.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  InvalidArgument,
+  ElementNotInteractableError,
+  ElementClickInterceptedError,
+  InvalidElementStateError,
+  InvalidArgumentError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/element.js");
 Cu.import("chrome://marionette/content/event.js");
 
 Cu.importGlobalProperties(["File"]);
 
 this.EXPORTED_SYMBOLS = ["interaction"];
 
 /**
--- a/testing/marionette/l10n.js
+++ b/testing/marionette/l10n.js
@@ -17,17 +17,18 @@
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(
     this, "domParser", "@mozilla.org/xmlextras/domparser;1", "nsIDOMParser");
 
-Cu.import("chrome://marionette/content/error.js");
+const {NoSuchElementError} =
+    Cu.import("chrome://marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["l10n"];
 
 this.l10n = {};
 
 /**
  * Retrieve the localized string for the specified entity id.
  *
--- a/testing/marionette/listener.js
+++ b/testing/marionette/listener.js
@@ -18,17 +18,28 @@ Cu.import("resource://gre/modules/Prefer
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 Cu.import("chrome://marionette/content/accessibility.js");
 Cu.import("chrome://marionette/content/action.js");
 Cu.import("chrome://marionette/content/atom.js");
 Cu.import("chrome://marionette/content/capture.js");
 Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  ElementNotInteractableError,
+  error,
+  InsecureCertificateError,
+  InvalidArgumentError,
+  InvalidElementStateError,
+  InvalidSelectorError,
+  NoSuchElementError,
+  NoSuchFrameError,
+  TimeoutError,
+  UnknownError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/evaluate.js");
 Cu.import("chrome://marionette/content/event.js");
 Cu.import("chrome://marionette/content/interaction.js");
 Cu.import("chrome://marionette/content/legacyaction.js");
 Cu.import("chrome://marionette/content/navigate.js");
 Cu.import("chrome://marionette/content/proxy.js");
 Cu.import("chrome://marionette/content/session.js");
 
--- a/testing/marionette/proxy.js
+++ b/testing/marionette/proxy.js
@@ -4,17 +4,20 @@
 
 "use strict";
 
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  WebDriverError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/modal.js");
 
 this.EXPORTED_SYMBOLS = ["proxy"];
 
 const uuidgen = Cc["@mozilla.org/uuid-generator;1"]
     .getService(Ci.nsIUUIDGenerator);
 
 const logger = Log.repository.getLogger("Marionette");
--- a/testing/marionette/reftest.js
+++ b/testing/marionette/reftest.js
@@ -7,16 +7,18 @@
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 
 Cu.import("chrome://marionette/content/assert.js");
 Cu.import("chrome://marionette/content/capture.js");
+const {InvalidArgumentError} =
+    Cu.import("chrome//marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["reftest"];
 
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 const PREF_E10S = "browser.tabs.remote.autostart";
 
 const logger = Log.repository.getLogger("Marionette");
 
--- a/testing/marionette/server.js
+++ b/testing/marionette/server.js
@@ -16,17 +16,20 @@ const ServerSocket = CC(
 Cu.import("resource://gre/modules/Log.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 Cu.import("chrome://marionette/content/assert.js");
 Cu.import("chrome://marionette/content/driver.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  UnknownCommandError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 Cu.import("chrome://marionette/content/message.js");
 Cu.import("chrome://marionette/content/transport.js");
 
 XPCOMUtils.defineLazyServiceGetter(
     this, "env", "@mozilla.org/process/environment;1", "nsIEnvironment");
 
 const logger = Log.repository.getLogger("Marionette");
 
--- a/testing/marionette/session.js
+++ b/testing/marionette/session.js
@@ -6,17 +6,20 @@
 
 const {interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 Cu.import("chrome://marionette/content/assert.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+  error,
+  InvalidArgumentError,
+} = Cu.import("chrome://marionette/content/error.js", {});
 
 this.EXPORTED_SYMBOLS = ["session"];
 
 const logger = Log.repository.getLogger("Marionette");
 const {pprint} = error;
 
 // Enable testing this module, as Services.appinfo.* is not available
 // in xpcshell tests.