| Index: testing/android/java/src/org/chromium/testing/local/JunitTestMain.java
|
| diff --git a/testing/android/java/src/org/chromium/testing/local/JunitTestMain.java b/testing/android/java/src/org/chromium/testing/local/JunitTestMain.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..21fcf8592180978b3d6af3b98221a1ccc603a1e8
|
| --- /dev/null
|
| +++ b/testing/android/java/src/org/chromium/testing/local/JunitTestMain.java
|
| @@ -0,0 +1,110 @@
|
| +// 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;
|
| +
|
| +/**
|
| + * Runs tests based on JUnit from the classpath on the host JVM based on the
|
| + * provided filter configurations.
|
| + */
|
| +public class JunitTestMain {
|
| +
|
| + /**
|
| + * Finds all classes on the class path annotated with RunWith.
|
| + */
|
| + public static Class[] findClassesFromClasspath(String prefix, Class<?> runner) {
|
| + String[] jarpaths = System.getProperty("java.class.path").split(":");
|
| + 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") || cn.indexOf('$') != -1) {
|
| + continue;
|
| + }
|
| + try {
|
| + // Replace the / with .
|
| + cn = cn.substring(0, cn.length() - 6).replace('/', '.');
|
| + // Check for annotations
|
| + Class<?> c = Class.forName(cn);
|
| + if (c.isAnnotationPresent(RunWith.class)) {
|
| + classes.push(c);
|
| + }
|
| + } catch (ClassNotFoundException e) {
|
| + System.err.println("Class not found: " + cn);
|
| + } catch (NoClassDefFoundError e) {
|
| + System.err.println("Class definition not found: " + cn);
|
| + } catch (Exception e) {
|
| + System.err.println("Other exception while reading class: " + cn);
|
| + }
|
| + }
|
| + } catch (IOException e) {
|
| + System.err.println("Error while reading classes from " + jp);
|
| + }
|
| + }
|
| + return classes.toArray(new Class[classes.size()]);
|
| + }
|
| +
|
| + public static void main(String[] args) throws ClassNotFoundException {
|
| + String packageFilter = null;
|
| + Class<?> runnerFilter = null;
|
| + String gtestFilter = null;
|
| +
|
| + for (int i = 0; i < args.length; ++i) {
|
| + if (args[i].startsWith("-")) {
|
| + String argName;
|
| + if (args[i].startsWith("-", 1)) {
|
| + argName = args[i].substring(2, args[i].length());
|
| + } else {
|
| + argName = args[i].substring(1, args[i].length());
|
| + }
|
| + try {
|
| + if (argName.equals("package-filter")) {
|
| + packageFilter = args[++i];
|
| + } else if (argName.equals("runner-filter")) {
|
| + runnerFilter = Class.forName(args[++i]);
|
| + } else if (argName.equals("gtest-filter")) {
|
| + gtestFilter = args[++i];
|
| + } else {
|
| + System.out.println("Ignoring flag: \"" + args[i] + "\"");
|
| + }
|
| + } catch (ArrayIndexOutOfBoundsException e) {
|
| + System.err.println("No value specified for argument \"" + argName + "\"");
|
| + System.exit(1);
|
| + }
|
| + } else {
|
| + System.out.println("Ignoring argument: \"" + args[i] + "\"");
|
| + }// else ignore the argument
|
| + }
|
| +
|
| + Class[] classes = findClassesFromClasspath(packageFilter, runnerFilter);
|
| + JUnitCore core = new JUnitCore();
|
| + core.addListener(new GtestListener());
|
| + Request testRequest = Request.classes(new GtestComputer(), classes);
|
| + if (packageFilter != null) {
|
| + testRequest = testRequest.filterWith(new PackageFilter(packageFilter));
|
| + }
|
| + if (runnerFilter != null) {
|
| + testRequest = testRequest.filterWith(new RunnerFilter(runnerFilter));
|
| + }
|
| + if (gtestFilter != null) {
|
| + testRequest = testRequest.filterWith(new GtestFilter(gtestFilter));
|
| + }
|
| + System.exit(core.run(testRequest).wasSuccessful() ? 0 : 1);
|
| + }
|
| +
|
| +}
|
| +
|
|
|