| 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();
|
| + }
|
| }
|
|
|