Tests for setItemChecked data invalidation
Verify that when AbsListView.setItemChecked is called with a value that
is equal to the old value, data invalidation and layout request is not
made.
Bug: 25793105
Change-Id: I45186d132e3372b2903f66f12656962b932f0775
diff --git a/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java b/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
index 89a3448..cf8012e 100644
--- a/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/AbsListViewTest.java
@@ -16,6 +16,7 @@
package android.widget.cts;
+import android.test.suitebuilder.annotation.MediumTest;
import android.widget.cts.R;
import org.xmlpull.v1.XmlPullParser;
@@ -648,6 +649,98 @@
assertFalse(listView.isInFilterMode());
}
+ @MediumTest
+ public void testSetItemChecked_multipleModeSameValue()
+ throws Throwable {
+ // Calling setItemChecked with the same value in multiple choice mode should not cause
+ // requestLayout
+ mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, false);
+ }
+ });
+ mInstrumentation.waitForIdleSync();
+ assertFalse(mListView.isLayoutRequested());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, false);
+ }
+ });
+ assertFalse(mListView.isLayoutRequested());
+ }
+
+ @MediumTest
+ public void testSetItemChecked_singleModeSameValue()
+ throws Throwable {
+ // Calling setItemChecked with the same value in single choice mode should not cause
+ // requestLayout
+ mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, false);
+ }
+ });
+ mInstrumentation.waitForIdleSync();
+ assertFalse(mListView.isLayoutRequested());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, false);
+ }
+ });
+ assertFalse(mListView.isLayoutRequested());
+ }
+
+ @MediumTest
+ public void testSetItemChecked_multipleModeDifferentValue()
+ throws Throwable {
+ // Calling setItemChecked with a different value in multiple choice mode should cause
+ // requestLayout
+ mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, false);
+ }
+ });
+ mInstrumentation.waitForIdleSync();
+ assertFalse(mListView.isLayoutRequested());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, true);
+ }
+ });
+ assertTrue(mListView.isLayoutRequested());
+ }
+
+ @MediumTest
+ public void testSetItemChecked_singleModeDifferentValue()
+ throws Throwable {
+ // Calling setItemChecked with a different value in single choice mode should cause
+ // requestLayout
+ mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, false);
+ }
+ });
+ mInstrumentation.waitForIdleSync();
+ assertFalse(mListView.isLayoutRequested());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mListView.setItemChecked(0, true);
+ }
+ });
+ assertTrue(mListView.isLayoutRequested());
+ }
+
public void testLayoutChildren() {
/**
* the subclass ListView and GridView override this method, so we can not test