From a4fab917cf89da6bd92fcfd143779989390cc81a Mon Sep 17 00:00:00 2001 From: hzl Date: Wed, 18 May 2016 11:08:43 -0700 Subject: [PATCH] Add directory option for JUnit coverage files. Added runtime option --coverage-dir to let the users decide where to store coverage.ec. BUG=608072 Review-Url: https://codereview.chromium.org/1965013008 Cr-Original-Commit-Position: refs/heads/master@{#394470} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: e16476a8c069b9646370f75d71cad6cdc9c491e8 --- android/gyp/create_java_binary_script.py | 19 ++++++++++++++++- android/pylib/junit/test_runner.py | 26 +++++++++++++++++------- android/test_runner.py | 3 +++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/android/gyp/create_java_binary_script.py b/android/gyp/create_java_binary_script.py index 2b6553d0b..d8af1bc68 100755 --- a/android/gyp/create_java_binary_script.py +++ b/android/gyp/create_java_binary_script.py @@ -25,6 +25,7 @@ script_template = """\ # # This file was generated by build/android/gyp/create_java_binary_script.py +import argparse import os import sys @@ -37,13 +38,29 @@ if os.getcwd() != self_dir: classpath = [os.path.join(offset, p) for p in classpath] bootclasspath = [os.path.join(offset, p) for p in bootclasspath] java_cmd = ["java"] +# This is a simple argparser for jvm and jar arguments. +parser = argparse.ArgumentParser() +parser.add_argument('--jar-args') +parser.add_argument('--jvm-args') + +known_args, unknown_args = parser.parse_known_args(sys.argv[1:]) +if known_args.jvm_args: + jvm_arguments = known_args.jvm_args.strip('"').split() + java_cmd.extend(jvm_arguments) +if known_args.jar_args: + jar_arguments = known_args.jar_args.strip('"').split() + if unknown_args: + raise Exception('There are unknown arguments') +else: + jar_arguments = unknown_args + {noverify_flag} if bootclasspath: java_cmd.append("-Xbootclasspath/p:" + ":".join(bootclasspath)) java_cmd.extend( ["-classpath", ":".join(classpath), "-enableassertions", \"{main_class}\"]) java_cmd.extend(extra_program_args) -java_cmd.extend(sys.argv[1:]) +java_cmd.extend(jar_arguments) os.execvp("java", java_cmd) """ diff --git a/android/pylib/junit/test_runner.py b/android/pylib/junit/test_runner.py index 6238fe139..a97841264 100644 --- a/android/pylib/junit/test_runner.py +++ b/android/pylib/junit/test_runner.py @@ -14,6 +14,7 @@ class JavaTestRunner(object): """Runs java tests on the host.""" def __init__(self, args): + self._coverage_dir = args.coverage_dir self._package_filter = args.package_filter self._runner_filter = args.runner_filter self._sdk_version = args.sdk_version @@ -28,17 +29,28 @@ class JavaTestRunner(object): with tempfile.NamedTemporaryFile() as json_file: java_script = os.path.join( constants.GetOutDirectory(), 'bin', 'helper', self._test_suite) - command = [java_script, - '-test-jars', self._test_suite + '.jar', - '-json-results-file', json_file.name] + command = [java_script] + + # Add Jar arguments. + jar_args = ['-test-jars', self._test_suite + '.jar', + '-json-results-file', json_file.name] if self._test_filter: - command.extend(['-gtest-filter', self._test_filter]) + jar_args.extend(['-gtest-filter', self._test_filter]) if self._package_filter: - command.extend(['-package-filter', self._package_filter]) + jar_args.extend(['-package-filter', self._package_filter]) if self._runner_filter: - command.extend(['-runner-filter', self._runner_filter]) + jar_args.extend(['-runner-filter', self._runner_filter]) if self._sdk_version: - command.extend(['-sdk-version', self._sdk_version]) + jar_args.extend(['-sdk-version', self._sdk_version]) + command.extend(['--jar-args', '"%s"' % ' '.join(jar_args)]) + + # Add JVM arguments. + jvm_args = [] + if self._coverage_dir: + jvm_args.append('-Demma.coverage.out.file=%s' % self._coverage_dir) + if jvm_args: + command.extend(['--jvm-args', '"%s"' % ' '.join(jvm_args)]) + return_code = cmd_helper.RunCmd(command) results_list = json_results.ParseResultsFromJson( json.loads(json_file.read())) diff --git a/android/test_runner.py b/android/test_runner.py index 23c403995..25970c760 100755 --- a/android/test_runner.py +++ b/android/test_runner.py @@ -459,6 +459,9 @@ def AddJUnitTestOptions(parser): group.add_argument( '--sdk-version', dest='sdk_version', type=int, help='The Android SDK version.') + group.add_argument( + '--coverage-dir', dest='coverage_dir', + help='Directory to store coverage info.') AddCommonOptions(parser)