Bug 1373216 - Add mach command for starting geckodriver, r=ato draft
authorJames Graham <james@hoppipolla.co.uk>
Thu, 15 Jun 2017 12:47:20 +0100
changeset 594754 9e2f2fe7eacea489e1049cc330dbf8aa38abeea7
parent 594753 917ed4872fed7a60935ba7343b98f39e0c2c811d
child 633507 e984876c35f8428fb172d351c6e1139e2e3768e5
push id64122
push userbmo:james@hoppipolla.co.uk
push dateThu, 15 Jun 2017 12:20:31 +0000
reviewersato
bugs1373216
milestone56.0a1
Bug 1373216 - Add mach command for starting geckodriver, r=ato MozReview-Commit-ID: 8hNAjT5db44
build/mach_bootstrap.py
testing/geckodriver/mach_commands.py
--- a/build/mach_bootstrap.py
+++ b/build/mach_bootstrap.py
@@ -47,16 +47,17 @@ MACH_MODULES = [
     'python/mozbuild/mozbuild/mach_commands.py',
     'python/mozbuild/mozbuild/backend/mach_commands.py',
     'python/mozbuild/mozbuild/compilation/codecomplete.py',
     'python/mozbuild/mozbuild/frontend/mach_commands.py',
     'services/common/tests/mach_commands.py',
     'taskcluster/mach_commands.py',
     'testing/awsy/mach_commands.py',
     'testing/firefox-ui/mach_commands.py',
+    'testing/geckodriver/mach_commands.py',
     'testing/mach_commands.py',
     'testing/marionette/mach_commands.py',
     'testing/mochitest/mach_commands.py',
     'testing/mozharness/mach_commands.py',
     'testing/talos/mach_commands.py',
     'testing/web-platform/mach_commands.py',
     'testing/xpcshell/mach_commands.py',
     'tools/compare-locales/mach_commands.py',
new file mode 100644
--- /dev/null
+++ b/testing/geckodriver/mach_commands.py
@@ -0,0 +1,86 @@
+import argparse
+import os
+
+from mozbuild.base import (
+    MachCommandBase
+)
+
+from mach.decorators import (
+    CommandArgument,
+    CommandArgumentGroup,
+    CommandProvider,
+    Command,
+)
+
+
+@CommandProvider
+class RunGeckodriver(MachCommandBase):
+    """Run the compiled program."""
+
+    @Command('geckodriver', category='post-build',
+        description='Run the geckodriver WebDriver implementation')
+    @CommandArgument('--binary', type=str,
+        help='Firefox binary (defaults to the local build).')
+    @CommandArgument('params', nargs='...',
+        help='Command-line arguments to be passed through to the program.')
+
+    @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='Command-line arguments to pass to the debugger itself; split as the Bourne shell would.')
+    def run(self, binary, params, debug, debugger, debugger_args):
+        try:
+            binpath = self.get_binary_path('geckodriver')
+        except Exception as e:
+                print("It looks like geckodriver isn't built. "
+                      "Add ac_add_options --enable-geckodrver to your mozconfig ",
+                      "and run |mach build| to build it.")
+                print(e)
+                return 1
+
+        args = [binpath]
+
+        if params:
+            args.extend(params)
+
+        if binary is None:
+            binary = self.get_binary_path('app')
+
+        args.extend(["--binary", binary])
+
+        if debug or debugger or debugger_args:
+            if 'INSIDE_EMACS' in os.environ:
+                self.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:
+                self.debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args)
+                if not self.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 = [self.debuggerInfo.path] + self.debuggerInfo.args + args
+
+        return self.run_process(args=args, ensure_exit_code=False,
+            pass_thru=True)