Index: chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/SectionListTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/SectionListTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/SectionListTest.java |
index 452238ffd3a4d5c17d800c7f682cafb976718005..a477c2ca1c4de3d2833c688638a83bf3389f96a4 100644 |
--- a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/SectionListTest.java |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/SectionListTest.java |
@@ -85,12 +85,51 @@ public void testGetSuggestionRank() { |
SectionList sectionList = new SectionList(mNtpManager, mOfflinePageBridge); |
+ bindViewHolders(sectionList); |
+ |
assertThat(articles.get(0).getGlobalRank(), equalTo(0)); |
assertThat(articles.get(0).getPerSectionRank(), equalTo(0)); |
assertThat(articles.get(2).getGlobalRank(), equalTo(2)); |
assertThat(articles.get(2).getPerSectionRank(), equalTo(2)); |
assertThat(bookmarks.get(1).getGlobalRank(), equalTo(4)); |
assertThat(bookmarks.get(1).getPerSectionRank(), equalTo(1)); |
+ } |
+ |
+ @Test |
+ @Feature({"Ntp"}) |
+ public void testGetSuggestionRankWithChanges() { |
+ // Setup the section list the following way: |
+ // |
+ // Item type | local rank | global rank |
+ // -----------+------------+------------- |
+ // HEADER | | |
+ // ARTICLE | 0 | 0 |
+ // ARTICLE | 1 | 1 |
+ // ARTICLE | 2 | 2 |
+ // HEADER | | |
+ // STATUS | | |
+ // ACTION | 0 | |
+ // BOOKMARK | 0 | 3 |
+ // BOOKMARK | 1 | 4 |
+ // BOOKMARK | 2 | 5 |
+ // BOOKMARK | 3 | 6 |
+ List<SnippetArticle> articles = |
+ registerCategory(mSuggestionSource, KnownCategories.ARTICLES, 3); |
+ registerCategory(mSuggestionSource, KnownCategories.DOWNLOADS, 0); |
+ List<SnippetArticle> bookmarks = |
+ registerCategory(mSuggestionSource, KnownCategories.BOOKMARKS, 4); |
+ |
+ SectionList sectionList = new SectionList(mNtpManager, mOfflinePageBridge); |
+ |
+ bindViewHolders(sectionList, 0, 5); // Bind until after the third article. |
+ |
+ assertThat(articles.get(0).getGlobalRank(), equalTo(0)); |
+ assertThat(articles.get(0).getPerSectionRank(), equalTo(0)); |
+ assertThat(articles.get(2).getGlobalRank(), equalTo(2)); |
+ assertThat(articles.get(2).getPerSectionRank(), equalTo(2)); |
+ assertThat(bookmarks.get(1).getGlobalRank(), equalTo(-1)); // Not bound nor ranked yet. |
+ assertThat(bookmarks.get(1).getPerSectionRank(), equalTo(-1)); |
+ |
// Test ranks after changes: remove then add some items. |
@SuppressWarnings("unchecked") |
@@ -103,9 +142,11 @@ public void testGetSuggestionRank() { |
List<SnippetArticle> newBookmarks = |
createDummySuggestions(6, KnownCategories.BOOKMARKS).subList(4, 6); |
- sectionList.onMoreSuggestions(KnownCategories.ARTICLES, newArticles); |
+ sectionList.onMoreSuggestions(KnownCategories.ARTICLES, newArticles.subList(0, 1)); |
sectionList.onMoreSuggestions(KnownCategories.BOOKMARKS, newBookmarks); |
+ bindViewHolders(sectionList, 3, sectionList.getItemCount()); |
+ |
// After the changes we should have: |
// Item type | local rank | global rank |
// -----------+------------+------------- |
@@ -113,31 +154,62 @@ public void testGetSuggestionRank() { |
// ARTICLE | 0 | 0 |
// ARTICLE | 1 | 1 |
// | - | - (deleted) |
- // ARTICLE | 3 | 7 (new) |
- // ARTICLE | 4 | 8 (new) |
+ // ARTICLE | 3 | 3 (new) |
// HEADER | | |
// STATUS | | |
// ACTION | 0 | |
- // BOOKMARK | 0 | 3 |
- // BOOKMARK | 1 | 4 |
- // BOOKMARK | 2 | 5 |
- // BOOKMARK | 3 | 6 |
- // BOOKMARK | 4 | 9 (new) |
- // BOOKMARK | 5 | 10 (new) |
+ // BOOKMARK | 0 | 4 (old but not seen until now) |
+ // BOOKMARK | 1 | 5 (old but not seen until now) |
+ // BOOKMARK | 2 | 6 (old but not seen until now) |
+ // BOOKMARK | 3 | 7 (old but not seen until now) |
+ // BOOKMARK | 4 | 8 (new) |
+ // BOOKMARK | 5 | 9 (new) |
+ |
+ |
+ // The new article is seen first and gets the next global rank |
+ assertThat(newArticles.get(0).getGlobalRank(), equalTo(3)); |
+ assertThat(newArticles.get(0).getPerSectionRank(), equalTo(3)); |
+ |
+ // Bookmarks old and new are seen after the new article and have higher global ranks |
+ assertThat(bookmarks.get(1).getGlobalRank(), equalTo(5)); |
+ assertThat(bookmarks.get(1).getPerSectionRank(), equalTo(1)); |
+ assertThat(newBookmarks.get(1).getGlobalRank(), equalTo(9)); |
+ assertThat(newBookmarks.get(1).getPerSectionRank(), equalTo(5)); |
- // The old ranks should not change. |
+ // Add one more article |
+ sectionList.onMoreSuggestions(KnownCategories.ARTICLES, newArticles.subList(1, 2)); |
+ bindViewHolders(sectionList); |
+ |
+ // After the changes we should have: |
+ // Item type | local rank | global rank |
+ // -----------+------------+------------- |
+ // HEADER | | |
+ // ARTICLE | 0 | 0 |
+ // ARTICLE | 1 | 1 |
+ // | - | - (deleted) |
+ // ARTICLE | 3 | 3 |
+ // ARTICLE | 4 | 10 (new) |
+ // HEADER | | |
+ // STATUS | | |
+ // ACTION | 0 | |
+ // BOOKMARK | 0 | 4 |
+ // BOOKMARK | 1 | 5 |
+ // BOOKMARK | 2 | 6 |
+ // BOOKMARK | 3 | 7 |
+ // BOOKMARK | 4 | 8 |
+ // BOOKMARK | 5 | 9 |
+ |
+ // Old suggestions' ranks should not change. |
assertThat(articles.get(0).getGlobalRank(), equalTo(0)); |
assertThat(articles.get(0).getPerSectionRank(), equalTo(0)); |
assertThat(articles.get(2).getGlobalRank(), equalTo(2)); |
assertThat(articles.get(2).getPerSectionRank(), equalTo(2)); |
- assertThat(bookmarks.get(1).getGlobalRank(), equalTo(4)); |
+ assertThat(bookmarks.get(1).getGlobalRank(), equalTo(5)); |
assertThat(bookmarks.get(1).getPerSectionRank(), equalTo(1)); |
- // New ranks take into account the previously existing items. |
- assertThat(newArticles.get(1).getGlobalRank(), equalTo(8)); |
+ // The new article should get the last global rank |
+ assertThat(newArticles.get(1).getGlobalRank(), equalTo(10)); |
assertThat(newArticles.get(1).getPerSectionRank(), equalTo(4)); |
- assertThat(newBookmarks.get(1).getGlobalRank(), equalTo(10)); |
- assertThat(newBookmarks.get(1).getPerSectionRank(), equalTo(5)); |
} |
@Test |