2604272 Add CTS tests for the accessibility APIs. - I file I missed
Change-Id: Iafe7b36b2ffc5dc4a9c37daadb7f2092dd8ab469
diff --git a/tests/tests/view/src/android/view/cts/AccessibilityEventTest.java b/tests/tests/view/src/android/view/cts/AccessibilityEventTest.java
new file mode 100644
index 0000000..f7c1e7a
--- /dev/null
+++ b/tests/tests/view/src/android/view/cts/AccessibilityEventTest.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2010 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.view.cts;
+
+import android.os.Message;
+import android.os.Parcel;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.view.accessibility.AccessibilityEvent;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * Class for testing {@link AccessibilityEvent}.
+ */
+public class AccessibilityEventTest extends TestCase {
+
+ /** The number of properties of the {@link AccessibilityEvent} class. */
+ private static final int NON_STATIC_FIELD_COUNT = 16;
+
+ @MediumTest
+ public void testMarshalling() throws Exception {
+ // no new fields, so we are testing marshaling of all such
+ assertNoNewNonStaticFieldsAdded();
+
+ // fully populate the event to marshal
+ AccessibilityEvent sentEvent = AccessibilityEvent.obtain();
+ fullyPopulateSentAccessibilityEvent(sentEvent);
+
+ // marshal and unmarshal the event
+ Parcel parcel = Parcel.obtain();
+ sentEvent.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+ AccessibilityEvent receivedEvent = AccessibilityEvent.CREATOR.createFromParcel(parcel);
+
+ // make sure all fields properly marshaled
+ assertEqualsAccessiblityEvent(sentEvent, receivedEvent);
+ }
+
+ /**
+ * Tests if {@link AccessibilityEvent} are properly reused.
+ */
+ @MediumTest
+ public void testReuse() {
+ AccessibilityEvent firstEvent = AccessibilityEvent.obtain();
+ firstEvent.recycle();
+ AccessibilityEvent secondEvent = AccessibilityEvent.obtain();
+ assertSame("AccessibilityEvent not properly reused", firstEvent, secondEvent);
+ }
+
+ /**
+ * Tests if {@link AccessibilityEvent} are properly recycled.
+ */
+ @MediumTest
+ public void testRecycle() {
+ // obtain and populate an event
+ AccessibilityEvent populatedEvent = AccessibilityEvent.obtain();
+ fullyPopulateSentAccessibilityEvent(populatedEvent);
+
+ // recycle and obtain the same recycled instance
+ populatedEvent.recycle();
+ AccessibilityEvent recycledEvent = AccessibilityEvent.obtain();
+
+ // check expectations
+ assertAccessibilityEventCleared(recycledEvent);
+ }
+
+ /**
+ * Asserts that no new fields have been added, so we are testing marshaling
+ * of all such.
+ */
+ private void assertNoNewNonStaticFieldsAdded() {
+ int nonStaticFieldCount = 0;
+
+ for (Field field : AccessibilityEvent.class.getDeclaredFields()) {
+ if ((field.getModifiers() & Modifier.STATIC) == 0) {
+ nonStaticFieldCount++;
+ }
+ }
+
+ String message = "New fields have been added, so add code to test marchalling them.";
+ assertEquals(message, NON_STATIC_FIELD_COUNT, nonStaticFieldCount);
+ }
+
+ /**
+ * Fully populates the {@link AccessibilityEvent} to marshal.
+ *
+ * @param sentEvent The event to populate.
+ */
+ private void fullyPopulateSentAccessibilityEvent(AccessibilityEvent sentEvent) {
+ sentEvent.setAddedCount(1);
+ sentEvent.setBeforeText("BeforeText");
+ sentEvent.setChecked(true);
+ sentEvent.setClassName("foo.bar.baz.Class");
+ sentEvent.setContentDescription("ContentDescription");
+ sentEvent.setCurrentItemIndex(1);
+ sentEvent.setEnabled(true);
+ sentEvent.setEventType(AccessibilityEvent.TYPE_VIEW_FOCUSED);
+ sentEvent.setEventTime(1000);
+ sentEvent.setFromIndex(1);
+ sentEvent.setFullScreen(true);
+ sentEvent.setItemCount(1);
+ sentEvent.setPackageName("foo.bar.baz");
+ sentEvent.setParcelableData(Message.obtain(null, 1, 2, 3));
+ sentEvent.setPassword(true);
+ sentEvent.setRemovedCount(1);
+ sentEvent.getText().add("Foo");
+ }
+
+ /**
+ * Compares all properties of the <code>expectedEvent</code> and the
+ * <code>receviedEvent</code> to verify that the received event is the one
+ * that is expected.
+ */
+ public static void assertEqualsAccessiblityEvent(AccessibilityEvent expectedEvent,
+ AccessibilityEvent receivedEvent) {
+ assertEquals("addedCount has incorrect value", expectedEvent.getAddedCount(), receivedEvent
+ .getAddedCount());
+ assertEquals("beforeText has incorrect value", expectedEvent.getBeforeText(), receivedEvent
+ .getBeforeText());
+ assertEquals("checked has incorrect value", expectedEvent.isChecked(), receivedEvent
+ .isChecked());
+ assertEquals("className has incorrect value", expectedEvent.getClassName(), receivedEvent
+ .getClassName());
+ assertEquals("contentDescription has incorrect value", expectedEvent
+ .getContentDescription(), receivedEvent.getContentDescription());
+ assertEquals("currentItemIndex has incorrect value", expectedEvent.getCurrentItemIndex(),
+ receivedEvent.getCurrentItemIndex());
+ assertEquals("enabled has incorrect value", expectedEvent.isEnabled(), receivedEvent
+ .isEnabled());
+ assertEquals("eventType has incorrect value", expectedEvent.getEventType(), receivedEvent
+ .getEventType());
+ assertEquals("fromIndex has incorrect value", expectedEvent.getFromIndex(), receivedEvent
+ .getFromIndex());
+ assertEquals("fullScreen has incorrect value", expectedEvent.isFullScreen(), receivedEvent
+ .isFullScreen());
+ assertEquals("itemCount has incorrect value", expectedEvent.getItemCount(), receivedEvent
+ .getItemCount());
+ assertEquals("password has incorrect value", expectedEvent.isPassword(), receivedEvent
+ .isPassword());
+ assertEquals("removedCount has incorrect value", expectedEvent.getRemovedCount(),
+ receivedEvent.getRemovedCount());
+ assertEqualsText(expectedEvent, receivedEvent);
+ }
+
+ /**
+ * Compares the text of the <code>expectedEvent</code> and
+ * <code>receivedEvent</code> by comparing the string representation of the
+ * corresponding {@link CharSequence}s.
+ */
+ public static void assertEqualsText(AccessibilityEvent expectedEvent,
+ AccessibilityEvent receivedEvent) {
+ String message = "text has incorrect value";
+ List<CharSequence> expectedText = expectedEvent.getText();
+ List<CharSequence> receivedText = receivedEvent.getText();
+
+ TestCase.assertEquals(message, expectedText.size(), receivedText.size());
+
+ Iterator<CharSequence> expectedTextIterator = expectedText.iterator();
+ Iterator<CharSequence> receivedTextIterator = receivedText.iterator();
+
+ for (int i = 0; i < expectedText.size(); i++) {
+ // compare the string representation
+ TestCase.assertEquals(message, expectedTextIterator.next().toString(),
+ receivedTextIterator.next().toString());
+ }
+ }
+
+ /**
+ * Asserts that an {@link AccessibilityEvent} is cleared.
+ *
+ * @param event The event to check.
+ */
+ public static void assertAccessibilityEventCleared(AccessibilityEvent event) {
+ TestCase.assertEquals("addedCount not properly recycled", 0, event.getAddedCount());
+ TestCase.assertNull("beforeText not properly recycled", event.getBeforeText());
+ TestCase.assertNull("className not properly recycled", event.getClassName());
+ TestCase.assertNull("contentDescription not properly recycled", event
+ .getContentDescription());
+ TestCase.assertEquals("currentItemIndex not properly recycled", -1, event
+ .getCurrentItemIndex());
+ TestCase.assertEquals("eventTime not properly recycled", 0, event.getEventTime());
+ TestCase.assertEquals("eventType not properly recycled", 0, event.getEventType());
+ TestCase.assertEquals("fromIndex not properly recycled", 0, event.getFromIndex());
+ TestCase.assertEquals("itemCount not properly recycled", 0, event.getItemCount());
+ TestCase.assertNull("packageName not properly recycled", event.getPackageName());
+ TestCase.assertNull("parcelableData not properly recycled", event.getParcelableData());
+ TestCase.assertEquals("removedCount not properly recycled", 0, event.getRemovedCount());
+ TestCase.assertTrue("text not properly recycled", event.getText().isEmpty());
+ }
+}