Commit f5575ea9 authored by Wenyu Fu's avatar Wenyu Fu Committed by Commit Bot

Change policy setup for HomepageSettingsFragmentTest

Mockito does not work for some of the bots for unknown reason so that
policy related tests in HomepageSettingsFragmentTest all failed.

Changing HomepageTestRule and use AppRestrictionProvider to provide
test policy settings; re-enabling those tests to strengthen our test
coverage.

Bug: 1049557
Change-Id: I93514c020498d9b26c53b2c3f76cf819bd0bba7e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2047353
Commit-Queue: Theresa  <twellington@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#747544}
parent b6c3db40
......@@ -4,12 +4,24 @@
package org.chromium.chrome.browser.homepage;
import android.support.test.InstrumentationRegistry;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.policy.AbstractAppRestrictionsProvider;
import org.chromium.policy.AppRestrictionsProvider;
import org.chromium.policy.CombinedPolicyProvider;
import org.chromium.policy.test.PolicyData;
import java.util.Arrays;
/**
* Test rule for homepage related tests. It fetches the latest values from shared preference
......@@ -23,6 +35,7 @@ public class HomepageTestRule implements TestRule {
private String mCustomizedHomepage;
private final SharedPreferencesManager mManager;
private @Nullable AppRestrictionsProvider mTestProvider;
public HomepageTestRule() {
mManager = SharedPreferencesManager.getInstance();
......@@ -38,6 +51,8 @@ public class HomepageTestRule implements TestRule {
base.evaluate();
} finally {
restoreHomepageRelatedPreferenceAfterTest();
// Reset preference if a test policy override is provided in test.
if (mTestProvider != null) setHomepagePolicyForTest(null);
}
}
};
......@@ -60,6 +75,33 @@ public class HomepageTestRule implements TestRule {
mManager.writeString(ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, mCustomizedHomepage);
}
/**
* Setup or disable HomepageLocation policy for test.
* @param homepage String value of HomepageLocation. If the input string is empty, policy for
* test will be disabled.
*/
public void setHomepagePolicyForTest(String homepage) {
if (TextUtils.isEmpty(homepage)) {
AbstractAppRestrictionsProvider.setTestRestrictions(null);
} else {
final PolicyData[] policies = {
new PolicyData.Str("HomepageLocation", homepage),
};
AbstractAppRestrictionsProvider.setTestRestrictions(
PolicyData.asBundle(Arrays.asList(policies)));
}
if (mTestProvider == null) {
mTestProvider = new AppRestrictionsProvider(
InstrumentationRegistry.getInstrumentation().getContext());
CombinedPolicyProvider.get().registerProvider(mTestProvider);
}
TestThreadUtils.runOnUiThreadBlocking(mTestProvider::refresh);
// To avoid race conditions
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}
// Utility functions that help setting up homepage related shared preference.
/**
......
......@@ -15,19 +15,14 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
import org.chromium.chrome.browser.homepage.HomepageTestRule;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
......@@ -102,9 +97,6 @@ public class HomepageSettingsFragmentTest {
@Rule
public TestRule mFeatureProcessor = new Features.InstrumentationProcessor();
@Mock
public HomepagePolicyManager mMockPolicyManager;
private ChromeSwitchPreference mSwitch;
private RadioButtonGroupHomepagePreference mRadioGroupPreference;
private TextMessagePreference mManagedText;
......@@ -115,8 +107,6 @@ public class HomepageSettingsFragmentTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
RecordHistogram.setDisabledForTests(true);
}
......@@ -176,8 +166,7 @@ public class HomepageSettingsFragmentTest {
@Test
@SmallTest
@Feature({"Homepage"})
@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
@DisabledTest(message = "crbug.com/1051213")
@Restriction({UiRestriction.RESTRICTION_TYPE_PHONE})
public void testStartUp_ChromeNTP_BottomToolbar() {
mHomepageTestRule.useCustomizedHomepageForTest(TEST_URL_BAR);
mHomepageTestRule.useChromeNTPForTest();
......@@ -228,15 +217,10 @@ public class HomepageSettingsFragmentTest {
@Test
@SmallTest
@Feature({"Homepage"})
@DisabledTest
public void testStartUp_Policies_Customized() {
// Set mock policies
Mockito.when(mMockPolicyManager.isHomepageLocationPolicyEnabled()).thenReturn(true);
Mockito.when(mMockPolicyManager.getHomepagePreference()).thenReturn(TEST_URL_BAR);
HomepagePolicyManager origInstance = HomepagePolicyManager.getInstance();
HomepagePolicyManager.setInstanceForTests(mMockPolicyManager);
CachedFeatureFlags.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, true);
mHomepageTestRule.setHomepagePolicyForTest(TEST_URL_BAR);
launchSettingsActivity();
......@@ -261,22 +245,16 @@ public class HomepageSettingsFragmentTest {
mManagedText.isVisible());
// Reset policy
HomepagePolicyManager.setInstanceForTests(origInstance);
CachedFeatureFlags.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, null);
}
@Test
@SmallTest
@Feature({"Homepage"})
@DisabledTest
public void testStartUp_Policies_NTP() {
// Set mock policies
Mockito.when(mMockPolicyManager.isHomepageLocationPolicyEnabled()).thenReturn(true);
Mockito.when(mMockPolicyManager.getHomepagePreference()).thenReturn(CHROME_NTP);
HomepagePolicyManager origInstance = HomepagePolicyManager.getInstance();
HomepagePolicyManager.setInstanceForTests(mMockPolicyManager);
CachedFeatureFlags.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, true);
mHomepageTestRule.setHomepagePolicyForTest(CHROME_NTP);
launchSettingsActivity();
......@@ -297,23 +275,17 @@ public class HomepageSettingsFragmentTest {
mManagedText.isVisible());
// Reset policy and feature flags
HomepagePolicyManager.setInstanceForTests(origInstance);
CachedFeatureFlags.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, null);
}
@Test
@SmallTest
@Feature({"Homepage"})
@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
@DisabledTest
@Restriction({UiRestriction.RESTRICTION_TYPE_PHONE})
public void testStartUp_Policies_Customized_BottomToolbar() {
// Set mock policies
Mockito.when(mMockPolicyManager.isHomepageLocationPolicyEnabled()).thenReturn(true);
Mockito.when(mMockPolicyManager.getHomepagePreference()).thenReturn(TEST_URL_BAR);
HomepagePolicyManager origInstance = HomepagePolicyManager.getInstance();
HomepagePolicyManager.setInstanceForTests(mMockPolicyManager);
CachedFeatureFlags.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, true);
mHomepageTestRule.setHomepagePolicyForTest(TEST_URL_BAR);
CachedFeatureFlags.setForTesting(ChromeFeatureList.CHROME_DUET, true);
Assert.assertTrue("BottomToolbar should be enabled after setting up feature flag.",
......@@ -340,7 +312,6 @@ public class HomepageSettingsFragmentTest {
"Managed text message preference should be disabled.", mManagedText.isEnabled());
// Reset policy
HomepagePolicyManager.setInstanceForTests(origInstance);
CachedFeatureFlags.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, null);
CachedFeatureFlags.setForTesting(ChromeFeatureList.CHROME_DUET, null);
}
......
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