You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.4 KiB
120 lines
4.4 KiB
#!/usr/bin/env python |
|
# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file |
|
# for details. All rights reserved. Use of this source code is governed by a |
|
# BSD-style license that can be found in the LICENSE file. |
|
|
|
# Convenience script for running tests. If no argument is given run all tests, |
|
# if an argument is given, run only tests with that pattern. This script will |
|
# force the tests to run, even if no input changed. |
|
|
|
import os |
|
import gradle |
|
import optparse |
|
import subprocess |
|
import sys |
|
import utils |
|
import uuid |
|
|
|
ALL_ART_VMS = ["default", "7.0.0", "6.0.1", "5.1.1"] |
|
BUCKET = 'r8-test-results' |
|
|
|
def ParseOptions(): |
|
result = optparse.OptionParser() |
|
result.add_option('--no_internal', |
|
help='Do not run Google internal tests.', |
|
default=False, action='store_true') |
|
result.add_option('--archive_failures', |
|
help='Upload test results to cloud storage on failure.', |
|
default=False, action='store_true') |
|
result.add_option('--only_internal', |
|
help='Only run Google internal tests.', |
|
default=False, action='store_true') |
|
result.add_option('--all_tests', |
|
help='Run tests in all configurations.', |
|
default=False, action='store_true') |
|
result.add_option('-v', '--verbose', |
|
help='Print test stdout to, well, stdout.', |
|
default=False, action='store_true') |
|
result.add_option('--dex_vm', |
|
help='The android version of the vm to use. "all" will run the tests on ' |
|
'all art vm versions (stopping after first failed execution)', |
|
default="default", |
|
choices=ALL_ART_VMS + ["all"]) |
|
result.add_option('--one_line_per_test', |
|
help='Print a line before a tests starts and after it ends to stdout.', |
|
default=False, action='store_true') |
|
result.add_option('--tool', |
|
help='Tool to run ART tests with: "r8" (default) or "d8". Ignored if "--all_tests" enabled.', |
|
default=None, choices=["r8", "d8"]) |
|
result.add_option('--jctf', |
|
help='Run JCTF tests with: "r8" (default) or "d8".', |
|
default=False, action='store_true') |
|
result.add_option('--only_jctf', |
|
help='Run only JCTF tests with: "r8" (default) or "d8".', |
|
default=False, action='store_true') |
|
result.add_option('--jctf_compile_only', |
|
help="Don't run, only compile JCTF tests.", |
|
default=False, action='store_true') |
|
result.add_option('--disable_assertions', |
|
help="Disable assertions when running tests.", |
|
default=False, action='store_true') |
|
|
|
return result.parse_args() |
|
|
|
def archive_failures(): |
|
upload_dir = os.path.join(utils.REPO_ROOT, 'build', 'reports', 'tests') |
|
u_dir = uuid.uuid4() |
|
destination = 'gs://%s/%s' % (BUCKET, u_dir) |
|
utils.upload_html_to_cloud_storage(upload_dir, destination) |
|
url = 'http://storage.googleapis.com/%s/%s/index.html' % (BUCKET, u_dir) |
|
print 'Test results available at: %s' % url |
|
|
|
def Main(): |
|
(options, args) = ParseOptions() |
|
gradle_args = ['cleanTest', 'test'] |
|
if len(args) > 1: |
|
print("test.py takes at most one argument, the pattern for tests to run") |
|
return -1 |
|
if options.verbose: |
|
gradle_args.append('-Pprint_test_stdout') |
|
if options.no_internal: |
|
gradle_args.append('-Pno_internal') |
|
if options.only_internal: |
|
gradle_args.append('-Ponly_internal') |
|
if options.all_tests: |
|
gradle_args.append('-Pall_tests') |
|
if options.tool: |
|
gradle_args.append('-Ptool=%s' % options.tool) |
|
if options.one_line_per_test: |
|
gradle_args.append('-Pone_line_per_test') |
|
if options.jctf: |
|
gradle_args.append('-Pjctf') |
|
if options.only_jctf: |
|
gradle_args.append('-Ponly_jctf') |
|
if options.jctf_compile_only: |
|
gradle_args.append('-Pjctf_compile_only') |
|
if options.disable_assertions: |
|
gradle_args.append('-Pdisable_assertions') |
|
if len(args) > 0: |
|
gradle_args.append('--tests') |
|
gradle_args.append(args[0]) |
|
if os.name == 'nt': |
|
# temporary hack |
|
gradle_args.append('-Pno_internal') |
|
gradle_args.append('-x') |
|
gradle_args.append('createJctfTests') |
|
gradle_args.append('-x') |
|
gradle_args.append('jctfCommonJar') |
|
gradle_args.append('-x') |
|
gradle_args.append('jctfTestsClasses') |
|
vms_to_test = [options.dex_vm] if options.dex_vm != "all" else ALL_ART_VMS |
|
for art_vm in vms_to_test: |
|
return_code = gradle.RunGradle(gradle_args + ['-Pdex_vm=%s' % art_vm], |
|
throw_on_failure=False) |
|
if return_code != 0: |
|
if options.archive_failures: |
|
archive_failures() |
|
return return_code |
|
|
|
if __name__ == '__main__': |
|
sys.exit(Main())
|
|
|