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 a48c4ab71301190bef89adf33a2a056832068600..3c549ce8b78b9948da96df719b17291de4cb57ed 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 |
@@ -4,10 +4,18 @@ |
package org.chromium.base.test; |
+import android.app.Activity; |
import android.app.Application; |
+import android.app.Instrumentation; |
import android.content.Context; |
+import android.os.Bundle; |
+import android.support.test.internal.runner.RunnerArgs; |
+import android.support.test.internal.runner.TestExecutor; |
+import android.support.test.internal.runner.TestRequest; |
+import android.support.test.internal.runner.TestRequestBuilder; |
import android.support.test.runner.AndroidJUnitRunner; |
+import org.chromium.base.Log; |
import org.chromium.base.multidex.ChromiumMultiDexInstaller; |
/** |
@@ -18,6 +26,10 @@ import org.chromium.base.multidex.ChromiumMultiDexInstaller; |
* <instrumentation> |
*/ |
public class BaseChromiumAndroidJUnitRunner extends AndroidJUnitRunner { |
+ private Bundle mArguments; |
+ private static final String LIST_ALL_TESTS_FLAG = "listAllTests"; |
+ private static final String TAG = "BaseJUnitRunner"; |
+ |
@Override |
public Application newApplication(ClassLoader cl, String className, Context context) |
throws ClassNotFoundException, IllegalAccessException, InstantiationException { |
@@ -26,4 +38,46 @@ public class BaseChromiumAndroidJUnitRunner extends AndroidJUnitRunner { |
BaseChromiumRunnerCommon.reorderDexPathElements(cl, getContext(), getTargetContext()); |
return super.newApplication(cl, className, context); |
} |
+ |
+ @Override |
+ public void onCreate(Bundle arguments) { |
+ super.onCreate(arguments); |
+ mArguments = arguments; |
+ } |
+ |
+ @Override |
+ public void onStart() { |
+ if (getListTestFlag(mArguments) != null) { |
+ Bundle results = new Bundle(); |
+ try { |
+ TestExecutor.Builder executorBuilder = new TestExecutor.Builder(this); |
+ executorBuilder.addRunListener(new TestListInstrumentationRunListener( |
+ getListTestFlag(mArguments).toString())); |
+ TestRequest listTestRequest = createListTestRequest(mArguments); |
+ results = executorBuilder.build().execute(listTestRequest); |
mikecase (-- gone --)
2017/07/11 21:14:51
can you explain how this works? How did you make t
the real yoland
2017/07/14 03:15:46
I am using the AndroidJUnitRunner's provided featu
|
+ } catch (RuntimeException e) { |
mikecase (-- gone --)
2017/07/11 21:14:51
Should we actually be catching this? Will the exce
the real yoland
2017/07/14 03:15:46
The failure stack trace will show up in the host s
|
+ final String msg = "Fatal exception when running tests"; |
+ Log.e(TAG, msg, e); |
+ // report the exception to instrumentation out |
+ results.putString(Instrumentation.REPORT_KEY_STREAMRESULT, |
+ msg + "\n" + Log.getStackTraceString(e)); |
+ } |
+ finish(Activity.RESULT_OK, results); |
+ } else { |
+ super.onStart(); |
+ } |
+ } |
+ |
+ private TestRequest createListTestRequest(Bundle arguments) { |
+ RunnerArgs runnerArgs = |
+ new RunnerArgs.Builder().fromManifest(this).fromBundle(arguments).build(); |
+ TestRequestBuilder builder = new TestRequestBuilder(this, arguments); |
+ builder.addApkToScan(getContext().getPackageCodePath()); |
+ builder.addFromRunnerArgs(runnerArgs); |
+ return builder.build(); |
+ } |
+ |
+ private static CharSequence getListTestFlag(Bundle arguments) { |
+ return arguments != null ? arguments.getCharSequence(LIST_ALL_TESTS_FLAG) : null; |
+ } |
} |