From a757814e365c85bbdb80623ed2e925e789dfa7e9 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Wed, 17 Aug 2016 12:04:37 -0400 Subject: [PATCH] Bug 1296067 - Add mach test package integration for marionette-test, r=armenzg This makes it possible to run |mach marionette-test| from a test package (and therefore also an interactive loaner). MozReview-Commit-ID: Lxhe8KMQaWq --HG-- extra : rebase_source : ee2c01a80d863c2044d8d30b0e5116c8a9704253 --- .../marionette/mach_test_package_commands.py | 68 +++++++++++++++++++ testing/testsuite-targets.mk | 1 + testing/tools/mach_test_package_bootstrap.py | 1 + 3 files changed, 70 insertions(+) create mode 100644 testing/marionette/mach_test_package_commands.py diff --git a/testing/marionette/mach_test_package_commands.py b/testing/marionette/mach_test_package_commands.py new file mode 100644 index 000000000000..6c24fc6a1b8f --- /dev/null +++ b/testing/marionette/mach_test_package_commands.py @@ -0,0 +1,68 @@ +# 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 argparse +import os +import sys +from functools import partial + +from mach.decorators import ( + CommandProvider, + Command, +) + +parser = None + + +def run_marionette(context, **kwargs): + from marionette.runtests import ( + MarionetteTestRunner, + MarionetteHarness + ) + from mozlog.structured import commandline + + + args = argparse.Namespace(**kwargs) + + if not args.binary: + args.binary = context.find_firefox() + + test_root = os.path.join(context.package_root, 'marionette', 'tests') + if not args.tests: + args.tests = [os.path.join(test_root, 'testing', 'marionette', 'harness', + 'marionette', 'tests', 'unit-tests.ini')] + + normalize = partial(context.normalize_test_path, test_root) + args.tests = map(normalize, args.tests) + + commandline.add_logging_group(parser) + parser.verify_usage(args) + + args.logger = commandline.setup_logging("Marionette Unit Tests", + args, + {"mach": sys.stdout}) + status = MarionetteHarness(MarionetteTestRunner, args=vars(args)).run() + return 1 if status else 0 + + +def setup_marionette_argument_parser(): + from marionette.runner.base import BaseMarionetteArguments + global parser + parser = BaseMarionetteArguments() + return parser + + +@CommandProvider +class MachCommands(object): + + def __init__(self, context): + self.context = context + + @Command( + 'marionette-test', category='testing', + description='Run a Marionette test (Check UI or the internal JavaScript ' + 'using marionette).', + parser=setup_marionette_argument_parser) + def run_marionette_test(self, **kwargs): + return run_marionette(self.context, **kwargs) diff --git a/testing/testsuite-targets.mk b/testing/testsuite-targets.mk index 991526a3e3ad..af85ccd7eaab 100644 --- a/testing/testsuite-targets.mk +++ b/testing/testsuite-targets.mk @@ -337,6 +337,7 @@ stage-marionette: make-stage-dir $(NSINSTALL) -D $(MARIONETTE_DIR)/client @(cd $(topsrcdir)/testing/marionette/harness && tar --exclude marionette/tests $(TAR_CREATE_FLAGS) - *) | (cd $(MARIONETTE_DIR)/ && tar -xf -) @(cd $(topsrcdir)/testing/marionette/client && tar $(TAR_CREATE_FLAGS) - *) | (cd $(MARIONETTE_DIR)/client && tar -xf -) + cp $(topsrcdir)/testing/marionette/mach_test_package_commands.py $(MARIONETTE_DIR) $(PYTHON) $(topsrcdir)/testing/marionette/harness/marionette/tests/print-manifest-dirs.py \ $(topsrcdir) \ $(topsrcdir)/testing/marionette/harness/marionette/tests/unit-tests.ini \ diff --git a/testing/tools/mach_test_package_bootstrap.py b/testing/tools/mach_test_package_bootstrap.py index 5f167fcbe71f..763a0efef7e8 100644 --- a/testing/tools/mach_test_package_bootstrap.py +++ b/testing/tools/mach_test_package_bootstrap.py @@ -42,6 +42,7 @@ SEARCH_PATHS = [ # Individual files providing mach commands. MACH_MODULES = [ + 'marionette/mach_test_package_commands.py', 'mochitest/mach_test_package_commands.py', 'reftest/mach_test_package_commands.py', 'tools/mach/mach/commands/commandinfo.py',