diff options
| author | 2023-07-10 10:42:46 +0000 | |
|---|---|---|
| committer | 2023-07-17 14:42:39 +0000 | |
| commit | d790d2dbf5f9ba874bb48ce0414a76a98cc57ae7 (patch) | |
| tree | 39561b03eae9b9a3c212389f497eb872f7c82c2b | |
| parent | 47d380ee2c8749eb3453d6cf555e7a05127cb796 (diff) | |
Move display mocking tests to DisplayServiceTests
- Move remaining display tests to new module
- Add necessary permissions
Bug: 286043820
Test: atest DisplayServiceTests
Change-Id: I242371f84185b1f770554a5ae0fbab6ed287a86f
(cherry picked from commit eeb677c9d5804dd99bc4eae11c06b170ce8767af)
Merged-In: I242371f84185b1f770554a5ae0fbab6ed287a86f
16 files changed, 276 insertions, 321 deletions
diff --git a/services/tests/displayservicetests/Android.bp b/services/tests/displayservicetests/Android.bp index f1ff33809184..4f555d9cc953 100644 --- a/services/tests/displayservicetests/Android.bp +++ b/services/tests/displayservicetests/Android.bp @@ -28,14 +28,15 @@ android_test { static_libs: [ "androidx.test.ext.junit", - "display-core-libs", "frameworks-base-testutils", "junit", "junit-params", + "mockingservicestests-utils-mockito", "platform-compat-test-rules", "platform-test-annotations", "services.core", "servicestests-utils", + "testables", ], defaults: [ @@ -56,10 +57,3 @@ android_test { enabled: false, }, } - -java_library { - name: "display-core-libs", - srcs: [ - "src/com/android/server/display/TestUtils.java", - ], -} diff --git a/services/tests/displayservicetests/AndroidManifest.xml b/services/tests/displayservicetests/AndroidManifest.xml index d2bd10dd18dc..55fde00a05db 100644 --- a/services/tests/displayservicetests/AndroidManifest.xml +++ b/services/tests/displayservicetests/AndroidManifest.xml @@ -17,10 +17,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.frameworks.displayservicetests"> - <!-- - Insert permissions here. eg: - <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> - --> + <!-- Permissions --> <uses-permission android:name="android.permission.CONTROL_DISPLAY_BRIGHTNESS" /> <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" /> <uses-permission android:name="android.permission.DEVICE_POWER" /> @@ -32,6 +29,10 @@ <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> + <!-- Permissions needed for DisplayTransformManagerTest --> + <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> + <uses-permission android:name="android.permission.HARDWARE_TEST"/> + <application android:debuggable="true" android:testOnly="true"> <uses-library android:name="android.test.mock" android:required="true" /> diff --git a/services/tests/mockingservicestests/src/com/android/server/display/BrightnessSynchronizerTest.java b/services/tests/displayservicetests/src/com/android/server/display/BrightnessSynchronizerTest.java index 2fd6e5fb6892..2fd6e5fb6892 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/BrightnessSynchronizerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/BrightnessSynchronizerTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DensityMappingTest.java b/services/tests/displayservicetests/src/com/android/server/display/DensityMappingTest.java index ae7a2a40d195..ae7a2a40d195 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DensityMappingTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DensityMappingTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayBrightnessStateTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java index 95c62aeec19a..95c62aeec19a 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayBrightnessStateTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java index d54eca2ada9b..d54eca2ada9b 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java index 5de187641ef5..5de187641ef5 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java index 534a708af3c7..534a708af3c7 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java b/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java index d9fbba5b4274..d9fbba5b4274 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java b/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java index aa0a2fea1a5a..aa0a2fea1a5a 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/WakelockControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/WakelockControllerTest.java index c23d4b19cd3a..c23d4b19cd3a 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/WakelockControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/WakelockControllerTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/color/DisplayTransformManagerTest.java b/services/tests/displayservicetests/src/com/android/server/display/color/DisplayTransformManagerTest.java index a785300e98a3..a785300e98a3 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/color/DisplayTransformManagerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/color/DisplayTransformManagerTest.java diff --git a/services/tests/displayservicetests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java index e0bef1a83821..c280349a0559 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java @@ -16,22 +16,49 @@ package com.android.server.display.color; +import static android.view.Display.DEFAULT_DISPLAY; + +import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; + import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assert.assertArrayEquals; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import android.content.Context; +import android.content.res.Resources; import android.hardware.display.DisplayManagerInternal; +import android.os.Binder; +import android.os.IBinder; +import android.view.SurfaceControl; import androidx.test.InstrumentationRegistry; +import com.android.dx.mockito.inline.extended.ExtendedMockito; +import com.android.internal.R; + +import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoSession; +import org.mockito.quality.Strictness; import java.util.Arrays; public class DisplayWhiteBalanceTintControllerTest { + @Mock + private Context mMockedContext; + @Mock + private Resources mMockedResources; + @Mock + private DisplayManagerInternal mDisplayManagerInternal; - private DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController; + private MockitoSession mSession; + private Resources mResources; + IBinder mDisplayToken; + DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController; @Before public void setUp() { @@ -40,6 +67,47 @@ public class DisplayWhiteBalanceTintControllerTest { new DisplayWhiteBalanceTintController(displayManagerInternal); mDisplayWhiteBalanceTintController.setUp(InstrumentationRegistry.getContext(), true); mDisplayWhiteBalanceTintController.setActivated(true); + + mSession = ExtendedMockito.mockitoSession() + .initMocks(this) + .mockStatic(SurfaceControl.class) + .strictness(Strictness.LENIENT) + .startMocking(); + + mResources = InstrumentationRegistry.getContext().getResources(); + // These Resources are common to all tests. + doReturn(4000) + .when(mMockedResources) + .getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMin); + doReturn(8000) + .when(mMockedResources) + .getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMax); + doReturn(6500) + .when(mMockedResources) + .getInteger(R.integer.config_displayWhiteBalanceColorTemperatureDefault); + doReturn(new String[] {"0.950456", "1.000000", "1.089058"}) + .when(mMockedResources) + .getStringArray(R.array.config_displayWhiteBalanceDisplayNominalWhite); + doReturn(6500) + .when(mMockedResources) + .getInteger(R.integer.config_displayWhiteBalanceDisplayNominalWhiteCct); + doReturn(new int[] {0}) + .when(mMockedResources) + .getIntArray(R.array.config_displayWhiteBalanceDisplaySteps); + doReturn(new int[] {20}) + .when(mMockedResources) + .getIntArray(R.array.config_displayWhiteBalanceDisplayRangeMinimums); + + doReturn(mMockedResources).when(mMockedContext).getResources(); + + mDisplayToken = new Binder(); + } + + @After + public void tearDown() throws Exception { + if (mSession != null) { + mSession.finishMocking(); + } } @Test @@ -98,4 +166,204 @@ public class DisplayWhiteBalanceTintControllerTest { }) ).isTrue(); } + + + /** + * Setup should succeed when SurfaceControl setup results in a valid color transform. + */ + @Test + public void displayWhiteBalance_setupWithSurfaceControl() { + // Make SurfaceControl return sRGB primaries + SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries(); + displayPrimaries.red = new SurfaceControl.CieXyz(); + displayPrimaries.red.X = 0.412315f; + displayPrimaries.red.Y = 0.212600f; + displayPrimaries.red.Z = 0.019327f; + displayPrimaries.green = new SurfaceControl.CieXyz(); + displayPrimaries.green.X = 0.357600f; + displayPrimaries.green.Y = 0.715200f; + displayPrimaries.green.Z = 0.119200f; + displayPrimaries.blue = new SurfaceControl.CieXyz(); + displayPrimaries.blue.X = 0.180500f; + displayPrimaries.blue.Y = 0.072200f; + displayPrimaries.blue.Z = 0.950633f; + displayPrimaries.white = new SurfaceControl.CieXyz(); + displayPrimaries.white.X = 0.950456f; + displayPrimaries.white.Y = 1.000000f; + displayPrimaries.white.Z = 1.089058f; + when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) + .thenReturn(displayPrimaries); + + setUpTintController(); + assertWithMessage("Setup with valid SurfaceControl failed") + .that(mDisplayWhiteBalanceTintController.mSetUp) + .isTrue(); + } + + /** + * Setup should fail when SurfaceControl setup results in an invalid color transform. + */ + @Test + public void displayWhiteBalance_setupWithInvalidSurfaceControlData() { + // Make SurfaceControl return invalid display primaries + SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries(); + displayPrimaries.red = new SurfaceControl.CieXyz(); + displayPrimaries.green = new SurfaceControl.CieXyz(); + displayPrimaries.blue = new SurfaceControl.CieXyz(); + displayPrimaries.white = new SurfaceControl.CieXyz(); + when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) + .thenReturn(displayPrimaries); + + setUpTintController(); + assertWithMessage("Setup with invalid SurfaceControl succeeded") + .that(mDisplayWhiteBalanceTintController.mSetUp) + .isFalse(); + } + + /** + * Setup should succeed when SurfaceControl setup fails and Resources result in a valid color + * transform. + */ + @Test + public void displayWhiteBalance_setupWithResources() { + // Use default (valid) Resources + doReturn(mResources.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries)) + .when(mMockedResources) + .getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries); + // Make SurfaceControl setup fail + when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null); + + setUpTintController(); + assertWithMessage("Setup with valid Resources failed") + .that(mDisplayWhiteBalanceTintController.mSetUp) + .isTrue(); + } + + /** + * Setup should fail when SurfaceControl setup fails and Resources result in an invalid color + * transform. + */ + @Test + public void displayWhiteBalance_setupWithInvalidResources() { + // Use Resources with invalid color data + doReturn(new String[] { + "0", "0", "0", // Red X, Y, Z + "0", "0", "0", // Green X, Y, Z + "0", "0", "0", // Blue X, Y, Z + "0", "0", "0", // White X, Y, Z + }) + .when(mMockedResources) + .getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries); + // Make SurfaceControl setup fail + when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null); + + setUpTintController(); + assertWithMessage("Setup with invalid Resources succeeded") + .that(mDisplayWhiteBalanceTintController.mSetUp) + .isFalse(); + } + + /** + * Matrix should match the precalculated one for given cct and display primaries. + */ + @Test + public void displayWhiteBalance_getAndSetMatrix_validateTransformMatrix() { + SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries(); + displayPrimaries.red = new SurfaceControl.CieXyz(); + displayPrimaries.red.X = 0.412315f; + displayPrimaries.red.Y = 0.212600f; + displayPrimaries.red.Z = 0.019327f; + displayPrimaries.green = new SurfaceControl.CieXyz(); + displayPrimaries.green.X = 0.357600f; + displayPrimaries.green.Y = 0.715200f; + displayPrimaries.green.Z = 0.119200f; + displayPrimaries.blue = new SurfaceControl.CieXyz(); + displayPrimaries.blue.X = 0.180500f; + displayPrimaries.blue.Y = 0.072200f; + displayPrimaries.blue.Z = 0.950633f; + displayPrimaries.white = new SurfaceControl.CieXyz(); + displayPrimaries.white.X = 0.950456f; + displayPrimaries.white.Y = 1.000000f; + displayPrimaries.white.Z = 1.089058f; + when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) + .thenReturn(displayPrimaries); + + setUpTintController(); + assertWithMessage("Setup with valid SurfaceControl failed") + .that(mDisplayWhiteBalanceTintController.mSetUp) + .isTrue(); + + final int cct = 6500; + mDisplayWhiteBalanceTintController.setMatrix(cct); + mDisplayWhiteBalanceTintController.setAppliedCct( + mDisplayWhiteBalanceTintController.getTargetCct()); + + assertWithMessage("Failed to set temperature") + .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature) + .isEqualTo(cct); + float[] matrixDwb = mDisplayWhiteBalanceTintController.getMatrix(); + final float[] expectedMatrixDwb = { + 0.971848f, -0.001421f, 0.000491f, 0.0f, + 0.028193f, 0.945798f, 0.003207f, 0.0f, + -0.000042f, -0.000989f, 0.988659f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; + assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb, + 1e-6f /* tolerance */); + } + + /** + * Matrix should match the precalculated one for given cct and display primaries. + */ + @Test + public void displayWhiteBalance_targetApplied_validateTransformMatrix() { + SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries(); + displayPrimaries.red = new SurfaceControl.CieXyz(); + displayPrimaries.red.X = 0.412315f; + displayPrimaries.red.Y = 0.212600f; + displayPrimaries.red.Z = 0.019327f; + displayPrimaries.green = new SurfaceControl.CieXyz(); + displayPrimaries.green.X = 0.357600f; + displayPrimaries.green.Y = 0.715200f; + displayPrimaries.green.Z = 0.119200f; + displayPrimaries.blue = new SurfaceControl.CieXyz(); + displayPrimaries.blue.X = 0.180500f; + displayPrimaries.blue.Y = 0.072200f; + displayPrimaries.blue.Z = 0.950633f; + displayPrimaries.white = new SurfaceControl.CieXyz(); + displayPrimaries.white.X = 0.950456f; + displayPrimaries.white.Y = 1.000000f; + displayPrimaries.white.Z = 1.089058f; + when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) + .thenReturn(displayPrimaries); + + setUpTintController(); + assertWithMessage("Setup with valid SurfaceControl failed") + .that(mDisplayWhiteBalanceTintController.mSetUp) + .isTrue(); + + final int cct = 6500; + mDisplayWhiteBalanceTintController.setTargetCct(cct); + final float[] matrixDwb = mDisplayWhiteBalanceTintController.computeMatrixForCct(cct); + mDisplayWhiteBalanceTintController.setAppliedCct(cct); + + assertWithMessage("Failed to set temperature") + .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature) + .isEqualTo(cct); + final float[] expectedMatrixDwb = { + 0.971848f, -0.001421f, 0.000491f, 0.0f, + 0.028193f, 0.945798f, 0.003207f, 0.0f, + -0.000042f, -0.000989f, 0.988659f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; + assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb, + 1e-6f /* tolerance */); + } + + private void setUpTintController() { + mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController( + mDisplayManagerInternal); + mDisplayWhiteBalanceTintController.setUp(mMockedContext, true); + mDisplayWhiteBalanceTintController.setActivated(true); + } } diff --git a/services/tests/mockingservicestests/src/com/android/server/display/state/DisplayStateControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java index 880501f39ac2..880501f39ac2 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/state/DisplayStateControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java diff --git a/services/tests/mockingservicestests/src/com/android/server/display/OWNERS b/services/tests/mockingservicestests/src/com/android/server/display/OWNERS deleted file mode 100644 index 6ce1ee4d3de2..000000000000 --- a/services/tests/mockingservicestests/src/com/android/server/display/OWNERS +++ /dev/null @@ -1 +0,0 @@ -include /services/core/java/com/android/server/display/OWNERS diff --git a/services/tests/mockingservicestests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java deleted file mode 100644 index 3faf394fc534..000000000000 --- a/services/tests/mockingservicestests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.display.color; - -import static android.view.Display.DEFAULT_DISPLAY; - -import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; - -import static com.google.common.truth.Truth.assertWithMessage; - -import static org.junit.Assert.assertArrayEquals; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.content.res.Resources; -import android.hardware.display.DisplayManagerInternal; -import android.os.Binder; -import android.os.IBinder; -import android.view.SurfaceControl; -import android.view.SurfaceControl.CieXyz; -import android.view.SurfaceControl.DisplayPrimaries; - -import androidx.test.InstrumentationRegistry; -import androidx.test.runner.AndroidJUnit4; - -import com.android.dx.mockito.inline.extended.ExtendedMockito; -import com.android.internal.R; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoSession; -import org.mockito.quality.Strictness; - -@RunWith(AndroidJUnit4.class) -public class DisplayWhiteBalanceTintControllerTest { - @Mock - private Context mMockedContext; - @Mock - private Resources mMockedResources; - @Mock - private DisplayManagerInternal mDisplayManagerInternal; - - private MockitoSession mSession; - private Resources mResources; - IBinder mDisplayToken; - DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController; - - @Before - public void setUp() { - mSession = ExtendedMockito.mockitoSession() - .initMocks(this) - .mockStatic(SurfaceControl.class) - .strictness(Strictness.LENIENT) - .startMocking(); - - mResources = InstrumentationRegistry.getContext().getResources(); - // These Resources are common to all tests. - doReturn(4000) - .when(mMockedResources) - .getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMin); - doReturn(8000) - .when(mMockedResources) - .getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMax); - doReturn(6500) - .when(mMockedResources) - .getInteger(R.integer.config_displayWhiteBalanceColorTemperatureDefault); - doReturn(new String[] {"0.950456", "1.000000", "1.089058"}) - .when(mMockedResources) - .getStringArray(R.array.config_displayWhiteBalanceDisplayNominalWhite); - doReturn(6500) - .when(mMockedResources) - .getInteger(R.integer.config_displayWhiteBalanceDisplayNominalWhiteCct); - doReturn(new int[] {0}) - .when(mMockedResources) - .getIntArray(R.array.config_displayWhiteBalanceDisplaySteps); - doReturn(new int[] {20}) - .when(mMockedResources) - .getIntArray(R.array.config_displayWhiteBalanceDisplayRangeMinimums); - - doReturn(mMockedResources).when(mMockedContext).getResources(); - - mDisplayToken = new Binder(); - } - - @After - public void tearDown() throws Exception { - if (mSession != null) { - mSession.finishMocking(); - } - } - - /** - * Setup should succeed when SurfaceControl setup results in a valid color transform. - */ - @Test - public void displayWhiteBalance_setupWithSurfaceControl() { - // Make SurfaceControl return sRGB primaries - DisplayPrimaries displayPrimaries = new DisplayPrimaries(); - displayPrimaries.red = new CieXyz(); - displayPrimaries.red.X = 0.412315f; - displayPrimaries.red.Y = 0.212600f; - displayPrimaries.red.Z = 0.019327f; - displayPrimaries.green = new CieXyz(); - displayPrimaries.green.X = 0.357600f; - displayPrimaries.green.Y = 0.715200f; - displayPrimaries.green.Z = 0.119200f; - displayPrimaries.blue = new CieXyz(); - displayPrimaries.blue.X = 0.180500f; - displayPrimaries.blue.Y = 0.072200f; - displayPrimaries.blue.Z = 0.950633f; - displayPrimaries.white = new CieXyz(); - displayPrimaries.white.X = 0.950456f; - displayPrimaries.white.Y = 1.000000f; - displayPrimaries.white.Z = 1.089058f; - when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) - .thenReturn(displayPrimaries); - - setUpTintController(); - assertWithMessage("Setup with valid SurfaceControl failed") - .that(mDisplayWhiteBalanceTintController.mSetUp) - .isTrue(); - } - - /** - * Setup should fail when SurfaceControl setup results in an invalid color transform. - */ - @Test - public void displayWhiteBalance_setupWithInvalidSurfaceControlData() { - // Make SurfaceControl return invalid display primaries - DisplayPrimaries displayPrimaries = new DisplayPrimaries(); - displayPrimaries.red = new CieXyz(); - displayPrimaries.green = new CieXyz(); - displayPrimaries.blue = new CieXyz(); - displayPrimaries.white = new CieXyz(); - when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) - .thenReturn(displayPrimaries); - - setUpTintController(); - assertWithMessage("Setup with invalid SurfaceControl succeeded") - .that(mDisplayWhiteBalanceTintController.mSetUp) - .isFalse(); - } - - /** - * Setup should succeed when SurfaceControl setup fails and Resources result in a valid color - * transform. - */ - @Test - public void displayWhiteBalance_setupWithResources() { - // Use default (valid) Resources - doReturn(mResources.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries)) - .when(mMockedResources) - .getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries); - // Make SurfaceControl setup fail - when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null); - - setUpTintController(); - assertWithMessage("Setup with valid Resources failed") - .that(mDisplayWhiteBalanceTintController.mSetUp) - .isTrue(); - } - - /** - * Setup should fail when SurfaceControl setup fails and Resources result in an invalid color - * transform. - */ - @Test - public void displayWhiteBalance_setupWithInvalidResources() { - // Use Resources with invalid color data - doReturn(new String[] { - "0", "0", "0", // Red X, Y, Z - "0", "0", "0", // Green X, Y, Z - "0", "0", "0", // Blue X, Y, Z - "0", "0", "0", // White X, Y, Z - }) - .when(mMockedResources) - .getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries); - // Make SurfaceControl setup fail - when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null); - - setUpTintController(); - assertWithMessage("Setup with invalid Resources succeeded") - .that(mDisplayWhiteBalanceTintController.mSetUp) - .isFalse(); - } - - /** - * Matrix should match the precalculated one for given cct and display primaries. - */ - @Test - public void displayWhiteBalance_getAndSetMatrix_validateTransformMatrix() { - DisplayPrimaries displayPrimaries = new DisplayPrimaries(); - displayPrimaries.red = new CieXyz(); - displayPrimaries.red.X = 0.412315f; - displayPrimaries.red.Y = 0.212600f; - displayPrimaries.red.Z = 0.019327f; - displayPrimaries.green = new CieXyz(); - displayPrimaries.green.X = 0.357600f; - displayPrimaries.green.Y = 0.715200f; - displayPrimaries.green.Z = 0.119200f; - displayPrimaries.blue = new CieXyz(); - displayPrimaries.blue.X = 0.180500f; - displayPrimaries.blue.Y = 0.072200f; - displayPrimaries.blue.Z = 0.950633f; - displayPrimaries.white = new CieXyz(); - displayPrimaries.white.X = 0.950456f; - displayPrimaries.white.Y = 1.000000f; - displayPrimaries.white.Z = 1.089058f; - when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) - .thenReturn(displayPrimaries); - - setUpTintController(); - assertWithMessage("Setup with valid SurfaceControl failed") - .that(mDisplayWhiteBalanceTintController.mSetUp) - .isTrue(); - - final int cct = 6500; - mDisplayWhiteBalanceTintController.setMatrix(cct); - mDisplayWhiteBalanceTintController.setAppliedCct( - mDisplayWhiteBalanceTintController.getTargetCct()); - - assertWithMessage("Failed to set temperature") - .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature) - .isEqualTo(cct); - float[] matrixDwb = mDisplayWhiteBalanceTintController.getMatrix(); - final float[] expectedMatrixDwb = { - 0.971848f, -0.001421f, 0.000491f, 0.0f, - 0.028193f, 0.945798f, 0.003207f, 0.0f, - -0.000042f, -0.000989f, 0.988659f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - }; - assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb, - 1e-6f /* tolerance */); - } - - /** - * Matrix should match the precalculated one for given cct and display primaries. - */ - @Test - public void displayWhiteBalance_targetApplied_validateTransformMatrix() { - DisplayPrimaries displayPrimaries = new DisplayPrimaries(); - displayPrimaries.red = new CieXyz(); - displayPrimaries.red.X = 0.412315f; - displayPrimaries.red.Y = 0.212600f; - displayPrimaries.red.Z = 0.019327f; - displayPrimaries.green = new CieXyz(); - displayPrimaries.green.X = 0.357600f; - displayPrimaries.green.Y = 0.715200f; - displayPrimaries.green.Z = 0.119200f; - displayPrimaries.blue = new CieXyz(); - displayPrimaries.blue.X = 0.180500f; - displayPrimaries.blue.Y = 0.072200f; - displayPrimaries.blue.Z = 0.950633f; - displayPrimaries.white = new CieXyz(); - displayPrimaries.white.X = 0.950456f; - displayPrimaries.white.Y = 1.000000f; - displayPrimaries.white.Z = 1.089058f; - when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)) - .thenReturn(displayPrimaries); - - setUpTintController(); - assertWithMessage("Setup with valid SurfaceControl failed") - .that(mDisplayWhiteBalanceTintController.mSetUp) - .isTrue(); - - final int cct = 6500; - mDisplayWhiteBalanceTintController.setTargetCct(cct); - final float[] matrixDwb = mDisplayWhiteBalanceTintController.computeMatrixForCct(cct); - mDisplayWhiteBalanceTintController.setAppliedCct(cct); - - assertWithMessage("Failed to set temperature") - .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature) - .isEqualTo(cct); - final float[] expectedMatrixDwb = { - 0.971848f, -0.001421f, 0.000491f, 0.0f, - 0.028193f, 0.945798f, 0.003207f, 0.0f, - -0.000042f, -0.000989f, 0.988659f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - }; - assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb, - 1e-6f /* tolerance */); - } - - private void setUpTintController() { - mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController( - mDisplayManagerInternal); - mDisplayWhiteBalanceTintController.setUp(mMockedContext, true); - mDisplayWhiteBalanceTintController.setActivated(true); - } -} |