Move cts tests using reflection
Moving them into unit tests.
Bug: 77266422
Test: Run a11y coretests
Change-Id: Id6305586a43c0a8fc9df207765ed3f0459ae247e
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityEventTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityEventTest.java
index fed197e..3c04895 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityEventTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityEventTest.java
@@ -26,11 +26,29 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
/**
* AccessibilityEvent is public, so CTS covers it pretty well. Verifying hidden methods here.
*/
@RunWith(AndroidJUnit4.class)
public class AccessibilityEventTest {
+ // The number of fields tested in the corresponding CTS AccessibilityEventTest:
+ // See the CTS tests for AccessibilityRecord:
+ // fullyPopulateAccessibilityEvent, assertEqualsAccessiblityEvent,
+ // and assertAccessibilityEventCleared
+
+ /** The number of properties of the {@link AccessibilityEvent} class. */
+ private static final int A11Y_EVENT_NON_STATIC_FIELD_COUNT = 32;
+
+ // The number of fields tested in the corresponding CTS AccessibilityRecordTest:
+ // assertAccessibilityRecordCleared, fullyPopulateAccessibilityRecord,
+ // and assertEqualAccessibilityRecord
+
+ /** The number of properties of the {@link AccessibilityRecord} class. */
+ private static final int A11Y_RECORD_NON_STATIC_FIELD_COUNT = 24;
+
@Test
public void testImportantForAccessibiity_getSetWorkAcrossParceling() {
AccessibilityEvent event = AccessibilityEvent.obtain();
@@ -59,10 +77,42 @@
assertEquals(windowChanges, copyEventViaParcel(event).getWindowChanges());
}
+ @Test
+ public void dontForgetToUpdateA11yRecordCtsParcelingTestWhenYouAddNewFields() {
+ AccessibilityEventTest.assertNoNewNonStaticFieldsAdded(
+ AccessibilityRecord.class, A11Y_RECORD_NON_STATIC_FIELD_COUNT);
+ }
+
+ @Test
+ public void dontForgetToUpdateA11yEventCtsParcelingTestWhenYouAddNewFields() {
+ AccessibilityEventTest.assertNoNewNonStaticFieldsAdded(
+ AccessibilityEvent.class, A11Y_EVENT_NON_STATIC_FIELD_COUNT);
+ }
+
private AccessibilityEvent copyEventViaParcel(AccessibilityEvent event) {
Parcel parcel = Parcel.obtain();
event.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
return AccessibilityEvent.CREATOR.createFromParcel(parcel);
}
+
+ /**
+ * Asserts that no new fields have been added, so we are testing marshaling
+ * of all such.
+ */
+ static void assertNoNewNonStaticFieldsAdded(Class<?> clazz, int expectedCount) {
+ int nonStaticFieldCount = 0;
+
+ while (clazz != Object.class) {
+ for (Field field : clazz.getDeclaredFields()) {
+ if ((field.getModifiers() & Modifier.STATIC) == 0) {
+ nonStaticFieldCount++;
+ }
+ }
+ clazz = clazz.getSuperclass();
+ }
+
+ String message = "New fields have been added, so add code to test marshaling them.";
+ assertEquals(message, expectedCount, nonStaticFieldCount);
+ }
}
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
index 8db1bfa..6414c20 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
@@ -38,6 +38,16 @@
@LargeTest
@RunWith(AndroidJUnit4.class)
public class AccessibilityNodeInfoTest {
+ // The number of fields tested in the corresponding CTS AccessibilityNodeInfoTest:
+ // See fullyPopulateAccessibilityNodeInfo, assertEqualsAccessibilityNodeInfo,
+ // and assertAccessibilityNodeInfoCleared in that class.
+ private static final int NUM_MARSHALLED_PROPERTIES = 35;
+
+ /**
+ * The number of properties that are purposely not marshalled
+ * mOriginalText - Used when resolving clickable spans; intentionally not parceled
+ */
+ private static final int NUM_NONMARSHALLED_PROPERTIES = 1;
@Test
public void testStandardActions_serializationFlagIsValid() {
@@ -114,4 +124,10 @@
assertThat(unparceledNode.getActionList(), emptyCollectionOf(AccessibilityAction.class));
assertThat(unparceledNode.getText(), equalTo(text));
}
+
+ @Test
+ public void dontForgetToUpdateCtsParcelingTestWhenYouAddNewFields() {
+ AccessibilityEventTest.assertNoNewNonStaticFieldsAdded(AccessibilityNodeInfo.class,
+ NUM_MARSHALLED_PROPERTIES + NUM_NONMARSHALLED_PROPERTIES);
+ }
}