Add CTS test for view's RTL resolution

Bug: 30132566
Change-Id: I10a6e2e30b9c89f45c7bee0599393aebe41015a3
diff --git a/tests/tests/widget/src/android/widget/cts/ListViewTest.java b/tests/tests/widget/src/android/widget/cts/ListViewTest.java
index e89b3d3..2f39c2b 100644
--- a/tests/tests/widget/src/android/widget/cts/ListViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ListViewTest.java
@@ -764,7 +764,45 @@
             mListView.setPadding(10, 0, 5, 0);
             assertFalse(view.isLayoutRequested());
         });
+    }
 
+    @MediumTest
+    public void testResolveRtlOnReAttach() {
+        View spacer = new View(getActivity());
+        spacer.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                250));
+        final DummyAdapter adapter = new DummyAdapter(50, spacer);
+        ViewTestUtils.runOnMainAndDrawSync(getInstrumentation(), mListView, () -> {
+            mListView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
+            mListView.setLayoutParams(new LinearLayout.LayoutParams(200, 150));
+            mListView.setAdapter(adapter);
+        });
+        assertEquals("test sanity", 1, mListView.getChildCount());
+        ViewTestUtils.runOnMainAndDrawSync(getInstrumentation(), mListView, () -> {
+            // we scroll in pieces because list view caps scroll by its height
+            mListView.scrollListBy(100);
+            mListView.scrollListBy(100);
+            mListView.scrollListBy(60);
+        });
+        assertEquals("test sanity", 1, mListView.getChildCount());
+        assertEquals("test sanity", 1, mListView.getFirstVisiblePosition());
+        ViewTestUtils.runOnMainAndDrawSync(getInstrumentation(), mListView, () -> {
+            mListView.scrollListBy(-100);
+            mListView.scrollListBy(-100);
+            mListView.scrollListBy(-60);
+        });
+        assertEquals("test sanity", 1, mListView.getChildCount());
+        assertEquals("item 0 should be visible", 0, mListView.getFirstVisiblePosition());
+        ViewTestUtils.runOnMainAndDrawSync(getInstrumentation(), mListView, () -> {
+            mListView.scrollListBy(100);
+            mListView.scrollListBy(100);
+            mListView.scrollListBy(60);
+        });
+        assertEquals("test sanity", 1, mListView.getChildCount());
+        assertEquals("test sanity", 1, mListView.getFirstVisiblePosition());
+
+        assertEquals("the view's RTL properties must be resolved",
+                mListView.getChildAt(0).getLayoutDirection(), View.LAYOUT_DIRECTION_RTL);
     }
 
     private class MockView extends View {