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

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

Issue 2274293002: 📰 Keep Suggestion sections in declaration order (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix render test Created 4 years, 4 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
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d1db744501ebe5a6cdc26accfe965b85a7afc742..47fadbc0fcad933dab1e5faef3cf01433e60ea9b 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
@@ -11,6 +11,7 @@
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.ntp.snippets.CategoryInt;
import org.chromium.chrome.browser.ntp.snippets.CategoryStatus;
import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsCardLayout;
import org.chromium.chrome.browser.ntp.snippets.FakeSuggestionsSource;
@@ -318,6 +319,7 @@ public void testSectionClearingWhenUnavailable() {
// Same for CATEGORY_EXPLICITLY_DISABLED.
mSnippetsSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.AVAILABLE);
mSnippetsSource.setSuggestionsForCategory(KnownCategories.ARTICLES, snippets);
+ mNtpAdapter = new NewTabPageAdapter(null, null, mSnippetsSource, null);
assertItemsFor(section(5));
mSnippetsSource.setStatusForCategory(
KnownCategories.ARTICLES, CategoryStatus.CATEGORY_EXPLICITLY_DISABLED);
@@ -349,61 +351,57 @@ public void testUIUntouchedWhenNotProvided() {
assertItemsFor();
}
- // TODO(dgn): Properly make this a test based on handling different CategoryInfo when we
- // stop hardcoding things in sections.
@Test
@Feature({"Ntp"})
- public void testSectionVisibility() {
- mSnippetsSource.setStatusForCategory(
- KnownCategories.BOOKMARKS, CategoryStatus.INITIALIZING);
- mSnippetsSource.setInfoForCategory(
- KnownCategories.BOOKMARKS,
- new SuggestionsCategoryInfo("Recent bookmarks",
- ContentSuggestionsCardLayout.MINIMAL_CARD, true, false));
-
- // Part 1: Test ARTICLES.
-
- // The |ARTICLES| section should be shown even if we don't receive any suggestion for it.
- mSnippetsSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.AVAILABLE);
- mSnippetsSource.setSuggestionsForCategory(
- KnownCategories.ARTICLES, Collections.<SnippetArticle>emptyList());
+ public void testSectionVisibleIfEmpty() {
+ final int category = 42;
+ final int sectionIdx = 1; // section 0 is the above-the-fold item, we test the one after.
+ final List<SnippetArticle> articles = Collections.unmodifiableList(createDummySnippets(3));
+ FakeSuggestionsSource suggestionsSource;
+ SuggestionsSection section;
+
+ // Part 1: VisibleIfEmpty = true
+ suggestionsSource = new FakeSuggestionsSource();
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALIZING);
+ suggestionsSource.setInfoForCategory(
+ category, new SuggestionsCategoryInfo(
+ "", ContentSuggestionsCardLayout.MINIMAL_CARD, false, true));
+
+ // 1.1 - Initial state
+ mNtpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
assertItemsFor(sectionWithStatusCard());
- // Make sure we show the articles when we load them.
- List<SnippetArticle> articles = createDummySnippets(3);
- mSnippetsSource.setSuggestionsForCategory(KnownCategories.ARTICLES, articles);
+ // 1.2 - With suggestions
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABLE);
+ suggestionsSource.setSuggestionsForCategory(category, articles);
assertItemsFor(section(3));
- // When we dismiss them, we should have the status card coming back.
- int indexOfFirstItemOfArticlesGroup = 1;
- SuggestionsSection section =
- (SuggestionsSection) mNtpAdapter.getGroup(indexOfFirstItemOfArticlesGroup);
- assertEquals(section.getItems().size(), section(3));
+ // 1.3 - When all suggestions are dismissed
+ assertEquals(SuggestionsSection.class, mNtpAdapter.getGroups().get(sectionIdx).getClass());
+ section = (SuggestionsSection) mNtpAdapter.getGroups().get(sectionIdx);
+ assertEquals(section(3), section.getItems().size());
section.removeSuggestion(articles.get(0));
section.removeSuggestion(articles.get(1));
section.removeSuggestion(articles.get(2));
assertItemsFor(sectionWithStatusCard());
- // Part 2: Test BOOKMARKS.
+ // Part 2: VisibleIfEmpty = false
+ suggestionsSource = new FakeSuggestionsSource();
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALIZING);
+ suggestionsSource.setInfoForCategory(
+ category, new SuggestionsCategoryInfo(
+ "", ContentSuggestionsCardLayout.MINIMAL_CARD, false, false));
- // The |BOOKMARKS| section should not be shown if we don't receive any suggestion for it.
- mSnippetsSource.setStatusForCategory(KnownCategories.BOOKMARKS, CategoryStatus.AVAILABLE);
- mSnippetsSource.setSuggestionsForCategory(
- KnownCategories.BOOKMARKS, Collections.<SnippetArticle>emptyList());
- assertItemsFor(sectionHidden(), sectionWithStatusCard());
+ // 2.1 - Initial state
+ mNtpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
+ assertItemsFor();
- // When we get some, make sure we show the button.
- mSnippetsSource.setSuggestionsForCategory(KnownCategories.BOOKMARKS, articles);
- assertItemsFor(sectionWithMoreButton(3), sectionWithStatusCard());
+ // 2.2 - With suggestions
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABLE);
+ suggestionsSource.setSuggestionsForCategory(category, articles);
+ assertItemsFor();
- // When we dismiss snippets, we should still keep the button.
- int indexOfFirstItemOfBookmarksGroup = 3;
- section = (SuggestionsSection) mNtpAdapter.getGroup(indexOfFirstItemOfBookmarksGroup);
- assertEquals(section.getItems().size(), sectionWithMoreButton(3));
- section.removeSuggestion(articles.get(0));
- section.removeSuggestion(articles.get(1));
- section.removeSuggestion(articles.get(2));
- assertItemsFor(sectionWithStatusCardAndMoreButton(), sectionWithStatusCard());
+ // 2.3 - When all suggestions are dismissed - N/A, suggestions don't get added.
}
/**
@@ -412,18 +410,61 @@ public void testSectionVisibility() {
@Test
@Feature({"Ntp"})
public void testMoreButton() {
- List<SnippetArticle> articles = createDummySnippets(3);
- mSnippetsSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.AVAILABLE);
- mSnippetsSource.setSuggestionsForCategory(KnownCategories.ARTICLES, articles);
+ final int category = 42;
+ final int sectionIdx = 1; // section 0 is the above the fold, we test the one after.
+ final List<SnippetArticle> articles = Collections.unmodifiableList(createDummySnippets(3));
+ FakeSuggestionsSource suggestionsSource;
+ SuggestionsSection section;
+
+ // Part 1: ShowMoreButton = true
+ suggestionsSource = new FakeSuggestionsSource();
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALIZING);
+ suggestionsSource.setInfoForCategory(
+ category, new SuggestionsCategoryInfo(
+ "", ContentSuggestionsCardLayout.MINIMAL_CARD, true, true));
+
+ // 1.1 - Initial state.
+ mNtpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
+ assertItemsFor(sectionWithStatusCardAndMoreButton());
+
+ // 1.2 - With suggestions.
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABLE);
+ suggestionsSource.setSuggestionsForCategory(category, articles);
+ assertItemsFor(sectionWithMoreButton(3));
+
+ // 1.3 - When all suggestions are dismissed.
+ assertEquals(SuggestionsSection.class, mNtpAdapter.getGroups().get(sectionIdx).getClass());
+ section = (SuggestionsSection) mNtpAdapter.getGroups().get(sectionIdx);
+ assertEquals(sectionWithMoreButton(3), section.getItems().size());
+ section.removeSuggestion(articles.get(0));
+ section.removeSuggestion(articles.get(1));
+ section.removeSuggestion(articles.get(2));
+ assertItemsFor(sectionWithStatusCardAndMoreButton());
+
+ // Part 1: ShowMoreButton = false
+ suggestionsSource = new FakeSuggestionsSource();
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALIZING);
+ suggestionsSource.setInfoForCategory(
+ category, new SuggestionsCategoryInfo(
+ "", ContentSuggestionsCardLayout.MINIMAL_CARD, false, true));
+
+ // 2.1 - Initial state.
+ mNtpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
+ assertItemsFor(sectionWithStatusCard());
+
+ // 2.2 - With suggestions.
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABLE);
+ suggestionsSource.setSuggestionsForCategory(category, articles);
assertItemsFor(section(3));
- List<SnippetArticle> bookmarks = createDummySnippets(10);
- mSnippetsSource.setInfoForCategory(KnownCategories.BOOKMARKS,
- new SuggestionsCategoryInfo("Bookmarks", ContentSuggestionsCardLayout.MINIMAL_CARD,
- true, false));
- mSnippetsSource.setStatusForCategory(KnownCategories.BOOKMARKS, CategoryStatus.AVAILABLE);
- mSnippetsSource.setSuggestionsForCategory(KnownCategories.BOOKMARKS, bookmarks);
- assertItemsFor(sectionWithMoreButton(10), section(3));
+ // 2.3 - When all suggestions are dismissed.
+ assertEquals(SuggestionsSection.class, mNtpAdapter.getGroups().get(sectionIdx).getClass());
+ section = (SuggestionsSection) mNtpAdapter.getGroups().get(sectionIdx);
+ assertEquals(section(3), section.getItems().size());
+ section.removeSuggestion(articles.get(0));
+ section.removeSuggestion(articles.get(1));
+ section.removeSuggestion(articles.get(2));
+ assertItemsFor(sectionWithStatusCard());
}
/**
@@ -443,6 +484,77 @@ public void testSuggestionInvalidated() {
assertEquals(articles, mNtpAdapter.getItems().subList(2, 4));
}
+ /**
+ * Tests that the order of the categories is kept.
+ */
+ @Test
+ @Feature({"Ntp"})
+ public void testCategoryOrder() {
+ FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource();
+ registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0);
+ registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0);
+ registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES, 0);
+ registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0);
+
+ NewTabPageAdapter ntpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
+ List<ItemGroup> groups = ntpAdapter.getGroups();
+
+ assertEquals(6, groups.size());
+ assertEquals(AboveTheFoldItem.class, groups.get(0).getClass());
+ assertEquals(SuggestionsSection.class, groups.get(1).getClass());
+ assertEquals(KnownCategories.ARTICLES, getCategory(groups.get(1)));
+ assertEquals(SuggestionsSection.class, groups.get(2).getClass());
+ assertEquals(KnownCategories.BOOKMARKS, getCategory(groups.get(2)));
+ assertEquals(SuggestionsSection.class, groups.get(3).getClass());
+ assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(groups.get(3)));
+ assertEquals(SuggestionsSection.class, groups.get(4).getClass());
+ assertEquals(KnownCategories.DOWNLOADS, getCategory(groups.get(4)));
+
+ // With a different order.
+ suggestionsSource = new FakeSuggestionsSource();
+ registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0);
+ registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES, 0);
+ registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0);
+ registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0);
+
+ ntpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
+ groups = ntpAdapter.getGroups();
+
+ assertEquals(6, groups.size());
+ assertEquals(AboveTheFoldItem.class, groups.get(0).getClass());
+ assertEquals(SuggestionsSection.class, groups.get(1).getClass());
+ assertEquals(KnownCategories.ARTICLES, getCategory(groups.get(1)));
+ assertEquals(SuggestionsSection.class, groups.get(2).getClass());
+ assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(groups.get(2)));
+ assertEquals(SuggestionsSection.class, groups.get(3).getClass());
+ assertEquals(KnownCategories.DOWNLOADS, getCategory(groups.get(3)));
+ assertEquals(SuggestionsSection.class, groups.get(4).getClass());
+ assertEquals(KnownCategories.BOOKMARKS, getCategory(groups.get(4)));
+
+ // With unknown categories.
+ suggestionsSource = new FakeSuggestionsSource();
+ registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0);
+ registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES, 0);
+ registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0);
+
+ ntpAdapter = new NewTabPageAdapter(null, null, suggestionsSource, null);
+
+ // The adapter is already initialised, it will not accept new categories anymore.
+ registerCategory(suggestionsSource, 42, 1);
+ registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 1);
+
+ groups = ntpAdapter.getGroups();
+
+ assertEquals(5, groups.size());
+ assertEquals(AboveTheFoldItem.class, groups.get(0).getClass());
+ assertEquals(SuggestionsSection.class, groups.get(1).getClass());
+ assertEquals(KnownCategories.ARTICLES, getCategory(groups.get(1)));
+ assertEquals(SuggestionsSection.class, groups.get(2).getClass());
+ assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(groups.get(2)));
+ assertEquals(SuggestionsSection.class, groups.get(3).getClass());
+ assertEquals(KnownCategories.DOWNLOADS, getCategory(groups.get(3)));
+ }
+
private List<SnippetArticle> createDummySnippets(int count) {
List<SnippetArticle> snippets = new ArrayList<>();
for (int index = 0; index < count; index++) {
@@ -453,4 +565,20 @@ public void testSuggestionInvalidated() {
}
return snippets;
}
+
+ /** Registers the category with hasMoreButton=false and showIfEmpty=true*/
+ private void registerCategory(FakeSuggestionsSource suggestionsSource,
+ @CategoryInt int category, int suggestionCount) {
+ // FakeSuggestionSource does not provide snippets if the category's status is not available.
+ suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABLE);
+ // Important: showIfEmpty flag to true.
+ suggestionsSource.setInfoForCategory(
+ category, new SuggestionsCategoryInfo(
+ "", ContentSuggestionsCardLayout.FULL_CARD, false, true));
+ suggestionsSource.setSuggestionsForCategory(category, createDummySnippets(suggestionCount));
+ }
+
+ private int getCategory(ItemGroup itemGroup) {
+ return ((SuggestionsSection) itemGroup).getCategory();
+ }
}
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698