Bug 1278890 - Add xpcshell support to test package mach environment, r=armenzg
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Wed, 13 Jul 2016 10:55:37 -0400
changeset 304958 3e6f9e3a99a1419bed34c396c0e30eb67f870a1e
parent 304957 45d6a990dd2877b9c8f265f13fc565a96f6667bf
child 304959 683bf5d3c1cdd76799d7da01d3a0cd2dbb42e8f9
push id30603
push userahalberstadt@mozilla.com
push dateThu, 14 Jul 2016 15:53:42 +0000
treeherderautoland@683bf5d3c1cd [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersarmenzg
bugs1278890
milestone50.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 1278890 - Add xpcshell support to test package mach environment, r=armenzg This adds the 'xpcshell-test' command to the mach environment found in the test package. This will allow developers to easily run xpcshell after checking out and interactive worker. MozReview-Commit-ID: fBAbfuG5XQ
python/mozbuild/mozbuild/action/test_archive.py
testing/tools/mach_test_package_bootstrap.py
testing/xpcshell/mach_test_package_commands.py
--- a/python/mozbuild/mozbuild/action/test_archive.py
+++ b/python/mozbuild/mozbuild/action/test_archive.py
@@ -358,16 +358,17 @@ ARCHIVE_FILES = {
             'pattern': '**',
             'dest': 'xpcshell/tests',
         },
         {
             'source': buildconfig.topsrcdir,
             'base': 'testing/xpcshell',
             'patterns': [
                 'head.js',
+                'mach_test_package_commands.py',
                 'moz-http2/**',
                 'moz-spdy/**',
                 'node-http2/**',
                 'node-spdy/**',
                 'remotexpcshelltests.py',
                 'runtestsb2g.py',
                 'runxpcshelltests.py',
                 'xpcshellcommandline.py',
--- a/testing/tools/mach_test_package_bootstrap.py
+++ b/testing/tools/mach_test_package_bootstrap.py
@@ -31,22 +31,24 @@ SEARCH_PATHS = [
     'mozbase/mozprofile',
     'mozbase/mozrunner',
     'mozbase/mozscreenshot',
     'mozbase/mozsystemmonitor',
     'mozbase/moztest',
     'mozbase/mozversion',
     'tools/mach',
     'tools/wptserve',
+    'xpcshell',
 ]
 
 # Individual files providing mach commands.
 MACH_MODULES = [
     'mochitest/mach_test_package_commands.py',
     'tools/mach/mach/commands/commandinfo.py',
+    'xpcshell/mach_test_package_commands.py',
 ]
 
 
 CATEGORIES = {
     'testing': {
         'short': 'Testing',
         'long': 'Run tests.',
         'priority': 30,
new file mode 100644
--- /dev/null
+++ b/testing/xpcshell/mach_test_package_commands.py
@@ -0,0 +1,65 @@
+# 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/.
+
+from __future__ import unicode_literals
+
+import os
+import sys
+from argparse import Namespace
+from functools import partial
+
+
+import mozlog
+from xpcshellcommandline import parser_desktop
+
+from mach.decorators import (
+    CommandProvider,
+    Command,
+)
+
+
+def run_xpcshell(context, **kwargs):
+    args = Namespace(**kwargs)
+    args.utility_path = context.bin_dir
+    args.testingModulesDir = context.modules_dir
+
+    if not args.appPath:
+        args.appPath = os.path.dirname(context.find_firefox())
+
+    if not args.xpcshell:
+        args.xpcshell = os.path.join(args.appPath, 'xpcshell')
+
+    if not args.pluginsPath:
+        for path in context.ancestors(args.appPath, depth=2):
+            test = os.path.join(path, 'plugins')
+            if os.path.isdir(test):
+                args.pluginsPath = test
+                break
+
+    log = mozlog.commandline.setup_logging("XPCShellTests",
+                                           args,
+                                           {"mach": sys.stdout},
+                                           {"verbose": True})
+
+    if args.testPaths:
+        test_root = os.path.join(context.package_root, 'xpcshell', 'tests')
+        normalize = partial(context.normalize_test_path, test_root)
+        args.testPaths = map(normalize, args.testPaths)
+
+    import runxpcshelltests
+    xpcshell = runxpcshelltests.XPCShellTests(log=log)
+    return xpcshell.runTests(**vars(args))
+
+
+@CommandProvider
+class MochitestCommands(object):
+
+    def __init__(self, context):
+        self.context = context
+
+    @Command('xpcshell-test', category='testing',
+             description='Run the xpcshell harness.',
+             parser=parser_desktop)
+    def xpcshell(self, **kwargs):
+        return run_xpcshell(self.context, **kwargs)