Bug 1447494 - remove all instances of commandline/helpers; r=ochameau
authoryulia <ystartsev@mozilla.com>
Thu, 16 Aug 2018 14:06:07 +0000
changeset 431902 7df7135ad04c688b90bb8e6e995dde508b7f41ad
parent 431901 906fa624f03ba319ba1286058c13b2ead72678b4
child 431903 160ed81f18c44a9d22a34fec7fd9836c616b8581
push id34455
push usertoros@mozilla.com
push dateThu, 16 Aug 2018 21:31:58 +0000
treeherdermozilla-central@bf74fe0e7f76 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersochameau
bugs1447494
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1447494 - remove all instances of commandline/helpers; r=ochameau Removed remaining imports of commandline helpers, as they are no longer used anywhere Differential Revision: https://phabricator.services.mozilla.com/D3412
devtools/client/commandline/moz.build
devtools/client/commandline/test/.eslintrc.js
devtools/client/commandline/test/browser.ini
devtools/client/commandline/test/browser.js
devtools/client/commandline/test/head.js
devtools/client/commandline/test/helpers.js
devtools/client/commandline/test/mockCommands.js
devtools/client/debugger/new/test/mochitest/browser.ini
devtools/client/debugger/test/mochitest/browser.ini
devtools/client/debugger/test/mochitest/browser2.ini
devtools/client/debugger/test/mochitest/head.js
devtools/client/inspector/animation-old/test/browser.ini
devtools/client/inspector/boxmodel/test/browser.ini
devtools/client/inspector/computed/test/browser.ini
devtools/client/inspector/extensions/test/browser.ini
devtools/client/inspector/fonts/test/browser.ini
devtools/client/inspector/grids/test/browser.ini
devtools/client/inspector/markup/test/browser.ini
devtools/client/inspector/markup/test/head.js
devtools/client/inspector/rules/test/browser.ini
devtools/client/inspector/shared/test/browser.ini
devtools/client/inspector/test/browser.ini
devtools/client/jsonview/test/browser.ini
devtools/client/moz.build
devtools/client/responsive.html/test/browser/browser.ini
devtools/client/responsive.html/test/browser/head.js
devtools/client/shared/test/shared-head.js
devtools/client/sourceeditor/test/head.js
devtools/client/styleeditor/test/browser.ini
deleted file mode 100644
--- a/devtools/client/commandline/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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/.
-
-BROWSER_CHROME_MANIFESTS += [
-  'test/browser.ini',
-]
deleted file mode 100644
--- a/devtools/client/commandline/test/.eslintrc.js
+++ /dev/null
@@ -1,10 +0,0 @@
-"use strict";
-
-module.exports = {
-  // Extend from the shared list of defined globals for mochitests.
-  "extends": "../../../.eslintrc.mochitests.js",
-  "globals": {
-    "helpers": true,
-    "assert": true
-  }
-};
deleted file mode 100644
--- a/devtools/client/commandline/test/browser.ini
+++ /dev/null
@@ -1,13 +0,0 @@
-[DEFAULT]
-tags = devtools
-subsuite = devtools
-support-files =
-  head.js
-  helpers.js
-  mockCommands.js
-
-# Bug 1447494 - browser.ini file has to have at least one test file
-# browser.js is empty, we have this just to expose test helper files
-# for other folder still using it
-[browser.js]
-skip-if = true
deleted file mode 100644
--- a/devtools/client/commandline/test/browser.js
+++ /dev/null
@@ -1,1 +0,0 @@
-
deleted file mode 100644
--- a/devtools/client/commandline/test/head.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 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/. */
- /* eslint no-unused-vars: [2, {"vars": "local", "args": "none"}] */
- /* import-globals-from helpers.js */
- /* import-globals-from mockCommands.js */
-
-"use strict";
-
-const TEST_BASE_HTTP = "http://example.com/browser/devtools/client/commandline/test/";
-const TEST_BASE_HTTPS = "https://example.com/browser/devtools/client/commandline/test/";
-
-var { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
-var flags = require("devtools/shared/flags");
-var { Task } = require("devtools/shared/task");
-
-Services.scriptloader.loadSubScript(
-  "chrome://mochitests/content/browser/devtools/client/shared/test/telemetry-test-helpers.js", this);
-
-// Import the GCLI test helper
-var testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
-Services.scriptloader.loadSubScript(testDir + "/helpers.js", this);
-Services.scriptloader.loadSubScript(testDir + "/mockCommands.js", this, "UTF-8");
-
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      executeSoon(aCallback);
-    }
-  }, "browser-delayed-startup-finished");
-}
-
-/**
- * Force GC on shutdown, because it seems that GCLI can outrun the garbage
- * collector in some situations, which causes test failures in later tests
- * Bug 774619 is an example.
- */
-registerCleanupFunction(function tearDown() {
-  window.windowUtils.garbageCollect();
-});
deleted file mode 100644
--- a/devtools/client/commandline/test/helpers.js
+++ /dev/null
@@ -1,1176 +0,0 @@
-/*
- * Copyright 2012, Mozilla Foundation and contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-"use strict";
-
-// A copy of this code exists in firefox mochitests. They should be kept
-// in sync. Hence the exports synonym for non AMD contexts.
-var { helpers, assert } = (function () {
-
-  var helpers = {};
-
-  var { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
-  var { TargetFactory } = require("devtools/client/framework/target");
-  var { gDevToolsBrowser } = require("devtools/client/framework/devtools-browser");
-  var Services = require("Services");
-
-  var assert = { ok: ok, is: is, log: info };
-  var util = require("gcli/util/util");
-  var cli = require("gcli/cli");
-  var KeyEvent = require("gcli/util/util").KeyEvent;
-
-  const { GcliFront } = require("devtools/shared/fronts/gcli");
-
-/**
- * See notes in helpers.checkOptions()
- */
-
-/**
- * Warning: For use with Firefox Mochitests only.
- *
- * Open a new tab at a URL and call a callback on load, and then tidy up when
- * the callback finishes.
- * The function will be passed a set of test options, and will usually return a
- * promise to indicate that the tab can be cleared up. (To be formal, we call
- * Promise.resolve() on the return value of the callback function)
- *
- * The options used by addTab include:
- * - chromeWindow: XUL window parent of created tab. a.k.a 'window' in mochitest
- * - tab: The new XUL tab element, as returned by BrowserTestUtils.addTab(gBrowser)
- * - target: The debug target as defined by the devtools framework
- * - browser: The XUL browser element for the given tab
- * - isFirefox: Always true. Allows test sharing with GCLI
- *
- * Normally addTab will create an options object containing the values as
- * described above. However these options can be customized by the third
- * 'options' parameter. This has the ability to customize the value of
- * chromeWindow or isFirefox, and to add new properties.
- *
- * @param url The URL for the new tab
- * @param callback The function to call on page load
- * @param options An optional set of options to customize the way the tests run
- */
-  helpers.addTab = function (url, callback, options) {
-    waitForExplicitFinish();
-
-    options = options || {};
-    options.chromeWindow = options.chromeWindow || window;
-    options.isFirefox = true;
-
-    var tabbrowser = options.chromeWindow.gBrowser;
-    options.tab = BrowserTestUtils.addTab(tabbrowser);
-    tabbrowser.selectedTab = options.tab;
-    options.browser = tabbrowser.getBrowserForTab(options.tab);
-    options.target = TargetFactory.forTab(options.tab);
-
-    var loaded = BrowserTestUtils.browserLoaded(options.browser).then(function () {
-      var reply = callback.call(null, options);
-
-      return Promise.resolve(reply).catch(function (error) {
-        ok(false, error);
-      }).then(function () {
-        tabbrowser.removeTab(options.tab);
-
-        delete options.target;
-        delete options.browser;
-        delete options.tab;
-
-        delete options.chromeWindow;
-        delete options.isFirefox;
-      });
-    });
-
-    options.browser.loadURI(url);
-    return loaded;
-  };
-
-/**
- * Open a new tab
- * @param url Address of the page to open
- * @param options Object to which we add properties describing the new tab. The
- * following properties are added:
- * - chromeWindow
- * - tab
- * - browser
- * - target
- * @return A promise which resolves to the options object when the 'load' event
- * happens on the new tab
- */
-  helpers.openTab = function (url, options) {
-    waitForExplicitFinish();
-
-    options = options || {};
-    options.chromeWindow = options.chromeWindow || window;
-    options.isFirefox = true;
-
-    var tabbrowser = options.chromeWindow.gBrowser;
-    options.tab = BrowserTestUtils.addTab(tabbrowser);
-    tabbrowser.selectedTab = options.tab;
-    options.browser = tabbrowser.getBrowserForTab(options.tab);
-    options.target = TargetFactory.forTab(options.tab);
-
-    return helpers.navigate(url, options);
-  };
-
-/**
- * Undo the effects of |helpers.openTab|
- * @param options The options object passed to |helpers.openTab|
- * @return A promise resolved (with undefined) when the tab is closed
- */
-  helpers.closeTab = function (options) {
-    options.chromeWindow.gBrowser.removeTab(options.tab);
-
-    delete options.target;
-    delete options.browser;
-    delete options.tab;
-
-    delete options.chromeWindow;
-    delete options.isFirefox;
-
-    return Promise.resolve(undefined);
-  };
-
-/**
- * Navigate the current tab to a URL
- */
-  helpers.navigate = async function(url, options) {
-    options = options || {};
-    options.chromeWindow = options.chromeWindow || window;
-    options.tab = options.tab || options.chromeWindow.gBrowser.selectedTab;
-
-    var tabbrowser = options.chromeWindow.gBrowser;
-    options.browser = tabbrowser.getBrowserForTab(options.tab);
-
-    let onLoaded = BrowserTestUtils.browserLoaded(options.browser);
-    options.browser.loadURI(url);
-    await onLoaded;
-
-    return options;
-  };
-
-/**
- * A helper to work with Task.spawn so you can do:
- *   return Task.spawn(realTestFunc).then(finish, helpers.handleError);
- */
-  helpers.handleError = function (ex) {
-    console.error(ex);
-    ok(false, ex);
-    finish();
-  };
-
-/**
- * A helper for calling addEventListener and then removeEventListener as soon
- * as the event is called, passing the results on as a promise
- * @param element The DOM element to listen on
- * @param event The name of the event to listen for
- * @param useCapture Should we use the capturing phase?
- * @return A promise resolved with the event object when the event first happens
- */
-  helpers.listenOnce = function (element, event, useCapture) {
-    return new Promise((resolve, reject) => {
-      var onEvent = function (ev) {
-        element.removeEventListener(event, onEvent, useCapture);
-        resolve(ev);
-      };
-      element.addEventListener(event, onEvent, useCapture);
-    });
-  };
-
-/**
- * A wrapper for calling Services.obs.[add|remove]Observer using promises.
- * @param topic The topic parameter to Services.obs.addObserver
- * @param ownsWeak The ownsWeak parameter to Services.obs.addObserver with a
- * default value of false
- * @return a promise that resolves when the ObserverService first notifies us
- * of the topic. The value of the promise is the first parameter to the observer
- * function other parameters are dropped.
- */
-  helpers.observeOnce = function (topic, ownsWeak = false) {
-    return new Promise((resolve, reject) => {
-      let resolver = function (subject) {
-        Services.obs.removeObserver(resolver, topic);
-        resolve(subject);
-      };
-      Services.obs.addObserver(resolver, topic, ownsWeak);
-    });
-  };
-
-/**
- * Takes a function that uses a callback as its last parameter, and returns a
- * new function that returns a promise instead
- */
-  helpers.promiseify = function (functionWithLastParamCallback, scope) {
-    return function () {
-      let args = [].slice.call(arguments);
-      return new Promise(resolve => {
-        args.push((...results) => {
-          resolve(results.length > 1 ? results : results[0]);
-        });
-        functionWithLastParamCallback.apply(scope, args);
-      });
-    };
-  };
-
-/**
- * Warning: For use with Firefox Mochitests only.
- *
- * Run a set of test functions stored in the values of the 'exports' object
- * functions stored under setup/shutdown will be run at the start/end of the
- * sequence of tests.
- * A test will be considered finished when its return value is resolved.
- * @param options An object to be passed to the test functions
- * @param tests An object containing named test functions
- * @return a promise which will be resolved when all tests have been run and
- * their return values resolved
- */
-  helpers.runTests = function (options, tests) {
-    var testNames = Object.keys(tests).filter(function (test) {
-      return test != "setup" && test != "shutdown";
-    });
-
-    var recover = function (error) {
-      ok(false, error);
-      console.error(error, error.stack);
-    };
-
-    info("SETUP");
-    var setupDone = (tests.setup != null) ?
-      Promise.resolve(tests.setup(options)) :
-      Promise.resolve();
-
-    var testDone = setupDone.then(function () {
-      return util.promiseEach(testNames, function (testName) {
-        info(testName);
-        var action = tests[testName];
-
-        if (typeof action === "function") {
-          var reply = action.call(tests, options);
-          return Promise.resolve(reply);
-        }
-        else if (Array.isArray(action)) {
-          return helpers.audit(options, action);
-        }
-
-        return Promise.reject("test action '" + testName +
-                            "' is not a function or helpers.audit() object");
-      });
-    }, recover);
-
-    return testDone.then(function () {
-      info("SHUTDOWN");
-      return (tests.shutdown != null) ?
-        Promise.resolve(tests.shutdown(options)) :
-        Promise.resolve();
-    }, recover);
-  };
-
-  const MOCK_COMMANDS_URI = "chrome://mochitests/content/browser/devtools/client/commandline/test/mockCommands.js";
-
-  const defer = function () {
-    const deferred = { };
-    deferred.promise = new Promise(function (resolve, reject) {
-      deferred.resolve = resolve;
-      deferred.reject = reject;
-    });
-    return deferred;
-  };
-
-/**
- * Ensure that the options object is setup correctly
- * options should contain an automator object that looks like this:
- * {
- *   getInputState: function() { ... },
- *   setCursor: function(cursor) { ... },
- *   getCompleterTemplateData: function() { ... },
- *   focus: function() { ... },
- *   getErrorMessage: function() { ... },
- *   fakeKey: function(keyCode) { ... },
- *   setInput: function(typed) { ... },
- *   focusManager: ...,
- *   field: ...,
- * }
- */
-  function checkOptions(options) {
-    if (options == null) {
-      console.trace();
-      throw new Error("Missing options object");
-    }
-    if (options.requisition == null) {
-      console.trace();
-      throw new Error("options.requisition == null");
-    }
-  }
-
-/**
- * Various functions to return the actual state of the command line
- */
-  helpers._actual = {
-    input: function (options) {
-      return options.automator.getInputState().typed;
-    },
-
-    hints: function (options) {
-      return options.automator.getCompleterTemplateData().then(function (data) {
-        var emptyParams = data.emptyParameters.join("");
-        return (data.directTabText + emptyParams + data.arrowTabText)
-                .replace(/\u00a0/g, " ")
-                .replace(/\u21E5/, "->")
-                .replace(/ $/, "");
-      });
-    },
-
-    markup: function (options) {
-      var cursor = helpers._actual.cursor(options);
-      var statusMarkup = options.requisition.getInputStatusMarkup(cursor);
-      return statusMarkup.map(function (s) {
-        return new Array(s.string.length + 1).join(s.status.toString()[0]);
-      }).join("");
-    },
-
-    cursor: function (options) {
-      return options.automator.getInputState().cursor.start;
-    },
-
-    current: function (options) {
-      var cursor = helpers._actual.cursor(options);
-      return options.requisition.getAssignmentAt(cursor).param.name;
-    },
-
-    status: function (options) {
-      return options.requisition.status.toString();
-    },
-
-    predictions: function (options) {
-      var cursor = helpers._actual.cursor(options);
-      var assignment = options.requisition.getAssignmentAt(cursor);
-      var context = options.requisition.executionContext;
-      return assignment.getPredictions(context).then(function (predictions) {
-        return predictions.map(function (prediction) {
-          return prediction.name;
-        });
-      });
-    },
-
-    unassigned: function (options) {
-      return options.requisition._unassigned.map(assignment => {
-        return assignment.arg.toString();
-      });
-    },
-
-    outputState: function (options) {
-      var outputData = options.automator.focusManager._shouldShowOutput();
-      return outputData.visible + ":" + outputData.reason;
-    },
-
-    tooltipState: function (options) {
-      var tooltipData = options.automator.focusManager._shouldShowTooltip();
-      return tooltipData.visible + ":" + tooltipData.reason;
-    },
-
-    options: function (options) {
-      if (options.automator.field.menu == null) {
-        return [];
-      }
-      return options.automator.field.menu.items.map(function (item) {
-        return item.name.textContent ? item.name.textContent : item.name;
-      });
-    },
-
-    message: function (options) {
-      return options.automator.getErrorMessage();
-    }
-  };
-
-  function shouldOutputUnquoted(value) {
-    var type = typeof value;
-    return value == null || type === "boolean" || type === "number";
-  }
-
-  function outputArray(array) {
-    return (array.length === 0) ?
-      "[ ]" :
-      "[ '" + array.join("', '") + "' ]";
-  }
-
-  helpers._createDebugCheck = function (options) {
-    checkOptions(options);
-    var requisition = options.requisition;
-    var command = requisition.commandAssignment.value;
-    var cursor = helpers._actual.cursor(options);
-    var input = helpers._actual.input(options);
-    var padding = new Array(input.length + 1).join(" ");
-
-    var hintsPromise = helpers._actual.hints(options);
-    var predictionsPromise = helpers._actual.predictions(options);
-
-    return Promise.all([ hintsPromise, predictionsPromise ]).then(values => {
-      var hints = values[0];
-      var predictions = values[1];
-      var output = "";
-
-      output += "return helpers.audit(options, [\n";
-      output += "  {\n";
-
-      if (cursor === input.length) {
-        output += "    setup:    '" + input + "',\n";
-      }
-      else {
-        output += "    name: '" + input + " (cursor=" + cursor + ")',\n";
-        output += "    setup: function() {\n";
-        output += "      return helpers.setInput(options, '" + input + "', " + cursor + ");\n";
-        output += "    },\n";
-      }
-
-      output += "    check: {\n";
-
-      output += "      input:  '" + input + "',\n";
-      output += "      hints:  " + padding + "'" + hints + "',\n";
-      output += "      markup: '" + helpers._actual.markup(options) + "',\n";
-      output += "      cursor: " + cursor + ",\n";
-      output += "      current: '" + helpers._actual.current(options) + "',\n";
-      output += "      status: '" + helpers._actual.status(options) + "',\n";
-      output += "      options: " + outputArray(helpers._actual.options(options)) + ",\n";
-      output += "      message: '" + helpers._actual.message(options) + "',\n";
-      output += "      predictions: " + outputArray(predictions) + ",\n";
-      output += "      unassigned: " + outputArray(requisition._unassigned) + ",\n";
-      output += "      outputState: '" + helpers._actual.outputState(options) + "',\n";
-      output += "      tooltipState: '" + helpers._actual.tooltipState(options) + "'" +
-              (command ? "," : "") + "\n";
-
-      if (command) {
-        output += "      args: {\n";
-        output += "        command: { name: '" + command.name + "' },\n";
-
-        requisition.getAssignments().forEach(function (assignment) {
-          output += "        " + assignment.param.name + ": { ";
-
-          if (typeof assignment.value === "string") {
-            output += "value: '" + assignment.value + "', ";
-          }
-          else if (shouldOutputUnquoted(assignment.value)) {
-            output += "value: " + assignment.value + ", ";
-          }
-        else {
-            output += "/*value:" + assignment.value + ",*/ ";
-          }
-
-          output += "arg: '" + assignment.arg + "', ";
-          output += "status: '" + assignment.getStatus().toString() + "', ";
-          output += "message: '" + assignment.message + "'";
-          output += " },\n";
-        });
-
-        output += "      }\n";
-      }
-
-      output += "    },\n";
-      output += "    exec: {\n";
-      output += "      output: '',\n";
-      output += "      type: 'string',\n";
-      output += "      error: false\n";
-      output += "    }\n";
-      output += "  }\n";
-      output += "]);";
-
-      return output;
-    }, util.errorHandler);
-  };
-
-/**
- * Simulate focusing the input field
- */
-  helpers.focusInput = function (options) {
-    checkOptions(options);
-    options.automator.focus();
-  };
-
-/**
- * Simulate pressing TAB in the input field
- */
-  helpers.pressTab = function (options) {
-    checkOptions(options);
-    return helpers.pressKey(options, KeyEvent.DOM_VK_TAB);
-  };
-
-/**
- * Simulate pressing RETURN in the input field
- */
-  helpers.pressReturn = function (options) {
-    checkOptions(options);
-    return helpers.pressKey(options, KeyEvent.DOM_VK_RETURN);
-  };
-
-/**
- * Simulate pressing a key by keyCode in the input field
- */
-  helpers.pressKey = function (options, keyCode) {
-    checkOptions(options);
-    return options.automator.fakeKey(keyCode);
-  };
-
-/**
- * A list of special key presses and how to to them, for the benefit of
- * helpers.setInput
- */
-  var ACTIONS = {
-    "<TAB>": function (options) {
-      return helpers.pressTab(options);
-    },
-    "<RETURN>": function (options) {
-      return helpers.pressReturn(options);
-    },
-    "<UP>": function (options) {
-      return helpers.pressKey(options, KeyEvent.DOM_VK_UP);
-    },
-    "<DOWN>": function (options) {
-      return helpers.pressKey(options, KeyEvent.DOM_VK_DOWN);
-    },
-    "<BACKSPACE>": function (options) {
-      return helpers.pressKey(options, KeyEvent.DOM_VK_BACK_SPACE);
-    }
-  };
-
-/**
- * Used in helpers.setInput to cut an input string like 'blah<TAB>foo<UP>' into
- * an array like [ 'blah', '<TAB>', 'foo', '<UP>' ].
- * When using this RegExp, you also need to filter out the blank strings.
- */
-  var CHUNKER = /([^<]*)(<[A-Z]+>)/;
-
-/**
- * Alter the input to <code>typed</code> optionally leaving the cursor at
- * <code>cursor</code>.
- * @return A promise of the number of key-presses to respond
- */
-  helpers.setInput = function (options, typed, cursor) {
-    checkOptions(options);
-    var inputPromise;
-    var automator = options.automator;
-  // We try to measure average keypress time, but setInput can simulate
-  // several, so we try to keep track of how many
-    var chunkLen = 1;
-
-  // The easy case is a simple string without things like <TAB>
-    if (!typed.includes("<")) {
-      inputPromise = automator.setInput(typed);
-    }
-    else {
-    // Cut the input up into input strings separated by '<KEY>' tokens. The
-    // CHUNKS RegExp leaves blanks so we filter them out.
-      var chunks = typed.split(CHUNKER).filter(function (s) {
-        return s !== "";
-      });
-      chunkLen = chunks.length + 1;
-
-    // We're working on this in chunks so first clear the input
-      inputPromise = automator.setInput("").then(function () {
-        return util.promiseEach(chunks, function (chunk) {
-          if (chunk.charAt(0) === "<") {
-            var action = ACTIONS[chunk];
-            if (typeof action !== "function") {
-              console.error("Known actions: " + Object.keys(ACTIONS).join());
-              throw new Error('Key action not found "' + chunk + '"');
-            }
-            return action(options);
-          }
-          else {
-            return automator.setInput(automator.getInputState().typed + chunk);
-          }
-        });
-      });
-    }
-
-    return inputPromise.then(function () {
-      if (cursor != null) {
-        automator.setCursor({ start: cursor, end: cursor });
-      }
-
-      if (automator.focusManager) {
-        automator.focusManager.onInputChange();
-      }
-
-    // Firefox testing is noisy and distant, so logging helps
-      if (options.isFirefox) {
-        var cursorStr = (cursor == null ? "" : ", " + cursor);
-        log('setInput("' + typed + '"' + cursorStr + ")");
-      }
-
-      return chunkLen;
-    });
-  };
-
-/**
- * Helper for helpers.audit() to ensure that all the 'check' properties match.
- * See helpers.audit for more information.
- * @param name The name to use in error messages
- * @param checks See helpers.audit for a list of available checks
- * @return A promise which resolves to undefined when the checks are complete
- */
-  helpers._check = function (options, name, checks) {
-  // A test method to check that all args are assigned in some way
-    var requisition = options.requisition;
-    requisition._args.forEach(function (arg) {
-      if (arg.assignment == null) {
-        assert.ok(false, "No assignment for " + arg);
-      }
-    });
-
-    if (checks == null) {
-      return Promise.resolve();
-    }
-
-    var outstanding = [];
-    var suffix = name ? " (for '" + name + "')" : "";
-
-    if (!options.isNode && "input" in checks) {
-      assert.is(helpers._actual.input(options), checks.input, "input" + suffix);
-    }
-
-    if (!options.isNode && "cursor" in checks) {
-      assert.is(helpers._actual.cursor(options), checks.cursor, "cursor" + suffix);
-    }
-
-    if (!options.isNode && "current" in checks) {
-      assert.is(helpers._actual.current(options), checks.current, "current" + suffix);
-    }
-
-    if ("status" in checks) {
-      assert.is(helpers._actual.status(options), checks.status, "status" + suffix);
-    }
-
-    if (!options.isNode && "markup" in checks) {
-      assert.is(helpers._actual.markup(options), checks.markup, "markup" + suffix);
-    }
-
-    if (!options.isNode && "hints" in checks) {
-      var hintCheck = function (actualHints) {
-        assert.is(actualHints, checks.hints, "hints" + suffix);
-      };
-      outstanding.push(helpers._actual.hints(options).then(hintCheck));
-    }
-
-    if (!options.isNode && "predictions" in checks) {
-      var predictionsCheck = function (actualPredictions) {
-        helpers.arrayIs(actualPredictions,
-                       checks.predictions,
-                       "predictions" + suffix);
-      };
-      outstanding.push(helpers._actual.predictions(options).then(predictionsCheck));
-    }
-
-    if (!options.isNode && "predictionsContains" in checks) {
-      var containsCheck = function (actualPredictions) {
-        checks.predictionsContains.forEach(function (prediction) {
-          var index = actualPredictions.indexOf(prediction);
-          assert.ok(index !== -1,
-                  "predictionsContains:" + prediction + suffix);
-          if (index === -1) {
-            log("Actual predictions (" + actualPredictions.length + "): " +
-              actualPredictions.join(", "));
-          }
-        });
-      };
-      outstanding.push(helpers._actual.predictions(options).then(containsCheck));
-    }
-
-    if ("unassigned" in checks) {
-      helpers.arrayIs(helpers._actual.unassigned(options),
-                     checks.unassigned,
-                     "unassigned" + suffix);
-    }
-
-  /* TODO: Fix this
-  if (!options.isNode && 'tooltipState' in checks) {
-    assert.is(helpers._actual.tooltipState(options),
-              checks.tooltipState,
-              'tooltipState' + suffix);
-  }
-  */
-
-    if (!options.isNode && "outputState" in checks) {
-      assert.is(helpers._actual.outputState(options),
-              checks.outputState,
-              "outputState" + suffix);
-    }
-
-    if (!options.isNode && "options" in checks) {
-      helpers.arrayIs(helpers._actual.options(options),
-                     checks.options,
-                     "options" + suffix);
-    }
-
-    if (!options.isNode && "error" in checks) {
-      assert.is(helpers._actual.message(options), checks.error, "error" + suffix);
-    }
-
-    if (checks.args != null) {
-      Object.keys(checks.args).forEach(function (paramName) {
-        var check = checks.args[paramName];
-
-      // We allow an 'argument' called 'command' to be the command itself, but
-      // what if the command has a parameter called 'command' (for example, an
-      // 'exec' command)? We default to using the parameter because checking
-      // the command value is less useful
-        var assignment = requisition.getAssignment(paramName);
-        if (assignment == null && paramName === "command") {
-          assignment = requisition.commandAssignment;
-        }
-
-        if (assignment == null) {
-          assert.ok(false, "Unknown arg: " + paramName + suffix);
-          return;
-        }
-
-        if ("value" in check) {
-          if (typeof check.value === "function") {
-            try {
-              check.value(assignment.value);
-            }
-          catch (ex) {
-            assert.ok(false, "" + ex);
-          }
-          }
-          else {
-            assert.is(assignment.value,
-                    check.value,
-                    "arg." + paramName + ".value" + suffix);
-          }
-        }
-
-        if ("name" in check) {
-          assert.is(assignment.value.name,
-                  check.name,
-                  "arg." + paramName + ".name" + suffix);
-        }
-
-        if ("type" in check) {
-          assert.is(assignment.arg.type,
-                  check.type,
-                  "arg." + paramName + ".type" + suffix);
-        }
-
-        if ("arg" in check) {
-          assert.is(assignment.arg.toString(),
-                  check.arg,
-                  "arg." + paramName + ".arg" + suffix);
-        }
-
-        if ("status" in check) {
-          assert.is(assignment.getStatus().toString(),
-                  check.status,
-                  "arg." + paramName + ".status" + suffix);
-        }
-
-        if (!options.isNode && "message" in check) {
-          if (typeof check.message.test === "function") {
-            assert.ok(check.message.test(assignment.message),
-                    "arg." + paramName + ".message" + suffix);
-          }
-          else {
-            assert.is(assignment.message,
-                    check.message,
-                    "arg." + paramName + ".message" + suffix);
-          }
-        }
-      });
-    }
-
-    return Promise.all(outstanding).then(function () {
-    // Ensure the promise resolves to nothing
-      return undefined;
-    });
-  };
-
-/**
- * Helper for helpers.audit() to ensure that all the 'exec' properties work.
- * See helpers.audit for more information.
- * @param name The name to use in error messages
- * @param expected See helpers.audit for a list of available exec checks
- * @return A promise which resolves to undefined when the checks are complete
- */
-  helpers._exec = function (options, name, expected) {
-    var requisition = options.requisition;
-    if (expected == null) {
-      return Promise.resolve({});
-    }
-
-    var origLogErrors = cli.logErrors;
-    if (expected.error) {
-      cli.logErrors = false;
-    }
-
-    try {
-      return requisition.exec({ hidden: true }).then(output => {
-        if ("type" in expected) {
-          assert.is(output.type,
-                  expected.type,
-                  "output.type for: " + name);
-        }
-
-        if ("error" in expected) {
-          assert.is(output.error,
-                  expected.error,
-                  "output.error for: " + name);
-        }
-
-        if (!("output" in expected)) {
-          return { output: output };
-        }
-
-        var context = requisition.conversionContext;
-        var convertPromise;
-        if (options.isNode) {
-          convertPromise = output.convert("string", context);
-        }
-        else {
-          convertPromise = output.convert("dom", context).then(function (node) {
-            return (node == null) ? "" : node.textContent.trim();
-          });
-        }
-
-        return convertPromise.then(function (textOutput) {
-          // Test that a regular expression has at least one match in a string.
-          var doTest = function (match, against) {
-          // Only log the real textContent if the test fails
-            if (against.match(match) != null) {
-              assert.ok(true,
-                `html output for '${name}' should match /${match.source || match}/`);
-            } else {
-              assert.ok(false,
-                `html output for '${name}' should match /${match.source || match}/. ` +
-                `Actual textContent: "${against}"`);
-            }
-          };
-
-          // Test that a regular expression has no matches in a string.
-          var doTestNot = function (match, against) {
-          // Only log the real textContent if the test fails
-            if (against.match(match) != null) {
-              assert.ok(false,
-                `html output for '${name}' should not match /` +
-                `${match.source || match}/. Actual textContent: "${against}"`);
-            } else {
-              assert.ok(true,
-              `html output for '${name}' should not match /${match.source || match}/`);
-            }
-          };
-
-          if (typeof expected.output === "string") {
-            assert.is(textOutput,
-                    expected.output,
-                    `html output for '${name}'`);
-          } else if (Array.isArray(expected.output)) {
-            expected.output.forEach(function (match) {
-              doTest(match, textOutput);
-            });
-          } else {
-            doTest(expected.output, textOutput);
-          }
-
-          if (typeof expected.notinoutput === "string") {
-            assert.ok(!textOutput.includes(expected.notinoutput),
-              `html output for "${name}" doesn't contain "${expected.notinoutput}"`);
-          } else if (Array.isArray(expected.notinoutput)) {
-            expected.notinoutput.forEach(function (match) {
-              doTestNot(match, textOutput);
-            });
-          } else if (typeof expected.notinoutput !== "undefined") {
-            doTestNot(expected.notinoutput, textOutput);
-          }
-
-          if (expected.error) {
-            cli.logErrors = origLogErrors;
-          }
-          return { output: output, text: textOutput };
-        });
-      }).then(function (data) {
-        if (expected.error) {
-          cli.logErrors = origLogErrors;
-        }
-
-        return data;
-      });
-    }
-  catch (ex) {
-    assert.ok(false, "Failure executing '" + name + "': " + ex);
-    util.errorHandler(ex);
-
-    if (expected.error) {
-      cli.logErrors = origLogErrors;
-    }
-    return Promise.resolve({});
-  }
-  };
-
-/**
- * Helper to setup the test
- */
-  helpers._setup = function (options, name, audit) {
-    if (typeof audit.setup === "string") {
-      return helpers.setInput(options, audit.setup);
-    }
-
-    if (typeof audit.setup === "function") {
-      return Promise.resolve(audit.setup.call(audit));
-    }
-
-    return Promise.reject("'setup' property must be a string or a function. Is " + audit.setup);
-  };
-
-/**
- * Helper to shutdown the test
- */
-  helpers._post = function (name, audit, data) {
-    if (typeof audit.post === "function") {
-      return Promise.resolve(audit.post.call(audit, data.output, data.text));
-    }
-    return Promise.resolve(audit.post);
-  };
-
-/*
- * We do some basic response time stats so we can see if we're getting slow
- */
-  var totalResponseTime = 0;
-  var averageOver = 0;
-  var maxResponseTime = 0;
-  var maxResponseCulprit;
-  var start;
-
-/**
- * Restart the stats collection process
- */
-  helpers.resetResponseTimes = function () {
-    start = new Date().getTime();
-    totalResponseTime = 0;
-    averageOver = 0;
-    maxResponseTime = 0;
-    maxResponseCulprit = undefined;
-  };
-
-/**
- * Expose an average response time in milliseconds
- */
-  Object.defineProperty(helpers, "averageResponseTime", {
-    get: function () {
-      return averageOver === 0 ?
-        undefined :
-        Math.round(100 * totalResponseTime / averageOver) / 100;
-    },
-    enumerable: true
-  });
-
-/**
- * Expose a maximum response time in milliseconds
- */
-  Object.defineProperty(helpers, "maxResponseTime", {
-    get: function () { return Math.round(maxResponseTime * 100) / 100; },
-    enumerable: true
-  });
-
-/**
- * Expose the name of the test that provided the maximum response time
- */
-  Object.defineProperty(helpers, "maxResponseCulprit", {
-    get: function () { return maxResponseCulprit; },
-    enumerable: true
-  });
-
-/**
- * Quick summary of the times
- */
-  Object.defineProperty(helpers, "timingSummary", {
-    get: function () {
-      var elapsed = (new Date().getTime() - start) / 1000;
-      return "Total " + elapsed + "s, " +
-           "ave response " + helpers.averageResponseTime + "ms, " +
-           "max response " + helpers.maxResponseTime + "ms " +
-           "from '" + helpers.maxResponseCulprit + "'";
-    },
-    enumerable: true
-  });
-
-/**
- * A way of turning a set of tests into something more declarative, this helps
- * to allow tests to be asynchronous.
- * @param audits An array of objects each of which contains:
- * - setup: string/function to be called to set the test up.
- *     If audit is a string then it is passed to helpers.setInput().
- *     If audit is a function then it is executed. The tests will wait while
- *     tests that return promises complete.
- * - name: For debugging purposes. If name is undefined, and 'setup'
- *     is a string then the setup value will be used automatically
- * - skipIf: A function to define if the test should be skipped. Useful for
- *     excluding tests from certain environments (e.g. nodom, firefox, etc).
- *     The name of the test will be used in log messages noting the skip
- *     See helpers.reason for pre-defined skip functions. The skip function must
- *     be synchronous, and will be passed the test options object.
- * - skipRemainingIf: A function to skip all the remaining audits in this set.
- *     See skipIf for details of how skip functions work.
- * - check: Check data. Available checks:
- *   - input: The text displayed in the input field
- *   - cursor: The position of the start of the cursor
- *   - status: One of 'VALID', 'ERROR', 'INCOMPLETE'
- *   - hints: The hint text, i.e. a concatenation of the directTabText, the
- *       emptyParameters and the arrowTabText. The text as inserted into the UI
- *       will include NBSP and Unicode RARR characters, these should be
- *       represented using normal space and '->' for the arrow
- *   - markup: What state should the error markup be in. e.g. 'VVVIIIEEE'
- *   - args: Maps of checks to make against the arguments:
- *     - value: i.e. assignment.value (which ignores defaultValue)
- *     - type: Argument/BlankArgument/MergedArgument/etc i.e. what's assigned
- *             Care should be taken with this since it's something of an
- *             implementation detail
- *     - arg: The toString value of the argument
- *     - status: i.e. assignment.getStatus
- *     - message: i.e. assignment.message
- *     - name: For commands - checks assignment.value.name
- * - exec: Object to indicate we should execute the command and check the
- *     results. Available checks:
- *   - output: A string, RegExp or array of RegExps to compare with the output
- *       If typeof output is a string then the output should be exactly equal
- *       to the given string. If the type of output is a RegExp or array of
- *       RegExps then the output should match all RegExps
- *   - error: If true, then it is expected that this command will fail (that
- *       is, return a rejected promise or throw an exception)
- *   - type: A string documenting the expected type of the return value
- * - post: Function to be called after the checks have been run, which will be
- *     passed 2 parameters: the first being output data (with type, data, and
- *     error properties), and the second being the converted text version of
- *     the output data
- */
-  helpers.audit = function (options, audits) {
-    checkOptions(options);
-    var skipReason = null;
-    return util.promiseEach(audits, function (audit) {
-      var name = audit.name;
-      if (name == null && typeof audit.setup === "string") {
-        name = audit.setup;
-      }
-
-      if (assert.testLogging) {
-        log("- START '" + name + "' in " + assert.currentTest);
-      }
-
-      if (audit.skipRemainingIf) {
-        var skipRemainingIf = (typeof audit.skipRemainingIf === "function") ?
-          audit.skipRemainingIf(options) :
-          !!audit.skipRemainingIf;
-        if (skipRemainingIf) {
-          skipReason = audit.skipRemainingIf.name ?
-            "due to " + audit.skipRemainingIf.name :
-            "";
-          assert.log("Skipped " + name + " " + skipReason);
-
-        // Tests need at least one pass, fail or todo. Create a dummy pass
-          assert.ok(true, "Each test requires at least one pass, fail or todo");
-
-          return Promise.resolve(undefined);
-        }
-      }
-
-      if (audit.skipIf) {
-        var skip = (typeof audit.skipIf === "function") ?
-          audit.skipIf(options) :
-          !!audit.skipIf;
-        if (skip) {
-          var reason = audit.skipIf.name ? "due to " + audit.skipIf.name : "";
-          assert.log("Skipped " + name + " " + reason);
-          return Promise.resolve(undefined);
-        }
-      }
-
-      if (skipReason != null) {
-        assert.log("Skipped " + name + " " + skipReason);
-        return Promise.resolve(undefined);
-      }
-
-      var start = new Date().getTime();
-
-      var setupDone = helpers._setup(options, name, audit);
-      return setupDone.then(function (chunkLen) {
-        if (typeof chunkLen !== "number") {
-          chunkLen = 1;
-        }
-
-      // Nasty hack to allow us to auto-skip tests where we're actually testing
-      // a key-sequence (i.e. targeting terminal.js) when there is no terminal
-        if (chunkLen === -1) {
-          assert.log("Skipped " + name + " " + skipReason);
-          return Promise.resolve(undefined);
-        }
-
-        if (assert.currentTest) {
-          var responseTime = (new Date().getTime() - start) / chunkLen;
-          totalResponseTime += responseTime;
-          if (responseTime > maxResponseTime) {
-            maxResponseTime = responseTime;
-            maxResponseCulprit = assert.currentTest + "/" + name;
-          }
-          averageOver++;
-        }
-
-        var checkDone = helpers._check(options, name, audit.check);
-        return checkDone.then(function () {
-          var execDone = helpers._exec(options, name, audit.exec);
-          return execDone.then(function (data) {
-            return helpers._post(name, audit, data).then(function () {
-              if (assert.testLogging) {
-                log("- END '" + name + "' in " + assert.currentTest);
-              }
-            });
-          });
-        });
-      });
-    }).then(function () {
-      return options.automator.setInput("");
-    }, function (ex) {
-      options.automator.setInput("");
-      throw ex;
-    });
-  };
-
-/**
- * Compare 2 arrays.
- */
-  helpers.arrayIs = function (actual, expected, message) {
-    assert.ok(Array.isArray(actual), "actual is not an array: " + message);
-    assert.ok(Array.isArray(expected), "expected is not an array: " + message);
-
-    if (!Array.isArray(actual) || !Array.isArray(expected)) {
-      return;
-    }
-
-    assert.is(actual.length, expected.length, "array length: " + message);
-
-    for (var i = 0; i < actual.length && i < expected.length; i++) {
-      assert.is(actual[i], expected[i], "member[" + i + "]: " + message);
-    }
-  };
-
-/**
- * A quick helper to log to the correct place
- */
-  function log(message) {
-    if (typeof info === "function") {
-      info(message);
-    }
-    else {
-      console.log(message);
-    }
-  }
-
-  return { helpers: helpers, assert: assert };
-})();
deleted file mode 100644
--- a/devtools/client/commandline/test/mockCommands.js
+++ /dev/null
@@ -1,794 +0,0 @@
-/*
- * Copyright 2012, Mozilla Foundation and contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-"use strict";
-
-// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
-// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
-
-var mockCommands;
-if (typeof exports !== "undefined") {
-  // If we're being loaded via require();
-  mockCommands = exports;
-}
-else {
-  // If we're being loaded via loadScript in mochitest
-  mockCommands = {};
-}
-
-// We use an alias for exports here because this module is used in Firefox
-// mochitests where we don't have define/require
-
-/**
- * Registration and de-registration.
- */
-mockCommands.setup = function (requisition) {
-  requisition.system.addItems(mockCommands.items);
-};
-
-mockCommands.shutdown = function (requisition) {
-  requisition.system.removeItems(mockCommands.items);
-};
-
-function createExec(name) {
-  return function (args, context) {
-    var promises = [];
-
-    Object.keys(args).map(argName => {
-      var value = args[argName];
-      var type = this.getParameterByName(argName).type;
-      var promise = Promise.resolve(type.stringify(value, context));
-      promises.push(promise.then(str => {
-        return { name: argName, value: str };
-      }));
-    });
-
-    return Promise.all(promises).then(data => {
-      var argValues = {};
-      data.forEach(function (entry) { argValues[entry.name] = entry.value; });
-
-      return context.typedData("testCommandOutput", {
-        name: name,
-        args: argValues
-      });
-    });
-  };
-}
-
-mockCommands.items = [
-  {
-    item: "converter",
-    from: "testCommandOutput",
-    to: "dom",
-    exec: function (testCommandOutput, context) {
-      var view = context.createView({
-        data: testCommandOutput,
-        html: "" +
-          "<table>" +
-            "<thead>" +
-              "<tr>" +
-                '<th colspan="3">Exec: ${name}</th>' +
-              "</tr>" +
-            "</thead>" +
-            "<tbody>" +
-              '<tr foreach="key in ${args}">' +
-                "<td> ${key}</td>" +
-                "<td>=</td>" +
-                "<td>${args[key]}</td>" +
-              "</tr>" +
-            "</tbody>" +
-          "</table>",
-        options: {
-          allowEval: true
-        }
-      });
-
-      return view.toDom(context.document);
-    }
-  },
-  {
-    item: "converter",
-    from: "testCommandOutput",
-    to: "string",
-    exec: function (testCommandOutput, context) {
-      var argsOut = Object.keys(testCommandOutput.args).map(function (key) {
-        return key + "=" + testCommandOutput.args[key];
-      }).join(" ");
-      return "Exec: " + testCommandOutput.name + " " + argsOut;
-    }
-  },
-  {
-    item: "type",
-    name: "optionType",
-    parent: "selection",
-    lookup: [
-      {
-        name: "option1",
-        value: "string"
-      },
-      {
-        name: "option2",
-        value: "number"
-      },
-      {
-        name: "option3",
-        value: {
-          name: "selection",
-          lookup: [
-            { name: "one", value: 1 },
-            { name: "two", value: 2 },
-            { name: "three", value: 3 }
-          ]
-        }
-      }
-    ]
-  },
-  {
-    item: "type",
-    name: "optionValue",
-    parent: "delegate",
-    delegateType: function (executionContext) {
-      if (executionContext != null) {
-        var option = executionContext.getArgsObject().optionType;
-        if (option != null) {
-          return option;
-        }
-      }
-      return "blank";
-    }
-  },
-  {
-    item: "command",
-    name: "tsv",
-    params: [
-      { name: "optionType", type: "optionType" },
-      { name: "optionValue", type: "optionValue" }
-    ],
-    exec: createExec("tsv")
-  },
-  {
-    item: "command",
-    name: "tsr",
-    params: [ { name: "text", type: "string" } ],
-    exec: createExec("tsr")
-  },
-  {
-    item: "command",
-    name: "tsrsrsr",
-    params: [
-      { name: "p1", type: "string" },
-      { name: "p2", type: "string" },
-      { name: "p3", type: { name: "string", allowBlank: true} },
-    ],
-    exec: createExec("tsrsrsr")
-  },
-  {
-    item: "command",
-    name: "tso",
-    params: [ { name: "text", type: "string", defaultValue: null } ],
-    exec: createExec("tso")
-  },
-  {
-    item: "command",
-    name: "tse",
-    params: [
-      { name: "node", type: "node" },
-      {
-        group: "options",
-        params: [
-          { name: "nodes", type: { name: "nodelist" } },
-          { name: "nodes2", type: { name: "nodelist", allowEmpty: true } }
-        ]
-      }
-    ],
-    exec: createExec("tse")
-  },
-  {
-    item: "command",
-    name: "tsj",
-    params: [ { name: "javascript", type: "javascript" } ],
-    exec: createExec("tsj")
-  },
-  {
-    item: "command",
-    name: "tsb",
-    params: [ { name: "toggle", type: "boolean" } ],
-    exec: createExec("tsb")
-  },
-  {
-    item: "command",
-    name: "tss",
-    exec: createExec("tss")
-  },
-  {
-    item: "command",
-    name: "tsu",
-    params: [
-      {
-        name: "num",
-        type: {
-          name: "number",
-          max: 10,
-          min: -5,
-          step: 3
-        }
-      }
-    ],
-    exec: createExec("tsu")
-  },
-  {
-    item: "command",
-    name: "tsf",
-    params: [
-      {
-        name: "num",
-        type: {
-          name: "number",
-          allowFloat: true,
-          max: 11.5,
-          min: -6.5,
-          step: 1.5
-        }
-      }
-    ],
-    exec: createExec("tsf")
-  },
-  {
-    item: "command",
-    name: "tsn"
-  },
-  {
-    item: "command",
-    name: "tsn dif",
-    params: [ { name: "text", type: "string", description: "tsn dif text" } ],
-    exec: createExec("tsnDif")
-  },
-  {
-    item: "command",
-    name: "tsn hidden",
-    hidden: true,
-    exec: createExec("tsnHidden")
-  },
-  {
-    item: "command",
-    name: "tsn ext",
-    params: [ { name: "text", type: "string" } ],
-    exec: createExec("tsnExt")
-  },
-  {
-    item: "command",
-    name: "tsn exte",
-    params: [ { name: "text", type: "string" } ],
-    exec: createExec("tsnExte")
-  },
-  {
-    item: "command",
-    name: "tsn exten",
-    params: [ { name: "text", type: "string" } ],
-    exec: createExec("tsnExten")
-  },
-  {
-    item: "command",
-    name: "tsn extend",
-    params: [ { name: "text", type: "string" } ],
-    exec: createExec("tsnExtend")
-  },
-  {
-    item: "command",
-    name: "tsn deep"
-  },
-  {
-    item: "command",
-    name: "tsn deep down"
-  },
-  {
-    item: "command",
-    name: "tsn deep down nested"
-  },
-  {
-    item: "command",
-    name: "tsn deep down nested cmd",
-    exec: createExec("tsnDeepDownNestedCmd")
-  },
-  {
-    item: "command",
-    name: "tshidden",
-    hidden: true,
-    params: [
-      {
-        group: "Options",
-        params: [
-          {
-            name: "visible",
-            type: "string",
-            short: "v",
-            defaultValue: null,
-            description: "visible"
-          },
-          {
-            name: "invisiblestring",
-            type: "string",
-            short: "i",
-            description: "invisiblestring",
-            defaultValue: null,
-            hidden: true
-          },
-          {
-            name: "invisibleboolean",
-            short: "b",
-            type: "boolean",
-            description: "invisibleboolean",
-            hidden: true
-          }
-        ]
-      }
-    ],
-    exec: createExec("tshidden")
-  },
-  {
-    item: "command",
-    name: "tselarr",
-    params: [
-      { name: "num", type: { name: "selection", data: [ "1", "2", "3" ] } },
-      { name: "arr", type: { name: "array", subtype: "string" } }
-    ],
-    exec: createExec("tselarr")
-  },
-  {
-    item: "command",
-    name: "tsm",
-    description: "a 3-param test selection|string|number",
-    params: [
-      { name: "abc", type: { name: "selection", data: [ "a", "b", "c" ] } },
-      { name: "txt", type: "string" },
-      { name: "num", type: { name: "number", max: 42, min: 0 } }
-    ],
-    exec: createExec("tsm")
-  },
-  {
-    item: "command",
-    name: "tsg",
-    description: "a param group test",
-    params: [
-      {
-        name: "solo",
-        type: { name: "selection", data: [ "aaa", "bbb", "ccc" ] },
-        description: "solo param"
-      },
-      {
-        group: "First",
-        params: [
-          {
-            name: "txt1",
-            type: "string",
-            defaultValue: null,
-            description: "txt1 param"
-          },
-          {
-            name: "bool",
-            type: "boolean",
-            description: "bool param"
-          }
-        ]
-      },
-      {
-        name: "txt2",
-        type: "string",
-        defaultValue: "d",
-        description: "txt2 param",
-        option: "Second"
-      },
-      {
-        name: "num",
-        type: { name: "number", min: 40 },
-        defaultValue: 42,
-        description: "num param",
-        option: "Second"
-      }
-    ],
-    exec: createExec("tsg")
-  },
-  {
-    item: "command",
-    name: "tscook",
-    description: "param group test to catch problems with cookie command",
-    params: [
-      {
-        name: "key",
-        type: "string",
-        description: "tscookKeyDesc"
-      },
-      {
-        name: "value",
-        type: "string",
-        description: "tscookValueDesc"
-      },
-      {
-        group: "tscookOptionsDesc",
-        params: [
-          {
-            name: "path",
-            type: "string",
-            defaultValue: "/",
-            description: "tscookPathDesc"
-          },
-          {
-            name: "domain",
-            type: "string",
-            defaultValue: null,
-            description: "tscookDomainDesc"
-          },
-          {
-            name: "secure",
-            type: "boolean",
-            description: "tscookSecureDesc"
-          }
-        ]
-      }
-    ],
-    exec: createExec("tscook")
-  },
-  {
-    item: "command",
-    name: "tslong",
-    description: "long param tests to catch problems with the jsb command",
-    params: [
-      {
-        name: "msg",
-        type: "string",
-        description: "msg Desc"
-      },
-      {
-        group: "Options Desc",
-        params: [
-          {
-            name: "num",
-            short: "n",
-            type: "number",
-            description: "num Desc",
-            defaultValue: 2
-          },
-          {
-            name: "sel",
-            short: "s",
-            type: {
-              name: "selection",
-              lookup: [
-                { name: "space", value: " " },
-                { name: "tab", value: "\t" }
-              ]
-            },
-            description: "sel Desc",
-            defaultValue: " "
-          },
-          {
-            name: "bool",
-            short: "b",
-            type: "boolean",
-            description: "bool Desc"
-          },
-          {
-            name: "num2",
-            short: "m",
-            type: "number",
-            description: "num2 Desc",
-            defaultValue: -1
-          },
-          {
-            name: "bool2",
-            short: "c",
-            type: "boolean",
-            description: "bool2 Desc"
-          },
-          {
-            name: "sel2",
-            short: "t",
-            type: {
-              name: "selection",
-              data: [ "collapse", "basic", "with space", "with two spaces" ]
-            },
-            description: "sel2 Desc",
-            defaultValue: "collapse"
-          }
-        ]
-      }
-    ],
-    exec: createExec("tslong")
-  },
-  {
-    item: "command",
-    name: "tsdate",
-    description: "long param tests to catch problems with the jsb command",
-    params: [
-      {
-        name: "d1",
-        type: "date",
-      },
-      {
-        name: "d2",
-        type: {
-          name: "date",
-          min: "1 jan 2000",
-          max: "28 feb 2000",
-          step: 2
-        }
-      },
-    ],
-    exec: createExec("tsdate")
-  },
-  {
-    item: "command",
-    name: "tsfail",
-    description: "test errors",
-    params: [
-      {
-        name: "method",
-        type: {
-          name: "selection",
-          data: [
-            "reject", "rejecttyped",
-            "throwerror", "throwstring", "throwinpromise",
-            "noerror"
-          ]
-        }
-      }
-    ],
-    exec: function (args, context) {
-      if (args.method === "reject") {
-        return new Promise(function (resolve, reject) {
-          context.environment.window.setTimeout(function () {
-            reject("rejected promise");
-          }, 10);
-        });
-      }
-
-      if (args.method === "rejecttyped") {
-        return new Promise(function (resolve, reject) {
-          context.environment.window.setTimeout(function () {
-            reject(context.typedData("number", 54));
-          }, 10);
-        });
-      }
-
-      if (args.method === "throwinpromise") {
-        return new Promise(function (resolve, reject) {
-          context.environment.window.setTimeout(function () {
-            resolve("should be lost");
-          }, 10);
-        }).then(function () {
-          var t = null;
-          return t.foo;
-        });
-      }
-
-      if (args.method === "throwerror") {
-        throw new Error("thrown error");
-      }
-
-      if (args.method === "throwstring") {
-        throw "thrown string";
-      }
-
-      return "no error";
-    }
-  },
-  {
-    item: "command",
-    name: "tsfile",
-    description: "test file params",
-  },
-  {
-    item: "command",
-    name: "tsfile open",
-    description: "a file param in open mode",
-    params: [
-      {
-        name: "p1",
-        type: {
-          name: "file",
-          filetype: "file",
-          existing: "yes"
-        }
-      }
-    ],
-    exec: createExec("tsfile open")
-  },
-  {
-    item: "command",
-    name: "tsfile saveas",
-    description: "a file param in saveas mode",
-    params: [
-      {
-        name: "p1",
-        type: {
-          name: "file",
-          filetype: "file",
-          existing: "no"
-        }
-      }
-    ],
-    exec: createExec("tsfile saveas")
-  },
-  {
-    item: "command",
-    name: "tsfile save",
-    description: "a file param in save mode",
-    params: [
-      {
-        name: "p1",
-        type: {
-          name: "file",
-          filetype: "file",
-          existing: "maybe"
-        }
-      }
-    ],
-    exec: createExec("tsfile save")
-  },
-  {
-    item: "command",
-    name: "tsfile cd",
-    description: "a file param in cd mode",
-    params: [
-      {
-        name: "p1",
-        type: {
-          name: "file",
-          filetype: "directory",
-          existing: "yes"
-        }
-      }
-    ],
-    exec: createExec("tsfile cd")
-  },
-  {
-    item: "command",
-    name: "tsfile mkdir",
-    description: "a file param in mkdir mode",
-    params: [
-      {
-        name: "p1",
-        type: {
-          name: "file",
-          filetype: "directory",
-          existing: "no"
-        }
-      }
-    ],
-    exec: createExec("tsfile mkdir")
-  },
-  {
-    item: "command",
-    name: "tsfile rm",
-    description: "a file param in rm mode",
-    params: [
-      {
-        name: "p1",
-        type: {
-          name: "file",
-          filetype: "any",
-          existing: "yes"
-        }
-      }
-    ],
-    exec: createExec("tsfile rm")
-  },
-  {
-    item: "command",
-    name: "tsslow",
-    params: [
-      {
-        name: "hello",
-        type: {
-          name: "selection",
-          data: function (context) {
-            return new Promise(function (resolve, reject) {
-              context.environment.window.setTimeout(function () {
-                resolve([
-                  "Shalom", "Namasté", "Hallo", "Dydd-da",
-                  "Chào", "Hej", "Saluton", "Sawubona"
-                ]);
-              }, 10);
-            });
-          }
-        }
-      }
-    ],
-    exec: function (args, context) {
-      return "Test completed";
-    }
-  },
-  {
-    item: "command",
-    name: "urlc",
-    params: [
-      {
-        name: "url",
-        type: "url"
-      }
-    ],
-    returnType: "json",
-    exec: function (args, context) {
-      return args;
-    }
-  },
-  {
-    item: "command",
-    name: "unionc1",
-    params: [
-      {
-        name: "first",
-        type: {
-          name: "union",
-          alternatives: [
-            {
-              name: "selection",
-              lookup: [
-                { name: "one", value: 1 },
-                { name: "two", value: 2 },
-              ]
-            },
-            "number",
-            { name: "string" }
-          ]
-        }
-      }
-    ],
-    returnType: "json",
-    exec: function (args, context) {
-      return args;
-    }
-  },
-  {
-    item: "command",
-    name: "unionc2",
-    params: [
-      {
-        name: "first",
-        type: {
-          name: "union",
-          alternatives: [
-            {
-              name: "selection",
-              lookup: [
-                { name: "one", value: 1 },
-                { name: "two", value: 2 },
-              ]
-            },
-            {
-              name: "url"
-            }
-          ]
-        }
-      }
-    ],
-    returnType: "json",
-    exec: function (args, context) {
-      return args;
-    }
-  },
-  {
-    item: "command",
-    name: "tsres",
-    params: [
-      {
-        name: "resource",
-        type: "resource"
-      }
-    ],
-    exec: createExec("tsres"),
-  }
-];
--- a/devtools/client/debugger/new/test/mochitest/browser.ini
+++ b/devtools/client/debugger/new/test/mochitest/browser.ini
@@ -1,16 +1,15 @@
 [DEFAULT]
 tags = devtools
 subsuite = devtools
 skip-if = (os == 'linux' && debug && bits == 32)
 support-files =
   head.js
   helpers.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   ## START-SOURCEMAPPED-FIXTURES - Generated by examples/sourcemapped/build.js
   examples/sourcemapped/polyfill-bundle.js
   examples/sourcemapped/output/parcel/babel-bindings-with-flow.js
   examples/sourcemapped/output/parcel/babel-bindings-with-flow.map
   examples/sourcemapped/output/parcel/babel-flowtype-bindings.js
   examples/sourcemapped/output/parcel/babel-flowtype-bindings.map
