diff options
2 files changed, 122 insertions, 87 deletions
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java index 1c2dc34b9be5..51dcc0323a96 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java @@ -31,10 +31,13 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; +import android.content.ContentResolver; import android.content.Context; +import android.content.ContextWrapper; import android.content.res.Resources; import android.hardware.Sensor; import android.hardware.SensorEventListener; @@ -45,18 +48,18 @@ import android.os.Handler; import android.os.Looper; import android.os.PowerManager; import android.os.SystemProperties; +import android.os.UserHandle; import android.os.test.TestLooper; import android.provider.Settings; -import android.testing.TestableContext; import android.util.FloatProperty; import android.view.Display; import android.view.DisplayInfo; -import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.core.app.ApplicationProvider; import androidx.test.filters.SmallTest; -import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; -import com.android.server.ExtendedMockitoRule; +import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.server.LocalServices; import com.android.server.am.BatteryStatsService; import com.android.server.display.RampAnimator.DualRampAnimator; @@ -69,12 +72,12 @@ import com.android.server.testutils.OffsettableClock; import org.junit.After; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; +import org.mockito.MockitoSession; import org.mockito.quality.Strictness; import org.mockito.stubbing.Answer; @@ -92,9 +95,11 @@ public final class DisplayPowerController2Test { private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789"; private static final float PROX_SENSOR_MAX_RANGE = 5; + private MockitoSession mSession; private OffsettableClock mClock; private TestLooper mTestLooper; private Handler mHandler; + private Context mContextSpy; private DisplayPowerControllerHolder mHolder; private Sensor mProxSensor; @@ -111,38 +116,40 @@ public final class DisplayPowerController2Test { @Mock private PowerManager mPowerManagerMock; @Mock + private Resources mResourcesMock; + @Mock private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock; @Captor private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor; - @Rule - public final TestableContext mContext = new TestableContext( - InstrumentationRegistry.getInstrumentation().getContext()); - - @Rule - public final ExtendedMockitoRule mExtendedMockitoRule = - new ExtendedMockitoRule.Builder(this) - .setStrictness(Strictness.LENIENT) - .spyStatic(SystemProperties.class) - .spyStatic(BatteryStatsService.class) - .build(); - @Before public void setUp() throws Exception { + mSession = ExtendedMockito.mockitoSession() + .initMocks(this) + .strictness(Strictness.LENIENT) + .spyStatic(SystemProperties.class) + .spyStatic(LocalServices.class) + .spyStatic(BatteryStatsService.class) + .spyStatic(Settings.System.class) + .startMocking(); + mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext())); mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); mHandler = new Handler(mTestLooper.getLooper()); - addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock); - addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class, - mCdsiMock); - mContext.addMockSystemService(PowerManager.class, mPowerManagerMock); + when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock); + when(mContextSpy.getResources()).thenReturn(mResourcesMock); doAnswer((Answer<Void>) invocationOnMock -> null).when(() -> SystemProperties.set(anyString(), any())); + doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock -> + mCdsiMock).when(() -> LocalServices.getService( + ColorDisplayService.ColorDisplayServiceInternal.class)); doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService); + doAnswer((Answer<Boolean>) invocationOnMock -> true).when(() -> + Settings.System.putFloatForUser(any(), any(), anyFloat(), anyInt())); setUpSensors(); mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID); @@ -150,8 +157,8 @@ public final class DisplayPowerController2Test { @After public void tearDown() { + mSession.finishMocking(); LocalServices.removeServiceForTest(WindowManagerPolicy.class); - LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class); } @Test @@ -412,9 +419,11 @@ public final class DisplayPowerController2Test { @Test public void testDisplayBrightnessFollowers_AutomaticBrightness() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); final float brightness = 0.4f; final float nits = 300; final float ambientLux = 3000; @@ -531,9 +540,11 @@ public final class DisplayPowerController2Test { @Test public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_OFF; @@ -564,14 +575,17 @@ public final class DisplayPowerController2Test { @Test public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_DOZE; - mContext.getOrCreateTestableResources().addOverride( - com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true); + when(mResourcesMock.getBoolean( + com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing)) + .thenReturn(true); mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState @@ -599,9 +613,11 @@ public final class DisplayPowerController2Test { @Test public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_OFF; @@ -614,9 +630,11 @@ public final class DisplayPowerController2Test { @Test public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false); DisplayPowerRequest dpr = new DisplayPowerRequest(); @@ -669,9 +687,9 @@ public final class DisplayPowerController2Test { public void testBrightnessNitsPersistWhenDisplayDeviceChanges() { float brightness = 0.3f; float nits = 500; - mContext.getOrCreateTestableResources().addOverride( - com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay, - true); + when(mResourcesMock.getBoolean( + com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay)) + .thenReturn(true); mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID); when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); @@ -791,7 +809,7 @@ public final class DisplayPowerController2Test { setUpDisplay(displayId, uniqueId, display, device, config, isEnabled); final DisplayPowerController2 dpc = new DisplayPowerController2( - mContext, injector, mDisplayPowerCallbacksMock, mHandler, + mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler, mSensorManagerMock, mDisplayBlankerMock, display, mBrightnessTrackerMock, brightnessSetting, () -> {}, hbmMetadata, /* bootCompleted= */ false); diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java index 1bc1d1013247..0a1bf1c9ed99 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -31,10 +31,13 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; +import android.content.ContentResolver; import android.content.Context; +import android.content.ContextWrapper; import android.content.res.Resources; import android.hardware.Sensor; import android.hardware.SensorEventListener; @@ -45,18 +48,18 @@ import android.os.Handler; import android.os.Looper; import android.os.PowerManager; import android.os.SystemProperties; +import android.os.UserHandle; import android.os.test.TestLooper; import android.provider.Settings; -import android.testing.TestableContext; import android.util.FloatProperty; import android.view.Display; import android.view.DisplayInfo; -import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.core.app.ApplicationProvider; import androidx.test.filters.SmallTest; -import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; -import com.android.server.ExtendedMockitoRule; +import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.server.LocalServices; import com.android.server.am.BatteryStatsService; import com.android.server.display.RampAnimator.DualRampAnimator; @@ -69,12 +72,12 @@ import com.android.server.testutils.OffsettableClock; import org.junit.After; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; +import org.mockito.MockitoSession; import org.mockito.quality.Strictness; import org.mockito.stubbing.Answer; @@ -92,9 +95,11 @@ public final class DisplayPowerControllerTest { private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789"; private static final float PROX_SENSOR_MAX_RANGE = 5; + private MockitoSession mSession; private OffsettableClock mClock; private TestLooper mTestLooper; private Handler mHandler; + private Context mContextSpy; private DisplayPowerControllerHolder mHolder; private Sensor mProxSensor; @@ -111,38 +116,41 @@ public final class DisplayPowerControllerTest { @Mock private PowerManager mPowerManagerMock; @Mock + private Resources mResourcesMock; + @Mock private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock; @Captor private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor; - @Rule - public final TestableContext mContext = new TestableContext( - InstrumentationRegistry.getInstrumentation().getContext()); - - @Rule - public final ExtendedMockitoRule mExtendedMockitoRule = - new ExtendedMockitoRule.Builder(this) - .setStrictness(Strictness.LENIENT) - .spyStatic(SystemProperties.class) - .spyStatic(BatteryStatsService.class) - .build(); - @Before public void setUp() throws Exception { + mSession = ExtendedMockito.mockitoSession() + .initMocks(this) + .strictness(Strictness.LENIENT) + .spyStatic(SystemProperties.class) + .spyStatic(LocalServices.class) + .spyStatic(BatteryStatsService.class) + .spyStatic(Settings.System.class) + .startMocking(); + mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext())); mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); mHandler = new Handler(mTestLooper.getLooper()); addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock); - addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class, - mCdsiMock); - mContext.addMockSystemService(PowerManager.class, mPowerManagerMock); + when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock); + when(mContextSpy.getResources()).thenReturn(mResourcesMock); doAnswer((Answer<Void>) invocationOnMock -> null).when(() -> SystemProperties.set(anyString(), any())); + doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock -> + mCdsiMock).when(() -> LocalServices.getService( + ColorDisplayService.ColorDisplayServiceInternal.class)); doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService); + doAnswer((Answer<Boolean>) invocationOnMock -> true).when(() -> + Settings.System.putFloatForUser(any(), any(), anyFloat(), anyInt())); setUpSensors(); mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID); @@ -150,8 +158,8 @@ public final class DisplayPowerControllerTest { @After public void tearDown() { + mSession.finishMocking(); LocalServices.removeServiceForTest(WindowManagerPolicy.class); - LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class); } @Test @@ -414,9 +422,11 @@ public final class DisplayPowerControllerTest { @Test public void testDisplayBrightnessFollowers_AutomaticBrightness() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); final float brightness = 0.4f; final float nits = 300; final float ambientLux = 3000; @@ -534,9 +544,11 @@ public final class DisplayPowerControllerTest { @Test public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_OFF; @@ -567,14 +579,17 @@ public final class DisplayPowerControllerTest { @Test public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_DOZE; - mContext.getOrCreateTestableResources().addOverride( - com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true); + when(mResourcesMock.getBoolean( + com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing)) + .thenReturn(true); mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState @@ -602,9 +617,11 @@ public final class DisplayPowerControllerTest { @Test public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_OFF; @@ -617,10 +634,11 @@ public final class DisplayPowerControllerTest { @Test public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); - + doAnswer((Answer<Integer>) invocationOnMock -> + Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) + .when(() -> Settings.System.getIntForUser(any(ContentResolver.class), + eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(), + eq(UserHandle.USER_CURRENT))); mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false); DisplayPowerRequest dpr = new DisplayPowerRequest(); @@ -673,10 +691,9 @@ public final class DisplayPowerControllerTest { public void testBrightnessNitsPersistWhenDisplayDeviceChanges() { float brightness = 0.3f; float nits = 500; - mContext.getOrCreateTestableResources().addOverride( - com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay, - true); - + when(mResourcesMock.getBoolean( + com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay)) + .thenReturn(true); mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID); when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); @@ -795,7 +812,7 @@ public final class DisplayPowerControllerTest { setUpDisplay(displayId, uniqueId, display, device, config, isEnabled); final DisplayPowerController dpc = new DisplayPowerController( - mContext, injector, mDisplayPowerCallbacksMock, mHandler, + mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler, mSensorManagerMock, mDisplayBlankerMock, display, mBrightnessTrackerMock, brightnessSetting, () -> {}, hbmMetadata, /* bootCompleted= */ false); |