blob: 6e99105affb6fb9eff4caca44d742c1a1ca6460c [file] [log] [blame]
package com.android.clockwork.power;
import android.content.ContentResolver;
import android.provider.Settings;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
public class TimeOnlyModeTest {
private ContentResolver cr;
private @Mock PowerTracker mockPowerTracker;
private @Mock TimeOnlyMode.Listener mockListener;
private TimeOnlyMode timeOnlyMode;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
cr = RuntimeEnvironment.application.getContentResolver();
timeOnlyMode = new TimeOnlyMode(cr, mockPowerTracker);
timeOnlyMode.addListener(mockListener);
when(mockPowerTracker.isCharging()).thenReturn(false);
when(mockPowerTracker.isInPowerSave()).thenReturn(false);
}
@Test
public void testConstructorListensToPowerTracker() {
verify(mockPowerTracker).addListener(timeOnlyMode);
}
@Test
public void testAllModesWhenFeatureEnabled() {
Settings.Global.putString(cr, Settings.Global.TIME_ONLY_MODE_CONSTANTS,
timeOnlyModeSettingsString(true, true, true));
// when power saver mode is off, everything should be off
when(mockPowerTracker.isInPowerSave()).thenReturn(false);
Assert.assertFalse(timeOnlyMode.isInTimeOnlyMode());
Assert.assertFalse(timeOnlyMode.isTiltToWakeDisabled());
Assert.assertFalse(timeOnlyMode.isTouchToWakeDisabled());
// when power saver mode is on, everything should come on
when(mockPowerTracker.isInPowerSave()).thenReturn(true);
Assert.assertTrue(timeOnlyMode.isInTimeOnlyMode());
Assert.assertTrue(timeOnlyMode.isTiltToWakeDisabled());
Assert.assertTrue(timeOnlyMode.isTouchToWakeDisabled());
}
@Test
public void testTimeOnlyModeListenersGetNotified() {
Settings.Global.putString(cr, Settings.Global.TIME_ONLY_MODE_CONSTANTS,
timeOnlyModeSettingsString(true, true, true));
// if TimeOnlyMode feature is enabled, changes in power save should result in
// proper notifications being fired
when(mockPowerTracker.isInPowerSave()).thenReturn(false);
timeOnlyMode.onPowerSaveModeChanged();
verify(mockListener).onTimeOnlyModeChanged(false);
reset(mockListener);
when(mockPowerTracker.isInPowerSave()).thenReturn(true);
timeOnlyMode.onPowerSaveModeChanged();
verify(mockListener).onTimeOnlyModeChanged(true);
// if TimeOnlyMode feature is disabled, no notifications should occur
reset(mockListener);
Settings.Global.putString(cr, Settings.Global.TIME_ONLY_MODE_CONSTANTS,
timeOnlyModeSettingsString(false, false, false));
when(mockPowerTracker.isInPowerSave()).thenReturn(false);
timeOnlyMode.onPowerSaveModeChanged();
when(mockPowerTracker.isInPowerSave()).thenReturn(true);
timeOnlyMode.onPowerSaveModeChanged();
verifyNoMoreInteractions(mockListener);
}
/**
* Returns a Settings string which corresponds to the specified time only settings.
*
* The Settings parser expects the setting string to be of the following format:
* <pre>key1=value,key2=value,key3=value</pre>
*
*/
private String timeOnlyModeSettingsString(
boolean timeOnlyEnabled, boolean disableTiltToWake, boolean disableTouchToWake) {
return TimeOnlyMode.KEY_ENABLED + "=" + timeOnlyEnabled
+ ","
+ TimeOnlyMode.KEY_DISABLE_TILT_TO_WAKE + "=" + disableTiltToWake
+ ","
+ TimeOnlyMode.KEY_DISABLE_TOUCH_TO_WAKE + "=" + disableTouchToWake;
}
}