--- a/devtools/client/debugger/test/mochitest/browser.ini
+++ b/devtools/client/debugger/test/mochitest/browser.ini
@@ -123,17 +123,16 @@ support-files =
   doc_worker-source-map.html
   doc_WorkerTargetActor.attach-tab1.html
   doc_WorkerTargetActor.attach-tab2.html
   doc_WorkerTargetActor.attachThread-tab.html
   head.js
   sjs_post-page.sjs
   sjs_random-javascript.sjs
   testactors.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
 
 [browser_dbg_aaa_run_first_leaktest.js]
 uses-unsafe-cpows = true
 skip-if = e10s && debug
 [browser_dbg_addon-modules.js]
 skip-if = e10s # TODO
--- a/devtools/client/debugger/test/mochitest/browser2.ini
+++ b/devtools/client/debugger/test/mochitest/browser2.ini
@@ -123,17 +123,16 @@ support-files =
   doc_worker-source-map.html
   doc_WorkerTargetActor.attach-tab1.html
   doc_WorkerTargetActor.attach-tab2.html
   doc_WorkerTargetActor.attachThread-tab.html
   head.js
   sjs_post-page.sjs
   sjs_random-javascript.sjs
   testactors.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
 
 [browser_dbg_no-dangling-breakpoints.js]
 uses-unsafe-cpows = true
 skip-if = e10s && debug
 [browser_dbg_no-page-sources.js]
 uses-unsafe-cpows = true
