mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1090276 - Support mach cppunittest on Android; r=dminor
This commit is contained in:
parent
6e4e122153
commit
abb872231b
@ -18,6 +18,7 @@ from mach.decorators import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from mozbuild.base import MachCommandBase
|
from mozbuild.base import MachCommandBase
|
||||||
|
from mozbuild.base import MachCommandConditions as conditions
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
|
||||||
@ -293,30 +294,76 @@ class MachCommands(MachCommandBase):
|
|||||||
def run_cppunit_test(self, **params):
|
def run_cppunit_test(self, **params):
|
||||||
import mozinfo
|
import mozinfo
|
||||||
from mozlog import commandline
|
from mozlog import commandline
|
||||||
import runcppunittests as cppunittests
|
|
||||||
|
|
||||||
log = commandline.setup_logging("cppunittest",
|
log = commandline.setup_logging("cppunittest",
|
||||||
{},
|
{},
|
||||||
{"tbpl": sys.stdout})
|
{"tbpl": sys.stdout})
|
||||||
|
|
||||||
if len(params['test_files']) == 0:
|
|
||||||
testdir = os.path.join(self.distdir, 'cppunittests')
|
|
||||||
manifest = os.path.join(self.topsrcdir, 'testing', 'cppunittest.ini')
|
|
||||||
tests = cppunittests.extract_unittests_from_args([testdir], mozinfo.info, manifest)
|
|
||||||
else:
|
|
||||||
tests = cppunittests.extract_unittests_from_args(params['test_files'], mozinfo.info, None)
|
|
||||||
|
|
||||||
# See if we have crash symbols
|
# See if we have crash symbols
|
||||||
symbols_path = os.path.join(self.distdir, 'crashreporter-symbols')
|
symbols_path = os.path.join(self.distdir, 'crashreporter-symbols')
|
||||||
if not os.path.isdir(symbols_path):
|
if not os.path.isdir(symbols_path):
|
||||||
symbols_path = None
|
symbols_path = None
|
||||||
|
|
||||||
tester = cppunittests.CPPUnitTests()
|
# If no tests specified, run all tests in main manifest
|
||||||
|
tests = params['test_files']
|
||||||
|
if len(tests) == 0:
|
||||||
|
tests = [os.path.join(self.distdir, 'cppunittests')]
|
||||||
|
manifest_path = os.path.join(self.topsrcdir, 'testing', 'cppunittest.ini')
|
||||||
|
else:
|
||||||
|
manifest_path = None
|
||||||
|
|
||||||
|
if conditions.is_android(self):
|
||||||
|
from mozrunner.devices.android_device import verify_android_device
|
||||||
|
verify_android_device(self, install=False)
|
||||||
|
return self.run_android_test(tests, symbols_path, manifest_path, log)
|
||||||
|
|
||||||
|
return self.run_desktop_test(tests, symbols_path, manifest_path, log)
|
||||||
|
|
||||||
|
def run_desktop_test(self, tests, symbols_path, manifest_path, log):
|
||||||
|
import runcppunittests as cppunittests
|
||||||
|
from mozlog import commandline
|
||||||
|
|
||||||
|
parser = cppunittests.CPPUnittestOptions()
|
||||||
|
commandline.add_logging_group(parser)
|
||||||
|
options, args = parser.parse_args()
|
||||||
|
|
||||||
|
options.symbols_path = symbols_path
|
||||||
|
options.manifest_path = manifest_path
|
||||||
|
options.xre_path = self.bindir
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = tester.run_tests(tests, self.bindir, symbols_path, interactive=True)
|
result = cppunittests.run_test_harness(options, tests)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error("Caught exception running cpp unit tests: %s" % str(e))
|
log.error("Caught exception running cpp unit tests: %s" % str(e))
|
||||||
result = False
|
result = False
|
||||||
|
raise
|
||||||
|
|
||||||
|
return 0 if result else 1
|
||||||
|
|
||||||
|
def run_android_test(self, tests, symbols_path, manifest_path, log):
|
||||||
|
import remotecppunittests as remotecppunittests
|
||||||
|
from mozlog import commandline
|
||||||
|
|
||||||
|
parser = remotecppunittests.RemoteCPPUnittestOptions()
|
||||||
|
commandline.add_logging_group(parser)
|
||||||
|
options, args = parser.parse_args()
|
||||||
|
|
||||||
|
options.symbols_path = symbols_path
|
||||||
|
options.manifest_path = manifest_path
|
||||||
|
options.xre_path = self.bindir
|
||||||
|
options.dm_trans = "adb"
|
||||||
|
options.local_lib = self.bindir.replace('bin', 'fennec')
|
||||||
|
for file in os.listdir(os.path.join(self.topobjdir, "dist")):
|
||||||
|
if file.endswith(".apk") and file.startswith("fennec"):
|
||||||
|
options.local_apk = os.path.join(self.topobjdir, "dist", file)
|
||||||
|
log.info("using APK: " + options.local_apk)
|
||||||
|
break
|
||||||
|
|
||||||
|
try:
|
||||||
|
result = remotecppunittests.run_test_harness(options, tests)
|
||||||
|
except Exception as e:
|
||||||
|
log.error("Caught exception running cpp unit tests: %s" % str(e))
|
||||||
|
result = False
|
||||||
|
raise
|
||||||
|
|
||||||
return 0 if result else 1
|
return 0 if result else 1
|
||||||
|
|
||||||
|
@ -220,13 +220,14 @@ class RemoteCPPUnittestOptions(cppunittests.CPPUnittestOptions):
|
|||||||
self.add_option("--remoteTestRoot", action = "store",
|
self.add_option("--remoteTestRoot", action = "store",
|
||||||
type = "string", dest = "remote_test_root",
|
type = "string", dest = "remote_test_root",
|
||||||
help = "remote directory to use as test root (eg. /data/local/tests)")
|
help = "remote directory to use as test root (eg. /data/local/tests)")
|
||||||
self.add_option("--with-b2g-emulator", action = "store",
|
|
||||||
type = "string", dest = "with_b2g_emulator",
|
|
||||||
help = "Start B2G Emulator (specify path to b2g home)")
|
|
||||||
# /data/local/tests is used because it is usually not possible to set +x permissions
|
# /data/local/tests is used because it is usually not possible to set +x permissions
|
||||||
# on binaries on /mnt/sdcard
|
# on binaries on /mnt/sdcard
|
||||||
defaults["remote_test_root"] = "/data/local/tests"
|
defaults["remote_test_root"] = "/data/local/tests"
|
||||||
|
|
||||||
|
self.add_option("--with-b2g-emulator", action = "store",
|
||||||
|
type = "string", dest = "with_b2g_emulator",
|
||||||
|
help = "Start B2G Emulator (specify path to b2g home)")
|
||||||
|
|
||||||
self.add_option("--addEnv", action = "append",
|
self.add_option("--addEnv", action = "append",
|
||||||
type = "string", dest = "add_env",
|
type = "string", dest = "add_env",
|
||||||
help = "additional remote environment variable definitions (eg. --addEnv \"somevar=something\")")
|
help = "additional remote environment variable definitions (eg. --addEnv \"somevar=something\")")
|
||||||
@ -234,22 +235,7 @@ class RemoteCPPUnittestOptions(cppunittests.CPPUnittestOptions):
|
|||||||
|
|
||||||
self.set_defaults(**defaults)
|
self.set_defaults(**defaults)
|
||||||
|
|
||||||
def main():
|
def run_test_harness(options, args):
|
||||||
parser = RemoteCPPUnittestOptions()
|
|
||||||
mozlog.commandline.add_logging_group(parser)
|
|
||||||
options, args = parser.parse_args()
|
|
||||||
if not args:
|
|
||||||
print >>sys.stderr, """Usage: %s <test binary> [<test binary>...]""" % sys.argv[0]
|
|
||||||
sys.exit(1)
|
|
||||||
if options.local_lib is not None and not os.path.isdir(options.local_lib):
|
|
||||||
print >>sys.stderr, """Error: --localLib directory %s not found""" % options.local_lib
|
|
||||||
sys.exit(1)
|
|
||||||
if options.local_apk is not None and not os.path.isfile(options.local_apk):
|
|
||||||
print >>sys.stderr, """Error: --apk file %s not found""" % options.local_apk
|
|
||||||
sys.exit(1)
|
|
||||||
if not options.xre_path:
|
|
||||||
print >>sys.stderr, """Error: --xre-path is required"""
|
|
||||||
sys.exit(1)
|
|
||||||
if options.with_b2g_emulator:
|
if options.with_b2g_emulator:
|
||||||
from mozrunner import B2GEmulatorRunner
|
from mozrunner import B2GEmulatorRunner
|
||||||
runner = B2GEmulatorRunner(b2g_home=options.with_b2g_emulator)
|
runner = B2GEmulatorRunner(b2g_home=options.with_b2g_emulator)
|
||||||
@ -277,9 +263,6 @@ def main():
|
|||||||
print "Error: you must provide a device IP to connect to via the --deviceIP option"
|
print "Error: you must provide a device IP to connect to via the --deviceIP option"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
log = mozlog.commandline.setup_logging("remotecppunittests", options,
|
|
||||||
{"tbpl": sys.stdout})
|
|
||||||
|
|
||||||
options.xre_path = os.path.abspath(options.xre_path)
|
options.xre_path = os.path.abspath(options.xre_path)
|
||||||
cppunittests.update_mozinfo()
|
cppunittests.update_mozinfo()
|
||||||
progs = cppunittests.extract_unittests_from_args(args,
|
progs = cppunittests.extract_unittests_from_args(args,
|
||||||
@ -288,12 +271,36 @@ def main():
|
|||||||
tester = RemoteCPPUnitTests(dm, options, [item[0] for item in progs])
|
tester = RemoteCPPUnitTests(dm, options, [item[0] for item in progs])
|
||||||
try:
|
try:
|
||||||
result = tester.run_tests(progs, options.xre_path, options.symbols_path)
|
result = tester.run_tests(progs, options.xre_path, options.symbols_path)
|
||||||
|
finally:
|
||||||
|
if options.with_b2g_emulator:
|
||||||
|
runner.cleanup()
|
||||||
|
runner.wait()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = RemoteCPPUnittestOptions()
|
||||||
|
mozlog.commandline.add_logging_group(parser)
|
||||||
|
options, args = parser.parse_args()
|
||||||
|
if not args:
|
||||||
|
print >>sys.stderr, """Usage: %s <test binary> [<test binary>...]""" % sys.argv[0]
|
||||||
|
sys.exit(1)
|
||||||
|
if options.local_lib is not None and not os.path.isdir(options.local_lib):
|
||||||
|
print >>sys.stderr, """Error: --localLib directory %s not found""" % options.local_lib
|
||||||
|
sys.exit(1)
|
||||||
|
if options.local_apk is not None and not os.path.isfile(options.local_apk):
|
||||||
|
print >>sys.stderr, """Error: --apk file %s not found""" % options.local_apk
|
||||||
|
sys.exit(1)
|
||||||
|
if not options.xre_path:
|
||||||
|
print >>sys.stderr, """Error: --xre-path is required"""
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
log = mozlog.commandline.setup_logging("remotecppunittests", options,
|
||||||
|
{"tbpl": sys.stdout})
|
||||||
|
try:
|
||||||
|
result = run_test_harness(options, args)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
log.error(str(e))
|
log.error(str(e))
|
||||||
result = False
|
result = False
|
||||||
if options.with_b2g_emulator:
|
|
||||||
runner.cleanup()
|
|
||||||
runner.wait()
|
|
||||||
sys.exit(0 if result else 1)
|
sys.exit(0 if result else 1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -227,6 +227,17 @@ def update_mozinfo():
|
|||||||
path = os.path.split(path)[0]
|
path = os.path.split(path)[0]
|
||||||
mozinfo.find_and_update_from_json(*dirs)
|
mozinfo.find_and_update_from_json(*dirs)
|
||||||
|
|
||||||
|
def run_test_harness(options, args):
|
||||||
|
update_mozinfo()
|
||||||
|
progs = extract_unittests_from_args(args, mozinfo.info, options.manifest_path)
|
||||||
|
options.xre_path = os.path.abspath(options.xre_path)
|
||||||
|
if mozinfo.isMac:
|
||||||
|
options.xre_path = os.path.join(os.path.dirname(options.xre_path), 'Resources')
|
||||||
|
tester = CPPUnitTests()
|
||||||
|
result = tester.run_tests(progs, options.xre_path, options.symbols_path)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = CPPUnittestOptions()
|
parser = CPPUnittestOptions()
|
||||||
mozlog.commandline.add_logging_group(parser)
|
mozlog.commandline.add_logging_group(parser)
|
||||||
@ -240,19 +251,10 @@ def main():
|
|||||||
if options.manifest_path and len(args) > 1:
|
if options.manifest_path and len(args) > 1:
|
||||||
print >>sys.stderr, "Error: multiple arguments not supported with --test-manifest"
|
print >>sys.stderr, "Error: multiple arguments not supported with --test-manifest"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
log = mozlog.commandline.setup_logging("cppunittests", options,
|
log = mozlog.commandline.setup_logging("cppunittests", options,
|
||||||
{"tbpl": sys.stdout})
|
{"tbpl": sys.stdout})
|
||||||
|
|
||||||
update_mozinfo()
|
|
||||||
progs = extract_unittests_from_args(args, mozinfo.info, options.manifest_path)
|
|
||||||
options.xre_path = os.path.abspath(options.xre_path)
|
|
||||||
if mozinfo.isMac:
|
|
||||||
options.xre_path = os.path.join(os.path.dirname(options.xre_path), 'Resources')
|
|
||||||
tester = CPPUnitTests()
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = tester.run_tests(progs, options.xre_path, options.symbols_path)
|
result = run_test_harness(options, args)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(str(e))
|
log.error(str(e))
|
||||||
result = False
|
result = False
|
||||||
|
Loading…
Reference in New Issue
Block a user