Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3989)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java

Issue 2670863004: 🏠 Add instrumentation test for Suggestions BottomSheet (Closed)
Patch Set: Wait for recyclerview to stabilise and check view type Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698