| Index: chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java
|
| index 1e7295538e9e12ee3f76e6e74fb054c288e1b42c..c03d9986576799d5b6515f8399734447e49f6641 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java
|
| @@ -10,7 +10,6 @@
|
| import android.view.View;
|
|
|
| import org.chromium.base.ThreadUtils;
|
| -import org.chromium.base.test.util.CallbackHelper;
|
| import org.chromium.base.test.util.CommandLineFlags;
|
| import org.chromium.base.test.util.Feature;
|
| import org.chromium.base.test.util.RetryOnFailure;
|
| @@ -23,7 +22,6 @@
|
| import org.chromium.chrome.browser.ntp.NewTabPageView;
|
| import org.chromium.chrome.browser.ntp.snippets.CategoryStatus;
|
| import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsCardLayout;
|
| -import org.chromium.chrome.browser.ntp.snippets.FakeSuggestionsSource;
|
| import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
|
| import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
|
| import org.chromium.chrome.browser.suggestions.TileGroupDelegateImpl;
|
| @@ -31,8 +29,8 @@
|
| import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
|
| import org.chromium.chrome.test.util.ChromeTabUtils;
|
| import org.chromium.chrome.test.util.NewTabPageTestUtils;
|
| -import org.chromium.content.browser.test.util.Criteria;
|
| -import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils;
|
| +import org.chromium.chrome.test.util.browser.suggestions.FakeSuggestionsSource;
|
| import org.chromium.content.browser.test.util.TestTouchUtils;
|
| import org.chromium.net.test.EmbeddedTestServer;
|
|
|
| @@ -156,7 +154,7 @@ public void testAllDismissed() throws InterruptedException, TimeoutException {
|
| assertTrue(allDismissedPosition != RecyclerView.NO_POSITION);
|
| View allDismissedView = getViewHolderAtPosition(allDismissedPosition).itemView;
|
| singleClickView(allDismissedView.findViewById(R.id.action_button));
|
| - waitForViewToDetach(allDismissedView);
|
| + RecyclerViewTestUtils.waitForViewToDetach(getRecyclerView(), allDismissedView);
|
| assertEquals(1, mSource.getCategories().length);
|
| assertEquals(KnownCategories.ARTICLES, mSource.getCategories()[0]);
|
| }
|
| @@ -176,7 +174,7 @@ public void testDismissArticleWithContextMenu() throws InterruptedException, Tim
|
|
|
| // Dismiss the suggestion using the context menu.
|
| invokeContextMenu(suggestionView, ContextMenuManager.ID_REMOVE);
|
| - waitForViewToDetach(suggestionView);
|
| + RecyclerViewTestUtils.waitForViewToDetach(getRecyclerView(), suggestionView);
|
|
|
| suggestions = mSource.getSuggestionsForCategory(KnownCategories.ARTICLES);
|
| assertEquals(9, suggestions.size());
|
| @@ -198,7 +196,7 @@ public void testDismissStatusCardWithContextMenu()
|
|
|
| // Dismiss the status card using the context menu.
|
| invokeContextMenu(statusCardView, ContextMenuManager.ID_REMOVE);
|
| - waitForViewToDetach(statusCardView);
|
| + RecyclerViewTestUtils.waitForViewToDetach(getRecyclerView(), statusCardView);
|
|
|
| assertArrayEquals(new int[0], mSource.getCategories());
|
| }
|
| @@ -218,7 +216,7 @@ public void testDismissActionItemWithContextMenu()
|
|
|
| // Dismiss the action item using the context menu.
|
| invokeContextMenu(actionItemView, ContextMenuManager.ID_REMOVE);
|
| - waitForViewToDetach(actionItemView);
|
| + RecyclerViewTestUtils.waitForViewToDetach(getRecyclerView(), actionItemView);
|
|
|
| assertArrayEquals(new int[0], mSource.getCategories());
|
| }
|
| @@ -261,7 +259,7 @@ public void run() {
|
| R.dimen.tab_strip_height));
|
| }
|
| });
|
| - return waitForView(position);
|
| + return RecyclerViewTestUtils.waitForView(getRecyclerView(), position);
|
| }
|
|
|
| /**
|
| @@ -279,7 +277,7 @@ public void run() {
|
| getRecyclerView().dismissItemWithAnimation(viewHolder);
|
| }
|
| });
|
| - waitForViewToDetach(viewHolder.itemView);
|
| + RecyclerViewTestUtils.waitForViewToDetach(getRecyclerView(), (viewHolder.itemView));
|
| }
|
|
|
| private void setSuggestionsAndWaitForUpdate(final int suggestionsCount) {
|
| @@ -293,7 +291,7 @@ public void run() {
|
| KnownCategories.ARTICLES, buildSuggestions(suggestionsCount));
|
| }
|
| });
|
| - waitForStableRecyclerView();
|
| + RecyclerViewTestUtils.waitForStableRecyclerView(getRecyclerView());
|
| }
|
|
|
| private List<SnippetArticle> buildSuggestions(int suggestionsCount) {
|
| @@ -312,81 +310,6 @@ private void invokeContextMenu(View view, int contextMenuItemId) {
|
| getInstrumentation().invokeContextMenuAction(getActivity(), contextMenuItemId, 0));
|
| }
|
|
|
| - private ViewHolder waitForView(final int position) {
|
| - final NewTabPageRecyclerView recyclerView = getRecyclerView();
|
| -
|
| - CriteriaHelper.pollUiThread(new Criteria() {
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);
|
| -
|
| - if (viewHolder == null) {
|
| - updateFailureReason("Cannot find view holder for position " + position + ".");
|
| - return false;
|
| - }
|
| -
|
| - if (viewHolder.itemView.getParent() == null) {
|
| - updateFailureReason("The view is not attached for position " + position + ".");
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| - }
|
| - });
|
| -
|
| - waitForStableRecyclerView();
|
| -
|
| - return recyclerView.findViewHolderForAdapterPosition(position);
|
| - }
|
| -
|
| - private void waitForViewToDetach(final View view)
|
| - throws InterruptedException, TimeoutException {
|
| - final RecyclerView recyclerView = getRecyclerView();
|
| - final CallbackHelper callback = new CallbackHelper();
|
| -
|
| - recyclerView.addOnChildAttachStateChangeListener(
|
| - new RecyclerView.OnChildAttachStateChangeListener() {
|
| - @Override
|
| - public void onChildViewAttachedToWindow(View view) {}
|
| -
|
| - @Override
|
| - public void onChildViewDetachedFromWindow(View detachedView) {
|
| - if (detachedView == view) {
|
| - recyclerView.removeOnChildAttachStateChangeListener(this);
|
| - callback.notifyCalled();
|
| - }
|
| - }
|
| - });
|
| - callback.waitForCallback("The view did not detach.", 0);
|
| -
|
| - waitForStableRecyclerView();
|
| - }
|
| -
|
| - private void waitForStableRecyclerView() {
|
| - final RecyclerView recyclerView = getRecyclerView();
|
| -
|
| - CriteriaHelper.pollUiThread(new Criteria() {
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - if (recyclerView.isComputingLayout()) {
|
| - updateFailureReason("The recycler view is computing layout.");
|
| - return false;
|
| - }
|
| -
|
| - if (recyclerView.isLayoutFrozen()) {
|
| - updateFailureReason("The recycler view layout is frozen.");
|
| - return false;
|
| - }
|
| -
|
| - if (recyclerView.isAnimating()) {
|
| - updateFailureReason("The recycler view is animating.");
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| - }
|
| - });
|
| - }
|
|
|
| private static void assertArrayEquals(int[] expected, int[] actual) {
|
| assertEquals(Arrays.toString(expected), Arrays.toString(actual));
|
|
|