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);
+    }
 }