108fb8f8709b227d9c12f5197c1884f22137075a5adriancowhampackage com.xtremelabs.robolectric.shadows;
208fb8f8709b227d9c12f5197c1884f22137075a5adriancowham
3786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkelimport static junit.framework.Assert.assertFalse;
4786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkelimport static junit.framework.Assert.assertNotNull;
5786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkelimport static junit.framework.Assert.assertTrue;
608fb8f8709b227d9c12f5197c1884f22137075a5adriancowham
7786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkelimport com.xtremelabs.robolectric.Robolectric;
8786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkelimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
9786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkelimport org.junit.Before;
1008fb8f8709b227d9c12f5197c1884f22137075a5adriancowhamimport org.junit.Test;
1108fb8f8709b227d9c12f5197c1884f22137075a5adriancowhamimport org.junit.runner.RunWith;
1208fb8f8709b227d9c12f5197c1884f22137075a5adriancowham
1308fb8f8709b227d9c12f5197c1884f22137075a5adriancowhamimport android.content.Context;
1408fb8f8709b227d9c12f5197c1884f22137075a5adriancowhamimport android.os.PowerManager;
1508fb8f8709b227d9c12f5197c1884f22137075a5adriancowham
1608fb8f8709b227d9c12f5197c1884f22137075a5adriancowham@RunWith(WithTestDefaultsRunner.class)
1708fb8f8709b227d9c12f5197c1884f22137075a5adriancowhampublic class PowerManagerTest {
18786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
19786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    PowerManager powerManager;
20786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    ShadowPowerManager shadowPowerManager;
21786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
22786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    @Before
23786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    public void before() {
24786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        powerManager = (PowerManager) Robolectric.application.getSystemService(Context.POWER_SERVICE);
25786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        shadowPowerManager = Robolectric.shadowOf(powerManager);
26786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    }
27786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
28786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    @Test
29786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    public void testIsScreenOn() {
30786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertTrue(powerManager.isScreenOn());
31786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        shadowPowerManager.setIsScreenOn(false);
32786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertFalse(powerManager.isScreenOn());
33786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    }
34786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
35786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    @Test
36786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    public void shouldCreateWakeLock() throws Exception {
37786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertNotNull(powerManager.newWakeLock(0, "TAG"));
38786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    }
39786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
40786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    @Test
41786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    public void shouldAcquireAndReleaseReferenceCountedLock() throws Exception {
42786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        PowerManager.WakeLock lock = powerManager.newWakeLock(0, "TAG");
43786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertFalse(lock.isHeld());
44786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.acquire();
45786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertTrue(lock.isHeld());
46786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.acquire();
47786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
48786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertTrue(lock.isHeld());
49786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.release();
50786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
51786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertTrue(lock.isHeld());
52786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.release();
53786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertFalse(lock.isHeld());
54786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    }
55786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
56786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    @Test
57786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    public void shouldAcquireAndReleaseNonReferenceCountedLock() throws Exception {
58786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        PowerManager.WakeLock lock = powerManager.newWakeLock(0, "TAG");
59786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.setReferenceCounted(false);
60786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
61786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertFalse(lock.isHeld());
62786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.acquire();
63786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertTrue(lock.isHeld());
64786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.acquire();
65786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertTrue(lock.isHeld());
66786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
67786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.release();
68786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
69786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        assertFalse(lock.isHeld());
70786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    }
71786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel
72786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    @Test(expected = RuntimeException.class)
73786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    public void shouldThrowRuntimeExceptionIfLockisUnderlocked() throws Exception {
74786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        PowerManager.WakeLock lock = powerManager.newWakeLock(0, "TAG");
75786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel        lock.release();
76786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel    }
7708fb8f8709b227d9c12f5197c1884f22137075a5adriancowham}