summaryrefslogtreecommitdiffstats
path: root/devtools/shared/commands/create-command.sh
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/commands/create-command.sh')
-rwxr-xr-xdevtools/shared/commands/create-command.sh129
1 files changed, 129 insertions, 0 deletions
diff --git a/devtools/shared/commands/create-command.sh b/devtools/shared/commands/create-command.sh
new file mode 100755
index 0000000000..1f95f96df6
--- /dev/null
+++ b/devtools/shared/commands/create-command.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+
+# Script to easily create a new command, including:
+# - a template for the main command file
+# - test folder and test head.js file
+# - a template for a first test
+# - all necessary build manifests
+
+if [[ -z $1 || -z $2 ]]; then
+ echo "$0 expects two arguments:"
+ echo "$(basename $0) command-file-name CommandName"
+ echo " 1) The file name for the command, with '-' as separators between words"
+ echo " This will be the name of the folder"
+ echo " 2) The command name being caml cased"
+ echo " This will be used to craft the name of the JavaScript class"
+ exit
+fi
+
+if [ -e $1 ]; then
+ echo "$1 already exists. Please use a new folder/command name."
+fi
+
+CMD_FOLDER=$1
+CMD_FILE_NAME=$1-command.js
+CMD_NAME=$2Command
+
+pushd `dirname $0`
+
+echo "Creating a new command called '$CMD_NAME' in $CMD_FOLDER"
+
+mkdir $CMD_FOLDER
+
+cat > $CMD_FOLDER/moz.build <<EOF
+# 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/.
+
+DevToolsModules(
+ "$CMD_FILE_NAME",
+)
+
+if CONFIG["MOZ_BUILD_APP"] != "mobile/android":
+ BROWSER_CHROME_MANIFESTS += ["tests/browser.toml"]
+EOF
+
+cat > $CMD_FOLDER/$CMD_FILE_NAME <<EOF
+/* 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/. */
+
+"use strict";
+
+/**
+ * The $CMD_NAME ...
+ */
+class $CMD_NAME {
+ constructor({ commands, descriptorFront, watcherFront }) {
+ this.#commands = commands;
+ }
+ #commands = null;
+
+}
+
+module.exports = $CMD_NAME;
+EOF
+
+mkdir $CMD_FOLDER/tests
+cat > $CMD_FOLDER/tests/browser.toml <<EOF
+[DEFAULT]
+tags = "devtools"
+subsuite = "devtools"
+support-files = [
+ "!/devtools/client/shared/test/shared-head.js",
+ "head.js",
+]
+
+[browser_$1.js]
+EOF
+
+
+cat > $CMD_FOLDER/tests/head.js <<EOF
+* 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/. */
+
+"use strict";
+
+/* eslint no-unused-vars: [2, {"vars": "local"}] */
+
+Services.scriptloader.loadSubScript(
+ "chrome://mochitests/content/browser/devtools/client/shared/test/shared-head.js",
+ this
+);
+EOF
+
+CMD_NAME_FIRST_LOWERCASE=${CMD_NAME,}
+cat > $CMD_FOLDER/tests/browser_$1.js <<EOF
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test the $CMD_NAME
+
+add_task(async function () {
+ info("Setup the test page");
+ const tab = await addTab("data:text/html;charset=utf-8,Test page");
+
+ info("Create a target list for a tab target");
+ const commands = await CommandsFactory.forTab(tab);
+ await commands.targetCommand.startListening();
+
+ const { $CMD_NAME_FIRST_LOWERCASE } = commands;
+
+ // assertions...
+
+ await commands.destroy();
+ BrowserTestUtils.removeTab(tab);
+});
+EOF
+
+popd
+
+echo ""
+echo "Command created!"
+echo ""
+echo "Now:"
+echo " - edit moz.build to add '\"$CMD_FOLDER\",' in DIRS (this need to be kept sorted)"
+echo " - edit index.js to add '$CMD_NAME_FIRST_LOWERCASE: \"devtools/shared/commands/$CMD_FOLDER/$1-command\"' in Commands dictionary"