OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.ntp.cards; | 5 package org.chromium.chrome.browser.ntp.cards; |
6 | 6 |
7 import static org.junit.Assert.assertEquals; | 7 import static org.junit.Assert.assertEquals; |
8 import static org.junit.Assert.assertFalse; | 8 import static org.junit.Assert.assertFalse; |
9 import static org.junit.Assert.assertNotEquals; | 9 import static org.junit.Assert.assertNotEquals; |
10 import static org.junit.Assert.assertThat; | 10 import static org.junit.Assert.assertThat; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 import org.robolectric.shadows.ShadowResources; | 46 import org.robolectric.shadows.ShadowResources; |
47 | 47 |
48 import org.chromium.base.Callback; | 48 import org.chromium.base.Callback; |
49 import org.chromium.base.ContextUtils; | 49 import org.chromium.base.ContextUtils; |
50 import org.chromium.base.metrics.RecordHistogram; | 50 import org.chromium.base.metrics.RecordHistogram; |
51 import org.chromium.base.metrics.RecordUserAction; | 51 import org.chromium.base.metrics.RecordUserAction; |
52 import org.chromium.base.test.util.Feature; | 52 import org.chromium.base.test.util.Feature; |
53 import org.chromium.chrome.R; | 53 import org.chromium.chrome.R; |
54 import org.chromium.chrome.browser.ChromeFeatureList; | 54 import org.chromium.chrome.browser.ChromeFeatureList; |
55 import org.chromium.chrome.browser.EnableFeatures; | 55 import org.chromium.chrome.browser.EnableFeatures; |
| 56 import org.chromium.chrome.browser.ntp.ContextMenuManager; |
56 import org.chromium.chrome.browser.ntp.NewTabPage.DestructionObserver; | 57 import org.chromium.chrome.browser.ntp.NewTabPage.DestructionObserver; |
57 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; | |
58 import org.chromium.chrome.browser.ntp.cards.ContentSuggestionsTestUtils.Categor
yInfoBuilder; | 58 import org.chromium.chrome.browser.ntp.cards.ContentSuggestionsTestUtils.Categor
yInfoBuilder; |
59 import org.chromium.chrome.browser.ntp.cards.SignInPromo.SigninObserver; | 59 import org.chromium.chrome.browser.ntp.cards.SignInPromo.SigninObserver; |
60 import org.chromium.chrome.browser.ntp.snippets.CategoryInt; | 60 import org.chromium.chrome.browser.ntp.snippets.CategoryInt; |
61 import org.chromium.chrome.browser.ntp.snippets.CategoryStatus; | 61 import org.chromium.chrome.browser.ntp.snippets.CategoryStatus; |
62 import org.chromium.chrome.browser.ntp.snippets.FakeSuggestionsSource; | 62 import org.chromium.chrome.browser.ntp.snippets.FakeSuggestionsSource; |
63 import org.chromium.chrome.browser.ntp.snippets.KnownCategories; | 63 import org.chromium.chrome.browser.ntp.snippets.KnownCategories; |
64 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; | 64 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; |
65 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; | 65 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; |
66 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 66 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
67 import org.chromium.chrome.browser.signin.SigninManager; | 67 import org.chromium.chrome.browser.signin.SigninManager; |
68 import org.chromium.chrome.browser.signin.SigninManager.SignInAllowedObserver; | 68 import org.chromium.chrome.browser.signin.SigninManager.SignInAllowedObserver; |
69 import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; | 69 import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; |
70 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter; | 70 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter; |
| 71 import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegate; |
71 import org.chromium.testing.local.LocalRobolectricTestRunner; | 72 import org.chromium.testing.local.LocalRobolectricTestRunner; |
72 | 73 |
73 import java.util.ArrayList; | 74 import java.util.ArrayList; |
74 import java.util.Collections; | 75 import java.util.Collections; |
75 import java.util.HashMap; | 76 import java.util.HashMap; |
76 import java.util.List; | 77 import java.util.List; |
77 import java.util.Locale; | 78 import java.util.Locale; |
78 | 79 |
79 /** | 80 /** |
80 * Unit tests for {@link NewTabPageAdapter}. | 81 * Unit tests for {@link NewTabPageAdapter}. |
81 */ | 82 */ |
82 @RunWith(LocalRobolectricTestRunner.class) | 83 @RunWith(LocalRobolectricTestRunner.class) |
83 @Config(manifest = Config.NONE) | 84 @Config(manifest = Config.NONE) |
84 public class NewTabPageAdapterTest { | 85 public class NewTabPageAdapterTest { |
85 @Rule | 86 @Rule |
86 public EnableFeatures.Processor mEnableFeatureProcessor = new EnableFeatures
.Processor(); | 87 public EnableFeatures.Processor mEnableFeatureProcessor = new EnableFeatures
.Processor(); |
87 | 88 |
88 private FakeSuggestionsSource mSource; | 89 private FakeSuggestionsSource mSource; |
89 private NewTabPageAdapter mAdapter; | 90 private NewTabPageAdapter mAdapter; |
90 @Mock | 91 @Mock |
91 private SigninManager mMockSigninManager; | 92 private SigninManager mMockSigninManager; |
92 @Mock | 93 @Mock |
93 private OfflinePageBridge mOfflinePageBridge; | 94 private OfflinePageBridge mOfflinePageBridge; |
94 @Mock | 95 @Mock |
95 private NewTabPageManager mNewTabPageManager; | 96 private SuggestionsUiDelegate mUiDelegate; |
96 | 97 |
97 /** | 98 /** |
98 * Stores information about a section that should be present in the adapter. | 99 * Stores information about a section that should be present in the adapter. |
99 */ | 100 */ |
100 private static class SectionDescriptor { | 101 private static class SectionDescriptor { |
101 public final int mNumSuggestions; | 102 public final int mNumSuggestions; |
102 public final boolean mStatusCard; | 103 public final boolean mStatusCard; |
103 public boolean mActionButton; | 104 public boolean mActionButton; |
104 public boolean mProgressItem; | 105 public boolean mProgressItem; |
105 public SnippetArticle mFirstItem; | 106 public SnippetArticle mFirstItem; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 RecordHistogram.disableForTests(); | 204 RecordHistogram.disableForTests(); |
204 RecordUserAction.disableForTests(); | 205 RecordUserAction.disableForTests(); |
205 | 206 |
206 @CategoryInt | 207 @CategoryInt |
207 final int category = KnownCategories.ARTICLES; | 208 final int category = KnownCategories.ARTICLES; |
208 mSource = new FakeSuggestionsSource(); | 209 mSource = new FakeSuggestionsSource(); |
209 mSource.setStatusForCategory(category, CategoryStatus.INITIALIZING); | 210 mSource.setStatusForCategory(category, CategoryStatus.INITIALIZING); |
210 mSource.setInfoForCategory(category, | 211 mSource.setInfoForCategory(category, |
211 new CategoryInfoBuilder(category).showIfEmpty().build()); | 212 new CategoryInfoBuilder(category).showIfEmpty().build()); |
212 | 213 |
213 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(mSource); | 214 when(mUiDelegate.getSuggestionsSource()).thenReturn(mSource); |
214 when(mNewTabPageManager.getSuggestionsMetricsReporter()) | 215 when(mUiDelegate.getMetricsReporter()).thenReturn(mock(SuggestionsMetric
sReporter.class)); |
215 .thenReturn(mock(SuggestionsMetricsReporter.class)); | |
216 when(mNewTabPageManager.isCurrentPage()).thenReturn(true); | |
217 | 216 |
218 reloadNtp(); | 217 reloadNtp(); |
219 } | 218 } |
220 | 219 |
221 @After | 220 @After |
222 public void tearDown() { | 221 public void tearDown() { |
223 SigninManager.setInstanceForTesting(null); | 222 SigninManager.setInstanceForTesting(null); |
224 ChromePreferenceManager.getInstance(RuntimeEnvironment.application) | 223 ChromePreferenceManager.getInstance(RuntimeEnvironment.application) |
225 .setNewTabPageSigninPromoDismissed(false); | 224 .setNewTabPageSigninPromoDismissed(false); |
226 } | 225 } |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 @CategoryInt | 473 @CategoryInt |
475 final int category = 42; | 474 final int category = 42; |
476 | 475 |
477 // Part 1: VisibleIfEmpty = true | 476 // Part 1: VisibleIfEmpty = true |
478 FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource(); | 477 FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource(); |
479 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); | 478 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); |
480 suggestionsSource.setInfoForCategory(category, | 479 suggestionsSource.setInfoForCategory(category, |
481 new CategoryInfoBuilder(category).showIfEmpty().build()); | 480 new CategoryInfoBuilder(category).showIfEmpty().build()); |
482 | 481 |
483 // 1.1 - Initial state | 482 // 1.1 - Initial state |
484 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 483 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
485 reloadNtp(); | 484 reloadNtp(); |
486 assertItemsFor(sectionWithStatusCard().withProgress()); | 485 assertItemsFor(sectionWithStatusCard().withProgress()); |
487 | 486 |
488 // 1.2 - With suggestions | 487 // 1.2 - With suggestions |
489 List<SnippetArticle> articles = | 488 List<SnippetArticle> articles = |
490 Collections.unmodifiableList(createDummySuggestions(3, category)
); | 489 Collections.unmodifiableList(createDummySuggestions(3, category)
); |
491 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); | 490 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); |
492 suggestionsSource.setSuggestionsForCategory(category, articles); | 491 suggestionsSource.setSuggestionsForCategory(category, articles); |
493 assertItemsFor(section(3)); | 492 assertItemsFor(section(3)); |
494 | 493 |
495 // 1.3 - When all suggestions are dismissed | 494 // 1.3 - When all suggestions are dismissed |
496 SuggestionsSection section42 = | 495 SuggestionsSection section42 = |
497 mAdapter.getSectionListForTesting().getSectionForTesting(categor
y); | 496 mAdapter.getSectionListForTesting().getSectionForTesting(categor
y); |
498 assertSectionMatches(section(3), section42); | 497 assertSectionMatches(section(3), section42); |
499 section42.removeSuggestionById(articles.get(0).mIdWithinCategory); | 498 section42.removeSuggestionById(articles.get(0).mIdWithinCategory); |
500 section42.removeSuggestionById(articles.get(1).mIdWithinCategory); | 499 section42.removeSuggestionById(articles.get(1).mIdWithinCategory); |
501 section42.removeSuggestionById(articles.get(2).mIdWithinCategory); | 500 section42.removeSuggestionById(articles.get(2).mIdWithinCategory); |
502 assertItemsFor(sectionWithStatusCard()); | 501 assertItemsFor(sectionWithStatusCard()); |
503 | 502 |
504 // Part 2: VisibleIfEmpty = false | 503 // Part 2: VisibleIfEmpty = false |
505 suggestionsSource = new FakeSuggestionsSource(); | 504 suggestionsSource = new FakeSuggestionsSource(); |
506 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); | 505 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); |
507 suggestionsSource.setInfoForCategory(category, new CategoryInfoBuilder(c
ategory).build()); | 506 suggestionsSource.setInfoForCategory(category, new CategoryInfoBuilder(c
ategory).build()); |
508 | 507 |
509 // 2.1 - Initial state | 508 // 2.1 - Initial state |
510 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 509 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
511 reloadNtp(); | 510 reloadNtp(); |
512 assertItemsFor(); | 511 assertItemsFor(); |
513 | 512 |
514 // 2.2 - With suggestions | 513 // 2.2 - With suggestions |
515 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); | 514 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); |
516 suggestionsSource.setSuggestionsForCategory(category, articles); | 515 suggestionsSource.setSuggestionsForCategory(category, articles); |
517 assertItemsFor(); | 516 assertItemsFor(); |
518 | 517 |
519 // 2.3 - When all suggestions are dismissed - N/A, suggestions don't get
added. | 518 // 2.3 - When all suggestions are dismissed - N/A, suggestions don't get
added. |
520 } | 519 } |
521 | 520 |
522 /** | 521 /** |
523 * Tests that the more button is shown for sections that declare it. | 522 * Tests that the more button is shown for sections that declare it. |
524 */ | 523 */ |
525 @Test | 524 @Test |
526 @Feature({"Ntp"}) | 525 @Feature({"Ntp"}) |
527 public void testMoreButton() { | 526 public void testMoreButton() { |
528 @CategoryInt | 527 @CategoryInt |
529 final int category = 42; | 528 final int category = 42; |
530 | 529 |
531 // Part 1: With "View All" action | 530 // Part 1: With "View All" action |
532 FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource(); | 531 FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource(); |
533 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); | 532 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); |
534 suggestionsSource.setInfoForCategory(category, new CategoryInfoBuilder(c
ategory) | 533 suggestionsSource.setInfoForCategory(category, new CategoryInfoBuilder(c
ategory) |
535 .withViewAllActio
n() | 534 .withViewAllActio
n() |
536 .showIfEmpty() | 535 .showIfEmpty() |
537 .build()); | 536 .build()); |
538 | 537 |
539 // 1.1 - Initial state. | 538 // 1.1 - Initial state. |
540 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 539 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
541 reloadNtp(); | 540 reloadNtp(); |
542 assertItemsFor(sectionWithStatusCard().withActionButton().withProgress()
); | 541 assertItemsFor(sectionWithStatusCard().withActionButton().withProgress()
); |
543 | 542 |
544 // 1.2 - With suggestions. | 543 // 1.2 - With suggestions. |
545 List<SnippetArticle> articles = | 544 List<SnippetArticle> articles = |
546 Collections.unmodifiableList(createDummySuggestions(3, category)
); | 545 Collections.unmodifiableList(createDummySuggestions(3, category)
); |
547 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); | 546 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); |
548 suggestionsSource.setSuggestionsForCategory(category, articles); | 547 suggestionsSource.setSuggestionsForCategory(category, articles); |
549 assertItemsFor(section(3).withActionButton()); | 548 assertItemsFor(section(3).withActionButton()); |
550 | 549 |
551 // 1.3 - When all suggestions are dismissed. | 550 // 1.3 - When all suggestions are dismissed. |
552 SuggestionsSection section42 = | 551 SuggestionsSection section42 = |
553 mAdapter.getSectionListForTesting().getSectionForTesting(categor
y); | 552 mAdapter.getSectionListForTesting().getSectionForTesting(categor
y); |
554 assertSectionMatches(section(3).withActionButton(), section42); | 553 assertSectionMatches(section(3).withActionButton(), section42); |
555 section42.removeSuggestionById(articles.get(0).mIdWithinCategory); | 554 section42.removeSuggestionById(articles.get(0).mIdWithinCategory); |
556 section42.removeSuggestionById(articles.get(1).mIdWithinCategory); | 555 section42.removeSuggestionById(articles.get(1).mIdWithinCategory); |
557 section42.removeSuggestionById(articles.get(2).mIdWithinCategory); | 556 section42.removeSuggestionById(articles.get(2).mIdWithinCategory); |
558 assertItemsFor(sectionWithStatusCard().withActionButton()); | 557 assertItemsFor(sectionWithStatusCard().withActionButton()); |
559 | 558 |
560 // Part 1: Without "View All" action | 559 // Part 1: Without "View All" action |
561 suggestionsSource = new FakeSuggestionsSource(); | 560 suggestionsSource = new FakeSuggestionsSource(); |
562 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); | 561 suggestionsSource.setStatusForCategory(category, CategoryStatus.INITIALI
ZING); |
563 suggestionsSource.setInfoForCategory(category, | 562 suggestionsSource.setInfoForCategory(category, |
564 new CategoryInfoBuilder(category).showIfEmpty().build()); | 563 new CategoryInfoBuilder(category).showIfEmpty().build()); |
565 | 564 |
566 // 2.1 - Initial state. | 565 // 2.1 - Initial state. |
567 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 566 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
568 reloadNtp(); | 567 reloadNtp(); |
569 assertItemsFor(sectionWithStatusCard().withProgress()); | 568 assertItemsFor(sectionWithStatusCard().withProgress()); |
570 | 569 |
571 // 2.2 - With suggestions. | 570 // 2.2 - With suggestions. |
572 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); | 571 suggestionsSource.setStatusForCategory(category, CategoryStatus.AVAILABL
E); |
573 suggestionsSource.setSuggestionsForCategory(category, articles); | 572 suggestionsSource.setSuggestionsForCategory(category, articles); |
574 assertItemsFor(section(3)); | 573 assertItemsFor(section(3)); |
575 | 574 |
576 // 2.3 - When all suggestions are dismissed. | 575 // 2.3 - When all suggestions are dismissed. |
577 section42 = mAdapter.getSectionListForTesting().getSectionForTesting(cat
egory); | 576 section42 = mAdapter.getSectionListForTesting().getSectionForTesting(cat
egory); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 assertItemsFor(section(3), section(5).withActionButton(), section(11)); | 630 assertItemsFor(section(3), section(5).withActionButton(), section(11)); |
632 } | 631 } |
633 | 632 |
634 /** | 633 /** |
635 * Tests that the order of the categories is kept. | 634 * Tests that the order of the categories is kept. |
636 */ | 635 */ |
637 @Test | 636 @Test |
638 @Feature({"Ntp"}) | 637 @Feature({"Ntp"}) |
639 public void testCategoryOrder() { | 638 public void testCategoryOrder() { |
640 FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource(); | 639 FakeSuggestionsSource suggestionsSource = new FakeSuggestionsSource(); |
641 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 640 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
642 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0); | 641 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0); |
643 registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0); | 642 registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0); |
644 registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES,
0); | 643 registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES,
0); |
645 registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0); | 644 registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0); |
646 reloadNtp(); | 645 reloadNtp(); |
647 | 646 |
648 List<TreeNode> children = mAdapter.getSectionListForTesting().getChildre
n(); | 647 List<TreeNode> children = mAdapter.getSectionListForTesting().getChildre
n(); |
649 assertEquals(4, children.size()); | 648 assertEquals(4, children.size()); |
650 assertEquals(SuggestionsSection.class, children.get(0).getClass()); | 649 assertEquals(SuggestionsSection.class, children.get(0).getClass()); |
651 assertEquals(KnownCategories.ARTICLES, getCategory(children.get(0))); | 650 assertEquals(KnownCategories.ARTICLES, getCategory(children.get(0))); |
652 assertEquals(SuggestionsSection.class, children.get(1).getClass()); | 651 assertEquals(SuggestionsSection.class, children.get(1).getClass()); |
653 assertEquals(KnownCategories.BOOKMARKS, getCategory(children.get(1))); | 652 assertEquals(KnownCategories.BOOKMARKS, getCategory(children.get(1))); |
654 assertEquals(SuggestionsSection.class, children.get(2).getClass()); | 653 assertEquals(SuggestionsSection.class, children.get(2).getClass()); |
655 assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(children.ge
t(2))); | 654 assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(children.ge
t(2))); |
656 assertEquals(SuggestionsSection.class, children.get(3).getClass()); | 655 assertEquals(SuggestionsSection.class, children.get(3).getClass()); |
657 assertEquals(KnownCategories.DOWNLOADS, getCategory(children.get(3))); | 656 assertEquals(KnownCategories.DOWNLOADS, getCategory(children.get(3))); |
658 | 657 |
659 // With a different order. | 658 // With a different order. |
660 suggestionsSource = new FakeSuggestionsSource(); | 659 suggestionsSource = new FakeSuggestionsSource(); |
661 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 660 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
662 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0); | 661 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0); |
663 registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES,
0); | 662 registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES,
0); |
664 registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0); | 663 registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0); |
665 registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0); | 664 registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 0); |
666 reloadNtp(); | 665 reloadNtp(); |
667 | 666 |
668 children = mAdapter.getSectionListForTesting().getChildren(); | 667 children = mAdapter.getSectionListForTesting().getChildren(); |
669 assertEquals(4, children.size()); | 668 assertEquals(4, children.size()); |
670 assertEquals(SuggestionsSection.class, children.get(0).getClass()); | 669 assertEquals(SuggestionsSection.class, children.get(0).getClass()); |
671 assertEquals(KnownCategories.ARTICLES, getCategory(children.get(0))); | 670 assertEquals(KnownCategories.ARTICLES, getCategory(children.get(0))); |
672 assertEquals(SuggestionsSection.class, children.get(1).getClass()); | 671 assertEquals(SuggestionsSection.class, children.get(1).getClass()); |
673 assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(children.ge
t(1))); | 672 assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(children.ge
t(1))); |
674 assertEquals(SuggestionsSection.class, children.get(2).getClass()); | 673 assertEquals(SuggestionsSection.class, children.get(2).getClass()); |
675 assertEquals(KnownCategories.DOWNLOADS, getCategory(children.get(2))); | 674 assertEquals(KnownCategories.DOWNLOADS, getCategory(children.get(2))); |
676 assertEquals(SuggestionsSection.class, children.get(3).getClass()); | 675 assertEquals(SuggestionsSection.class, children.get(3).getClass()); |
677 assertEquals(KnownCategories.BOOKMARKS, getCategory(children.get(3))); | 676 assertEquals(KnownCategories.BOOKMARKS, getCategory(children.get(3))); |
678 | 677 |
679 // With unknown categories. | 678 // With unknown categories. |
680 suggestionsSource = new FakeSuggestionsSource(); | 679 suggestionsSource = new FakeSuggestionsSource(); |
681 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 680 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
682 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0); | 681 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 0); |
683 registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES,
0); | 682 registerCategory(suggestionsSource, KnownCategories.PHYSICAL_WEB_PAGES,
0); |
684 registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0); | 683 registerCategory(suggestionsSource, KnownCategories.DOWNLOADS, 0); |
685 reloadNtp(); | 684 reloadNtp(); |
686 | 685 |
687 // The adapter is already initialised, it will not accept new categories
anymore. | 686 // The adapter is already initialised, it will not accept new categories
anymore. |
688 registerCategory(suggestionsSource, 42, 1); | 687 registerCategory(suggestionsSource, 42, 1); |
689 registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 1); | 688 registerCategory(suggestionsSource, KnownCategories.BOOKMARKS, 1); |
690 | 689 |
691 children = mAdapter.getSectionListForTesting().getChildren(); | 690 children = mAdapter.getSectionListForTesting().getChildren(); |
692 assertEquals(3, children.size()); | 691 assertEquals(3, children.size()); |
693 assertEquals(SuggestionsSection.class, children.get(0).getClass()); | 692 assertEquals(SuggestionsSection.class, children.get(0).getClass()); |
694 assertEquals(KnownCategories.ARTICLES, getCategory(children.get(0))); | 693 assertEquals(KnownCategories.ARTICLES, getCategory(children.get(0))); |
695 assertEquals(SuggestionsSection.class, children.get(1).getClass()); | 694 assertEquals(SuggestionsSection.class, children.get(1).getClass()); |
696 assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(children.ge
t(1))); | 695 assertEquals(KnownCategories.PHYSICAL_WEB_PAGES, getCategory(children.ge
t(1))); |
697 assertEquals(SuggestionsSection.class, children.get(2).getClass()); | 696 assertEquals(SuggestionsSection.class, children.get(2).getClass()); |
698 assertEquals(KnownCategories.DOWNLOADS, getCategory(children.get(2))); | 697 assertEquals(KnownCategories.DOWNLOADS, getCategory(children.get(2))); |
699 } | 698 } |
700 | 699 |
701 @Test | 700 @Test |
702 @Feature({"Ntp"}) | 701 @Feature({"Ntp"}) |
703 public void testChangeNotifications() { | 702 public void testChangeNotifications() { |
704 FakeSuggestionsSource suggestionsSource = spy(new FakeSuggestionsSource(
)); | 703 FakeSuggestionsSource suggestionsSource = spy(new FakeSuggestionsSource(
)); |
705 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 3); | 704 registerCategory(suggestionsSource, KnownCategories.ARTICLES, 3); |
706 when(mNewTabPageManager.getSuggestionsSource()).thenReturn(suggestionsSo
urce); | 705 when(mUiDelegate.getSuggestionsSource()).thenReturn(suggestionsSource); |
707 | 706 |
708 @SuppressWarnings("unchecked") | 707 @SuppressWarnings("unchecked") |
709 Callback<String> itemDismissedCallback = mock(Callback.class); | 708 Callback<String> itemDismissedCallback = mock(Callback.class); |
710 | 709 |
711 reloadNtp(); | 710 reloadNtp(); |
712 AdapterDataObserver dataObserver = mock(AdapterDataObserver.class); | 711 AdapterDataObserver dataObserver = mock(AdapterDataObserver.class); |
713 mAdapter.registerAdapterDataObserver(dataObserver); | 712 mAdapter.registerAdapterDataObserver(dataObserver); |
714 | 713 |
715 // Adapter content: | 714 // Adapter content: |
716 // Idx | Item | 715 // Idx | Item |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
792 } | 791 } |
793 | 792 |
794 @Test | 793 @Test |
795 @Feature({"Ntp"}) | 794 @Feature({"Ntp"}) |
796 public void testSigninPromo() { | 795 public void testSigninPromo() { |
797 when(mMockSigninManager.isSignInAllowed()).thenReturn(true); | 796 when(mMockSigninManager.isSignInAllowed()).thenReturn(true); |
798 when(mMockSigninManager.isSignedInOnNative()).thenReturn(false); | 797 when(mMockSigninManager.isSignedInOnNative()).thenReturn(false); |
799 ArgumentCaptor<DestructionObserver> observers = | 798 ArgumentCaptor<DestructionObserver> observers = |
800 ArgumentCaptor.forClass(DestructionObserver.class); | 799 ArgumentCaptor.forClass(DestructionObserver.class); |
801 | 800 |
802 doNothing().when(mNewTabPageManager).addDestructionObserver(observers.ca
pture()); | 801 doNothing().when(mUiDelegate).addDestructionObserver(observers.capture()
); |
803 | 802 |
804 reloadNtp(); | 803 reloadNtp(); |
805 assertTrue(isSignInPromoVisible()); | 804 assertTrue(isSignInPromoVisible()); |
806 | 805 |
807 // Note: As currently implemented, these two variables should point to t
he same object, a | 806 // Note: As currently implemented, these two variables should point to t
he same object, a |
808 // SignInPromo.SigninObserver | 807 // SignInPromo.SigninObserver |
809 SignInStateObserver signInStateObserver = null; | 808 SignInStateObserver signInStateObserver = null; |
810 SignInAllowedObserver signInAllowedObserver = null; | 809 SignInAllowedObserver signInAllowedObserver = null; |
811 for (DestructionObserver observer : observers.getAllValues()) { | 810 for (DestructionObserver observer : observers.getAllValues()) { |
812 if (observer instanceof SignInStateObserver) { | 811 if (observer instanceof SignInStateObserver) { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
861 assertFalse(isSignInPromoVisible()); | 860 assertFalse(isSignInPromoVisible()); |
862 } | 861 } |
863 | 862 |
864 @Test | 863 @Test |
865 @Feature({"Ntp"}) | 864 @Feature({"Ntp"}) |
866 @EnableFeatures(ChromeFeatureList.NTP_SUGGESTIONS_SECTION_DISMISSAL) | 865 @EnableFeatures(ChromeFeatureList.NTP_SUGGESTIONS_SECTION_DISMISSAL) |
867 public void testAllDismissedVisibility() { | 866 public void testAllDismissedVisibility() { |
868 ArgumentCaptor<DestructionObserver> observers = | 867 ArgumentCaptor<DestructionObserver> observers = |
869 ArgumentCaptor.forClass(DestructionObserver.class); | 868 ArgumentCaptor.forClass(DestructionObserver.class); |
870 | 869 |
871 verify(mNewTabPageManager, atLeastOnce()).addDestructionObserver(observe
rs.capture()); | 870 verify(mUiDelegate, atLeastOnce()).addDestructionObserver(observers.capt
ure()); |
872 | 871 |
873 SigninObserver signinObserver = null; | 872 SigninObserver signinObserver = null; |
874 for (DestructionObserver observer : observers.getAllValues()) { | 873 for (DestructionObserver observer : observers.getAllValues()) { |
875 if (observer instanceof SigninObserver) { | 874 if (observer instanceof SigninObserver) { |
876 signinObserver = (SigninObserver) observer; | 875 signinObserver = (SigninObserver) observer; |
877 } | 876 } |
878 } | 877 } |
879 | 878 |
880 @SuppressWarnings("unchecked") | 879 @SuppressWarnings("unchecked") |
881 Callback<String> itemDismissedCallback = mock(Callback.class); | 880 Callback<String> itemDismissedCallback = mock(Callback.class); |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1039 /** | 1038 /** |
1040 * To be used with {@link #assertItemsFor(SectionDescriptor...)}, for a sect
ion that has no | 1039 * To be used with {@link #assertItemsFor(SectionDescriptor...)}, for a sect
ion that has no |
1041 * suggestions, but a status card to be displayed. | 1040 * suggestions, but a status card to be displayed. |
1042 * @return A descriptor for the section. | 1041 * @return A descriptor for the section. |
1043 */ | 1042 */ |
1044 private SectionDescriptor sectionWithStatusCard() { | 1043 private SectionDescriptor sectionWithStatusCard() { |
1045 return new SectionDescriptor(0); | 1044 return new SectionDescriptor(0); |
1046 } | 1045 } |
1047 | 1046 |
1048 private void reloadNtp() { | 1047 private void reloadNtp() { |
1049 mAdapter = new NewTabPageAdapter(mNewTabPageManager, mock(View.class), n
ull, | 1048 mAdapter = new NewTabPageAdapter(mUiDelegate, mock(View.class), null, mO
fflinePageBridge, |
1050 mOfflinePageBridge); | 1049 mock(ContextMenuManager.class)); |
1051 } | 1050 } |
1052 | 1051 |
1053 private void assertArticlesEqual(List<SnippetArticle> articles, int start, i
nt end) { | 1052 private void assertArticlesEqual(List<SnippetArticle> articles, int start, i
nt end) { |
1054 assertThat(mAdapter.getItemCount(), greaterThanOrEqualTo(end)); | 1053 assertThat(mAdapter.getItemCount(), greaterThanOrEqualTo(end)); |
1055 for (int i = start; i < end; i++) { | 1054 for (int i = start; i < end; i++) { |
1056 assertEquals(articles.get(i - start), mAdapter.getSuggestionAt(i)); | 1055 assertEquals(articles.get(i - start), mAdapter.getSuggestionAt(i)); |
1057 } | 1056 } |
1058 } | 1057 } |
1059 | 1058 |
1060 private boolean isSignInPromoVisible() { | 1059 private boolean isSignInPromoVisible() { |
(...skipping 23 matching lines...) Expand all Loading... |
1084 viewTypeToString(expectedType)); | 1083 viewTypeToString(expectedType)); |
1085 } | 1084 } |
1086 addLine(stringBuilder, "explainFailedExpectation -- END --"); | 1085 addLine(stringBuilder, "explainFailedExpectation -- END --"); |
1087 return stringBuilder.toString(); | 1086 return stringBuilder.toString(); |
1088 } | 1087 } |
1089 | 1088 |
1090 private static void addLine(StringBuilder stringBuilder, String template, Ob
ject... args) { | 1089 private static void addLine(StringBuilder stringBuilder, String template, Ob
ject... args) { |
1091 stringBuilder.append(String.format(Locale.US, template + "\n", args)); | 1090 stringBuilder.append(String.format(Locale.US, template + "\n", args)); |
1092 } | 1091 } |
1093 } | 1092 } |
OLD | NEW |