Chromium Code Reviews| 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; |
| + } |
| } |