blob: ae94f7188e1e452aff497ceeb5f06b2a99a04ab3 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Test runner for Mojo application tests.
The file describing the list of tests has to be a valid Python program that sets
a |tests| global variable, containing entries of the following form:
{
# Required URL for apptest.
"test": "mojo:test_app_url",
# Optional display name (otherwise the entry for "test" above is used).
"name": "mojo:test_app_url (more details)",
# Optional test type. Valid values:
# * "gtest" (default)
# * "gtest_isolated": like "gtest", but run with fixture isolation,
# i.e., each test in a fresh mojo_shell)
# * "dart".
"type": "gtest",
# Optional arguments for the apptest.
"test-args": ["--an_arg", "another_arg"],
# Optional arguments for the shell.
"shell-args": ["--some-flag-for-the-shell", "--another-flag"],
}
The program may use the |target_os| global that will be any of ['android',
'linux'], indicating the system on which the tests are to be run.
TODO(vtl|msw): Add a way of specifying data dependencies.
"""
import argparse
import sys
from devtoolslib.android_shell import AndroidShell
from devtoolslib.linux_shell import LinuxShell
from devtoolslib.apptest_runner import run_apptests
from devtoolslib import shell_arguments
def main():
parser = argparse.ArgumentParser(description="Test runner for Mojo "
"application tests.")
parser.add_argument("test_list_file", type=file,
help="a file listing apptests to run")
# Arguments indicating the configuration we are targeting.
parser.add_argument('--android', help='Run on Android',
action='store_true')
debug_group = parser.add_mutually_exclusive_group()
debug_group.add_argument('--debug', help='Debug build (default)',
default=True, action='store_true')
debug_group.add_argument('--release', help='Release build', default=False,
dest='debug', action='store_false')
parser.add_argument('--target-cpu', help='CPU architecture to run for.',
choices=['x64', 'x86', 'arm'])
# Arguments indicating paths to binaries and tools.
parser.add_argument('--adb-path', help='Path of the adb binary.')
parser.add_argument('--shell-path', help='Path of the Mojo shell binary.')
parser.add_argument('--origin-path', help='Path of a directory to be set as '
'the origin for mojo: urls')
args = parser.parse_args()
extra_shell_args = []
if args.android:
if not args.adb_path:
print 'Indicate path to adb in --adb-path.'
return 1
shell = AndroidShell(args.adb_path)
device_status, error = shell.CheckDevice()
if not device_status:
print 'Device check failed: ' + error
return 1
if not args.shell_path:
print 'Indicate path to the shell binary in --shell-path'
return 1
shell.InstallApk(args.shell_path)
if args.origin_path:
extra_shell_args.extend(shell_arguments.ConfigureLocalOrigin(
shell, args.origin_path, fixed_port=True))
else:
if not args.shell_path:
print 'Indicate path to the shell binary in --shell-path'
return 1
shell = LinuxShell(args.shell_path)
target_os = 'android' if args.android else 'linux'
test_list_globals = {"target_os": target_os}
exec args.test_list_file in test_list_globals
apptests_result = run_apptests(shell, extra_shell_args,
test_list_globals["tests"])
return 0 if apptests_result else 1
if __name__ == '__main__':
sys.exit(main())