Chromium Code Reviews| Index: chrome/android/javatests/src/org/chromium/chrome/browser/ItemChooserDialogTest.java |
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ItemChooserDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ItemChooserDialogTest.java |
| index 366b10dccc823f2de83ba843fea74e5cf8c48888..6b11db39af85668ba7f50033243c50fbafbb4bec 100644 |
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ItemChooserDialogTest.java |
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ItemChooserDialogTest.java |
| @@ -5,11 +5,15 @@ |
| package org.chromium.chrome.browser; |
| import android.app.Dialog; |
| +import android.graphics.drawable.Drawable; |
| +import android.support.graphics.drawable.VectorDrawableCompat; |
| import android.support.test.filters.LargeTest; |
| +import android.test.MoreAsserts; |
| import android.test.UiThreadTest; |
| import android.text.SpannableString; |
| import android.view.View; |
| import android.widget.Button; |
| +import android.widget.ImageView; |
| import android.widget.ListView; |
| import org.chromium.base.ThreadUtils; |
| @@ -34,6 +38,16 @@ public class ItemChooserDialogTest extends ChromeActivityTestCaseBase<ChromeActi |
| String mLastSelectedId = "None"; |
| + Drawable mTestDrawable1; |
| + Drawable mTestDrawableSelected1; |
| + String mTestDrawableDescription1; |
| + ItemChooserDialog.ItemChooserRowIcon mTestIcon1; |
| + |
| + Drawable mTestDrawable2; |
| + Drawable mTestDrawableSelected2; |
| + String mTestDrawableDescription2; |
| + ItemChooserDialog.ItemChooserRowIcon mTestIcon2; |
| + |
| public ItemChooserDialogTest() { |
| super(ChromeActivity.class); |
| } |
| @@ -44,6 +58,24 @@ public class ItemChooserDialogTest extends ChromeActivityTestCaseBase<ChromeActi |
| protected void setUp() throws Exception { |
| super.setUp(); |
| mChooserDialog = createDialog(); |
| + |
| + mTestDrawable1 = getNewTestDrawable(); |
| + mTestDrawableSelected1 = getNewTestDrawable(); |
| + MoreAsserts.assertNotEqual( |
| + mTestDrawable1.getConstantState(), mTestDrawableSelected1.getConstantState()); |
| + mTestDrawableDescription1 = "icon1 description"; |
| + mTestIcon1 = new ItemChooserDialog.ItemChooserRowIcon( |
| + mTestDrawable1, mTestDrawableSelected1, mTestDrawableDescription1); |
| + |
| + mTestDrawable2 = getNewTestDrawable(); |
| + mTestDrawableSelected2 = getNewTestDrawable(); |
| + MoreAsserts.assertNotEqual( |
| + mTestDrawable2.getConstantState(), mTestDrawableSelected2.getConstantState()); |
| + mTestDrawableDescription2 = "icon2 description"; |
| + mTestIcon2 = new ItemChooserDialog.ItemChooserRowIcon( |
| + mTestDrawable2, mTestDrawableSelected2, mTestDrawableDescription2); |
| + |
| + assertFalse(ItemChooserDialog.ItemChooserRowIcon.equals(mTestIcon1, mTestIcon2)); |
| } |
| @Override |
| @@ -58,6 +90,14 @@ public class ItemChooserDialogTest extends ChromeActivityTestCaseBase<ChromeActi |
| mLastSelectedId = id; |
| } |
| + private Drawable getNewTestDrawable() { |
| + Drawable drawable = VectorDrawableCompat.create( |
| + getActivity().getResources(), R.drawable.ic_bluetooth_connected, null); |
| + // Calling mutate() on a Drawable should typically create a new ConstantState |
| + // for that Drawable. |
| + return drawable.mutate(); |
| + } |
| + |
| private ItemChooserDialog createDialog() { |
| SpannableString title = new SpannableString("title"); |
| SpannableString searching = new SpannableString("searching"); |
| @@ -117,6 +157,340 @@ public class ItemChooserDialogTest extends ChromeActivityTestCaseBase<ChromeActi |
| })); |
| } |
| + private ImageView getIconImageView(ListView items, int pos) { |
| + final int first = items.getFirstVisiblePosition(); |
| + final int last = items.getLastVisiblePosition(); |
| + View item; |
| + if (pos < first || pos > last) { |
| + item = items.getAdapter().getView(pos, null, items); |
| + } else { |
| + final int visiblePos = pos - first; |
| + item = items.getChildAt(visiblePos); |
| + } |
| + return (ImageView) item.findViewById(R.id.icon); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testAddItemsWithNoIcons() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
|
juncai
2017/02/22 22:22:57
Question: why put these lines of code into a {}? I
ortuno
2017/02/28 01:42:48
Android sometimes reuses views so we need to retri
|
| + // Add item 1 with no icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.GONE, icon1.getVisibility()); |
| + assertEquals(null, icon1.getDrawable()); |
| + } |
| + |
| + { |
| + // Add item 2 with no icon. |
| + mChooserDialog.addOrUpdateItem("key2", "desc2"); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + assertEquals(View.GONE, icon2.getVisibility()); |
| + assertEquals(null, icon2.getDrawable()); |
| + } |
| + |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testAddItemsWithIcons() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Add item 1 with no icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + assertEquals(mTestDrawableDescription1, icon1.getContentDescription()); |
| + } |
| + |
| + { |
| + // Add item 2 with no icon. |
| + mChooserDialog.addOrUpdateItem("key2", "desc2", mTestIcon2); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + assertEquals(mTestDrawableDescription1, icon1.getContentDescription()); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + assertEquals(View.VISIBLE, icon2.getVisibility()); |
| + assertEquals(mTestDrawable2, icon2.getDrawable()); |
| + assertEquals(mTestDrawableDescription2, icon2.getContentDescription()); |
| + } |
| + |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testAddItemWithIconAfterItemWithNoIcon() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Add item 1 with no icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.GONE, icon1.getVisibility()); |
| + assertEquals(null, icon1.getDrawable()); |
| + } |
| + |
| + { |
| + // Add item 2 with icon. |
| + mChooserDialog.addOrUpdateItem("key2", "desc2", mTestIcon2); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + assertEquals(View.INVISIBLE, icon1.getVisibility()); |
| + assertEquals(View.VISIBLE, icon2.getVisibility()); |
| + assertEquals(mTestDrawable2, icon2.getDrawable()); |
| + } |
| + |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testAddItemWithNoIconAfterItemWithIcon() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Add item 1 with icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + } |
| + |
| + { |
| + // Add item 2 with no icon. |
| + mChooserDialog.addOrUpdateItem("key2", "desc2"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + assertEquals(View.INVISIBLE, icon2.getVisibility()); |
| + } |
| + |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testRemoveItemWithIconNoItemsWithIconsLeft() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Add item 1 with icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + } |
| + { |
| + // Add item 2 with no icon. |
| + mChooserDialog.addOrUpdateItem("key2", "desc2"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(View.INVISIBLE, icon2.getVisibility()); |
| + } |
| + { |
| + // Remove item 1 with icon. No items with icons left. |
| + mChooserDialog.removeItemFromList("key1"); |
| + ImageView icon2 = getIconImageView(items, 0); |
| + assertEquals(View.GONE, icon2.getVisibility()); |
| + } |
| + |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testRemoveItemWithIconOneItemWithIconLeft() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + { |
| + // Add item 1 with icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + } |
| + { |
| + // Add item 2 with icon. |
| + mChooserDialog.addOrUpdateItem("key2", "desc2", mTestIcon2); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(View.VISIBLE, icon2.getVisibility()); |
| + } |
| + { |
| + // Add item 3 with no icon. |
| + mChooserDialog.addOrUpdateItem("key3", "desc3"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + ImageView icon2 = getIconImageView(items, 1); |
| + ImageView icon3 = getIconImageView(items, 2); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(View.VISIBLE, icon2.getVisibility()); |
| + assertEquals(View.INVISIBLE, icon3.getVisibility()); |
| + } |
| + { |
| + mChooserDialog.removeItemFromList("key1"); |
| + ImageView icon2 = getIconImageView(items, 0); |
| + ImageView icon3 = getIconImageView(items, 1); |
| + assertEquals(View.VISIBLE, icon2.getVisibility()); |
| + assertEquals(mTestDrawable2, icon2.getDrawable()); |
| + assertEquals(View.INVISIBLE, icon3.getVisibility()); |
| + } |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testUpdateItemWithIconToNoIcon() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Add item 1 with icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawableDescription1, icon1.getContentDescription()); |
| + assertTrue(itemAdapter.getItem(0).hasSameContents("key1", "desc1", mTestIcon1)); |
| + } |
| + { |
| + // Update item 1 to no icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.GONE, icon1.getVisibility()); |
| + assertEquals(null, icon1.getContentDescription()); |
| + assertTrue(itemAdapter.getItem(0).hasSameContents("key1", "desc1", null)); |
| + } |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testUpdateItemWithNoIconToIcon() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Add item 1 to no icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1"); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.GONE, icon1.getVisibility()); |
| + assertTrue(itemAdapter.getItem(0).hasSameContents("key1", "desc1")); |
| + } |
| + { |
| + // Update item 1 with icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + assertEquals(mTestDrawableDescription1, icon1.getContentDescription()); |
| + assertTrue(itemAdapter.getItem(0).hasSameContents("key1", "desc1", mTestIcon1)); |
| + } |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| + @LargeTest |
| + @UiThreadTest |
| + public void testUpdateItemIcon() throws InterruptedException { |
| + Dialog dialog = mChooserDialog.getDialogForTesting(); |
| + assertTrue(dialog.isShowing()); |
| + |
| + ItemChooserDialog.ItemAdapter itemAdapter = mChooserDialog.getItemAdapterForTesting(); |
| + final ListView items = (ListView) dialog.findViewById(R.id.items); |
| + |
| + // Initially the itemAdapter is empty. |
| + assertTrue(itemAdapter.isEmpty()); |
| + |
| + { |
| + // Update item 1 with icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon1); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable1, icon1.getDrawable()); |
| + assertEquals(mTestDrawableDescription1, icon1.getContentDescription()); |
| + assertTrue(itemAdapter.getItem(0).hasSameContents("key1", "desc1", mTestIcon1)); |
| + } |
| + { |
| + // Update item 1 with different icon. |
| + mChooserDialog.addOrUpdateItem("key1", "desc1", mTestIcon2); |
| + ImageView icon1 = getIconImageView(items, 0); |
| + assertEquals(View.VISIBLE, icon1.getVisibility()); |
| + assertEquals(mTestDrawable2, icon1.getDrawable()); |
| + assertEquals(mTestDrawableDescription2, icon1.getContentDescription()); |
| + assertTrue(itemAdapter.getItem(0).hasSameContents("key1", "desc1", mTestIcon2)); |
| + } |
| + mChooserDialog.setIdleState(); |
| + mChooserDialog.dismiss(); |
| + } |
| + |
| @LargeTest |
| public void testSimpleItemSelection() { |
| Dialog dialog = mChooserDialog.getDialogForTesting(); |