Make coverage work without test defs.
Change-Id: I946df038e97dc5c2f40a4610d4076e13ab6bde37
diff --git a/testrunner/runtest.py b/testrunner/runtest.py
index 1c11e27..7ddff8a 100755
--- a/testrunner/runtest.py
+++ b/testrunner/runtest.py
@@ -41,9 +41,10 @@
# local imports
import adb_interface
import android_build
-import coverage
+from coverage import coverage
import errors
import logger
+import make_tree
import run_command
from test_defs import test_defs
from test_defs import test_walker
@@ -143,6 +144,9 @@
parser.add_option("-o", "--coverage", dest="coverage",
default=False, action="store_true",
help="Generate code coverage metrics for test(s)")
+ parser.add_option("--coverage-target", dest="coverage_target_path",
+ default=None,
+ help="Path to app to collect code coverage target data for.")
parser.add_option("-x", "--path", dest="test_path",
help="Run test(s) at given file system path")
parser.add_option("-t", "--all-tests", dest="all_tests",
@@ -191,6 +195,9 @@
if self._options.verbose:
logger.SetVerbose(True)
+ if self._options.coverage_target_path:
+ self._options.coverage = True
+
self._known_tests = self._ReadTests()
self._options.host_lib_path = android_build.GetHostLibraryPath()
@@ -241,23 +248,24 @@
self._TurnOffVerifier(tests)
self._DoFullBuild(tests)
- target_set = []
+ target_tree = make_tree.MakeTree()
extra_args_set = []
for test_suite in tests:
- self._AddBuildTarget(test_suite, target_set, extra_args_set)
+ self._AddBuildTarget(test_suite, target_tree, extra_args_set)
if not self._options.preview:
self._adb.EnableAdbRoot()
else:
logger.Log("adb root")
- if target_set:
+
+ if not target_tree.IsEmpty():
if self._options.coverage:
coverage.EnableCoverageBuild()
- target_set.append("external/emma/Android.mk")
- # TODO: detect if external/emma exists
+ target_tree.AddPath("external/emma")
- target_build_string = " ".join(target_set)
+ target_list = target_tree.GetPrunedMakeList()
+ target_build_string = " ".join(target_list)
extra_args_string = " ".join(extra_args_set)
# mmm cannot be used from python, so perform a similar operation using
@@ -330,22 +338,18 @@
os.chdir(old_dir)
self._DoInstall(output)
- def _AddBuildTarget(self, test_suite, target_set, extra_args_set):
+ def _AddBuildTarget(self, test_suite, target_tree, extra_args_set):
if not test_suite.IsFullMake():
build_dir = test_suite.GetBuildPath()
- if self._AddBuildTargetPath(build_dir, target_set):
+ if self._AddBuildTargetPath(build_dir, target_tree):
extra_args_set.append(test_suite.GetExtraBuildArgs())
for path in test_suite.GetBuildDependencies(self._options):
- self._AddBuildTargetPath(path, target_set)
+ self._AddBuildTargetPath(path, target_tree)
- def _AddBuildTargetPath(self, build_dir, target_set):
+ def _AddBuildTargetPath(self, build_dir, target_tree):
if build_dir is not None:
- build_file_path = os.path.join(build_dir, "Android.mk")
- if os.path.isfile(os.path.join(self._root_path, build_file_path)):
- target_set.append(build_file_path)
- return True
- else:
- logger.Log("%s has no Android.mk, skipping" % build_dir)
+ target_tree.AddPath(build_dir)
+ return True
return False
def _GetTestsToRun(self):