Commit 56862df7 authored by Eric Stevenson's avatar Eric Stevenson Committed by Commit Bot

Android: Include Junit tests from dependencies.

Currently, the junit_binary template only supports running tests listed
in its own java_files.

This CL changes Junit test listing to search the classpath for tests.
Tests can now be added by adding a dep on a Java target (similar to
instrumentation tests).

Tbr: agrieve@chromium.org  # already approved.
Bug: 1025364
Change-Id: Ia004843abaae3367f6eccc6355094fe20268da1d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1942413Reviewed-by: default avatarEric Stevenson <estevenson@chromium.org>
Commit-Queue: Eric Stevenson <estevenson@chromium.org>
Auto-Submit: Eric Stevenson <estevenson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#720287}
parent 9a1b1dd4
......@@ -38,8 +38,7 @@ class LocalMachineJunitTestRun(test_run.TestRun):
command = [java_script]
# Add Jar arguments.
jar_args = ['-test-jars', self._test_instance.suite + '.jar',
'-json-results-file', json_file_path]
jar_args = ['-json-results-file', json_file_path]
if self._test_instance.test_filter:
jar_args.extend(['-gtest-filter', self._test_instance.test_filter])
if self._test_instance.package_filter:
......
......@@ -47,9 +47,6 @@ public class JunitTestArgParser {
} else if ("json-results-file".equals(argName)) {
// Read the command line argument after the flag.
parsed.setJsonOutputFile(args[++i]);
} else if ("test-jars".equals(argName)) {
// Read the command line argument after the flag.
parsed.setTestJars(args[++i]);
} else {
System.out.println("Ignoring flag: \"" + argName + "\"");
}
......@@ -91,10 +88,6 @@ public class JunitTestArgParser {
return mJsonOutput;
}
public String[] getTestJars() {
return mTestJars;
}
private void addPackageFilter(String packageFilter) {
mPackageFilters.add(packageFilter);
}
......@@ -110,8 +103,4 @@ public class JunitTestArgParser {
private void setJsonOutputFile(String path) {
mJsonOutput = new File(path);
}
private void setTestJars(String jars) {
mTestJars = COLON.split(jars);
}
}
\ No newline at end of file
......@@ -21,9 +21,9 @@ import java.util.regex.Pattern;
* provided filter configurations.
*/
public final class JunitTestMain {
/** Enforced by {@link org.chromium.tools.errorprone.plugin.TestClassNameCheck}. */
private static final String TEST_CLASS_FILE_END = "Test.class";
private static final String CLASS_FILE_EXT = ".class";
private static final Pattern COLON = Pattern.compile(":");
private static final Pattern FORWARD_SLASH = Pattern.compile("/");
......@@ -31,27 +31,18 @@ public final class JunitTestMain {
}
/**
* Finds all classes on the class path annotated with RunWith.
* Finds all test classes on the class path annotated with RunWith.
*/
public static Class[] findClassesFromClasspath(String[] testJars) {
public static Class[] findClassesFromClasspath() {
String[] jarPaths = COLON.split(System.getProperty("java.class.path"));
List<String> testJarPaths = new ArrayList<String>(testJars.length);
for (String testJar: testJars) {
for (String jarPath: jarPaths) {
if (jarPath.endsWith(testJar)) {
testJarPaths.add(jarPath);
break;
}
}
}
List<Class> classes = new ArrayList<Class>();
for (String jp : testJarPaths) {
for (String jp : jarPaths) {
try {
JarFile jf = new JarFile(jp);
for (Enumeration<JarEntry> eje = jf.entries(); eje.hasMoreElements();) {
JarEntry je = eje.nextElement();
String cn = je.getName();
if (!cn.endsWith(CLASS_FILE_EXT) || cn.indexOf('$') != -1) {
if (!cn.endsWith(TEST_CLASS_FILE_END) || cn.indexOf('$') != -1) {
continue;
}
cn = cn.substring(0, cn.length() - CLASS_FILE_EXT.length());
......@@ -66,7 +57,7 @@ public final class JunitTestMain {
System.err.println("Error while reading classes from " + jp);
}
}
return classes.toArray(new Class[classes.size()]);
return classes.toArray(new Class[0]);
}
private static Class<?> classOrNull(String className) {
......@@ -90,7 +81,7 @@ public final class JunitTestMain {
core.addListener(new GtestListener(gtestLogger));
JsonLogger jsonLogger = new JsonLogger(parser.getJsonOutputFile());
core.addListener(new JsonListener(jsonLogger));
Class[] classes = findClassesFromClasspath(parser.getTestJars());
Class[] classes = findClassesFromClasspath();
Request testRequest = Request.classes(new GtestComputer(gtestLogger), classes);
for (String packageFilter : parser.getPackageFilters()) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment