summaryrefslogtreecommitdiffstats
path: root/tests/FrameworkTest
diff options
context:
space:
mode:
authorsvetoslavganov <svetoslavganov@google.com>2009-05-15 00:44:45 -0700
committersvetoslavganov <svetoslavganov@google.com>2009-05-15 00:44:45 -0700
commit76879bc2343779d4d2a870b7bd46b0544c0cc46c (patch)
tree9594c4c482eb8249e5406f0578013db22cf1ebab /tests/FrameworkTest
parente52a5a5fca18348728dfc5609b42b88e9cc7ef98 (diff)
parent75986cf9bc57ef11ad70f36fb77fbbf5d63af6ec (diff)
downloadframeworks_base-76879bc2343779d4d2a870b7bd46b0544c0cc46c.zip
frameworks_base-76879bc2343779d4d2a870b7bd46b0544c0cc46c.tar.gz
frameworks_base-76879bc2343779d4d2a870b7bd46b0544c0cc46c.tar.bz2
resolved conflicts w/ 75986cf9bc57ef11ad70f36fb77fbbf5d63af6ec merge....
Diffstat (limited to 'tests/FrameworkTest')
-rw-r--r--tests/FrameworkTest/AndroidManifest.xml11
-rw-r--r--tests/FrameworkTest/src/com/android/frameworktest/accessibility/AccessibilityTestService.java167
-rw-r--r--tests/FrameworkTest/tests/src/com/android/frameworktest/accessibility/RecycleAccessibilityEventTest.java81
3 files changed, 258 insertions, 1 deletions
diff --git a/tests/FrameworkTest/AndroidManifest.xml b/tests/FrameworkTest/AndroidManifest.xml
index c70302b..4e4ebff 100644
--- a/tests/FrameworkTest/AndroidManifest.xml
+++ b/tests/FrameworkTest/AndroidManifest.xml
@@ -20,6 +20,9 @@
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.HARDWARE_TEST" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
+ <uses-permission android:name="android.permission.ACCESSIBILITY_EVENT_VIEW_TYPES" />
+ <uses-permission android:name="android.permission.ACCESSIBILITY_EVENT_TRANSITION_TYPES" />
+ <uses-permission android:name="android.permission.ACCESSIBILITY_EVENT_NOTIFICATION_TYPES" />
<application android:theme="@style/Theme">
<uses-library android:name="android.test.runner" />
@@ -939,7 +942,7 @@
</intent-filter>
</activity>
- <activity android:name="android.widget.AutoCompleteTextViewSimple"
+ <activity android:name="android.widget.AutoCompleteTextViewSimple"
android:label="AutoCompleteTextViewSimple">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -947,6 +950,12 @@
</intent-filter>
</activity>
+ <service android:name=".accessibility.AccessibilityTestService">
+ <intent-filter>
+ <action android:name="android.accessibilityservice.AccessibilityService" />
+ </intent-filter>
+ </service>
+
</application>
</manifest>
diff --git a/tests/FrameworkTest/src/com/android/frameworktest/accessibility/AccessibilityTestService.java b/tests/FrameworkTest/src/com/android/frameworktest/accessibility/AccessibilityTestService.java
new file mode 100644
index 0000000..83d6056
--- /dev/null
+++ b/tests/FrameworkTest/src/com/android/frameworktest/accessibility/AccessibilityTestService.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2009 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 com.android.frameworktest.accessibility;
+
+import android.accessibilityservice.AccessibilityService;
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.app.Notification;
+import android.util.Log;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * This class text the accessibility framework end to end.
+ * <p>
+ * Note: Since accessibility is provided by {@link AccessibilityService}s we create one,
+ * and it generates an event and an interruption dispatching them through the
+ * {@link AccessibilityManager}. We verify the received result. To trigger the test
+ * go to Settings->Accessibility and select the enable accessibility check and then
+ * select the check for this service (same name as the class).
+ */
+public class AccessibilityTestService extends AccessibilityService {
+
+ private static final String LOG_TAG = "AccessibilityTestService";
+
+ private static final String CLASS_NAME = "foo.bar.baz.Test";
+ private static final String PACKAGE_NAME = "foo.bar.baz";
+ private static final String TEXT = "Some stuff";
+ private static final String BEFORE_TEXT = "Some other stuff";
+
+ private static final String CONTENT_DESCRIPTION = "Content description";
+
+ private static final int ITEM_COUNT = 10;
+ private static final int CURRENT_ITEM_INDEX = 1;
+ private static final int INTERRUPT_INVOCATION_TYPE = 0x00000200;
+
+ private static final int FROM_INDEX = 1;
+ private static final int ADDED_COUNT = 2;
+ private static final int REMOVED_COUNT = 1;
+
+ private static final int NOTIFICATION_TIMEOUT_MILLIS = 80;
+
+ private int mReceivedResult;
+
+ private Timer mTimer = new Timer();
+
+ @Override
+ public void onServiceConnected() {
+ AccessibilityServiceInfo info = new AccessibilityServiceInfo();
+ info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
+ info.feedbackType = AccessibilityServiceInfo.FEEDBACK_AUDIBLE;
+ info.notificationTimeout = NOTIFICATION_TIMEOUT_MILLIS;
+ info.flags &= AccessibilityServiceInfo.DEFAULT;
+ setServiceInfo(info);
+
+ // we need to wait until the system picks our configuration
+ // otherwise it will not notify us
+ mTimer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ try {
+ testAccessibilityEventDispatching();
+ testInterrupt();
+ } catch (Exception e) {
+ Log.e(LOG_TAG, "Error in testing Accessibility feature", e);
+ }
+ }
+ }, 1000);
+ }
+
+ /**
+ * Check here if the event we received is actually the one we sent.
+ */
+ @Override
+ public void onAccessibilityEvent(AccessibilityEvent event) {
+ assert(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED == event.getEventType());
+ assert(event != null);
+ assert(event.getEventTime() > 0);
+ assert(CLASS_NAME.equals(event.getClassName()));
+ assert(PACKAGE_NAME.equals(event.getPackageName()));
+ assert(1 == event.getText().size());
+ assert(TEXT.equals(event.getText().get(0)));
+ assert(BEFORE_TEXT.equals(event.getBeforeText()));
+ assert(event.isChecked());
+ assert(CONTENT_DESCRIPTION.equals(event.getContentDescription()));
+ assert(ITEM_COUNT == event.getItemCount());
+ assert(CURRENT_ITEM_INDEX == event.getCurrentItemIndex());
+ assert(event.isEnabled());
+ assert(event.isPassword());
+ assert(FROM_INDEX == event.getFromIndex());
+ assert(ADDED_COUNT == event.getAddedCount());
+ assert(REMOVED_COUNT == event.getRemovedCount());
+ assert(event.getParcelableData() != null);
+ assert(1 == ((Notification) event.getParcelableData()).icon);
+
+ // set the type of the receved request
+ mReceivedResult = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
+ }
+
+ /**
+ * Set a flag that we received the interrupt request.
+ */
+ @Override
+ public void onInterrupt() {
+
+ // set the type of the receved request
+ mReceivedResult = INTERRUPT_INVOCATION_TYPE;
+ }
+
+ /**
+ * If an {@link AccessibilityEvent} is sent and received correctly.
+ */
+ public void testAccessibilityEventDispatching() throws Exception {
+ AccessibilityEvent event =
+ AccessibilityEvent.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
+
+ assert(event != null);
+ event.setClassName(CLASS_NAME);
+ event.setPackageName(PACKAGE_NAME);
+ event.getText().add(TEXT);
+ event.setBeforeText(BEFORE_TEXT);
+ event.setChecked(true);
+ event.setContentDescription(CONTENT_DESCRIPTION);
+ event.setItemCount(ITEM_COUNT);
+ event.setCurrentItemIndex(CURRENT_ITEM_INDEX);
+ event.setEnabled(true);
+ event.setPassword(true);
+ event.setFromIndex(FROM_INDEX);
+ event.setAddedCount(ADDED_COUNT);
+ event.setRemovedCount(REMOVED_COUNT);
+ event.setParcelableData(new Notification(1, "Foo", 1234));
+
+ AccessibilityManager.getInstance(this).sendAccessibilityEvent(event);
+
+ assert(mReceivedResult == event.getEventType());
+
+ Log.i(LOG_TAG, "AccessibilityTestService#testAccessibilityEventDispatching: Success");
+ }
+
+ /**
+ * If accessibility feedback interruption is triggered and received correctly.
+ */
+ public void testInterrupt() throws Exception {
+ AccessibilityManager.getInstance(this).interrupt();
+
+ assert(INTERRUPT_INVOCATION_TYPE == mReceivedResult);
+
+ Log.i(LOG_TAG, "AccessibilityTestService#testInterrupt: Success");
+ }
+}
+
diff --git a/tests/FrameworkTest/tests/src/com/android/frameworktest/accessibility/RecycleAccessibilityEventTest.java b/tests/FrameworkTest/tests/src/com/android/frameworktest/accessibility/RecycleAccessibilityEventTest.java
new file mode 100644
index 0000000..d6380f9
--- /dev/null
+++ b/tests/FrameworkTest/tests/src/com/android/frameworktest/accessibility/RecycleAccessibilityEventTest.java
@@ -0,0 +1,81 @@
+/**
+ * Copyright (C) 2009 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 com.android.frameworktest.accessibility;
+
+import android.test.suitebuilder.annotation.MediumTest;
+import android.view.accessibility.AccessibilityEvent;
+
+import junit.framework.TestCase;
+
+/**
+ * This class exercises the caching and recycling of {@link AccessibilityEvent}s.
+ */
+public class RecycleAccessibilityEventTest extends TestCase {
+
+ private static final String CLASS_NAME = "foo.bar.baz.Test";
+ private static final String PACKAGE_NAME = "foo.bar.baz";
+ private static final String TEXT = "Some stuff";
+
+ private static final String CONTENT_DESCRIPTION = "Content description";
+ private static final int ITEM_COUNT = 10;
+ private static final int CURRENT_ITEM_INDEX = 1;
+
+ private static final int FROM_INDEX = 1;
+ private static final int ADDED_COUNT = 2;
+ private static final int REMOVED_COUNT = 1;
+
+ /**
+ * If an {@link AccessibilityEvent} is marshaled/unmarshaled correctly
+ */
+ @MediumTest
+ public void testAccessibilityEventViewTextChangedType() {
+ AccessibilityEvent first =
+ AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
+ assertNotNull(first);
+
+ first.setClassName(CLASS_NAME);
+ first.setPackageName(PACKAGE_NAME);
+ first.getText().add(TEXT);
+ first.setFromIndex(FROM_INDEX);
+ first.setAddedCount(ADDED_COUNT);
+ first.setRemovedCount(REMOVED_COUNT);
+ first.setChecked(true);
+ first.setContentDescription(CONTENT_DESCRIPTION);
+ first.setItemCount(ITEM_COUNT);
+ first.setCurrentItemIndex(CURRENT_ITEM_INDEX);
+ first.setEnabled(true);
+ first.setPassword(true);
+
+ first.recycle();
+
+ assertNotNull(first);
+ assertNull(first.getClassName());
+ assertNull(first.getPackageName());
+ assertEquals(0, first.getText().size());
+ assertFalse(first.isChecked());
+ assertNull(first.getContentDescription());
+ assertEquals(0, first.getItemCount());
+ assertEquals(AccessibilityEvent.INVALID_POSITION, first.getCurrentItemIndex());
+ assertFalse(first.isEnabled());
+ assertFalse(first.isPassword());
+ assertEquals(0, first.getFromIndex());
+ assertEquals(0, first.getAddedCount());
+ assertEquals(0, first.getRemovedCount());
+
+ // get another event from the pool (this must be the recycled first)
+ AccessibilityEvent second = AccessibilityEvent.obtain();
+ assertEquals(first, second);
+ }
+}