am e91bc2e3: am 48c83ae3: Allow for declaring a test as a monkey type test
* commit 'e91bc2e3b540fb336e99f86687250a7b1c1bc4dd':
Allow for declaring a test as a monkey type test
diff --git a/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java b/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java
index 7320207..65611ab 100644
--- a/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java
+++ b/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java
@@ -51,9 +51,10 @@
private static final int ARG_FAIL_RUNNER = -4;
private static final int ARG_FAIL_UNSUPPORTED = -99;
- private Bundle mParams = new Bundle();
- private List<String> mTestClasses = new ArrayList<String>();
+ private final Bundle mParams = new Bundle();
+ private final List<String> mTestClasses = new ArrayList<String>();
private boolean mDebug;
+ private boolean mMonkey = false;
private String mRunnerClassName;
private UiAutomatorTestRunner mRunner;
@@ -87,7 +88,7 @@
System.exit(ARG_FAIL_NO_CLASS);
}
}
- getRunner().run(mTestClasses, mParams, mDebug);
+ getRunner().run(mTestClasses, mParams, mDebug, mMonkey);
}
private int parseArgs(String[] args) {
@@ -124,6 +125,8 @@
} else {
return ARG_FAIL_INCOMPLETE_C;
}
+ } else if (args[i].equals("--monkey")) {
+ mMonkey = true;
} else if (args[i].equals("-s")) {
mParams.putString(OUTPUT_FORMAT_KEY, OUTPUT_SIMPLE);
} else {
diff --git a/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java b/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java
index eaaef14..5c48672 100644
--- a/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java
+++ b/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java
@@ -56,6 +56,15 @@
*/
void initialize(Bundle params) {
mParams = params;
+
+ // check if this is a monkey test mode
+ String monkeyVal = mParams.getString("monkey");
+ if (monkeyVal != null) {
+ // only if the monkey key is specified, we alter the state of monkey
+ // else we should leave things as they are.
+ getInstrumentation().getUiAutomation().setRunAsMonkey(Boolean.valueOf(monkeyVal));
+ }
+
UiDevice.getInstance().initialize(new InstrumentationUiAutomatorBridge(
getInstrumentation().getContext(),
getInstrumentation().getUiAutomation()));
diff --git a/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java b/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java
index 3b9887d..59dd450 100644
--- a/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java
+++ b/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java
@@ -5,6 +5,7 @@
import android.app.UiAutomation.AccessibilityEventFilter;
import android.app.UiAutomation.OnAccessibilityEventListener;
import android.graphics.Bitmap;
+import android.util.AndroidException;
import android.util.Log;
import android.view.Display;
import android.view.InputEvent;
@@ -58,6 +59,23 @@
return mQueryController;
}
+ /**
+ * Enable or disable monkey test run mode.
+ *
+ * Setting test as "monkey" indicates to some applications that a test framework is
+ * running and specifically as a "monkey" type. Such applications may choose
+ * then not to perform actions that do submits so to avoid allowing monkey tests
+ * from doing harm or performing annoying actions such as dialing 911 or posting messages
+ * to public forums, etc.
+ *
+ * @param b True to set as monkey test. False to set as regular functional test (default).
+ * @throws AndroidException
+ */
+
+ public void setRunAsMonkey(boolean b) throws AndroidException {
+ mUiAutomation.setRunAsMonkey(b);
+ }
+
public void setOnAccessibilityEventListener(OnAccessibilityEventListener listener) {
mUiAutomation.setOnAccessibilityEventListener(listener);
}
diff --git a/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java b/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
index 24c7c98..e06024f 100644
--- a/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
+++ b/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
@@ -1,6 +1,7 @@
package com.android.uiautomator.core;
import android.accessibilityservice.AccessibilityServiceInfo;
+import android.app.ActivityManager;
import android.app.UiAutomation;
import android.app.UiAutomationConnection;
import android.os.HandlerThread;
@@ -26,6 +27,21 @@
mUiAutomation.connect();
}
+ /**
+ * Enable or disable monkey test mode.
+ *
+ * Setting test as "monkey" indicates to some applications that a test framework is
+ * running as a "monkey" type. Such applications may choose not to perform actions that
+ * do submits so to avoid allowing monkey tests from doing harm or performing annoying
+ * actions such as dialing 911 or posting messages to public forums, etc.
+ *
+ * @param isSet True to set as monkey test. False to set as regular functional test (default).
+ * @see {@link ActivityManager#isUserAMonkey()}
+ */
+ public void setRunAsMonkey(boolean isSet) {
+ mUiAutomation.setRunAsMonkey(isSet);
+ }
+
public void disconnect() {
if (!mHandlerThread.isAlive()) {
throw new IllegalStateException("Already disconnected!");
diff --git a/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java b/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java
index 1b751da..0fdc984 100644
--- a/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java
+++ b/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java
@@ -33,6 +33,13 @@
import com.android.uiautomator.core.UiAutomationShellWrapper;
import com.android.uiautomator.core.UiDevice;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
import junit.framework.AssertionFailedError;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -41,13 +48,6 @@
import junit.runner.BaseTestRunner;
import junit.textui.ResultPrinter;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.lang.Thread.UncaughtExceptionHandler;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* @hide
*/
@@ -60,21 +60,22 @@
private static final String HANDLER_THREAD_NAME = "UiAutomatorHandlerThread";
private boolean mDebug;
+ private boolean mMonkey;
private Bundle mParams = null;
private UiDevice mUiDevice;
private List<String> mTestClasses = null;
- private FakeInstrumentationWatcher mWatcher = new FakeInstrumentationWatcher();
- private IAutomationSupport mAutomationSupport = new IAutomationSupport() {
+ private final FakeInstrumentationWatcher mWatcher = new FakeInstrumentationWatcher();
+ private final IAutomationSupport mAutomationSupport = new IAutomationSupport() {
@Override
public void sendStatus(int resultCode, Bundle status) {
mWatcher.instrumentationStatus(null, resultCode, status);
}
};
- private List<TestListener> mTestListeners = new ArrayList<TestListener>();
+ private final List<TestListener> mTestListeners = new ArrayList<TestListener>();
private HandlerThread mHandlerThread;
- public void run(List<String> testClasses, Bundle params, boolean debug) {
+ public void run(List<String> testClasses, Bundle params, boolean debug, boolean monkey) {
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
@@ -91,6 +92,7 @@
mTestClasses = testClasses;
mParams = params;
mDebug = debug;
+ mMonkey = monkey;
start();
System.exit(EXIT_OK);
}
@@ -114,6 +116,7 @@
mHandlerThread.start();
UiAutomationShellWrapper automationWrapper = new UiAutomationShellWrapper();
automationWrapper.connect();
+ automationWrapper.setRunAsMonkey(mMonkey);
mUiDevice = UiDevice.getInstance();
mUiDevice.initialize(new ShellUiAutomatorBridge(automationWrapper.getUiAutomation()));
List<TestCase> testCases = collector.getTestCases();
@@ -163,6 +166,7 @@
long runTime = SystemClock.uptimeMillis() - startTime;
resultPrinter.print(testRunResult, runTime, testRunOutput);
automationWrapper.disconnect();
+ automationWrapper.setRunAsMonkey(false);
mHandlerThread.quit();
}
}
@@ -170,7 +174,7 @@
// copy & pasted from com.android.commands.am.Am
private class FakeInstrumentationWatcher implements IInstrumentationWatcher {
- private boolean mRawMode = true;
+ private final boolean mRawMode = true;
@Override
public IBinder asBinder() {
@@ -250,9 +254,9 @@
int mTestResultCode = 0;
String mTestClass = null;
- private SimpleResultPrinter mPrinter;
- private ByteArrayOutputStream mStream;
- private PrintStream mWriter;
+ private final SimpleResultPrinter mPrinter;
+ private final ByteArrayOutputStream mStream;
+ private final PrintStream mWriter;
public WatcherResultPrinter(int numTests) {
mResultTemplate = new Bundle();
@@ -340,6 +344,7 @@
mPrinter.endTest(test);
}
+ @Override
public void print(TestResult result, long runTime, Bundle testOutput) {
mPrinter.print(result, runTime, testOutput);
testOutput.putString(Instrumentation.REPORT_KEY_STREAMRESULT,
@@ -350,6 +355,7 @@
mAutomationSupport.sendStatus(Activity.RESULT_OK, testOutput);
}
+ @Override
public void printUnexpectedError(Throwable t) {
mWriter.println(String.format("Test run aborted due to unexpected exception: %s",
t.getMessage()));
@@ -362,12 +368,13 @@
* used when default UiAutomator output is too verbose.
*/
private class SimpleResultPrinter extends ResultPrinter implements ResultReporter {
- private boolean mFullOutput;
+ private final boolean mFullOutput;
public SimpleResultPrinter(PrintStream writer, boolean fullOutput) {
super(writer);
mFullOutput = fullOutput;
}
+ @Override
public void print(TestResult result, long runTime, Bundle testOutput) {
printHeader(runTime);
if (mFullOutput) {
@@ -377,6 +384,7 @@
printFooter(result);
}
+ @Override
public void printUnexpectedError(Throwable t) {
if (mFullOutput) {
getWriter().printf("Test run aborted due to unexpected exeption: %s",