Commit f1bc438e authored by Becky Zhou's avatar Becky Zhou Committed by Commit Bot

[NTP OptOut] Add instrumentation tests and render tests

+ test header state on multiple tabs
+ test header state with other sections
+ parameterized context menu actions
+ render test on toggling header

Bug: 824900
Change-Id: Id82742a8d27e263bf0db9563473f9a320ed33875
Reviewed-on: https://chromium-review.googlesource.com/984377
Commit-Queue: Becky Zhou <huayinz@chromium.org>
Reviewed-by: default avatarBernhard Bauer <bauerb@chromium.org>
Reviewed-by: default avatarTheresa <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548148}
parent 52d81474
......@@ -407,7 +407,7 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> implements
return RecyclerView.NO_POSITION;
}
SectionList getSectionListForTesting() {
public SectionList getSectionListForTesting() {
return mSections;
}
......
......@@ -673,7 +673,7 @@ public class SuggestionsSection extends InnerNode {
return mMoreButton;
}
SectionHeader getHeaderItemForTesting() {
public SectionHeader getHeaderItemForTesting() {
return mHeader;
}
......
......@@ -4,11 +4,16 @@
package org.chromium.chrome.browser.ntp;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import android.graphics.Canvas;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
......@@ -38,10 +43,16 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter;
import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView;
import org.chromium.chrome.browser.ntp.cards.SuggestionsSection;
import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
import org.chromium.chrome.browser.ntp.snippets.SectionHeader;
import org.chromium.chrome.browser.omnibox.LocationBarLayout;
import org.chromium.chrome.browser.omnibox.UrlBar;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.suggestions.SiteSuggestion;
import org.chromium.chrome.browser.suggestions.TileSectionType;
import org.chromium.chrome.browser.suggestions.TileSource;
......@@ -60,6 +71,7 @@ import org.chromium.chrome.test.util.RenderTestRule;
import org.chromium.chrome.test.util.browser.ChromeModernDesign;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils;
import org.chromium.chrome.test.util.browser.suggestions.FakeMostVisitedSites;
import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule;
......@@ -569,6 +581,67 @@ public class NewTabPageTest {
mNtp.getManagerForTesting().getSuggestionsSource().areRemoteSuggestionsEnabled());
}
@Test
@SmallTest
@Feature({"NewTabPage"})
@EnableFeatures(ChromeFeatureList.NTP_ARTICLE_SUGGESTIONS_EXPANDABLE_HEADER)
public void testArticleExpandableHeaderOnMultipleTabs() throws Exception {
// Open a new tab.
SuggestionsSection firstSection = getArticleSectionOnNewTab();
SectionHeader firstHeader = firstSection.getHeaderItemForTesting();
int firstTabId = mActivityTestRule.getActivity().getActivityTab().getId();
// Check header is expanded.
Assert.assertTrue(firstHeader.isExpandable() && firstHeader.isExpanded());
Assert.assertTrue(firstSection.getItemCount() > 1);
Assert.assertTrue(getPreferenceForExpandableHeader());
// Toggle header on the current tab.
onView(withId(R.id.header_title)).perform(click());
// Check header is collapsed.
Assert.assertTrue(firstHeader.isExpandable() && !firstHeader.isExpanded());
Assert.assertEquals(1, firstSection.getItemCount());
Assert.assertFalse(getPreferenceForExpandableHeader());
// Open a second new tab.
SuggestionsSection secondSection = getArticleSectionOnNewTab();
SectionHeader secondHeader = secondSection.getHeaderItemForTesting();
// Check header on the second tab is collapsed.
Assert.assertTrue(secondHeader.isExpandable() && !secondHeader.isExpanded());
Assert.assertEquals(1, secondSection.getItemCount());
Assert.assertFalse(getPreferenceForExpandableHeader());
// Toggle header on the second tab.
onView(withId(R.id.header_title)).perform(click());
// Check header on the second tab is expanded.
Assert.assertTrue(secondHeader.isExpandable() && secondHeader.isExpanded());
Assert.assertTrue(secondSection.getItemCount() > 1);
Assert.assertTrue(getPreferenceForExpandableHeader());
// Go back to the first tab and check header is expanded.
ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), firstTabId);
Assert.assertTrue(firstHeader.isExpandable() && firstHeader.isExpanded());
Assert.assertTrue(firstSection.getItemCount() > 1);
Assert.assertTrue(getPreferenceForExpandableHeader());
}
@Test
@SmallTest
@Feature({"NewTabPage", "RenderTest"})
@EnableFeatures(ChromeFeatureList.NTP_ARTICLE_SUGGESTIONS_EXPANDABLE_HEADER)
public void testArticleExpandableHeaderAppearance() throws Exception {
NewTabPage ntp =
(NewTabPage) mActivityTestRule.getActivity().getActivityTab().getNativePage();
RecyclerView recyclerView = ntp.getNewTabPageView().getRecyclerView();
NewTabPageAdapter adapter = (NewTabPageAdapter) recyclerView.getAdapter();
View view = recyclerView.findViewHolderForAdapterPosition(
adapter.getFirstHeaderPosition()).itemView;
// Check header is expanded.
mRenderTestRule.render(view, "expandable_header_expanded");
// Toggle header on the current tab.
onView(withId(R.id.header_title)).perform(click());
// Check header is collapsed.
mRenderTestRule.render(view, "expandable_header_collapsed");
}
private void assertThumbnailInvalidAndRecapture() {
Assert.assertTrue(mNtp.shouldCaptureThumbnail());
captureThumbnail();
......@@ -695,4 +768,17 @@ public class NewTabPageTest {
mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected());
}
}
private SuggestionsSection getArticleSectionOnNewTab() throws Exception {
Tab tab = mActivityTestRule.loadUrlInNewTab(UrlConstants.NTP_URL);
NewTabPage ntp = (NewTabPage) tab.getNativePage();
NewTabPageAdapter adapter =
(NewTabPageAdapter) ntp.getNewTabPageView().getRecyclerView().getAdapter();
return adapter.getSectionListForTesting().getSection(KnownCategories.ARTICLES);
}
private boolean getPreferenceForExpandableHeader() throws Exception {
return ThreadUtils.runOnUiThreadBlocking(
() -> PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_LIST_VISIBLE));
}
}
......@@ -21,12 +21,16 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.params.ParameterAnnotations;
import org.chromium.base.test.params.ParameterSet;
import org.chromium.base.test.params.ParameterizedRunner;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.Restriction;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.ntp.ContextMenuManager;
......@@ -39,7 +43,7 @@ import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
import org.chromium.chrome.browser.suggestions.ContentSuggestionsAdditionalAction;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.NewTabPageTestUtils;
......@@ -62,7 +66,8 @@ import java.util.concurrent.TimeoutException;
/**
* Instrumentation tests for {@link NewTabPageRecyclerView}.
*/
@RunWith(ChromeJUnit4ClassRunner.class)
@RunWith(ParameterizedRunner.class)
@ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
@CommandLineFlags.Add(ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE)
@Features.DisableFeatures("NetworkPrediction")
@RetryOnFailure
......@@ -73,6 +78,11 @@ public class NewTabPageRecyclerViewTest {
@Rule
public SuggestionsDependenciesRule mSuggestionsDeps = new SuggestionsDependenciesRule();
@ParameterAnnotations.ClassParameter
private static List<ParameterSet> sClassParams =
Arrays.asList(new ParameterSet().value(false).name("DisableExpandableHeader"),
new ParameterSet().value(true).name("EnableExpandableHeader"));
private static final String TEST_PAGE = "/chrome/test/data/android/navigate/simple.html";
private static final long FAKE_PUBLISH_TIMESTAMP = 1466614774;
private static final long FAKE_FETCH_TIMESTAMP = 1466634774;
......@@ -84,13 +94,27 @@ public class NewTabPageRecyclerViewTest {
@CategoryInt
private static final int TEST_CATEGORY = KnownCategories.ARTICLES;
private final boolean mEnableExpandableHeader;
private Tab mTab;
private NewTabPage mNtp;
private EmbeddedTestServer mTestServer;
private FakeSuggestionsSource mSource;
public NewTabPageRecyclerViewTest(boolean enableExpandableHeader) {
mEnableExpandableHeader = enableExpandableHeader;
}
@Before
public void setUp() throws Exception {
if (mEnableExpandableHeader) {
Features.getInstance().enable(
ChromeFeatureList.NTP_ARTICLE_SUGGESTIONS_EXPANDABLE_HEADER);
} else {
Features.getInstance().disable(
ChromeFeatureList.NTP_ARTICLE_SUGGESTIONS_EXPANDABLE_HEADER);
}
mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
FakeMostVisitedSites mostVisitedSites = new FakeMostVisitedSites();
......
......@@ -391,6 +391,27 @@ public class SectionListTest {
assertNull(section);
}
@Test
@Feature({"Ntp"})
@EnableFeatures(ChromeFeatureList.NTP_ARTICLE_SUGGESTIONS_EXPANDABLE_HEADER)
public void testArticlesHeaderExpandableWithOtherSections() {
registerCategory(mSuggestionSource, KnownCategories.ARTICLES, 1);
registerCategory(mSuggestionSource, CATEGORY1, 1);
SectionList sectionList = new SectionList(mUiDelegate, mOfflinePageBridge);
sectionList.refreshSuggestions();
// Check article header is expandable.
SuggestionsSection articles = sectionList.getSection(KnownCategories.ARTICLES);
assertTrue(articles.getHeaderItemForTesting().isVisible());
assertTrue(articles.getHeaderItemForTesting().isExpandable());
// Check header of other section is not expandable.
SuggestionsSection otherSection = sectionList.getSection(CATEGORY1);
assertTrue(otherSection.getHeaderItemForTesting().isVisible());
assertFalse(otherSection.getHeaderItemForTesting().isExpandable());
}
@Test
@Feature({"Ntp"})
@EnableFeatures(ChromeFeatureList.NTP_ARTICLE_SUGGESTIONS_EXPANDABLE_HEADER)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment