summaryrefslogtreecommitdiffstats
path: root/core/java/android/test
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:43 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:43 -0800
commitf013e1afd1e68af5e3b868c26a653bbfb39538f8 (patch)
tree7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf /core/java/android/test
parente70cfafe580c6f2994c4827cd8a534aabf3eb05c (diff)
downloadframeworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.zip
frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.tar.gz
frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.tar.bz2
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'core/java/android/test')
-rw-r--r--core/java/android/test/InstrumentationTestCase.java56
-rw-r--r--core/java/android/test/suitebuilder/annotation/LargeTest.java30
-rw-r--r--core/java/android/test/suitebuilder/annotation/MediumTest.java31
-rw-r--r--core/java/android/test/suitebuilder/annotation/SmallTest.java30
4 files changed, 142 insertions, 5 deletions
diff --git a/core/java/android/test/InstrumentationTestCase.java b/core/java/android/test/InstrumentationTestCase.java
index 08a8ad1..82f2ef9 100644
--- a/core/java/android/test/InstrumentationTestCase.java
+++ b/core/java/android/test/InstrumentationTestCase.java
@@ -31,8 +31,7 @@ import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
/**
- * A test case that has access to {@link Instrumentation}. See
- * <code>InstrumentationTestRunner</code>.
+ * A test case that has access to {@link Instrumentation}.
*/
public class InstrumentationTestCase extends TestCase {
@@ -57,7 +56,13 @@ public class InstrumentationTestCase extends TestCase {
}
/**
- * Utility method for launching an activity.
+ * Utility method for launching an activity.
+ *
+ * <p>The {@link Intent} used to launch the Activity is:
+ * action = {@link Intent#ACTION_MAIN}
+ * extras = null, unless a custom bundle is provided here
+ * All other fields are null or empty.
+ *
* @param pkg The package hosting the activity to be launched.
* @param activityCls The activity class to launch.
* @param extras Optional extra stuff to pass to the activity.
@@ -69,20 +74,61 @@ public class InstrumentationTestCase extends TestCase {
Class<T> activityCls,
Bundle extras) {
Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setClassName(pkg, activityCls.getName());
if (extras != null) {
intent.putExtras(extras);
}
+ return launchActivityWithIntent(pkg, activityCls, intent);
+ }
+
+ /**
+ * Utility method for launching an activity with a specific Intent.
+ * @param pkg The package hosting the activity to be launched.
+ * @param activityCls The activity class to launch.
+ * @param intent The intent to launch with
+ * @return The activity, or null if non launched.
+ */
+ @SuppressWarnings("unchecked")
+ public final <T extends Activity> T launchActivityWithIntent(
+ String pkg,
+ Class<T> activityCls,
+ Intent intent) {
+ intent.setClassName(pkg, activityCls.getName());
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
T activity = (T) getInstrumentation().startActivitySync(intent);
getInstrumentation().waitForIdleSync();
return activity;
}
+
+ /**
+ * Helper for running portions of a test on the UI thread.
+ *
+ * Note, in most cases it is simpler to annotate the test method with
+ * {@link android.test.UiThreadTest}, which will run the entire test method on the UI thread.
+ * Use this method if you need to switch in and out of the UI thread to perform your test.
+ *
+ * @param r runnable containing test code in the {@link Runnable#run()} method
+ */
+ public void runTestOnUiThread(final Runnable r) throws Throwable {
+ final Throwable[] exceptions = new Throwable[1];
+ getInstrumentation().runOnMainSync(new Runnable() {
+ public void run() {
+ try {
+ r.run();
+ } catch (Throwable throwable) {
+ exceptions[0] = throwable;
+ }
+ }
+ });
+ if (exceptions[0] != null) {
+ throw exceptions[0];
+ }
+ }
/**
* Runs the current unit test. If the unit test is annotated with
* {@link android.test.UiThreadTest}, the test is run on the UI thread.
*/
+ @Override
protected void runTest() throws Throwable {
String fName = getName();
assertNotNull(fName);
diff --git a/core/java/android/test/suitebuilder/annotation/LargeTest.java b/core/java/android/test/suitebuilder/annotation/LargeTest.java
new file mode 100644
index 0000000..a6269e7
--- /dev/null
+++ b/core/java/android/test/suitebuilder/annotation/LargeTest.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.test.suitebuilder.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marks a test that should run as part of the large tests.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface LargeTest {
+}
diff --git a/core/java/android/test/suitebuilder/annotation/MediumTest.java b/core/java/android/test/suitebuilder/annotation/MediumTest.java
new file mode 100644
index 0000000..8afeb91
--- /dev/null
+++ b/core/java/android/test/suitebuilder/annotation/MediumTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.test.suitebuilder.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marks a test that should run as part of the medium tests.
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface MediumTest {
+}
diff --git a/core/java/android/test/suitebuilder/annotation/SmallTest.java b/core/java/android/test/suitebuilder/annotation/SmallTest.java
new file mode 100644
index 0000000..ad530e2
--- /dev/null
+++ b/core/java/android/test/suitebuilder/annotation/SmallTest.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.test.suitebuilder.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marks a test that should run as part of the small tests.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.TYPE})
+public @interface SmallTest {
+}