Commit 5e979701 authored by Yaron Friedman's avatar Yaron Friedman Committed by Commit Bot

[Clear browsing data] Finish p0 test automation.

1) Add a test for changing the time period for deleting browsing data.
2) Add a test for tab ui and preference saving.
BUG=10643665

Change-Id: I57f96eff5ff8b1d7023bb0c4a41a66fb023f25cb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2144397
Commit-Queue: Yaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#757970}
parent b5e4ec4f
......@@ -129,7 +129,8 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat
/**
* An option to be shown in the time period spiner.
*/
protected static class TimePeriodSpinnerOption {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
static class TimePeriodSpinnerOption {
private @TimePeriod int mTimePeriod;
private String mTitle;
......@@ -156,11 +157,8 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat
}
}
@VisibleForTesting
public static final String PREF_GOOGLE_SUMMARY = "google_summary";
@VisibleForTesting
public static final String PREF_GENERAL_SUMMARY = "general_summary";
private static final String PREF_TIME_RANGE = "time_period_spinner";
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
static final String PREF_TIME_RANGE = "time_period_spinner";
/** The "Clear" button preference. */
@VisibleForTesting
......
......@@ -14,16 +14,21 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.os.Build;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import androidx.appcompat.app.AlertDialog;
import androidx.collection.ArraySet;
import androidx.fragment.app.Fragment;
import androidx.preference.CheckBoxPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import org.junit.After;
import org.junit.Assert;
......@@ -39,6 +44,7 @@ import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.JniMocker;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment.DialogOption;
import org.chromium.chrome.browser.flags.ChromeSwitches;
......@@ -47,6 +53,7 @@ import org.chromium.chrome.browser.settings.SettingsActivity;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.signin.SigninTestUtil;
import org.chromium.components.browser_ui.settings.SpinnerPreference;
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.TestThreadUtils;
......@@ -127,7 +134,7 @@ public class ClearBrowsingDataFragmentTest {
}, kDelay, CriteriaHelper.DEFAULT_POLLING_INTERVAL);
}
private static void clickClearButton(ClearBrowsingDataFragment preferences) {
private static void clickClearButton(Fragment preferences) {
Button clearButton =
preferences.getView().findViewById(org.chromium.chrome.R.id.clear_button);
Assert.assertNotNull(clearButton);
......@@ -146,6 +153,42 @@ public class ClearBrowsingDataFragmentTest {
return settingsActivity;
}
/**
* Test that Clear Browsing Data offers two tabs and records a preference when switched.
*/
@Test
@MediumTest
public void testTabsSwitcher() {
setDataTypesToClear(ClearBrowsingDataFragment.getAllOptions().toArray(new Integer[0]));
// Set "Advanced" as the user's cached preference.
when(mBrowsingDataBridgeMock.getLastClearBrowsingDataTab(any())).thenReturn(1);
SettingsActivity settingsActivity = mActivityTestRule.startSettingsActivity(
ClearBrowsingDataTabsFragment.class.getName());
final ClearBrowsingDataTabsFragment preferences =
(ClearBrowsingDataTabsFragment) settingsActivity.getMainFragment();
// Verify tab preference is loaded.
verify(mBrowsingDataBridgeMock).getLastClearBrowsingDataTab(any());
TestThreadUtils.runOnUiThreadBlocking(() -> {
ViewPager viewPager = (ViewPager) preferences.getView().findViewById(
R.id.clear_browsing_data_viewpager);
PagerAdapter adapter = viewPager.getAdapter();
Assert.assertEquals(2, adapter.getCount());
Assert.assertEquals(1, viewPager.getCurrentItem());
Assert.assertEquals(InstrumentationRegistry.getTargetContext().getString(
R.string.clear_browsing_data_basic_tab_title),
adapter.getPageTitle(0));
Assert.assertEquals(InstrumentationRegistry.getTargetContext().getString(
R.string.prefs_section_advanced),
adapter.getPageTitle(1));
viewPager.setCurrentItem(0);
});
// Verify the tab preference is saved.
verify(mBrowsingDataBridgeMock).setLastClearBrowsingDataTab(any(), eq(0));
}
/**
* Tests that a fragment with all options preselected indeed has all checkboxes checked
* on startup, and that deletion with all checkboxes checked completes successfully.
......@@ -190,6 +233,50 @@ public class ClearBrowsingDataFragmentTest {
return datatypes;
}
/**
* Tests that changing the time interval for deletion affects the delete request.
*/
@Test
@MediumTest
public void testClearTimeInterval() {
setDataTypesToClear(DialogOption.CLEAR_CACHE);
final ClearBrowsingDataFragment preferences =
(ClearBrowsingDataFragment) startPreferences().getMainFragment();
TestThreadUtils.runOnUiThreadBlocking(() -> {
changeTimePeriodTo(preferences, TimePeriod.LAST_HOUR);
clickClearButton(preferences);
});
waitForProgressToComplete(preferences);
// Verify that we got the appropriate call to clear all data.
verify(mBrowsingDataBridgeMock)
.clearBrowsingData(any(), any(), eq(new int[] {BrowsingDataType.CACHE}),
eq(TimePeriod.LAST_HOUR), any(), any(), any(), any());
}
/**
* Selects the specified time for browsing data removal.
*/
private void changeTimePeriodTo(ClearBrowsingDataFragment preferences, @TimePeriod int time) {
SpinnerPreference spinnerPref = (SpinnerPreference) preferences.findPreference(
ClearBrowsingDataFragment.PREF_TIME_RANGE);
Spinner spinner = spinnerPref.getSpinnerForTesting();
int itemCount = spinner.getAdapter().getCount();
for (int i = 0; i < itemCount; i++) {
ClearBrowsingDataFragment.TimePeriodSpinnerOption option =
(ClearBrowsingDataFragment.TimePeriodSpinnerOption) spinner.getAdapter()
.getItem(i);
if (option.getTimePeriod() == time) {
spinner.setSelection(i);
return;
}
}
Assert.fail("Failed to find time period " + time);
}
/**
* A helper Runnable that opens the Settings activity containing
* a ClearBrowsingDataFragment fragment and clicks the "Clear" button.
......
......@@ -13,6 +13,7 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
......@@ -59,6 +60,14 @@ public class SpinnerPreference extends Preference {
mSelectedIndex = selectedIndex;
}
/**
* Returns the Spinner instance for introspection during tests.
*/
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
public Spinner getSpinnerForTesting() {
return mSpinner;
}
/**
* Provides an adapter containing objects to be shown in the spinner. Alternatively, a list of
* objects to be shown may be provided in {@link #setOptions(Object[], int)}. It is expected
......
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