--- a/devtools/client/debugger/test/mochitest/head.js
+++ b/devtools/client/debugger/test/mochitest/head.js
@@ -61,18 +61,16 @@ registerCleanupFunction(async function()
     Cu.schedulePreciseGC(resolve);
   });
 });
 
 // Import the GCLI test helper
 var testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 testDir = testDir.replace(/\/\//g, "/");
 testDir = testDir.replace("chrome:/mochitest", "chrome://mochitest");
-var helpersjs = testDir + "/../../../commandline/test/helpers.js";
-Services.scriptloader.loadSubScript(helpersjs, this);
 
 function addWindow(aUrl) {
   info("Adding window: " + aUrl);
   return promise.resolve(getChromeWindow(window.open(aUrl)));
 }
 
 function getChromeWindow(aWindow) {
   return aWindow.docShell.rootTreeItem.domWindow;
@@ -664,17 +662,17 @@ AddonDebugger.prototype = {
   _attachConsole: function () {
     let deferred = promise.defer();
     this.client.attachConsole(this.target.form.consoleActor, ["ConsoleAPI"])
       .then(([aResponse, aWebConsoleClient]) => {
         this.webConsole = aWebConsoleClient;
         this.client.addListener("consoleAPICall", this._onConsoleAPICall);
         deferred.resolve();
       }, e => {
-        deferred.reject(e); 
+        deferred.reject(e);
       });
     return deferred.promise;
   },
 
   _onConsoleAPICall: function (aType, aPacket) {
     if (aPacket.from != this.webConsole.actor)
       return;
     this.emit("console", aPacket.message);
--- a/devtools/client/inspector/animation-old/test/browser.ini
+++ b/devtools/client/inspector/animation-old/test/browser.ini
@@ -14,17 +14,16 @@ support-files =
   doc_script_animation.html
   doc_short_duration_animation.html
   doc_simple_animation.html
   doc_multiple_animation_types.html
   doc_multiple_easings.html
   doc_multiple_property_types.html
   doc_timing_combination_animation.html
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/frame-script-utils.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor-registry.js
   !/devtools/client/shared/test/test-actor.js
 
--- a/devtools/client/inspector/boxmodel/test/browser.ini
+++ b/devtools/client/inspector/boxmodel/test/browser.ini
@@ -1,16 +1,15 @@
 [DEFAULT]
 tags = devtools
 subsuite = devtools
 support-files =
   doc_boxmodel_iframe1.html
   doc_boxmodel_iframe2.html
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_boxmodel.js]
--- a/devtools/client/inspector/computed/test/browser.ini
+++ b/devtools/client/inspector/computed/test/browser.ini
@@ -5,17 +5,16 @@ support-files =
   doc_matched_selectors.html
   doc_media_queries.html
   doc_pseudoelement.html
   doc_sourcemaps.css
   doc_sourcemaps.css.map
   doc_sourcemaps.html
   doc_sourcemaps.scss
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_computed_browser-styles.js]
--- a/devtools/client/inspector/extensions/test/browser.ini
+++ b/devtools/client/inspector/extensions/test/browser.ini
@@ -1,15 +1,14 @@
 [DEFAULT]
 tags = devtools
 subsuite = devtools
 support-files =
   head.js
   head_devtools_inspector_sidebar.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_inspector_extension_sidebar.js]
--- a/devtools/client/inspector/fonts/test/browser.ini
+++ b/devtools/client/inspector/fonts/test/browser.ini
@@ -3,17 +3,16 @@ tags = devtools
 subsuite = devtools
 support-files =
   doc_browser_fontinspector.html
   doc_browser_fontinspector_iframe.html
   test_iframe.html
   ostrich-black.ttf
   ostrich-regular.ttf
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_fontinspector.js]
--- a/devtools/client/inspector/grids/test/browser.ini
+++ b/devtools/client/inspector/grids/test/browser.ini
@@ -1,15 +1,14 @@
 [DEFAULT]
 tags = devtools
 subsuite = devtools
 support-files =
   doc_iframe_reloaded.html
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/shared-redux-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
--- a/devtools/client/inspector/markup/test/browser.ini
+++ b/devtools/client/inspector/markup/test/browser.ini
@@ -64,17 +64,16 @@ support-files =
   lib_jquery_2.1.1_min.js
   lib_react_16.2.0_min.js
   lib_react_dom_15.3.1_min.js
   lib_react_dom_15.4.1.js
   lib_react_dom_16.2.0_min.js
   lib_react_with_addons_15.3.1_min.js
   lib_react_with_addons_15.4.1.js
   react_external_listeners.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/debugger/new/test/mochitest/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
