forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			133 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # 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 absolute_import, print_function, unicode_literals
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| from argparse import Namespace
 | |
| 
 | |
| from mach.decorators import (
 | |
|     CommandProvider,
 | |
|     Command,
 | |
| )
 | |
| from mozbuild.base import MachCommandBase
 | |
| 
 | |
| here = os.path.abspath(os.path.dirname(__file__))
 | |
| parser = None
 | |
| logger = None
 | |
| 
 | |
| 
 | |
| def run_gtest(context, **kwargs):
 | |
|     from mozlog.commandline import setup_logging
 | |
| 
 | |
|     if not kwargs.get("log"):
 | |
|         kwargs["log"] = setup_logging("gtest", kwargs, {"mach": sys.stdout})
 | |
|     global logger
 | |
|     logger = kwargs["log"]
 | |
| 
 | |
|     args = Namespace(**kwargs)
 | |
| 
 | |
|     import mozinfo
 | |
| 
 | |
|     if mozinfo.info.get("buildapp") == "mobile/android":
 | |
|         return run_gtest_android(context, args)
 | |
|     return run_gtest_desktop(context, args)
 | |
| 
 | |
| 
 | |
| def run_gtest_desktop(context, args):
 | |
|     prog = context.firefox_bin
 | |
|     xre_path = os.path.dirname(context.firefox_bin)
 | |
|     if sys.platform == "darwin":
 | |
|         xre_path = os.path.join(xre_path, "Resources")
 | |
|     utility_path = context.bin_dir
 | |
|     cwd = os.path.join(context.package_root, "gtest")
 | |
| 
 | |
|     logger.info(
 | |
|         "mach calling run_gtest with prog=%s xre_path=%s cwd=%s utility_path=%s"
 | |
|         % (prog, xre_path, cwd, utility_path)
 | |
|     )
 | |
|     # The gtest option parser ignores some options normally passed to the mozharness
 | |
|     # command, so some hacking is required, for now:
 | |
|     extra_args = [arg for arg in args.args if not arg.startswith("-")]
 | |
|     if extra_args:
 | |
|         os.environ["GTEST_FILTER"] = extra_args[0]
 | |
|         logger.info("GTEST_FILTER=%s" % extra_args[0])
 | |
| 
 | |
|     import rungtests
 | |
| 
 | |
|     tester = rungtests.GTests()
 | |
|     return tester.run_gtest(
 | |
|         prog,
 | |
|         xre_path,
 | |
|         cwd,
 | |
|         utility_path=utility_path,
 | |
|         enable_webrender=args.enable_webrender,
 | |
|     )
 | |
| 
 | |
| 
 | |
| def run_gtest_android(context, args):
 | |
|     config = context.mozharness_config
 | |
|     if config:
 | |
|         args.adb_path = config["exes"]["adb"] % {
 | |
|             "abs_work_dir": context.mozharness_workdir
 | |
|         }
 | |
|     cwd = os.path.join(context.package_root, "gtest")
 | |
|     libxul_path = os.path.join(cwd, "gtest_bin", "gtest", "libxul.so")
 | |
| 
 | |
|     logger.info(
 | |
|         "mach calling android run_gtest with package=%s cwd=%s libxul=%s"
 | |
|         % (args.package, cwd, libxul_path)
 | |
|     )
 | |
|     # The remote gtest option parser ignores some options normally passed to the mozharness
 | |
|     # command, so some hacking is required, for now:
 | |
|     extra_args = [arg for arg in args.args if not arg.startswith("-")]
 | |
|     test_filter = extra_args[0] if extra_args else None
 | |
|     logger.info("test filter=%s" % test_filter)
 | |
| 
 | |
|     import remotegtests
 | |
| 
 | |
|     tester = remotegtests.RemoteGTests()
 | |
|     return tester.run_gtest(
 | |
|         cwd,
 | |
|         args.shuffle,
 | |
|         test_filter,
 | |
|         args.package,
 | |
|         args.adb_path,
 | |
|         args.device_serial,
 | |
|         args.remote_test_root,
 | |
|         libxul_path,
 | |
|         args.symbols_path,
 | |
|         args.enable_webrender,
 | |
|     )
 | |
| 
 | |
| 
 | |
| def setup_argument_parser():
 | |
|     import mozinfo
 | |
| 
 | |
|     mozinfo.find_and_update_from_json(here)
 | |
|     global parser
 | |
|     if mozinfo.info.get("buildapp") == "mobile/android":
 | |
|         import remotegtests
 | |
| 
 | |
|         parser = remotegtests.remoteGtestOptions()
 | |
|     else:
 | |
|         import rungtests
 | |
| 
 | |
|         parser = rungtests.gtestOptions()
 | |
|     return parser
 | |
| 
 | |
| 
 | |
| @CommandProvider
 | |
| class GtestCommands(MachCommandBase):
 | |
|     @Command(
 | |
|         "gtest",
 | |
|         category="testing",
 | |
|         description="Run the gtest harness.",
 | |
|         parser=setup_argument_parser,
 | |
|     )
 | |
|     def gtest(self, **kwargs):
 | |
|         self._mach_context.activate_mozharness_venv()
 | |
|         result = run_gtest(self._mach_context, **kwargs)
 | |
|         return 0 if result else 1
 | 
