OSDN Git Service

Remove OS items in battery main page.
[android-x86/packages-apps-Settings.git] / tests / robotests / src / com / android / settings / fuelgauge / PowerUsageSummaryTest.java
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.settings.fuelgauge;
17
18 import android.content.Context;
19 import android.content.Intent;
20 import android.os.Process;
21 import android.text.TextUtils;
22 import android.view.Menu;
23 import android.view.MenuInflater;
24 import android.view.MenuItem;
25 import com.android.internal.os.BatterySipper;
26 import com.android.internal.os.BatteryStatsImpl;
27 import com.android.settings.R;
28 import com.android.settings.TestConfig;
29 import com.android.settings.testutils.FakeFeatureFactory;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 import org.mockito.Answers;
34 import org.mockito.Mock;
35 import org.mockito.MockitoAnnotations;
36 import org.robolectric.RobolectricTestRunner;
37 import org.robolectric.annotation.Config;
38
39 import static com.android.settings.fuelgauge.PowerUsageBase.MENU_STATS_REFRESH;
40 import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO;
41 import static com.google.common.truth.Truth.assertThat;
42 import static org.mockito.Mockito.never;
43 import static org.mockito.Mockito.verify;
44 import static org.mockito.Mockito.when;
45
46 /**
47  * Unit tests for {@link PowerUsageSummary}.
48  */
49 // TODO: Improve this test class so that it starts up the real activity and fragment.
50 @RunWith(RobolectricTestRunner.class)
51 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
52 public class PowerUsageSummaryTest {
53     private static final String[] PACKAGE_NAMES = {"com.app1", "com.app2"};
54     private static final int UID = 123;
55     private static final int POWER_MAH = 100;
56
57     private static final Intent ADDITIONAL_BATTERY_INFO_INTENT =
58             new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
59
60     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
61     private Context mContext;
62     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
63     private Menu mMenu;
64     @Mock
65     private MenuItem mRefreshMenu;
66     @Mock
67     private MenuItem mAdditionalBatteryInfoMenu;
68     @Mock
69     private MenuInflater mMenuInflater;
70     @Mock
71     private BatterySipper mBatterySipper;
72
73     private TestFragment mFragment;
74     private FakeFeatureFactory mFeatureFactory;
75     private PowerUsageSummary mPowerUsageSummary;
76
77     @Before
78     public void setUp() {
79         MockitoAnnotations.initMocks(this);
80
81         FakeFeatureFactory.setupForTest(mContext);
82         mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
83
84         mFragment = new TestFragment(mContext);
85
86         when(mMenu.add(Menu.NONE, MENU_STATS_REFRESH, Menu.NONE,
87                 R.string.menu_stats_refresh)
88                 .setIcon(com.android.internal.R.drawable.ic_menu_refresh)
89                 .setAlphabeticShortcut('r'))
90                 .thenReturn(mRefreshMenu);
91         when(mAdditionalBatteryInfoMenu.getItemId())
92                 .thenReturn(MENU_ADDITIONAL_BATTERY_INFO);
93         when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent())
94                 .thenReturn(ADDITIONAL_BATTERY_INFO_INTENT);
95
96         mPowerUsageSummary = new PowerUsageSummary();
97
98         when(mBatterySipper.getPackages()).thenReturn(PACKAGE_NAMES);
99         when(mBatterySipper.getUid()).thenReturn(UID);
100         mBatterySipper.totalPowerMah = POWER_MAH;
101     }
102
103     @Test
104     public void testOptionsMenu_additionalBatteryInfoEnabled() {
105         when(mFeatureFactory.powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled())
106                 .thenReturn(true);
107
108         mFragment.onCreateOptionsMenu(mMenu, mMenuInflater);
109
110         verify(mMenu).add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO,
111                 Menu.NONE, R.string.additional_battery_info);
112
113         mFragment.onOptionsItemSelected(mAdditionalBatteryInfoMenu);
114
115         assertThat(mFragment.mStartActivityCalled).isTrue();
116         assertThat(mFragment.mStartActivityIntent).isEqualTo(ADDITIONAL_BATTERY_INFO_INTENT);
117     }
118
119     @Test
120     public void testOptionsMenu_additionalBatteryInfoDisabled() {
121         when(mFeatureFactory.powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled())
122                 .thenReturn(false);
123
124         mFragment.onCreateOptionsMenu(mMenu, mMenuInflater);
125
126         verify(mMenu, never()).add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO,
127                 Menu.NONE, R.string.additional_battery_info);
128     }
129
130     @Test
131     public void testExtractKeyFromSipper_TypeAPPUidObjectNull_ReturnPackageNames() {
132         mBatterySipper.uidObj = null;
133         mBatterySipper.drainType = BatterySipper.DrainType.APP;
134
135         final String key = mPowerUsageSummary.extractKeyFromSipper(mBatterySipper);
136         assertThat(key).isEqualTo(TextUtils.concat(mBatterySipper.getPackages()).toString());
137     }
138
139     @Test
140     public void testExtractKeyFromSipper_TypeOther_ReturnDrainType() {
141         mBatterySipper.uidObj = null;
142         mBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
143
144         final String key = mPowerUsageSummary.extractKeyFromSipper(mBatterySipper);
145         assertThat(key).isEqualTo(mBatterySipper.drainType.toString());
146     }
147
148     @Test
149     public void testExtractKeyFromSipper_TypeAPPUidObjectNotNull_ReturnUid() {
150         mBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
151         mBatterySipper.drainType = BatterySipper.DrainType.APP;
152
153         final String key = mPowerUsageSummary.extractKeyFromSipper(mBatterySipper);
154         assertThat(key).isEqualTo(Integer.toString(mBatterySipper.getUid()));
155     }
156
157     @Test
158     public void testShouldHideSipper_TypeIdle_ReturnTrue() {
159         mBatterySipper.drainType = BatterySipper.DrainType.IDLE;
160         assertThat(mPowerUsageSummary.shouldHideSipper(mBatterySipper)).isTrue();
161     }
162
163     @Test
164     public void testShouldHideSipper_TypeCell_ReturnTrue() {
165         mBatterySipper.drainType = BatterySipper.DrainType.CELL;
166         assertThat(mPowerUsageSummary.shouldHideSipper(mBatterySipper)).isTrue();
167     }
168
169     @Test
170     public void testShouldHideSipper_UidRoot_ReturnTrue() {
171         mBatterySipper.drainType = BatterySipper.DrainType.APP;
172         when(mBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
173         assertThat(mPowerUsageSummary.shouldHideSipper(mBatterySipper)).isTrue();
174     }
175
176     @Test
177     public void testShouldHideSipper_UidSystem_ReturnTrue() {
178         mBatterySipper.drainType = BatterySipper.DrainType.APP;
179         when(mBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
180         assertThat(mPowerUsageSummary.shouldHideSipper(mBatterySipper)).isTrue();
181     }
182
183     @Test
184     public void testShouldHideSipper_UidNormal_ReturnFalse() {
185         mBatterySipper.drainType = BatterySipper.DrainType.APP;
186         when(mBatterySipper.getUid()).thenReturn(UID);
187         assertThat(mPowerUsageSummary.shouldHideSipper(mBatterySipper)).isFalse();
188     }
189
190     public static class TestFragment extends PowerUsageSummary {
191
192         private Context mContext;
193         private boolean mStartActivityCalled;
194         private Intent mStartActivityIntent;
195
196         public TestFragment(Context context) {
197             mContext = context;
198         }
199
200         @Override
201         public Context getContext() {
202             return mContext;
203         }
204
205         @Override
206         public void startActivity(Intent intent) {
207             mStartActivityCalled = true;
208             mStartActivityIntent = intent;
209         }
210     }
211 }