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 54a9e3f89cada683e3e8b25c15aac094fb854a13..10c0d35434903ee4d5d6fef620791a5c51ae2ae0 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 |
@@ -34,14 +34,12 @@ |
import java.util.List; |
import java.util.Map; |
import java.util.Set; |
- |
/** |
* Unit tests for {@link NewTabPageAdapter}. |
*/ |
@RunWith(LocalRobolectricTestRunner.class) |
@Config(manifest = Config.NONE) |
public class NewTabPageAdapterTest { |
- |
private static class FakeSnippetsSource implements SuggestionsSource { |
private SuggestionsSource.Observer mObserver; |
private final Map<Integer, List<SnippetArticle>> mSuggestions = new HashMap<>(); |
@@ -178,6 +176,23 @@ private int sectionWithStatusCard() { |
return 3; // Header, status card and progress indicator. |
} |
+ /** |
+ * To be used with {@link #assertItemsFor(int...)}, for a section that is hidden. |
+ * @return The number of items that should be used by the adapter to represent this section. |
+ */ |
+ private int sectionHidden() { |
+ return 0; // The section returns no items. |
+ } |
+ |
+ /** |
+ * To be used with {@link #assertItemsFor(int...)}, for a section with button that has no |
+ * suggestions and instead displays a status card. |
+ * @return The number of items that should be used by the adapter to represent this section. |
+ */ |
+ private int sectionWithStatusCardAndMoreButton() { |
+ return 4; // Header, status card, More button, progress indicator. |
+ } |
+ |
@Before |
public void setUp() { |
RecordHistogram.disableForTests(); |
@@ -185,8 +200,9 @@ public void setUp() { |
mSnippetsSource = new FakeSnippetsSource(); |
mSnippetsSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.INITIALIZING); |
mSnippetsSource.setInfoForCategory( |
- KnownCategories.ARTICLES, new SuggestionsCategoryInfo("Articles for you", |
- ContentSuggestionsCardLayout.FULL_CARD, false)); |
+ KnownCategories.ARTICLES, |
+ new SuggestionsCategoryInfo( |
+ "Articles for you", ContentSuggestionsCardLayout.FULL_CARD, false, true)); |
mNtpAdapter = new NewTabPageAdapter(null, null, mSnippetsSource, null); |
} |
@@ -415,6 +431,63 @@ 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()); |
+ assertItemsFor(sectionWithStatusCard()); |
+ |
+ // Make sure we show the articles when we load them. |
+ List<SnippetArticle> articles = createDummySnippets(3); |
+ mSnippetsSource.setSuggestionsForCategory(KnownCategories.ARTICLES, 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)); |
+ section.dismissSuggestion(articles.get(0)); |
+ section.dismissSuggestion(articles.get(1)); |
+ section.dismissSuggestion(articles.get(2)); |
+ assertItemsFor(sectionWithStatusCard()); |
+ |
+ // Part 2: Test BOOKMARKS. |
+ |
+ // 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()); |
+ |
+ // When we get some, make sure we show the button. |
+ mSnippetsSource.setSuggestionsForCategory(KnownCategories.BOOKMARKS, articles); |
+ assertItemsFor(sectionWithMoreButton(3), sectionWithStatusCard()); |
+ |
+ // 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.dismissSuggestion(articles.get(0)); |
+ section.dismissSuggestion(articles.get(1)); |
+ section.dismissSuggestion(articles.get(2)); |
+ assertItemsFor(sectionWithStatusCardAndMoreButton(), sectionWithStatusCard()); |
+ } |
+ |
@Test |
@Feature({"Ntp"}) |
public void testMoreButton() { |
@@ -426,7 +499,7 @@ public void testMoreButton() { |
List<SnippetArticle> bookmarks = createDummySnippets(10); |
mSnippetsSource.setInfoForCategory(KnownCategories.BOOKMARKS, |
new SuggestionsCategoryInfo("Bookmarks", ContentSuggestionsCardLayout.MINIMAL_CARD, |
- true)); |
+ true, false)); |
mSnippetsSource.setStatusForCategory(KnownCategories.BOOKMARKS, CategoryStatus.AVAILABLE); |
mSnippetsSource.setSuggestionsForCategory(KnownCategories.BOOKMARKS, bookmarks); |
assertItemsFor(sectionWithMoreButton(10), section(3)); |