diff --git a/python/mozbuild/mozbuild/action/test_archive.py b/python/mozbuild/mozbuild/action/test_archive.py index af98697f4285..712c0bc49acd 100644 --- a/python/mozbuild/mozbuild/action/test_archive.py +++ b/python/mozbuild/mozbuild/action/test_archive.py @@ -363,6 +363,7 @@ ARCHIVE_FILES = { 'base': 'testing/xpcshell', 'patterns': [ 'head.js', + 'mach_test_package_commands.py', 'moz-http2/**', 'moz-spdy/**', 'node-http2/**', diff --git a/testing/tools/mach_test_package_bootstrap.py b/testing/tools/mach_test_package_bootstrap.py index 31466a3a9bc7..da546e5f7fca 100644 --- a/testing/tools/mach_test_package_bootstrap.py +++ b/testing/tools/mach_test_package_bootstrap.py @@ -36,12 +36,14 @@ SEARCH_PATHS = [ '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', ] diff --git a/testing/xpcshell/mach_test_package_commands.py b/testing/xpcshell/mach_test_package_commands.py new file mode 100644 index 000000000000..8056fdeacb61 --- /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)