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): ...@@ -38,8 +38,7 @@ class LocalMachineJunitTestRun(test_run.TestRun):
command = [java_script] command = [java_script]
# Add Jar arguments. # Add Jar arguments.
jar_args = ['-test-jars', self._test_instance.suite + '.jar', jar_args = ['-json-results-file', json_file_path]
'-json-results-file', json_file_path]
if self._test_instance.test_filter: if self._test_instance.test_filter:
jar_args.extend(['-gtest-filter', self._test_instance.test_filter]) jar_args.extend(['-gtest-filter', self._test_instance.test_filter])
if self._test_instance.package_filter: if self._test_instance.package_filter:
......
...@@ -47,9 +47,6 @@ public class JunitTestArgParser { ...@@ -47,9 +47,6 @@ public class JunitTestArgParser {
} else if ("json-results-file".equals(argName)) { } else if ("json-results-file".equals(argName)) {
// Read the command line argument after the flag. // Read the command line argument after the flag.
parsed.setJsonOutputFile(args[++i]); parsed.setJsonOutputFile(args[++i]);
} else if ("test-jars".equals(argName)) {
// Read the command line argument after the flag.
parsed.setTestJars(args[++i]);
} else { } else {
System.out.println("Ignoring flag: \"" + argName + "\""); System.out.println("Ignoring flag: \"" + argName + "\"");
} }
...@@ -91,10 +88,6 @@ public class JunitTestArgParser { ...@@ -91,10 +88,6 @@ public class JunitTestArgParser {
return mJsonOutput; return mJsonOutput;
} }
public String[] getTestJars() {
return mTestJars;
}
private void addPackageFilter(String packageFilter) { private void addPackageFilter(String packageFilter) {
mPackageFilters.add(packageFilter); mPackageFilters.add(packageFilter);
} }
...@@ -110,8 +103,4 @@ public class JunitTestArgParser { ...@@ -110,8 +103,4 @@ public class JunitTestArgParser {
private void setJsonOutputFile(String path) { private void setJsonOutputFile(String path) {
mJsonOutput = new File(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; ...@@ -21,9 +21,9 @@ import java.util.regex.Pattern;
* provided filter configurations. * provided filter configurations.
*/ */
public final class JunitTestMain { 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 String CLASS_FILE_EXT = ".class";
private static final Pattern COLON = Pattern.compile(":"); private static final Pattern COLON = Pattern.compile(":");
private static final Pattern FORWARD_SLASH = Pattern.compile("/"); private static final Pattern FORWARD_SLASH = Pattern.compile("/");
...@@ -31,27 +31,18 @@ public final class JunitTestMain { ...@@ -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")); 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>(); List<Class> classes = new ArrayList<Class>();
for (String jp : testJarPaths) { for (String jp : jarPaths) {
try { try {
JarFile jf = new JarFile(jp); JarFile jf = new JarFile(jp);
for (Enumeration<JarEntry> eje = jf.entries(); eje.hasMoreElements();) { for (Enumeration<JarEntry> eje = jf.entries(); eje.hasMoreElements();) {
JarEntry je = eje.nextElement(); JarEntry je = eje.nextElement();
String cn = je.getName(); String cn = je.getName();
if (!cn.endsWith(CLASS_FILE_EXT) || cn.indexOf('$') != -1) { if (!cn.endsWith(TEST_CLASS_FILE_END) || cn.indexOf('$') != -1) {
continue; continue;
} }
cn = cn.substring(0, cn.length() - CLASS_FILE_EXT.length()); cn = cn.substring(0, cn.length() - CLASS_FILE_EXT.length());
...@@ -66,7 +57,7 @@ public final class JunitTestMain { ...@@ -66,7 +57,7 @@ public final class JunitTestMain {
System.err.println("Error while reading classes from " + jp); 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) { private static Class<?> classOrNull(String className) {
...@@ -90,7 +81,7 @@ public final class JunitTestMain { ...@@ -90,7 +81,7 @@ public final class JunitTestMain {
core.addListener(new GtestListener(gtestLogger)); core.addListener(new GtestListener(gtestLogger));
JsonLogger jsonLogger = new JsonLogger(parser.getJsonOutputFile()); JsonLogger jsonLogger = new JsonLogger(parser.getJsonOutputFile());
core.addListener(new JsonListener(jsonLogger)); core.addListener(new JsonListener(jsonLogger));
Class[] classes = findClassesFromClasspath(parser.getTestJars()); Class[] classes = findClassesFromClasspath();
Request testRequest = Request.classes(new GtestComputer(gtestLogger), classes); Request testRequest = Request.classes(new GtestComputer(gtestLogger), classes);
for (String packageFilter : parser.getPackageFilters()) { 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