Bug 1296067 - Add mach test package integration for marionette-test, r=armenzg
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Wed, 17 Aug 2016 12:04:37 -0400
changeset 310615 00826cb993073188a5e037d76ce277b7de90baf3
parent 310614 12e1787d70fdf66525d8f8cfbcbb2bc4c5d82f55
child 310616 279f5c243c49c8e955faf3b667e2fef92cfefbf0
push id30592
push userryanvm@gmail.com
push dateTue, 23 Aug 2016 14:01:40 +0000
treeherdermozilla-central@a522dde88529 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersarmenzg
bugs1296067
milestone51.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 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
testing/marionette/mach_test_package_commands.py
testing/testsuite-targets.mk
testing/tools/mach_test_package_bootstrap.py
new file mode 100644
--- /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)
--- a/testing/testsuite-targets.mk
+++ b/testing/testsuite-targets.mk
@@ -332,16 +332,17 @@ stage-luciddream: make-stage-dir
 	@(cd $(topsrcdir)/testing/luciddream && tar $(TAR_CREATE_FLAGS) - *) | (cd $(LUCIDDREAM_DIR)/ && tar -xf -)
 
 MARIONETTE_DIR=$(PKG_STAGE)/marionette
 stage-marionette: make-stage-dir
 	$(NSINSTALL) -D $(MARIONETTE_DIR)/tests
 	$(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 \
           | (cd $(topsrcdir) && xargs tar $(TAR_CREATE_FLAGS) -) \
           | (cd $(MARIONETTE_DIR)/tests && tar -xf -)
 	$(PYTHON) $(topsrcdir)/testing/marionette/harness/marionette/tests/print-manifest-dirs.py \
           $(topsrcdir) \
           $(topsrcdir)/testing/marionette/harness/marionette/tests/webapi-tests.ini \
--- a/testing/tools/mach_test_package_bootstrap.py
+++ b/testing/tools/mach_test_package_bootstrap.py
@@ -37,16 +37,17 @@ SEARCH_PATHS = [
     'reftest',
     'tools/mach',
     'tools/wptserve',
     'xpcshell',
 ]
 
 # 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',
     'xpcshell/mach_test_package_commands.py',
 ]
 
 
 CATEGORIES = {