Commit 21cbaf48 authored by Tanmoy Mollik's avatar Tanmoy Mollik Committed by Commit Bot

[Android] Add render tests for Personalized promos in RecentTabsPage

This cl creates render tests for Personalized promos in RecentTabsPage.

Bug: 1100895
Change-Id: I96cf6637fcd09ba6f4fcbdc33db45d27895f8959
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2362891
Commit-Queue: Tanmoy Mollik <triploblastic@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Reviewed-by: default avatarAlice Wang <aliceywang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804698}
parent f3da9695
...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.ntp; ...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.ntp;
import android.content.Context; import android.content.Context;
import androidx.annotation.IntDef; import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
...@@ -66,6 +67,8 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta ...@@ -66,6 +67,8 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta
private static final int RECENTLY_CLOSED_MAX_TAB_COUNT = 5; private static final int RECENTLY_CLOSED_MAX_TAB_COUNT = 5;
private static @Nullable @PromoState Integer sPromoStateForTests;
private static RecentlyClosedTabManager sRecentlyClosedTabManagerForTests; private static RecentlyClosedTabManager sRecentlyClosedTabManagerForTests;
private final Profile mProfile; private final Profile mProfile;
...@@ -360,6 +363,10 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta ...@@ -360,6 +363,10 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta
*/ */
@PromoState @PromoState
int getPromoType() { int getPromoType() {
if (sPromoStateForTests != null) {
return sPromoStateForTests;
}
if (!mSignInManager.getIdentityManager().hasPrimaryAccount()) { if (!mSignInManager.getIdentityManager().hasPrimaryAccount()) {
if (!mSignInManager.isSignInAllowed()) { if (!mSignInManager.isSignInAllowed()) {
return PromoState.PROMO_NONE; return PromoState.PROMO_NONE;
...@@ -373,10 +380,6 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta ...@@ -373,10 +380,6 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta
return PromoState.PROMO_SIGNIN_PERSONALIZED; return PromoState.PROMO_SIGNIN_PERSONALIZED;
} }
if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)) {
return PromoState.PROMO_SYNC_PERSONALIZED;
}
if (AndroidSyncSettings.get().isSyncEnabled() if (AndroidSyncSettings.get().isSyncEnabled()
&& AndroidSyncSettings.get().isChromeSyncEnabled() && !mForeignSessions.isEmpty()) { && AndroidSyncSettings.get().isChromeSyncEnabled() && !mForeignSessions.isEmpty()) {
return PromoState.PROMO_NONE; return PromoState.PROMO_NONE;
...@@ -443,6 +446,16 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta ...@@ -443,6 +446,16 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta
}); });
} }
/**
* Forces the promo state to a particular value for testing purposes.
* @param promoState The promo state to which the manager will be set to.
* TODO(https://crbug.com/1123478): Create a different method to enforce promo state.
*/
@VisibleForTesting
static void forcePromoStateForTests(@Nullable @PromoState Integer promoState) {
sPromoStateForTests = promoState;
}
@VisibleForTesting @VisibleForTesting
public static void setRecentlyClosedTabManagerForTests(RecentlyClosedTabManager manager) { public static void setRecentlyClosedTabManagerForTests(RecentlyClosedTabManager manager) {
sRecentlyClosedTabManagerForTests = manager; sRecentlyClosedTabManagerForTests = manager;
......
...@@ -54,7 +54,7 @@ public class RecentTabsRowAdapter extends BaseExpandableListAdapter { ...@@ -54,7 +54,7 @@ public class RecentTabsRowAdapter extends BaseExpandableListAdapter {
private static final int MAX_NUM_FAVICONS_TO_CACHE = 128; private static final int MAX_NUM_FAVICONS_TO_CACHE = 128;
@IntDef({ChildType.NONE, ChildType.DEFAULT_CONTENT, ChildType.PERSONALIZED_SIGNIN_PROMO, @IntDef({ChildType.NONE, ChildType.DEFAULT_CONTENT, ChildType.PERSONALIZED_SIGNIN_PROMO,
ChildType.SYNC_PROMO}) ChildType.PERSONALIZED_SYNC_PROMO, ChildType.SYNC_PROMO})
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
private @interface ChildType { private @interface ChildType {
// Values should be enumerated from 0 and can't have gaps. // Values should be enumerated from 0 and can't have gaps.
......
...@@ -4,9 +4,14 @@ ...@@ -4,9 +4,14 @@
package org.chromium.chrome.browser.ntp; package org.chromium.chrome.browser.ntp;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.view.View; import android.view.View;
import androidx.test.filters.LargeTest;
import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest;
import org.hamcrest.Matchers; import org.hamcrest.Matchers;
...@@ -24,8 +29,12 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; ...@@ -24,8 +29,12 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ChromeRenderTestRule;
import org.chromium.chrome.test.util.RecentTabsPageTestUtils; import org.chromium.chrome.test.util.RecentTabsPageTestUtils;
import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.signin.ProfileDataSource;
import org.chromium.components.signin.test.util.FakeProfileDataSource;
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.content_public.browser.test.util.TestThreadUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils;
...@@ -42,9 +51,19 @@ import java.util.concurrent.ExecutionException; ...@@ -42,9 +51,19 @@ import java.util.concurrent.ExecutionException;
@RunWith(ChromeJUnit4ClassRunner.class) @RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public class RecentTabsPageTest { public class RecentTabsPageTest {
// FakeProfileDataSource is required to create the ProfileDataCache entry with sync_off badge
// for Sync promo.
@Rule
public final AccountManagerTestRule mAccountManagerTestRule =
new AccountManagerTestRule(new FakeProfileDataSource());
@Rule @Rule
public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
@Rule
public final ChromeRenderTestRule mRenderTestRule =
ChromeRenderTestRule.Builder.withPublicCorpus().build();
private FakeRecentlyClosedTabManager mManager; private FakeRecentlyClosedTabManager mManager;
private Tab mTab; private Tab mTab;
private RecentTabsPage mPage; private RecentTabsPage mPage;
...@@ -55,12 +74,12 @@ public class RecentTabsPageTest { ...@@ -55,12 +74,12 @@ public class RecentTabsPageTest {
RecentTabsManager.setRecentlyClosedTabManagerForTests(mManager); RecentTabsManager.setRecentlyClosedTabManagerForTests(mManager);
mActivityTestRule.startMainActivityOnBlankPage(); mActivityTestRule.startMainActivityOnBlankPage();
mTab = mActivityTestRule.getActivity().getActivityTab(); mTab = mActivityTestRule.getActivity().getActivityTab();
mPage = loadRecentTabsPage();
} }
@After @After
public void tearDown() { public void tearDown() {
leaveRecentTabsPage(); leaveRecentTabsPage();
RecentTabsManager.forcePromoStateForTests(null);
RecentTabsManager.setRecentlyClosedTabManagerForTests(null); RecentTabsManager.setRecentlyClosedTabManagerForTests(null);
} }
...@@ -69,6 +88,7 @@ public class RecentTabsPageTest { ...@@ -69,6 +88,7 @@ public class RecentTabsPageTest {
@Feature({"RecentTabsPage"}) @Feature({"RecentTabsPage"})
@FlakyTest(message = "crbug.com/1075804") @FlakyTest(message = "crbug.com/1075804")
public void testRecentlyClosedTabs() throws ExecutionException { public void testRecentlyClosedTabs() throws ExecutionException {
mPage = loadRecentTabsPage();
// Set a recently closed tab and confirm a view is rendered for it. // Set a recently closed tab and confirm a view is rendered for it.
List<RecentlyClosedTab> tabs = setRecentlyClosedTabs(1); List<RecentlyClosedTab> tabs = setRecentlyClosedTabs(1);
Assert.assertEquals(1, mManager.getRecentlyClosedTabs(1).size()); Assert.assertEquals(1, mManager.getRecentlyClosedTabs(1).size());
...@@ -81,6 +101,30 @@ public class RecentTabsPageTest { ...@@ -81,6 +101,30 @@ public class RecentTabsPageTest {
waitForViewToDisappear(title); waitForViewToDisappear(title);
} }
@Test
@LargeTest
@Feature("RenderTest")
public void testPersonalizedSigninPromoInRecentTabsPage() throws Exception {
mAccountManagerTestRule.addAccount(new ProfileDataSource.ProfileData(
"test@gmail.com", createAvatar(), "Full Name", "Given Name"));
RecentTabsManager.forcePromoStateForTests(
RecentTabsManager.PromoState.PROMO_SIGNIN_PERSONALIZED);
mPage = loadRecentTabsPage();
mRenderTestRule.render(mPage.getView(), "personalized_signin_promo_recent_tabs_page");
}
@Test
@LargeTest
@Feature("RenderTest")
public void testPersonalizedSyncPromoInRecentTabsPage() throws Exception {
mAccountManagerTestRule.addAccount(new ProfileDataSource.ProfileData(
"test@gmail.com", createAvatar(), "Full Name", "Given Name"));
RecentTabsManager.forcePromoStateForTests(
RecentTabsManager.PromoState.PROMO_SYNC_PERSONALIZED);
mPage = loadRecentTabsPage();
mRenderTestRule.render(mPage.getView(), "personalized_sync_promo_recent_tabs_page");
}
/** /**
* Generates the specified number of {@link RecentlyClosedTab} instances and sets them on the * Generates the specified number of {@link RecentlyClosedTab} instances and sets them on the
* manager. * manager.
...@@ -144,4 +188,23 @@ public class RecentTabsPageTest { ...@@ -144,4 +188,23 @@ public class RecentTabsPageTest {
Assert.assertTrue(InstrumentationRegistry.getInstrumentation().invokeContextMenuAction( Assert.assertTrue(InstrumentationRegistry.getInstrumentation().invokeContextMenuAction(
mActivityTestRule.getActivity(), contextMenuItemId, 0)); mActivityTestRule.getActivity(), contextMenuItemId, 0));
} }
/**
* TODO(https://crbug.com/1125452): Remove this method and use test only resource.
*/
private Bitmap createAvatar() {
final int avatarSize = 40;
Bitmap result = Bitmap.createBitmap(avatarSize, avatarSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawColor(Color.RED);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLUE);
canvas.drawCircle(0, 0, avatarSize, paint);
return result;
}
} }
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