diff options
| author | svetoslavganov <svetoslavganov@google.com> | 2009-05-15 00:44:45 -0700 |
|---|---|---|
| committer | svetoslavganov <svetoslavganov@google.com> | 2009-05-15 00:44:45 -0700 |
| commit | 76879bc2343779d4d2a870b7bd46b0544c0cc46c (patch) | |
| tree | 9594c4c482eb8249e5406f0578013db22cf1ebab /tests/FrameworkTest | |
| parent | e52a5a5fca18348728dfc5609b42b88e9cc7ef98 (diff) | |
| parent | 75986cf9bc57ef11ad70f36fb77fbbf5d63af6ec (diff) | |
| download | frameworks_base-76879bc2343779d4d2a870b7bd46b0544c0cc46c.zip frameworks_base-76879bc2343779d4d2a870b7bd46b0544c0cc46c.tar.gz frameworks_base-76879bc2343779d4d2a870b7bd46b0544c0cc46c.tar.bz2 | |
resolved conflicts w/ 75986cf9bc57ef11ad70f36fb77fbbf5d63af6ec merge....
Diffstat (limited to 'tests/FrameworkTest')
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); + } +} |
