From 877f2a6d35274cfca22ba8eb1e4e94f86fdd495f Mon Sep 17 00:00:00 2001 From: Chun-Ku Lin Date: Fri, 28 Feb 2025 23:59:34 +0000 Subject: [PATCH] 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 --- tests/unit/Android.bp | 1 + ...lorsIntensityPreferenceControllerTest.java | 72 +++++++------------ ...rsPersistencePreferenceControllerTest.java | 7 +- 3 files changed, 31 insertions(+), 49 deletions(-) diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp index 07df3c847a8..2be75ec6934 100644 --- a/tests/unit/Android.bp +++ b/tests/unit/Android.bp @@ -31,6 +31,7 @@ android_test { "mockito-target-minus-junit4", "platform-test-annotations", "platform-test-rules", + "testables", "truth", "kotlinx_coroutines_test", "SettingsLibPreference-testutils", diff --git a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java index bc4709bca11..371904e2841 100644 --- a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java @@ -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(); } diff --git a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java index ef27d73119d..76efd1c1786 100644 --- a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java @@ -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);