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; |
+ } |
} |