Commit 710ab582 authored by Lijin Shen's avatar Lijin Shen Committed by Commit Bot

Add tests for DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING feature

The CL adds some tests to ensure feature is enabled when checkbox
is checked and it can maintain its state when other theme is selected.

Bug: 1022210
Change-Id: I27ebe58d6cda4164c2ee5279bc1dac97cffec599
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1940609
Commit-Queue: Lijin Shen <lazzzis@google.com>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#721101}
parent ff51b23d
...@@ -140,4 +140,14 @@ public class RadioButtonGroupThemePreference ...@@ -140,4 +140,14 @@ public class RadioButtonGroupThemePreference
ArrayList getButtonsForTesting() { ArrayList getButtonsForTesting() {
return mButtons; return mButtons;
} }
@VisibleForTesting
public RadioButtonWithDescriptionLayout getGroupForTesting() {
return mGroup;
}
@VisibleForTesting
public LinearLayout getCheckboxContainerForTesting() {
return mCheckboxContainer;
}
} }
...@@ -5,10 +5,14 @@ ...@@ -5,10 +5,14 @@
package org.chromium.chrome.browser.settings.themes; package org.chromium.chrome.browser.settings.themes;
import static org.chromium.chrome.browser.ChromeFeatureList.ANDROID_NIGHT_MODE; import static org.chromium.chrome.browser.ChromeFeatureList.ANDROID_NIGHT_MODE;
import static org.chromium.chrome.browser.ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.DARKEN_WEBSITES_ENABLED_KEY;
import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.UI_THEME_SETTING_KEY; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.UI_THEME_SETTING_KEY;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
import android.view.View;
import android.widget.LinearLayout;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
...@@ -27,6 +31,7 @@ import org.chromium.chrome.browser.settings.SettingsActivity; ...@@ -27,6 +31,7 @@ import org.chromium.chrome.browser.settings.SettingsActivity;
import org.chromium.chrome.browser.settings.SettingsActivityTest; import org.chromium.chrome.browser.settings.SettingsActivityTest;
import org.chromium.chrome.browser.settings.themes.ThemePreferences.ThemeSetting; import org.chromium.chrome.browser.settings.themes.ThemePreferences.ThemeSetting;
import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescription; import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescription;
import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescriptionLayout;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.chrome.test.ui.DummyUiActivityTestCase; import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.Features;
...@@ -62,6 +67,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -62,6 +67,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
public void setUpTest() throws Exception { public void setUpTest() throws Exception {
super.setUpTest(); super.setUpTest();
SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING_KEY); SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING_KEY);
SharedPreferencesManager.getInstance().removeKey(DARKEN_WEBSITES_ENABLED_KEY);
SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity(
InstrumentationRegistry.getInstrumentation(), ThemePreferences.class.getName()); InstrumentationRegistry.getInstrumentation(), ThemePreferences.class.getName());
mFragment = (ThemePreferences) settingsActivity.getMainFragment(); mFragment = (ThemePreferences) settingsActivity.getMainFragment();
...@@ -71,8 +77,10 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -71,8 +77,10 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
@Override @Override
public void tearDownTest() throws Exception { public void tearDownTest() throws Exception {
TestThreadUtils.runOnUiThreadBlocking( TestThreadUtils.runOnUiThreadBlocking(() -> {
() -> SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING_KEY)); SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING_KEY);
SharedPreferencesManager.getInstance().removeKey(DARKEN_WEBSITES_ENABLED_KEY);
});
FeatureUtilities.setNightModeDefaultToLightForTesting(null); FeatureUtilities.setNightModeDefaultToLightForTesting(null);
super.tearDownTest(); super.tearDownTest();
...@@ -123,6 +131,75 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -123,6 +131,75 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
}); });
} }
@Test
@SmallTest
@Feature({"Themes"})
@Features.EnableFeatures(DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING)
public void testDarkenWebsiteButton() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
// Default to light parameter is only applicable pre-Q.
if (mDefaultToLight && BuildInfo.isAtLeastQ()) {
Assert.assertFalse("Q should not default to light.",
FeatureUtilities.isNightModeDefaultToLight());
return;
}
LinearLayout checkboxContainer = mPreference.getCheckboxContainerForTesting();
RadioButtonWithDescriptionLayout group = mPreference.getGroupForTesting();
int expectedDefaultTheme =
mDefaultToLight ? ThemeSetting.LIGHT : ThemeSetting.SYSTEM_DEFAULT;
Assert.assertEquals("Incorrect default theme setting.", expectedDefaultTheme,
NightModeUtils.getThemeSetting());
assertButtonCheckedCorrectly(
mDefaultToLight ? "Light" : "System default", expectedDefaultTheme);
// Select System default
selectButton(0);
Assert.assertTrue(
"Darken website button should be visible when system default is checked",
checkboxContainer.getVisibility() == View.VISIBLE);
Assert.assertEquals(
"Darken website button should be below the system default option when system"
+ " default is checked",
1, group.indexOfChild(checkboxContainer));
// Select Light
selectButton(1);
Assert.assertTrue(
"Darken website button should be invisible when light theme is checked",
checkboxContainer.getVisibility() != View.VISIBLE);
// Select Dark
selectButton(2);
Assert.assertTrue("Darken website button should be visible when dark theme is checked",
checkboxContainer.getVisibility() == View.VISIBLE);
Assert.assertEquals("Darken website button should be below the dark theme option"
+ " when dark theme is checked",
3, group.indexOfChild(checkboxContainer));
// Check darken website button
checkboxContainer.performClick();
SharedPreferencesManager sharedPreferencesManager =
SharedPreferencesManager.getInstance();
Assert.assertTrue("Darken website feature should be enabled when darken website button"
+ " is checked",
mPreference.isDarkenWebsitesEnabled());
Assert.assertTrue("Darken website feature should be enabled when darken website button"
+ " is checked",
sharedPreferencesManager.readBoolean(DARKEN_WEBSITES_ENABLED_KEY, false));
// Check system default, darken website button should stay checked
selectButton(1);
Assert.assertTrue(
"Darken website button should stay its state when changing theme preference",
mPreference.isDarkenWebsitesEnabled());
Assert.assertTrue(
"Darken website button should stay its state when changing theme preference",
sharedPreferencesManager.readBoolean(DARKEN_WEBSITES_ENABLED_KEY, false));
});
}
private RadioButtonWithDescription getButton(int index) { private RadioButtonWithDescription getButton(int index) {
return (RadioButtonWithDescription) mPreference.getButtonsForTesting().get(index); return (RadioButtonWithDescription) mPreference.getButtonsForTesting().get(index);
} }
......
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