From 4595cfde0bc2a837964a1723e71ab5fbcb0ee90d Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Tue, 26 Apr 2016 01:12:56 -0700 Subject: [PATCH] livedisplay: Add some unit tests * Test color temperature control and mode selection Change-Id: Icc4fffef4c64cf3424e30890b5a4a37154482b3a --- tests/AndroidManifest.xml | 2 + .../hardware/unit/LiveDisplayManagerTest.java | 152 ++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 tests/src/org/cyanogenmod/tests/hardware/unit/LiveDisplayManagerTest.java diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 9f241e4..c5a499c 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -7,6 +7,7 @@ + @@ -24,6 +25,7 @@ + diff --git a/tests/src/org/cyanogenmod/tests/hardware/unit/LiveDisplayManagerTest.java b/tests/src/org/cyanogenmod/tests/hardware/unit/LiveDisplayManagerTest.java new file mode 100644 index 0000000..09d74f3 --- /dev/null +++ b/tests/src/org/cyanogenmod/tests/hardware/unit/LiveDisplayManagerTest.java @@ -0,0 +1,152 @@ +package org.cyanogenmod.tests.hardware.unit; + +import android.content.Context; +import android.os.PowerManager; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +import org.junit.Assume; + +import cyanogenmod.app.CMContextConstants; +import cyanogenmod.hardware.CMHardwareManager; +import cyanogenmod.hardware.ILiveDisplayService; +import cyanogenmod.hardware.LiveDisplayConfig; +import cyanogenmod.hardware.LiveDisplayManager; +import cyanogenmod.util.ColorUtils; + +public class LiveDisplayManagerTest extends AndroidTestCase { + + private static final String TAG = "LiveDisplayManagerTest"; + + private LiveDisplayManager mLiveDisplay; + private CMHardwareManager mHardware; + + private PowerManager mPower; + private PowerManager.WakeLock mWakeLock; + + private LiveDisplayConfig mConfig; + private int mInitialMode; + + @SuppressWarnings("deprecation") + @Override + protected void setUp() throws Exception { + super.setUp(); + + Assume.assumeTrue(mContext.getPackageManager().hasSystemFeature( + CMContextConstants.Features.LIVEDISPLAY)); + + mLiveDisplay = LiveDisplayManager.getInstance(mContext); + if (mLiveDisplay.getConfig().hasModeSupport()) { + mInitialMode = mLiveDisplay.getMode(); + } + mConfig = mLiveDisplay.getConfig(); + + mHardware = CMHardwareManager.getInstance(mContext); + mPower = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + mWakeLock = mPower.newWakeLock( + PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, TAG); + mWakeLock.acquire(); + } + + @Override + protected void tearDown() { + mLiveDisplay.setMode(mInitialMode); + mWakeLock.release(); + } + + @SmallTest + public void testManagerExists() { + assertNotNull(mLiveDisplay); + } + + @SmallTest + public void testManagerServiceIsAvailable() { + ILiveDisplayService service = LiveDisplayManager.getService(); + assertNotNull(service); + } + + @SmallTest + public void testConfig() { + assertNotNull(mConfig); + + // at least GPU mode should be available + assertTrue(mConfig.isAvailable()); + } + + @SmallTest + public void testNightMode() throws Exception { + Assume.assumeTrue(mConfig.hasModeSupport()); + + int day = mLiveDisplay.getDayColorTemperature(); + int night = mLiveDisplay.getNightColorTemperature(); + + mLiveDisplay.setMode(LiveDisplayManager.MODE_NIGHT); + assertColorTemperature(night); + + // custom value + mLiveDisplay.setNightColorTemperature(3300); + assertColorTemperature(3300); + + // "default" + mLiveDisplay.setNightColorTemperature(mConfig.getDefaultNightTemperature()); + assertColorTemperature(mConfig.getDefaultNightTemperature()); + + mLiveDisplay.setNightColorTemperature(night); + + // day should not have changed + assertEquals(day, mLiveDisplay.getDayColorTemperature()); + } + + @SmallTest + public void testDayMode() throws Exception { + Assume.assumeTrue(mConfig.hasModeSupport()); + + int day = mLiveDisplay.getDayColorTemperature(); + int night = mLiveDisplay.getNightColorTemperature(); + + mLiveDisplay.setMode(LiveDisplayManager.MODE_DAY); + assertColorTemperature(day); + + // custom value + mLiveDisplay.setDayColorTemperature(8000); + assertColorTemperature(8000); + + // "default" + mLiveDisplay.setDayColorTemperature(mConfig.getDefaultDayTemperature()); + assertColorTemperature(mConfig.getDefaultDayTemperature()); + + mLiveDisplay.setDayColorTemperature(day); + + // night should not have changed + assertEquals(night, mLiveDisplay.getNightColorTemperature()); + } + + @SmallTest + public void testOutdoorMode() throws Exception { + Assume.assumeTrue(mConfig.hasFeature(LiveDisplayManager.MODE_OUTDOOR)); + + assertTrue(mHardware.isSupported(CMHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT)); + + mLiveDisplay.setMode(LiveDisplayManager.MODE_OUTDOOR); + Thread.sleep(1000); + assertTrue(mHardware.get(CMHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT)); + + mLiveDisplay.setMode(LiveDisplayManager.MODE_OFF); + Thread.sleep(1000); + assertFalse(mHardware.get(CMHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT)); + } + + private void assertColorTemperature(int degK) throws Exception { + Thread.sleep(2000); + assertEquals(degK, LiveDisplayManager.getService().getColorTemperature()); + checkHardwareValue(ColorUtils.temperatureToRGB(degK)); + } + + private void checkHardwareValue(float[] expected) { + int[] hardware = mHardware.getDisplayColorCalibration(); + int max = mHardware.getDisplayColorCalibrationMax(); + assertEquals((int)Math.floor(expected[0] * max), hardware[0]); + assertEquals((int)Math.floor(expected[1] * max), hardware[1]); + assertEquals((int)Math.floor(expected[2] * max), hardware[2]); + } +}