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

[Feed] Enable existing test and add new tests

+ Parameterized some more tests in NewTabPageTest
+ Add some tests for FeedNewTabPage on the header views

Bug: 860055
Change-Id: Ie86d67d4e852117eb4074db9c522bbc219d5d4dc
Reviewed-on: https://chromium-review.googlesource.com/1227178
Commit-Queue: Becky Zhou <huayinz@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarTheresa <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#592910}
parent 6f312268
...@@ -15,7 +15,6 @@ import android.support.annotation.Nullable; ...@@ -15,7 +15,6 @@ import android.support.annotation.Nullable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ScrollView; import android.widget.ScrollView;
...@@ -323,7 +322,7 @@ public class FeedNewTabPage extends NewTabPage { ...@@ -323,7 +322,7 @@ public class FeedNewTabPage extends NewTabPage {
LayoutInflater inflater = LayoutInflater.from(activity); LayoutInflater inflater = LayoutInflater.from(activity);
mSectionHeaderView = (SectionHeaderView) inflater.inflate( mSectionHeaderView = (SectionHeaderView) inflater.inflate(
R.layout.new_tab_page_snippets_expandable_header, null); R.layout.new_tab_page_snippets_expandable_header, mRootView, false);
mSectionHeaderViewMarginResizer = MarginResizer.createAndAttach( mSectionHeaderViewMarginResizer = MarginResizer.createAndAttach(
mSectionHeaderView, mUiConfig, mDefaultMargin, mWideMargin); mSectionHeaderView, mUiConfig, mDefaultMargin, mWideMargin);
...@@ -395,12 +394,8 @@ public class FeedNewTabPage extends NewTabPage { ...@@ -395,12 +394,8 @@ public class FeedNewTabPage extends NewTabPage {
if (mSigninPromoView == null) { if (mSigninPromoView == null) {
LayoutInflater inflater = LayoutInflater.from(mRootView.getContext()); LayoutInflater inflater = LayoutInflater.from(mRootView.getContext());
mSigninPromoView = (PersonalizedSigninPromoView) inflater.inflate( mSigninPromoView = (PersonalizedSigninPromoView) inflater.inflate(
R.layout.personalized_signin_promo_view_modern_content_suggestions, null); R.layout.personalized_signin_promo_view_modern_content_suggestions, mRootView,
false);
ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.bottomMargin = mDefaultMargin;
mSigninPromoView.setLayoutParams(lp);
mSignInPromoViewMarginResizer = MarginResizer.createAndAttach( mSignInPromoViewMarginResizer = MarginResizer.createAndAttach(
mSigninPromoView, mUiConfig, mDefaultMargin, mWideMargin); mSigninPromoView, mUiConfig, mDefaultMargin, mWideMargin);
} }
...@@ -432,4 +427,19 @@ public class FeedNewTabPage extends NewTabPage { ...@@ -432,4 +427,19 @@ public class FeedNewTabPage extends NewTabPage {
FeedProcessScopeFactory.clearFeedProcessScopeForTesting(); FeedProcessScopeFactory.clearFeedProcessScopeForTesting();
} }
} }
@VisibleForTesting
FeedNewTabPageMediator getMediatorForTesting() {
return mMediator;
}
@Override
public View getSignInPromoViewForTesting() {
return getSigninPromoView();
}
@Override
public View getSectionHeaderViewForTesting() {
return getSectionHeaderView();
}
} }
...@@ -15,6 +15,7 @@ import com.google.android.libraries.feed.api.stream.ScrollListener; ...@@ -15,6 +15,7 @@ import com.google.android.libraries.feed.api.stream.ScrollListener;
import com.google.android.libraries.feed.api.stream.Stream; import com.google.android.libraries.feed.api.stream.Stream;
import org.chromium.base.MemoryPressureListener; import org.chromium.base.MemoryPressureListener;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.memory.MemoryPressureCallback; import org.chromium.base.memory.MemoryPressureCallback;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.native_page.ContextMenuManager; import org.chromium.chrome.browser.native_page.ContextMenuManager;
...@@ -34,6 +35,8 @@ import org.chromium.chrome.browser.signin.SigninPromoUtil; ...@@ -34,6 +35,8 @@ import org.chromium.chrome.browser.signin.SigninPromoUtil;
*/ */
class FeedNewTabPageMediator class FeedNewTabPageMediator
implements NewTabPageLayout.ScrollDelegate, ContextMenuManager.TouchEnabledDelegate { implements NewTabPageLayout.ScrollDelegate, ContextMenuManager.TouchEnabledDelegate {
private static boolean sOverrideFeedEnabledForTesting;
private final FeedNewTabPage mCoordinator; private final FeedNewTabPage mCoordinator;
private final SnapScrollHelper mSnapScrollHelper; private final SnapScrollHelper mSnapScrollHelper;
private final PrefChangeRegistrar mPrefChangeRegistrar; private final PrefChangeRegistrar mPrefChangeRegistrar;
...@@ -84,8 +87,13 @@ class FeedNewTabPageMediator ...@@ -84,8 +87,13 @@ class FeedNewTabPageMediator
/** Update the content based on supervised user or enterprise policy. */ /** Update the content based on supervised user or enterprise policy. */
private void updateContent() { private void updateContent() {
mFeedEnabled = // TODO(huayinz): Replace sOverrideFeedEnabledForTesting with the real preference in test
PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_SECTION_ENABLED); // once we have a decision for whether to re-enable the Feed on supervised/enterprise
// account removed within a session.
if (!sOverrideFeedEnabledForTesting) {
mFeedEnabled =
PrefServiceBridge.getInstance().getBoolean(Pref.NTP_ARTICLES_SECTION_ENABLED);
}
if ((mFeedEnabled && mCoordinator.getStream() != null) if ((mFeedEnabled && mCoordinator.getStream() != null)
|| (!mFeedEnabled && mCoordinator.getScrollViewForPolicy() != null)) || (!mFeedEnabled && mCoordinator.getScrollViewForPolicy() != null))
return; return;
...@@ -316,4 +324,26 @@ class FeedNewTabPageMediator ...@@ -316,4 +324,26 @@ class FeedNewTabPageMediator
mCoordinator.getSigninPromoView(), null); mCoordinator.getSigninPromoView(), null);
} }
} }
@VisibleForTesting
void overrideFeedEnabledForTesting(boolean override) {
sOverrideFeedEnabledForTesting = override;
}
@VisibleForTesting
void updateContentForTesting(boolean feedEnabled) {
mFeedEnabled = feedEnabled;
updateContent();
}
// TODO(huayinz): Return the Model for testing in Coordinator instead once a Model is created.
@VisibleForTesting
SectionHeader getSectionHeaderForTesting() {
return mSectionHeader;
}
@VisibleForTesting
SignInPromo getSignInPromoForTesting() {
return mSignInPromo;
}
} }
...@@ -46,6 +46,7 @@ if (enable_feed_in_chrome) { ...@@ -46,6 +46,7 @@ if (enable_feed_in_chrome) {
feed_test_java_sources = [ feed_test_java_sources = [
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java", "//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java", "//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedRefreshTaskTest.java", "//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedRefreshTaskTest.java",
] ]
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingTop="12dp" android:paddingTop="12dp"
android:layout_marginTop="12dp"> android:layout_marginTop="@dimen/content_suggestions_card_modern_margin">
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -31,6 +31,8 @@ import org.chromium.chrome.browser.download.DownloadManagerService; ...@@ -31,6 +31,8 @@ import org.chromium.chrome.browser.download.DownloadManagerService;
import org.chromium.chrome.browser.native_page.NativePage; import org.chromium.chrome.browser.native_page.NativePage;
import org.chromium.chrome.browser.native_page.NativePageHost; import org.chromium.chrome.browser.native_page.NativePageHost;
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
import org.chromium.chrome.browser.ntp.cards.ItemViewType;
import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter;
import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource; import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource;
import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler; import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
...@@ -629,4 +631,22 @@ public class NewTabPage ...@@ -629,4 +631,22 @@ public class NewTabPage
public NewTabPageManager getManagerForTesting() { public NewTabPageManager getManagerForTesting() {
return mNewTabPageManager; return mNewTabPageManager;
} }
@VisibleForTesting
public View getSignInPromoViewForTesting() {
RecyclerView recyclerView = mNewTabPageView.getRecyclerView();
NewTabPageAdapter adapter = (NewTabPageAdapter) recyclerView.getAdapter();
return recyclerView
.findViewHolderForAdapterPosition(
adapter.getFirstPositionForType(ItemViewType.PROMO))
.itemView;
}
@VisibleForTesting
public View getSectionHeaderViewForTesting() {
RecyclerView recyclerView = mNewTabPageView.getRecyclerView();
NewTabPageAdapter adapter = (NewTabPageAdapter) recyclerView.getAdapter();
return recyclerView.findViewHolderForAdapterPosition(adapter.getFirstHeaderPosition())
.itemView;
}
} }
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.ntp.cards; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.ntp.cards;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.native_page.ContextMenuManager; import org.chromium.chrome.browser.native_page.ContextMenuManager;
import org.chromium.chrome.browser.signin.DisplayableProfileData; import org.chromium.chrome.browser.signin.DisplayableProfileData;
...@@ -65,12 +66,14 @@ public class PersonalizedPromoViewHolder extends CardViewHolder { ...@@ -65,12 +66,14 @@ public class PersonalizedPromoViewHolder extends CardViewHolder {
* @param profileData The profile data which will be used to configure the personalized * @param profileData The profile data which will be used to configure the personalized
* signin promo. * signin promo.
*/ */
@VisibleForTesting
public void bindAndConfigureViewForTests(@Nullable DisplayableProfileData profileData) { public void bindAndConfigureViewForTests(@Nullable DisplayableProfileData profileData) {
super.onBindViewHolder(); super.onBindViewHolder();
PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) itemView; PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) itemView;
mSigninPromoController.setupPromoView(view.getContext(), view, profileData, null); mSigninPromoController.setupPromoView(view.getContext(), view, profileData, null);
} }
@VisibleForTesting
public void setSigninPromoControllerForTests(@Nullable SigninPromoController controller) { public void setSigninPromoControllerForTests(@Nullable SigninPromoController controller) {
mSigninPromoController = controller; mSigninPromoController = controller;
} }
......
...@@ -168,13 +168,13 @@ public class SignInPromo extends OptionalLeaf { ...@@ -168,13 +168,13 @@ public class SignInPromo extends OptionalLeaf {
} }
@VisibleForTesting @VisibleForTesting
SigninObserver getSigninObserverForTesting() { public SigninObserver getSigninObserverForTesting() {
return mSigninObserver; return mSigninObserver;
} }
@VisibleForTesting @VisibleForTesting
class SigninObserver implements SignInStateObserver, SignInAllowedObserver, public class SigninObserver implements SignInStateObserver, SignInAllowedObserver,
ProfileDataCache.Observer, AccountsChangeObserver { ProfileDataCache.Observer, AccountsChangeObserver {
private final SigninManager mSigninManager; private final SigninManager mSigninManager;
/** Guards {@link #unregister()}, which can be called multiple times. */ /** Guards {@link #unregister()}, which can be called multiple times. */
......
...@@ -9,14 +9,24 @@ import android.os.Build; ...@@ -9,14 +9,24 @@ import android.os.Build;
import org.chromium.chrome.browser.ntp.IncognitoNewTabPage; import org.chromium.chrome.browser.ntp.IncognitoNewTabPage;
import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.suggestions.SiteSuggestion;
import org.chromium.chrome.browser.suggestions.TileSectionType;
import org.chromium.chrome.browser.suggestions.TileSource;
import org.chromium.chrome.browser.suggestions.TileTitleSource;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.Criteria;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* Utilities for testing the NTP. * Utilities for testing the NTP.
*/ */
public class NewTabPageTestUtils { public class NewTabPageTestUtils {
private static final String TEST_PAGE = "/chrome/test/data/android/navigate/simple.html";
/** /**
* Waits for the NTP owned by the passed in tab to be fully loaded. * Waits for the NTP owned by the passed in tab to be fully loaded.
...@@ -45,4 +55,32 @@ public class NewTabPageTestUtils { ...@@ -45,4 +55,32 @@ public class NewTabPageTestUtils {
}); });
} }
public static List<SiteSuggestion> createFakeSiteSuggestions(EmbeddedTestServer testServer) {
List<SiteSuggestion> siteSuggestions = new ArrayList<>();
siteSuggestions.add(new SiteSuggestion("0 TOP_SITES", testServer.getURL(TEST_PAGE) + "#0",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
siteSuggestions.add(new SiteSuggestion("1 WHITELIST", testServer.getURL(TEST_PAGE) + "#1",
"/test.png", TileTitleSource.UNKNOWN, TileSource.WHITELIST,
TileSectionType.PERSONALIZED, new Date()));
siteSuggestions.add(new SiteSuggestion("2 TOP_SITES", testServer.getURL(TEST_PAGE) + "#2",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
siteSuggestions.add(new SiteSuggestion("3 TOP_SITES", testServer.getURL(TEST_PAGE) + "#3",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
siteSuggestions.add(new SiteSuggestion("4 TOP_SITES", testServer.getURL(TEST_PAGE) + "#4",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
siteSuggestions.add(new SiteSuggestion("5 TOP_SITES", testServer.getURL(TEST_PAGE) + "#5",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
siteSuggestions.add(new SiteSuggestion("6 TOP_SITES", testServer.getURL(TEST_PAGE) + "#6",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
siteSuggestions.add(new SiteSuggestion("7 TOP_SITES", testServer.getURL(TEST_PAGE) + "#7",
"", TileTitleSource.TITLE_TAG, TileSource.TOP_SITES, TileSectionType.PERSONALIZED,
new Date()));
return siteSuggestions;
}
} }
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