--- a/devtools/client/inspector/markup/test/head.js
+++ b/devtools/client/inspector/markup/test/head.js
@@ -36,17 +36,16 @@ registerCleanupFunction(() => {
  * Some tests may need to import one or more of the test helper scripts.
  * A test helper script is simply a js file that contains common test code that
  * is either not common-enough to be in head.js, or that is located in a
  * separate directory.
  * The script will be loaded synchronously and in the test's scope.
  * @param {String} filePath The file path, relative to the current directory.
  *                 Examples:
  *                 - "helper_attributes_test_runner.js"
- *                 - "../../../commandline/test/helpers.js"
  */
 function loadHelperScript(filePath) {
   const testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
   Services.scriptloader.loadSubScript(testDir + "/" + filePath, this);
 }
 
 /**
  * Reload the current page
--- a/devtools/client/inspector/rules/test/browser.ini
+++ b/devtools/client/inspector/rules/test/browser.ini
@@ -35,17 +35,16 @@ support-files =
   doc_sourcemaps2.html
   doc_style_editor_link.css
   doc_test_image.png
   doc_urls_clickable.css
   doc_urls_clickable.html
   doc_variables_1.html
   doc_variables_2.html
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_rules_add-property-and-reselect.js]
--- a/devtools/client/inspector/shared/test/browser.ini
+++ b/devtools/client/inspector/shared/test/browser.ini
@@ -8,17 +8,16 @@ support-files =
   doc_content_stylesheet.xul
   doc_content_stylesheet_imported.css
   doc_content_stylesheet_imported2.css
   doc_content_stylesheet_linked.css
   doc_content_stylesheet_script.css
   doc_content_stylesheet_xul.css
   doc_frame_script.js
   head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_styleinspector_context-menu-copy-color_01.js]
--- a/devtools/client/inspector/test/browser.ini
+++ b/devtools/client/inspector/test/browser.ini
@@ -37,17 +37,16 @@ support-files =
   doc_inspector_search-suggestions.html
   doc_inspector_search-svg.html
   doc_inspector_select-last-selected-01.html
   doc_inspector_select-last-selected-02.html
   doc_inspector_svg.svg
   head.js
   img_browser_inspector_highlighter-eyedropper-image.png
   shared-head.js
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_inspector_addNode_01.js]
 [browser_inspector_addNode_02.js]
 [browser_inspector_addNode_03.js]
--- a/devtools/client/jsonview/test/browser.ini
+++ b/devtools/client/jsonview/test/browser.ini
@@ -13,17 +13,16 @@ support-files =
   invalid_json.json^headers^
   manifest_json.json
   manifest_json.json^headers^
   passthrough-sw.js
   simple_json.json
   simple_json.json^headers^
   valid_json.json
   valid_json.json^headers^
-  !/devtools/client/commandline/test/head.js
   !/devtools/client/framework/test/head.js
   !/devtools/client/shared/test/frame-script-utils.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
 
 [browser_json_refresh.js]
 [browser_jsonview_bug_1380828.js]
 [browser_jsonview_chunked_json.js]
--- a/devtools/client/moz.build
+++ b/devtools/client/moz.build
@@ -7,17 +7,16 @@
 include('../templates.mozbuild')
 
 DIRS += [
     'aboutdebugging',
     'aboutdebugging-new',
     'accessibility',
     'application',
     'canvasdebugger',
-    'commandline',
     'debugger',
     'dom',
     'framework',
     'inspector',
     'jsonview',
     'locales',
     'memory',
     'netmonitor',
--- a/devtools/client/responsive.html/test/browser/browser.ini
+++ b/devtools/client/responsive.html/test/browser/browser.ini
@@ -8,17 +8,16 @@ support-files =
   contextual_identity.html
   devices.json
   doc_page_state.html
   favicon.html
   favicon.ico
   geolocation.html
   head.js
   touch.html
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/shared-redux-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_cmd_click.js]
--- a/devtools/client/responsive.html/test/browser/head.js
+++ b/devtools/client/responsive.html/test/browser/head.js
@@ -1,31 +1,25 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /* eslint no-unused-vars: [2, {"vars": "local"}] */
 /* import-globals-from ../../../shared/test/shared-head.js */
 /* import-globals-from ../../../shared/test/shared-redux-head.js */
-/* import-globals-from ../../../commandline/test/helpers.js */
 /* import-globals-from ../../../inspector/test/shared-head.js */
 
 Services.scriptloader.loadSubScript(
   "chrome://mochitests/content/browser/devtools/client/shared/test/shared-head.js",
   this);
 Services.scriptloader.loadSubScript(
   "chrome://mochitests/content/browser/devtools/client/shared/test/shared-redux-head.js",
   this);
 
-// Import the GCLI test helper
-Services.scriptloader.loadSubScript(
-  "chrome://mochitests/content/browser/devtools/client/commandline/test/helpers.js",
-  this);
-
 // Import helpers registering the test-actor in remote targets
 Services.scriptloader.loadSubScript(
   "chrome://mochitests/content/browser/devtools/client/shared/test/test-actor-registry.js",
   this);
 
 // Import helpers for the inspector that are also shared with others
 Services.scriptloader.loadSubScript(
   "chrome://mochitests/content/browser/devtools/client/inspector/test/shared-head.js",
--- a/devtools/client/shared/test/shared-head.js
+++ b/devtools/client/shared/test/shared-head.js
@@ -363,17 +363,16 @@ function once(target, eventName, useCapt
  * Some tests may need to import one or more of the test helper scripts.
  * A test helper script is simply a js file that contains common test code that
  * is either not common-enough to be in head.js, or that is located in a
  * separate directory.
  * The script will be loaded synchronously and in the test's scope.
  * @param {String} filePath The file path, relative to the current directory.
  *                 Examples:
  *                 - "helper_attributes_test_runner.js"
- *                 - "../../../commandline/test/helpers.js"
  */
 function loadHelperScript(filePath) {
   const testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
   Services.scriptloader.loadSubScript(testDir + "/" + filePath, this);
 }
 
 /**
  * Wait for a tick.
--- a/devtools/client/sourceeditor/test/head.js
+++ b/devtools/client/sourceeditor/test/head.js
@@ -78,17 +78,16 @@ function teardown(ed, win) {
  * Some tests may need to import one or more of the test helper scripts.
  * A test helper script is simply a js file that contains common test code that
  * is either not common-enough to be in head.js, or that is located in a
  * separate directory.
  * The script will be loaded synchronously and in the test's scope.
  * @param {String} filePath The file path, relative to the current directory.
  *                 Examples:
  *                 - "helper_attributes_test_runner.js"
- *                 - "../../../commandline/test/helpers.js"
  */
 function loadHelperScript(filePath) {
   const testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
   Services.scriptloader.loadSubScript(testDir + "/" + filePath, this);
 }
 
 /**
  * This method returns the portion of the input string `source` up to the
--- a/devtools/client/styleeditor/test/browser.ini
+++ b/devtools/client/styleeditor/test/browser.ini
@@ -55,17 +55,16 @@ support-files =
   test_private.html
   doc_fetch_from_netmonitor.html
   doc_long_string.css
   doc_long.css
   doc_short_string.css
   doc_xulpage.xul
   sync.html
   utf-16.css
-  !/devtools/client/commandline/test/helpers.js
   !/devtools/client/inspector/shared/test/head.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/responsive.html/test/browser/devices.json
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/test-actor-registry.js
   !/devtools/client/shared/test/test-actor.js