Use Fake context and settings provider to prevent test flakiness

**Root cause**
The ReduceBrightColorsIntensityPreferenceControllerTest would modify the
settings during test. However, since this is a unit test, it shouldn't
trigger modifying the brightness on the attached test device. Otherwise,
the test would be unstable depends on how stable the device is, which
should be tested by the integration test.

Bug: 397762527
Test: abtd
Flag: EXEMPT test only
Change-Id: I0c0d7327d4356482295121c11c3a1e5ed814ffec
This commit is contained in:
Chun-Ku Lin
2025-02-28 23:59:34 +00:00
parent 01d938228a
commit 877f2a6d35
3 changed files with 31 additions and 49 deletions

View File

@@ -31,6 +31,7 @@ android_test {
"mockito-target-minus-junit4",
"platform-test-annotations",
"platform-test-rules",
"testables",
"truth",
"kotlinx_coroutines_test",
"SettingsLibPreference-testutils",

View File

@@ -18,16 +18,12 @@ package com.android.settings.accessibility;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.testing.TestableContext;
import android.testing.TestableResources;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -46,16 +42,15 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Rule
public final TestableContext mContext =
new TestableContext(ApplicationProvider.getApplicationContext());
private Context mContext;
private Resources mResources;
private TestableResources mResources = mContext.getOrCreateTestableResources();
private ReduceBrightColorsIntensityPreferenceController mPreferenceController;
@Before
public void setUp() {
mContext = spy(ApplicationProvider.getApplicationContext());
mResources = spy(mContext.getResources());
when(mContext.getResources()).thenReturn(mResources);
mPreferenceController = new ReduceBrightColorsIntensityPreferenceController(mContext,
"rbc_intensity");
}
@@ -63,12 +58,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@DisableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOffAndDisabled_RbcOnAndAvailable_returnTrue() {
doReturn(false).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
doReturn(true).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
assertThat(mPreferenceController.isAvailable()).isTrue();
}
@@ -76,12 +69,11 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@DisableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOffAndDisabled_RbcOffAndAvailable_returnTrue() {
doReturn(false).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 0);
doReturn(true).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(
R.bool.config_reduceBrightColorsAvailable, true);
assertThat(mPreferenceController.isAvailable()).isTrue();
}
@@ -89,12 +81,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@DisableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOffAndDisabled_RbcOnAndUnavailable_returnFalse() {
doReturn(false).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
doReturn(false).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, false);
assertThat(mPreferenceController.isAvailable()).isFalse();
}
@@ -102,12 +92,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOnAndDisabled_RbcOnAndAvailable_returnTrue() {
doReturn(false).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
doReturn(true).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
assertThat(mPreferenceController.isAvailable()).isTrue();
}
@@ -115,12 +103,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOnAndDisabled_RbcOffAndAvailable_returnTrue() {
doReturn(false).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 0);
doReturn(true).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
assertThat(mPreferenceController.isAvailable()).isTrue();
}
@@ -128,12 +114,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOnAndDisabled_RbcOnAndUnavailable_returnFalse() {
doReturn(false).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
doReturn(false).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, false);
assertThat(mPreferenceController.isAvailable()).isFalse();
}
@@ -141,12 +125,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOnAndEnabled_RbcOnAndAvailable_returnFalse() {
doReturn(true).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, true);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
doReturn(true).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
assertThat(mPreferenceController.isAvailable()).isFalse();
}
@@ -154,12 +136,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOnAndEnabled_RbcOffAndAvailable_returnFalse() {
doReturn(true).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, true);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 0);
doReturn(true).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
assertThat(mPreferenceController.isAvailable()).isFalse();
}
@@ -167,12 +147,10 @@ public class ReduceBrightColorsIntensityPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_EVEN_DIMMER)
public void isAvailable_whenEvenDimmerOnAndEnabled_RbcOnAndUnavailable_returnFalse() {
doReturn(true).when(mResources).getBoolean(
com.android.internal.R.bool.config_evenDimmerEnabled);
mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, true);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
doReturn(false).when(mResources).getBoolean(
R.bool.config_reduceBrightColorsAvailable);
mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, false);
assertThat(mPreferenceController.isAvailable()).isFalse();
}

View File

@@ -18,13 +18,14 @@ package com.android.settings.accessibility;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.provider.Settings;
import android.testing.TestableContext;
import androidx.preference.SwitchPreference;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -37,7 +38,9 @@ public class ReduceBrightColorsPersistencePreferenceControllerTest {
private static final int OFF = 0;
private static final int UNKNOWN = -1;
private final Context mContext = ApplicationProvider.getApplicationContext();
@Rule
public final TestableContext mContext =
new TestableContext(ApplicationProvider.getApplicationContext());
private final SwitchPreference mPreference = new SwitchPreference(mContext);
private final ReduceBrightColorsPersistencePreferenceController mController =
new ReduceBrightColorsPersistencePreferenceController(mContext, PREF_KEY);