summaryrefslogtreecommitdiffstats
path: root/core/java/android/test
diff options
context:
space:
mode:
authorKarl Rosaen <krosaen@android.com>2009-06-15 16:38:32 -0700
committerKarl Rosaen <krosaen@android.com>2009-06-15 16:56:01 -0700
commitbedf9df706ef1fe352c1ba0734f50f9e8ad2533e (patch)
tree37cf7b90fc41f4abffe7b3933791ff3580fe88b3 /core/java/android/test
parentd83d6606d62e27effc27be48d6050914deefe9eb (diff)
downloadframeworks_base-bedf9df706ef1fe352c1ba0734f50f9e8ad2533e.zip
frameworks_base-bedf9df706ef1fe352c1ba0734f50f9e8ad2533e.tar.gz
frameworks_base-bedf9df706ef1fe352c1ba0734f50f9e8ad2533e.tar.bz2
Add utility methods to AndroidTestCase for asserting permission requirements for launching activities and accessing ContentProviders.
Diffstat (limited to 'core/java/android/test')
-rw-r--r--core/java/android/test/AndroidTestCase.java72
1 files changed, 70 insertions, 2 deletions
diff --git a/core/java/android/test/AndroidTestCase.java b/core/java/android/test/AndroidTestCase.java
index 9bafa32..de0587a 100644
--- a/core/java/android/test/AndroidTestCase.java
+++ b/core/java/android/test/AndroidTestCase.java
@@ -16,12 +16,14 @@
package android.test;
+import android.content.ContentValues;
import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import junit.framework.TestCase;
import java.lang.reflect.Field;
-import junit.framework.TestCase;
-
/**
* Extend this if you need to access Resources or other things that depend on Activity Context.
*/
@@ -53,6 +55,72 @@ public class AndroidTestCase extends TestCase {
}
/**
+ * Asserts that launching a given activity is protected by a particular permission by
+ * attempting to start the activity and validating that a {@link SecurityException}
+ * is thrown that mentions the permission in its error message.
+ *
+ * Note that an instrumentation isn't needed because all we are looking for is a security error
+ * and we don't need to wait for the activity to launch and get a handle to the activity.
+ *
+ * @param packageName The package name of the activity to launch.
+ * @param className The class of the activity to launch.
+ * @param permission The name of the permission.
+ */
+ public void assertActivityRequiresPermission(
+ String packageName, String className, String permission) {
+ final Intent intent = new Intent();
+ intent.setClassName(packageName, className);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ try {
+ getContext().startActivity(intent);
+ fail("expected security exception for " + permission);
+ } catch (SecurityException expected) {
+ assertNotNull("security exception's error message.", expected.getMessage());
+ assertTrue("error message should contain " + permission + ".",
+ expected.getMessage().contains(permission));
+ }
+ }
+
+
+ /**
+ * Asserts that reading from the content uri requires a particular permission by querying the
+ * uri and ensuring a {@link SecurityException} is thrown mentioning the particular permission.
+ *
+ * @param uri The uri that requires a permission to query.
+ * @param permission The permission that should be required.
+ */
+ public void assertReadingContentUriRequiresPermission(Uri uri, String permission) {
+ try {
+ getContext().getContentResolver().query(uri, null, null, null, null);
+ fail("expected SecurityException requiring " + permission);
+ } catch (SecurityException expected) {
+ assertNotNull("security exception's error message.", expected.getMessage());
+ assertTrue("error message should contain " + permission + ".",
+ expected.getMessage().contains(permission));
+ }
+ }
+
+ /**
+ * Asserts that writing to the content uri requires a particular permission by inserting into
+ * the uri and ensuring a {@link SecurityException} is thrown mentioning the particular
+ * permission.
+ *
+ * @param uri The uri that requires a permission to query.
+ * @param permission The permission that should be required.
+ */
+ public void assertWritingContentUriRequiresPermission(Uri uri, String permission) {
+ try {
+ getContext().getContentResolver().insert(uri, new ContentValues());
+ fail("expected SecurityException requiring " + permission);
+ } catch (SecurityException expected) {
+ assertNotNull("security exception's error message.", expected.getMessage());
+ assertTrue("error message should contain " + permission + ".",
+ expected.getMessage().contains(permission));
+ }
+ }
+
+ /**
* This function is called by various TestCase implementations, at tearDown() time, in order
* to scrub out any class variables. This protects against memory leaks in the case where a
* test case creates a non-static inner class (thus referencing the test case) and gives it to