19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.os;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase;
21f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.test.suitebuilder.annotation.SmallTest;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PowerManagerTest extends AndroidTestCase {
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PowerManager mPm;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Setup any common data for the upcoming tests.
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setUp() throws Exception {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Confirm that the setup is good.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws Exception
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
41f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot    @SmallTest
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testPreconditions() throws Exception {
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertNotNull(mPm);
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Confirm that we can create functional wakelocks.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws Exception
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
51f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot    @SmallTest
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testNewWakeLock() throws Exception {
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        PowerManager.WakeLock wl = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "FULL_WAKE_LOCK");
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        doTestWakeLock(wl);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl = mPm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "SCREEN_BRIGHT_WAKE_LOCK");
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        doTestWakeLock(wl);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl = mPm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "SCREEN_DIM_WAKE_LOCK");
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        doTestWakeLock(wl);
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "PARTIAL_WAKE_LOCK");
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        doTestWakeLock(wl);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
65237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood        doTestSetBacklightBrightness();
66237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // TODO: Some sort of functional test (maybe not in the unit test here?)
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // that confirms that things are really happening e.g. screen power, keyboard power.
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Confirm that we can't create dysfunctional wakelocks.
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws Exception
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
76f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot    @SmallTest
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testBadNewWakeLock() throws Exception {
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int badFlags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            | PowerManager.SCREEN_DIM_WAKE_LOCK;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // wrap in try because we want the error here
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            PowerManager.WakeLock wl = mPm.newWakeLock(badFlags, "foo");
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (IllegalArgumentException e) {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fail("Bad WakeLock flag was not caught.");
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Apply a few tests to a wakelock to make sure it's healthy.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param wl The wakelock to be tested.
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void doTestWakeLock(PowerManager.WakeLock wl) {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // First try simple acquire/release
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.acquire();
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue(wl.isHeld());
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.release();
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertFalse(wl.isHeld());
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Try ref-counted acquire/release
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.setReferenceCounted(true);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.acquire();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue(wl.isHeld());
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.acquire();
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue(wl.isHeld());
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.release();
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue(wl.isHeld());
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.release();
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertFalse(wl.isHeld());
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Try non-ref-counted
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.setReferenceCounted(false);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.acquire();
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue(wl.isHeld());
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.acquire();
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue(wl.isHeld());
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wl.release();
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertFalse(wl.isHeld());
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // TODO: Threaded test (needs handler) to make sure timed wakelocks work too
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
125237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood
126237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood    /**
127237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood     * Test that calling {@link android.os.IHardwareService#setBacklights(int)} requires
128237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood     * permissions.
129237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood     * <p>Tests permission:
130237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood     *   {@link android.Manifest.permission#DEVICE_POWER}
131237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood     */
132237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood    private void doTestSetBacklightBrightness() {
133237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood        try {
134237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood            mPm.setBacklightBrightness(0);
135237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood            fail("setBacklights did not throw SecurityException as expected");
136237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood        } catch (SecurityException e) {
137237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood            // expected
138237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood        }
139237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood    }
140237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
142