| Index: base/test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java
|
| diff --git a/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java b/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java
|
| index ac5dbfce09699ec56d44b7161daa9e10f2cc6d5f..7caff88f8a2bfbf574f07607e14f152d9ebed90f 100644
|
| --- a/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java
|
| +++ b/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java
|
| @@ -18,6 +18,8 @@ import android.support.test.runner.AndroidJUnitRunner;
|
| import org.chromium.base.Log;
|
| import org.chromium.base.multidex.ChromiumMultiDexInstaller;
|
|
|
| +import java.io.IOException;
|
| +
|
| /**
|
| * A custom AndroidJUnitRunner that supports multidex installer and list out test information.
|
| *
|
| @@ -26,8 +28,12 @@ import org.chromium.base.multidex.ChromiumMultiDexInstaller;
|
| * <instrumentation>
|
| */
|
| public class BaseChromiumAndroidJUnitRunner extends AndroidJUnitRunner {
|
| - private static final String LIST_ALL_TESTS_FLAG =
|
| + public static final String LIST_ALL_TESTS_FLAG =
|
| "org.chromium.base.test.BaseChromiumAndroidJUnitRunner.TestList";
|
| +
|
| + private static final String ARGUMENT_ANNOTATION = "annotation";
|
| + private static final String ARGUMENT_NOT_ANNOTATION = "notAnnotation";
|
| + private static final String ARGUMENT_LOG_ONLY = "log";
|
| private static final String TAG = "BaseJUnitRunner";
|
|
|
| private Bundle mArguments;
|
| @@ -56,7 +62,7 @@ public class BaseChromiumAndroidJUnitRunner extends AndroidJUnitRunner {
|
| */
|
| @Override
|
| public void onStart() {
|
| - if (mArguments != null && mArguments.getString(LIST_ALL_TESTS_FLAG) != null) {
|
| + if (toListTests(mArguments)) {
|
| Log.w(TAG, "Runner will list out tests info in JSON without running tests");
|
| listTests(); // Intentionally not calling super.onStart() to avoid additional work.
|
| } else {
|
| @@ -66,13 +72,23 @@ public class BaseChromiumAndroidJUnitRunner extends AndroidJUnitRunner {
|
|
|
| private void listTests() {
|
| Bundle results = new Bundle();
|
| + TestListInstrumentationRunListener listener = new TestListInstrumentationRunListener();
|
| try {
|
| TestExecutor.Builder executorBuilder = new TestExecutor.Builder(this);
|
| - executorBuilder.addRunListener(new TestListInstrumentationRunListener(
|
| - mArguments.getString(LIST_ALL_TESTS_FLAG)));
|
| - TestRequest listTestRequest = createListTestRequest(mArguments);
|
| - results = executorBuilder.build().execute(listTestRequest);
|
| - } catch (RuntimeException e) {
|
| + executorBuilder.addRunListener(listener);
|
| + Bundle junit3Arguments = new Bundle(mArguments);
|
| + junit3Arguments.putString(ARGUMENT_NOT_ANNOTATION, "org.junit.runner.RunWith");
|
| + TestRequest listJUnit3TestRequest = createListTestRequest(junit3Arguments);
|
| + results = executorBuilder.build().execute(listJUnit3TestRequest);
|
| +
|
| + Bundle junit4Arguments = new Bundle(mArguments);
|
| + junit4Arguments.putString(ARGUMENT_ANNOTATION, "org.junit.runner.RunWith");
|
| + //Do not use Log runner from android test support
|
| + junit4Arguments.remove(ARGUMENT_LOG_ONLY);
|
| + TestRequest listJUnit4TestRequest = createListTestRequest(junit4Arguments);
|
| + results.putAll(executorBuilder.build().execute(listJUnit4TestRequest));
|
| + listener.saveTestsToJson(mArguments.getString(LIST_ALL_TESTS_FLAG));
|
| + } catch (IOException | RuntimeException e) {
|
| String msg = "Fatal exception when running tests";
|
| Log.e(TAG, msg, e);
|
| // report the exception to instrumentation out
|
| @@ -90,4 +106,8 @@ public class BaseChromiumAndroidJUnitRunner extends AndroidJUnitRunner {
|
| builder.addFromRunnerArgs(runnerArgs);
|
| return builder.build();
|
| }
|
| +
|
| + static boolean toListTests(Bundle arguments) {
|
| + return arguments != null && arguments.getString(LIST_ALL_TESTS_FLAG) != null;
|
| + }
|
| }
|
|
|