Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(732)

Unified Diff: testing/android/junit/java/src/org/chromium/testing/local/JunitTestMain.java

Issue 596303002: Revert of Revert of [Android] JUnit runner + gyp changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@deps-changes
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: testing/android/junit/java/src/org/chromium/testing/local/JunitTestMain.java
diff --git a/testing/android/junit/java/src/org/chromium/testing/local/JunitTestMain.java b/testing/android/junit/java/src/org/chromium/testing/local/JunitTestMain.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9c468d8470d5af2da99df76bb70f1ba043a69cf
--- /dev/null
+++ b/testing/android/junit/java/src/org/chromium/testing/local/JunitTestMain.java
@@ -0,0 +1,96 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.testing.local;
+
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Request;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.regex.Pattern;
+
+/**
+ * Runs tests based on JUnit from the classpath on the host JVM based on the
+ * provided filter configurations.
+ */
+public final class JunitTestMain {
+
+ private static final String CLASS_FILE_EXT = ".class";
+
+ private static final Pattern COLON = Pattern.compile(":");
+ private static final Pattern FORWARD_SLASH = Pattern.compile("/");
+
+ private JunitTestMain() {
+ }
+
+ /**
+ * Finds all classes on the class path annotated with RunWith.
+ */
+ public static Class[] findClassesFromClasspath() {
+ String[] jarPaths = COLON.split(System.getProperty("java.class.path"));
+ LinkedList<Class> classes = new LinkedList<Class>();
+ 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) {
+ continue;
+ }
+ cn = cn.substring(0, cn.length() - CLASS_FILE_EXT.length());
+ cn = FORWARD_SLASH.matcher(cn).replaceAll(".");
+ Class<?> c = classOrNull(cn);
+ if (c != null && c.isAnnotationPresent(RunWith.class)) {
+ classes.push(c);
+ }
+ }
+ jf.close();
+ } catch (IOException e) {
+ System.err.println("Error while reading classes from " + jp);
+ }
+ }
+ return classes.toArray(new Class[classes.size()]);
+ }
+
+ private static Class<?> classOrNull(String className) {
+ try {
+ return Class.forName(className);
+ } catch (ClassNotFoundException e) {
+ System.err.println("Class not found: " + className);
+ } catch (NoClassDefFoundError e) {
+ System.err.println("Class definition not found: " + className);
+ } catch (Exception e) {
+ System.err.println("Other exception while reading class: " + className);
+ }
+ return null;
+ }
+
+ public static void main(String[] args) {
+ JunitTestArgParser parser = JunitTestArgParser.parse(args);
+
+ JUnitCore core = new JUnitCore();
+ GtestLogger logger = new GtestLogger(System.out);
+ core.addListener(new GtestListener(logger));
+ Class[] classes = findClassesFromClasspath();
+ Request testRequest = Request.classes(new GtestComputer(logger), classes);
+ for (String packageFilter : parser.getPackageFilters()) {
+ testRequest = testRequest.filterWith(new PackageFilter(packageFilter));
+ }
+ for (Class<?> runnerFilter : parser.getRunnerFilters()) {
+ testRequest = testRequest.filterWith(new RunnerFilter(runnerFilter));
+ }
+ for (String gtestFilter : parser.getGtestFilters()) {
+ testRequest = testRequest.filterWith(new GtestFilter(gtestFilter));
+ }
+ System.exit(core.run(testRequest).wasSuccessful() ? 0 : 1);
+ }
+
+}
+

Powered by Google App Engine
This is Rietveld 408576698