AdvancedPowerUsageDetailTest.java revision ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38
1ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei/*
2ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Copyright (C) 2017 The Android Open Source Project
3ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *
4ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License");
5ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * you may not use this file except in compliance with the License.
6ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * You may obtain a copy of the License at
7ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *
8ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *      http://www.apache.org/licenses/LICENSE-2.0
9ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei *
10ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * Unless required by applicable law or agreed to in writing, software
11ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS,
12ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * See the License for the specific language governing permissions and
14ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei * limitations under the License.
15ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei */
16ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
17ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipackage com.android.settings.fuelgauge;
18ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
19ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static com.google.common.truth.Truth.assertThat;
20ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
21ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.app.Fragment;
22ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.Context;
23ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.content.pm.ApplicationInfo;
24ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.graphics.drawable.Drawable;
25ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.BatteryStats;
26ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.Bundle;
27ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.os.UserHandle;
28ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport android.view.View;
29ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
30ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatterySipper;
31ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.internal.os.BatteryStatsHelper;
32ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.SettingsActivity;
33ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.TestConfig;
34ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.applications.AppHeaderController;
35ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.applications.LayoutPreference;
36ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settings.testutils.FakeFeatureFactory;
37ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport com.android.settingslib.applications.ApplicationsState;
38ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
39ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Before;
40ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.Test;
41ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.junit.runner.RunWith;
42ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Answers;
43ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.ArgumentCaptor;
44ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.Mock;
45ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.MockitoAnnotations;
46ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.invocation.InvocationOnMock;
47ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.mockito.stubbing.Answer;
48ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.RobolectricTestRunner;
49ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.annotation.Config;
50ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport org.robolectric.util.ReflectionHelpers;
51ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
52ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Matchers.anyLong;
53ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Matchers.anyInt;
54ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Matchers.any;
55ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Matchers.anyString;
56ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Matchers.eq;
57ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Mockito.doAnswer;
58ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Mockito.doReturn;
59ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Mockito.mock;
60ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Mockito.spy;
61ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleiimport static org.mockito.Mockito.verify;
62ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
63ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei@RunWith(RobolectricTestRunner.class)
64ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
65ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyuleipublic class AdvancedPowerUsageDetailTest {
66ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String APP_LABEL = "app label";
67ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String SUMMARY = "summary";
68ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String[] PACKAGE_NAME = {"com.android.app"};
69ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final String USAGE_PERCENT = "16";
70ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final int ICON_ID = 123;
71ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final int UID = 1;
72ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long BACKGROUND_TIME_US = 100 * 1000;
73ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long FOREGROUND_TIME_US = 200 * 1000;
74ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long BACKGROUND_TIME_MS = 100;
75ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private static final long FOREGROUND_TIME_MS = 200;
76ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
77ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
78ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Context mContext;
79ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
80ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private AppHeaderController mAppHeaderController;
81ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
82ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private LayoutPreference mHeaderPreference;
83ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
84ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private ApplicationsState mState;
85ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
86ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private ApplicationsState.AppEntry mAppEntry;
87ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
88ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Drawable mIconDrawable;
89ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
90ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Bundle mBundle;
91ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
92ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryEntry mBatteryEntry;
93ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
94ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatterySipper mBatterySipper;
95ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
96ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryStatsHelper mBatteryStatsHelper;
97ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Mock
98ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private BatteryStats.Uid mUid;
99ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private Bundle mTestBundle;
100ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private AdvancedPowerUsageDetail mFragment;
101ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private FakeFeatureFactory mFeatureFactory;
102ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    private SettingsActivity mTestActivity;
103ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
104ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Before
105ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void setUp() {
106ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        MockitoAnnotations.initMocks(this);
107ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        FakeFeatureFactory.setupForTest(mContext);
108ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
109ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
110ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment = spy(new AdvancedPowerUsageDetail());
111ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mContext).when(mFragment).getContext();
112ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(SUMMARY).when(mFragment).getString(anyInt());
113ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(APP_LABEL).when(mBundle).getString(anyString());
114ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mBundle).when(mFragment).getArguments();
115ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
116ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mFeatureFactory.applicationFeatureProvider)
117ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                .newAppHeaderController(any(Fragment.class), any(View.class));
118ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setButtonActions(anyInt(),
119ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                anyInt());
120ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setIcon(any(Drawable.class));
121ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setIcon(any(
122ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                ApplicationsState.AppEntry.class));
123ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setLabel(anyString());
124ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setLabel(any(
125ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                ApplicationsState.AppEntry.class));
126ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(mAppHeaderController).when(mAppHeaderController).setSummary(anyString());
127ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
128ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
129ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(UID).when(mBatterySipper).getUid();
130ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(APP_LABEL).when(mBatteryEntry).getLabel();
131ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(BACKGROUND_TIME_US).when(mUid).getProcessStateTime(
132ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt());
133ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime(
134ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                eq(BatteryStats.Uid.PROCESS_STATE_FOREGROUND), anyLong(), anyInt());
135ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper);
136ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatteryEntry.iconId = ICON_ID;
137ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.uidObj = mUid;
138ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
139ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mHeaderPreference = mHeaderPreference;
140ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mState = mState;
141ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mAppEntry.info = mock(ApplicationInfo.class);
142ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
143ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mTestActivity = spy(new SettingsActivity());
144ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
145ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
146ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
147ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        Answer<Void> callable = new Answer<Void>() {
148ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei            @Override
149ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei            public Void answer(InvocationOnMock invocation) throws Exception {
150ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBundle = captor.getValue();
151ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                return null;
152ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei            }
153ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        };
154ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(any(), anyString(),
155ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                captor.capture(), anyInt(), any(), any());
156ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
157ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
158ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
159ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testInitHeader_NoAppEntry_BuildByBundle() {
160ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mAppEntry = null;
161ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.initHeader();
162ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
163ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setIcon(any(Drawable.class));
164ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setLabel(APP_LABEL);
165ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
166ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
167ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
168ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testInitHeader_HasAppEntry_BuildByAppEntry() {
169ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.mAppEntry = mAppEntry;
170ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mFragment.initHeader();
171ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
172ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setIcon(mAppEntry);
173ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        verify(mAppHeaderController).setLabel(mAppEntry);
174ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
175ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
176ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
177ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_hasBasicData() {
178ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
179ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBatteryEntry, USAGE_PERCENT);
180ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
181ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
182ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(
183ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                BACKGROUND_TIME_MS);
184ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(
185ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                FOREGROUND_TIME_MS);
186ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo(
187ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                USAGE_PERCENT);
188ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
189ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
190ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
191ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_NormalApp() {
192ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.mPackages = PACKAGE_NAME;
193ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
194ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBatteryEntry, USAGE_PERCENT);
195ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
196ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(
197ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                PACKAGE_NAME[0]);
198ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
199ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
200ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    @Test
201ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    public void testStartBatteryDetailPage_SystemApp() {
202ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        mBatterySipper.mPackages = null;
203ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0,
204ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei                mBatteryEntry, USAGE_PERCENT);
205ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei
206ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL);
207ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_ICON_ID)).isEqualTo(ICON_ID);
208ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei        assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo(null);
209ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei    }
210ddba96670048a07b98e5c1e0d9f3d9bd4ebe9b38jackqdyulei}
211