| #!/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()) |