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

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java

Issue 2360813004: 📰 Stop refreshing the whole NTP for every adapter change (Closed)
Patch Set: rebase again -_- Created 4 years, 3 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/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
index 568856d2c9fbbcc7740e85141ab0cea91ee5a4ae..8bb9a13e3d69ab3c5c2235b58f276fb6d3297f86 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
@@ -5,13 +5,18 @@
package org.chromium.chrome.browser.ntp.cards;
import static org.chromium.base.test.util.Matchers.greaterThanOrEqualTo;
+import static org.chromium.chrome.browser.ntp.cards.ContentSuggestionsTestUtils.createDummySuggestions;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import android.support.annotation.Nullable;
import android.view.ContextMenu;
@@ -212,7 +217,7 @@ public void setUp() {
mSource.setInfoForCategory(KnownCategories.ARTICLES,
new SuggestionsCategoryInfo("Articles for you",
ContentSuggestionsCardLayout.FULL_CARD, false, true));
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null);
}
/**
@@ -405,20 +410,20 @@ public void testSectionClearingWhenUnavailable() {
assertItemsFor();
// Same when loading a new NTP.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null);
assertItemsFor();
// Same for CATEGORY_EXPLICITLY_DISABLED.
mSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.AVAILABLE);
mSource.setSuggestionsForCategory(KnownCategories.ARTICLES, snippets);
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null);
assertItemsFor(section(5));
mSource.setStatusForCategory(
KnownCategories.ARTICLES, CategoryStatus.CATEGORY_EXPLICITLY_DISABLED);
assertItemsFor();
// Same when loading a new NTP.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null);
assertItemsFor();
}
@@ -439,7 +444,7 @@ public void testUIUntouchedWhenNotProvided() {
assertItemsFor(section(4));
// But it disappears when loading a new NTP.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null);
assertItemsFor();
}
@@ -461,7 +466,8 @@ public void testSectionVisibleIfEmpty() {
"", ContentSuggestionsCardLayout.MINIMAL_CARD, false, true));
// 1.1 - Initial state
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
assertItemsFor(sectionWithStatusCard());
// 1.2 - With suggestions
@@ -486,7 +492,8 @@ public void testSectionVisibleIfEmpty() {
"", ContentSuggestionsCardLayout.MINIMAL_CARD, false, false));
// 2.1 - Initial state
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
assertItemsFor();
// 2.2 - With suggestions
@@ -518,7 +525,8 @@ public void testMoreButton() {
"", ContentSuggestionsCardLayout.MINIMAL_CARD, true, true));
// 1.1 - Initial state.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
assertItemsFor(sectionWithStatusCardAndMoreButton());
// 1.2 - With suggestions.
@@ -543,7 +551,8 @@ public void testMoreButton() {
"", ContentSuggestionsCardLayout.MINIMAL_CARD, false, true));
// 2.1 - Initial state.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
assertItemsFor(sectionWithStatusCard());
// 2.2 - With suggestions.
@@ -603,7 +612,8 @@ public void testDynamicCategories() {
ContentSuggestionsCardLayout.MINIMAL_CARD, true, false));
mSource.setStatusForCategory(dynamicCategory1, CategoryStatus.AVAILABLE);
mSource.setSuggestionsForCategory(dynamicCategory1, dynamics1);
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null); // Reload
+ mAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null); // Reload
assertItemsFor(section(3), sectionWithMoreButton(5));
int dynamicCategory2 = 1011;
@@ -613,7 +623,8 @@ public void testDynamicCategories() {
ContentSuggestionsCardLayout.MINIMAL_CARD, false, false));
mSource.setStatusForCategory(dynamicCategory2, CategoryStatus.AVAILABLE);
mSource.setSuggestionsForCategory(dynamicCategory2, dynamics2);
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null); // Reload
+ mAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(mSource), null, null); // Reload
assertItemsFor(section(3), sectionWithMoreButton(5), section(11));
}
@@ -629,8 +640,8 @@ public void testCategoryOrder() {
registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES, 0);
registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0);
- NewTabPageAdapter ntpAdapter = new NewTabPageAdapter(
- new MockNewTabPageManager(suggestionsSource), null, null);
+ NewTabPageAdapter ntpAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
List<ItemGroup> groups = ntpAdapter.getGroups();
assertEquals(7, groups.size());
@@ -651,8 +662,8 @@ public void testCategoryOrder() {
registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0);
registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0);
- ntpAdapter = new NewTabPageAdapter(
- new MockNewTabPageManager(suggestionsSource), null, null);
+ ntpAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
groups = ntpAdapter.getGroups();
assertEquals(7, groups.size());
@@ -672,8 +683,8 @@ public void testCategoryOrder() {
registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES, 0);
registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0);
- ntpAdapter = new NewTabPageAdapter(
- new MockNewTabPageManager(suggestionsSource), null, null);
+ ntpAdapter =
+ NewTabPageAdapter.create(new MockNewTabPageManager(suggestionsSource), null, null);
// The adapter is already initialised, it will not accept new categories anymore.
registerCategory(suggestionsSource, 42, 1);
@@ -693,53 +704,68 @@ public void testCategoryOrder() {
@Test
@Feature({"Ntp"})
- public void testDismissSibling() {
- List<SnippetArticle> snippets = createDummySuggestions(3);
- SuggestionsSection section;
-
- // Part 1: ShowMoreButton = true
- section = new SuggestionsSection(42,
- new SuggestionsCategoryInfo("", ContentSuggestionsCardLayout.FULL_CARD, true, true),
- null);
- section.setStatus(CategoryStatus.AVAILABLE);
- assertNotNull(section.getActionItem());
-
- // 1.1: Without snippets
- assertEquals(-1, section.getDismissSiblingPosDelta(section.getActionItem()));
- assertEquals(1, section.getDismissSiblingPosDelta(section.getStatusItem()));
-
- // 1.2: With snippets
- section.setSuggestions(snippets, CategoryStatus.AVAILABLE);
- assertEquals(0, section.getDismissSiblingPosDelta(section.getActionItem()));
- assertEquals(0, section.getDismissSiblingPosDelta(section.getStatusItem()));
- assertEquals(0, section.getDismissSiblingPosDelta(snippets.get(0)));
-
- // Part 2: ShowMoreButton = false
- section = new SuggestionsSection(42,
- new SuggestionsCategoryInfo("", ContentSuggestionsCardLayout.FULL_CARD, false,
- true),
- null);
- section.setStatus(CategoryStatus.AVAILABLE);
- assertNull(section.getActionItem());
-
- // 2.1: Without snippets
- assertEquals(0, section.getDismissSiblingPosDelta(section.getStatusItem()));
-
- // 2.2: With snippets
- section.setSuggestions(snippets, CategoryStatus.AVAILABLE);
- assertEquals(0, section.getDismissSiblingPosDelta(section.getStatusItem()));
- assertEquals(0, section.getDismissSiblingPosDelta(snippets.get(0)));
- }
-
- private List<SnippetArticle> createDummySuggestions(int count) {
- List<SnippetArticle> suggestions = new ArrayList<>();
- for (int index = 0; index < count; index++) {
- suggestions.add(new SnippetArticle(0, "https://site.com/url" + index, "title" + index,
- "pub" + index, "txt" + index, "https://site.com/url" + index,
- "https://amp.site.com/url" + index, 0, 0, 0,
- ContentSuggestionsCardLayout.FULL_CARD));
- }
- return suggestions;
+ public void testChangeNotifications() {
+ FakeSuggestionsSource suggestionsSource = spy(new FakeSuggestionsSource());
+ // Allow using dismissSuggestion() instead of throwing UnsupportedOperationException.
+ doNothing().when(suggestionsSource).dismissSuggestion(any(SnippetArticle.class));
+
+ registerCategory(suggestionsSource, KnownCategories.ARTICLES, 3);
+ NewTabPageAdapter adapter = spy(
+ new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null));
+ adapter.initializeSections();
+ doNothing().when(adapter).announceItemRemoved(anyString());
+
+ // Adapter content:
+ // Idx | Item
+ // ----|----------------
+ // 0 | Above-the-fold
+ // 1 | Header
+ // 2-4 | Sugg*3
+ // 5 | Footer
+ // 6 | Spacer
+
+ adapter.dismissItem(3); // Dismiss the second suggestion of the second section.
+ verify(adapter).notifyItemRemoved(3);
+
+ // Make sure the call with the updated position works properly.
+ adapter.dismissItem(3);
+ verify(adapter, times(2)).notifyItemRemoved(3);
+
+ // Dismiss the last suggestion in the section. We should now show the status card.
+ adapter.dismissItem(2);
+ verify(adapter).notifyItemRemoved(2);
+ verify(adapter).notifyItemInserted(2);
+ verify(adapter).notifyItemInserted(3);
+
+ // Adapter content:
+ // Idx | Item
+ // ----|----------------
+ // 0 | Above-the-fold
+ // 1 | Header
+ // 2 | Status
+ // 3 | Progress Indicator
+ // 4 | Footer
+ // 5 | Spacer
+
+ final int newSuggestionCount = 7;
+ suggestionsSource.setSuggestionsForCategory(
+ KnownCategories.ARTICLES, createDummySuggestions(newSuggestionCount));
+ adapter.onNewSuggestions(KnownCategories.ARTICLES);
+ verify(adapter).notifyItemRangeChanged(2, 2); // status and progress replaced by articles.
+ verify(adapter).notifyItemRangeInserted(4, newSuggestionCount - 2);
+
+ // Adapter content:
+ // Idx | Item
+ // ----|----------------
+ // 0 | Above-the-fold
+ // 1 | Header
+ // 2-8 | Sugg*7
+ // 9 | Footer
+ // 10 | Spacer
+
+ adapter.onCategoryStatusChanged(KnownCategories.ARTICLES, CategoryStatus.SIGNED_OUT);
+ verify(adapter, times(2)).notifyItemRangeChanged(2, 2);
+ verify(adapter).notifyItemRangeRemoved(4, newSuggestionCount - 2);
}
/** Registers the category with hasMoreButton=false and showIfEmpty=true*/
@@ -921,5 +947,9 @@ public void onLearnMoreClicked() {
public void closeContextMenu() {
throw new UnsupportedAddressTypeException();
}
+
+ public void setSuggestionsSource(SuggestionsSource suggestionsSource) {
+ mSuggestionsSource = suggestionsSource;
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698