1abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato/* 2abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Copyright (C) 2016 The Android Open Source Project 3abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * 4abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 5abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * you may not use this file except in compliance with the License. 6abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * You may obtain a copy of the License at 7abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * 8abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 9abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * 10abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Unless required by applicable law or agreed to in writing, software 11abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 12abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * See the License for the specific language governing permissions and 14abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * limitations under the License. 15abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 16abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 17abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratopackage com.android.internal.os; 18abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 19abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport java.io.PrintWriter; 20abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport java.io.StringWriter; 21abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 22abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport android.os.BatteryStats; 23abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport android.os.Parcel; 2498f0d4692c6634ff5d4ffbbc150d405da66c4c38Adam Lesinskiimport android.support.test.filters.SmallTest; 25abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport android.util.Log; 26abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 27abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport junit.framework.Assert; 28abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport junit.framework.TestCase; 29abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 30abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratoimport org.mockito.Mockito; 31abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 32abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato/** 33abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Provides test cases for android.os.BatteryStats. 34abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 35abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onoratopublic class BatteryStatsTimeBaseTest extends TestCase { 36abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato private static final String TAG = "BatteryStatsTimeBaseTest"; 37abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 38abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato static class TestTimeBase extends BatteryStatsImpl.TimeBase { 39abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 40abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void populate(long uptime, long realtime, boolean running, long pastUptime, 41abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato long uptimeStart, long pastRealtime, long realtimeStart, 42abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato long unpluggedUptime, long unpluggedRealtime) { 43abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mUptime = uptime; 44abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mRealtime = realtime; 45abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mRunning = running; 46abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mPastUptime = pastUptime; 47abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mUptimeStart = uptimeStart; 48abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mPastRealtime = pastRealtime; 49abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mRealtimeStart = realtimeStart; 50abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mUnpluggedUptime = unpluggedUptime; 51abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato mUnpluggedRealtime = unpluggedRealtime; 52abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 53abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 54abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void verify(long uptime, long realtime, boolean running, long pastUptime, 55abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato long uptimeStart, long pastRealtime, long realtimeStart, 56abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato long unpluggedUptime, long unpluggedRealtime) { 57abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(uptime, mUptime); 58abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(realtime, mRealtime); 59abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(running, mRunning); 60abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(pastUptime, mPastUptime); 61abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(uptimeStart, mUptimeStart); 62abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(pastRealtime, mPastRealtime); 63abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(realtimeStart, mRealtimeStart); 64abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(unpluggedUptime, mUnpluggedUptime); 65abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(unpluggedRealtime, mUnpluggedRealtime); 66abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 67abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 68abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 69abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 70abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test the observers and the setRunning call. 71abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 72abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 73abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testRunning() throws Exception { 74abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 75abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 76abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Toggle running once, to accumulate past uptime and past realtime 77abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // so the test values aren't 0. 78abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.setRunning(true, 100, 10000); 79abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.setRunning(false, 200, 11000); 80abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(100, tb.getUptimeStart()); 81abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(10000, tb.getRealtimeStart()); 82abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 83abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Create some observers 84abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato BatteryStatsImpl.TimeBaseObs observer1 = Mockito.mock(BatteryStatsImpl.TimeBaseObs.class); 85abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato BatteryStatsImpl.TimeBaseObs observer2 = Mockito.mock(BatteryStatsImpl.TimeBaseObs.class); 86abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato BatteryStatsImpl.TimeBaseObs observer3 = Mockito.mock(BatteryStatsImpl.TimeBaseObs.class); 87abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 88abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Add them 89abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.add(observer1); 90abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.add(observer2); 91abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.add(observer3); 92abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertTrue(tb.hasObserver(observer1)); 93abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertTrue(tb.hasObserver(observer2)); 94abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertTrue(tb.hasObserver(observer3)); 95abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 96abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Remove one 97abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.remove(observer3); 98abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertTrue(tb.hasObserver(observer1)); 99abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertTrue(tb.hasObserver(observer2)); 100abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertFalse(tb.hasObserver(observer3)); 101abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 102abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Start running, make sure we get a started call on the two active observers 103abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // and not the third. 104abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.setRunning(true, 250, 14000); 105abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 106abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertTrue(tb.isRunning()); 107abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 108abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato if (false) { 109abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Log.d(TAG, "mUptimeStart=" + tb.getUptimeStart() 110abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " mRealtimeStart=" + tb.getRealtimeStart() 111abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " mUptime=" + tb.getUptime(250) 112abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " mRealtime=" + tb.getRealtime(14000) 113abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " isRunning=" + tb.isRunning()); 114abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 115abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 116abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(250, tb.getUptimeStart()); 117abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(14000, tb.getRealtimeStart()); 118abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(100, tb.getUptime(250)); 119abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(1000, tb.getRealtime(14000)); 120abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 121abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer1).onTimeStarted(14000, 100, 1000); 122abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer1, Mockito.never()).onTimeStopped(-1, -1, -1); 123abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verifyNoMoreInteractions(observer1); 124abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer2).onTimeStarted(14000, 100, 1000); 125abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer2, Mockito.never()).onTimeStopped(-1, -1, -1); 126abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verifyNoMoreInteractions(observer2); 127abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 128abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.reset(observer1); 129abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.reset(observer2); 130abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.reset(observer3); 131abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 132abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Advance the "timer" and make sure the getters account for the current time passed in 133abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(400, tb.getUptime(550)); 134abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(1555, tb.getRealtime(14555)); 135abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 136abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Stop running, make sure we get a stopped call on the two active observers 137abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // and not the third. 138abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.setRunning(false, 402, 14002); 139abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 140abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertFalse(tb.isRunning()); 141abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 142abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato if (false) { 143abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Log.d(TAG, "mUptimeStart=" + tb.getUptimeStart() 144abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " mRealtimeStart=" + tb.getRealtimeStart() 145abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " mUptime=" + tb.getUptime(250) 146abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " mRealtime=" + tb.getRealtime(14000) 147abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + " isRunning=" + tb.isRunning()); 148abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 149abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 150abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(252, tb.getUptime(402)); 151abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(1002, tb.getRealtime(14002)); 152abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 153abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer1).onTimeStopped(14002, 252, 1002); 154abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer1, Mockito.never()).onTimeStopped(-1, -1, -1); 155abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verifyNoMoreInteractions(observer1); 156abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer2).onTimeStopped(14002, 252, 1002); 157abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verify(observer2, Mockito.never()).onTimeStopped(-1, -1, -1); 158abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Mockito.verifyNoMoreInteractions(observer2); 159abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 160abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Advance the "timer" and make sure the getters account for the current time passed in 161abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // is the same as the time when running went to false. 162abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(252, tb.getUptime(600)); 163abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(1002, tb.getRealtime(17000)); 164abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 165abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 166abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 167abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test that reset while running updates the plugged and unplugged times 168abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 169abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 170abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testResetWhileRunning() throws Exception { 171abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 172abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.populate(100, 200, true, 300, 400, 500, 600, 700, 800); 173abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 174abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.reset(666, 6666); 175abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 176abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Not sure if this is a bug: reset while running does not 177abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // reset mPastUptime, but while it is running it does. 178abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.verify(100, 200, true, 300, 666, 500, 6666, 300, 500); 179abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 180abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 181abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 182abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test that reset while running updates the plugged and unplugged times 183abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 184abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 185abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testResetWhileNotRunning() throws Exception { 186abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 187abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.populate(100, 200, false, 300, 400, 500, 600, 700, 800); 188abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 189abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.reset(666, 6666); 190abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 191abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.verify(100, 200, false, 0, 400, 0, 600, 700, 800); 192abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 193abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 194abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 195abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test init 196abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 197abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 198abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testInit() throws Exception { 199abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 200abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.populate(100, 200, false, 300, 400, 500, 600, 700, 800); 201abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 202abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.init(666, 6666); 203abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 204abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.verify(0, 0, false, 0, 666, 0, 6666, 0, 0); 205abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 206abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 207abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 208abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test writeToParcel and readFromParcel 209abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 210abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 211abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testParcellingWhileRunning() throws Exception { 212abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb1 = new TestTimeBase(); 213abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 214abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb1.populate(100, 200, true, 300, 400, 500, 600, 700, 800); 215abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 216abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Parcel parcel = Parcel.obtain(); 217abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb1.writeToParcel(parcel, 666, 6666); 218abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 219abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato parcel.setDataPosition(0); 220abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 221abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb2 = new TestTimeBase(); 222abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.readFromParcel(parcel); 223abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 224abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Running is not preserved across parceling 225abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.verify(100, 200, false, 300+666-400, 400, 500+6666-600, 600, 700, 800); 226abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 227abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 228abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 229abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test writeToParcel and readFromParcel 230abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 231abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 232abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testParcellingWhileNotRunning() throws Exception { 233abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb1 = new TestTimeBase(); 234abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 235abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb1.populate(100, 200, false, 300, 400, 500, 600, 700, 800); 236abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 237abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Parcel parcel = Parcel.obtain(); 238abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb1.writeToParcel(parcel, 666, 6666); 239abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 240abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato parcel.setDataPosition(0); 241abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 242abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb2 = new TestTimeBase(); 243abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.readFromParcel(parcel); 244abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 245abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.verify(100, 200, false, 300, 400, 500, 600, 700, 800); 246abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 247abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 248abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 249abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test writeSummaryToParcel and readSummaryFromParcel 250abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 251abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 252abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testSummary() throws Exception { 253abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb1 = new TestTimeBase(); 254abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 255abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb1.populate(100, 200, true, 300, 400, 500, 600, 700, 800); 256abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 257abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Parcel parcel = Parcel.obtain(); 258abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb1.writeSummaryToParcel(parcel, 666, 6666); 259abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 260abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato parcel.setDataPosition(0); 261abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 262abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb2 = new TestTimeBase(); 263abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 264abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // readSummaryFromParcel doesn't affect the other fields. 265abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // Not sure if this is deliberate 266abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.populate(1, 2, true, 3, 4, 5, 6, 7, 8); 267abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 268abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.readSummaryFromParcel(parcel); 269abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 270abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb2.verify(666, 6766, true, 3, 4, 5, 6, 7, 8); 271abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 272abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 273abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 274abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test computeUptime 275abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 276abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 277abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testComputeUptime() throws Exception { 278abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 279abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 280abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.populate(100, 200, true, 300, 400, 500, 600, 50, 60); 281abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 282abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(100+300+666-400, 283abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.computeUptime(666, BatteryStats.STATS_SINCE_CHARGED)); 284abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(300+666-400, 285abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.computeUptime(666, BatteryStats.STATS_CURRENT)); 286abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(300+666-400-50, 287abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.computeUptime(666, BatteryStats.STATS_SINCE_UNPLUGGED)); 288abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 289abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(0, tb.computeUptime(666, 6000)); 290abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 291abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 292abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 293abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test computeUptime 294abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 295abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 296abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testComputeRealtime() throws Exception { 297abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 298abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 299abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.populate(100, 200, true, 300, 400, 500, 600, 50, 60); 300abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 301abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(200+500+6666-600, 302abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.computeRealtime(6666, BatteryStats.STATS_SINCE_CHARGED)); 303abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(500+6666-600, 304abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.computeRealtime(6666, BatteryStats.STATS_CURRENT)); 305abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(500+6666-600-60, 306abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.computeRealtime(6666, BatteryStats.STATS_SINCE_UNPLUGGED)); 307abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 308abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(0, tb.computeUptime(666, 6000)); 309abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 310abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 311abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato /** 312abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato * Test dump 313abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato */ 314abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato @SmallTest 315abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato public void testDump() throws Exception { 316abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato TestTimeBase tb = new TestTimeBase(); 317abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 318abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.populate(100, 200, true, 300, 400, 500, 600, 50, 60); 319abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 320abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato StringWriter sw = new StringWriter(); 321abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato PrintWriter pw = new PrintWriter(sw); 322abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 323abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato tb.dump(pw, "+++++ "); 324abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 325abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato pw.close(); 326abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 327abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato // note the spaces at the ends of the lines which come from formatTimeMs. 328abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato final String CORRECT = "+++++ mRunning=true\n" 329abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + "+++++ mUptime=0ms \n" 330abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + "+++++ mRealtime=0ms \n" 331abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + "+++++ mPastUptime=0ms mUptimeStart=0ms mUnpluggedUptime=0ms \n" 332abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato + "+++++ mPastRealtime=0ms mRealtimeStart=0ms mUnpluggedRealtime=0ms \n"; 333abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 334abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato Assert.assertEquals(CORRECT, sw.toString()); 335abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato } 336abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 337abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato} 338abded113bde548734600dc1b6e4ce2e94f48e32eJoe Onorato 339