summaryrefslogtreecommitdiffstats
path: root/testing/geckodriver/mach_commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/geckodriver/mach_commands.py')
-rw-r--r--testing/geckodriver/mach_commands.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/testing/geckodriver/mach_commands.py b/testing/geckodriver/mach_commands.py
new file mode 100644
index 0000000000..cb56d3acf2
--- /dev/null
+++ b/testing/geckodriver/mach_commands.py
@@ -0,0 +1,122 @@
+# 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/.
+
+import logging
+import os
+
+from mach.decorators import Command, CommandArgument, CommandArgumentGroup
+from mozbuild.base import BinaryNotFoundException
+
+
+@Command(
+ "geckodriver",
+ category="post-build",
+ description="Run the WebDriver implementation for Gecko.",
+)
+@CommandArgument(
+ "--binary", type=str, help="Firefox binary (defaults to the local build)."
+)
+@CommandArgument(
+ "params", nargs="...", help="Flags to be passed through to geckodriver."
+)
+@CommandArgumentGroup("debugging")
+@CommandArgument(
+ "--debug",
+ action="store_true",
+ group="debugging",
+ help="Enable the debugger. Not specifying a --debugger "
+ "option will result in the default debugger "
+ "being used.",
+)
+@CommandArgument(
+ "--debugger",
+ default=None,
+ type=str,
+ group="debugging",
+ help="Name of debugger to use.",
+)
+@CommandArgument(
+ "--debugger-args",
+ default=None,
+ metavar="params",
+ type=str,
+ group="debugging",
+ help="Flags to pass to the debugger itself; split as the Bourne shell would.",
+)
+def run(command_context, binary, params, debug, debugger, debugger_args):
+ try:
+ binpath = command_context.get_binary_path("geckodriver")
+ except BinaryNotFoundException as e:
+ command_context.log(
+ logging.ERROR, "geckodriver", {"error": str(e)}, "ERROR: {error}"
+ )
+ command_context.log(
+ logging.INFO,
+ "geckodriver",
+ {},
+ "It looks like geckodriver isn't built. "
+ "Add ac_add_options --enable-geckodriver to your "
+ "mozconfig "
+ "and run |./mach build| to build it.",
+ )
+ return 1
+
+ args = [binpath]
+
+ if params:
+ args.extend(params)
+
+ if binary is None:
+ try:
+ binary = command_context.get_binary_path("app")
+ except BinaryNotFoundException as e:
+ command_context.log(
+ logging.ERROR, "geckodriver", {"error": str(e)}, "ERROR: {error}"
+ )
+ command_context.log(
+ logging.INFO, "geckodriver", {"help": e.help()}, "{help}"
+ )
+ return 1
+
+ args.extend(["--binary", binary])
+
+ if debug or debugger or debugger_args:
+ if "INSIDE_EMACS" in os.environ:
+ command_context.log_manager.terminal_handler.setLevel(logging.WARNING)
+
+ import mozdebug
+
+ if not debugger:
+ # No debugger name was provided. Look for the default ones on
+ # current OS.
+ debugger = mozdebug.get_default_debugger_name(
+ mozdebug.DebuggerSearch.KeepLooking
+ )
+
+ if debugger:
+ debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args)
+ if not debuggerInfo:
+ print("Could not find a suitable debugger in your PATH.")
+ return 1
+
+ # Parameters come from the CLI. We need to convert them before
+ # their use.
+ if debugger_args:
+ from mozbuild import shellutil
+
+ try:
+ debugger_args = shellutil.split(debugger_args)
+ except shellutil.MetaCharacterException as e:
+ print(
+ "The --debugger-args you passed require a real shell to parse them."
+ )
+ print("(We can't handle the %r character.)" % e.char)
+ return 1
+
+ # Prepend the debugger args.
+ args = [debuggerInfo.path] + debuggerInfo.args + args
+
+ return command_context.run_process(
+ args=args, ensure_exit_code=False, pass_thru=True
+ )