13a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei/* 23a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * Copyright (C) 2017 The Android Open Source Project 33a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * 43a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License"); 53a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * you may not use this file except in compliance with the License. 63a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * You may obtain a copy of the License at 73a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * 83a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * http://www.apache.org/licenses/LICENSE-2.0 93a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * 103a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * Unless required by applicable law or agreed to in writing, software 113a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS, 123a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * See the License for the specific language governing permissions and 143a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei * limitations under the License. 153a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei */ 163a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleipackage com.android.settings.fuelgauge; 173a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 18cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinezimport static com.google.common.truth.Truth.assertThat; 19046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.ArgumentMatchers.nullable; 20046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.Matchers.anyInt; 21046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.Mockito.spy; 22046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.Mockito.verify; 23046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lamimport static org.mockito.Mockito.when; 24046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam 253a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport android.content.Context; 263a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport android.support.v7.preference.PreferenceViewHolder; 273a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport android.view.LayoutInflater; 283a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport android.view.View; 293a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport android.widget.TextView; 303a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 313a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport com.android.settings.R; 329f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 333a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport com.android.settings.TestConfig; 34c661098ab8e278c57f1ad1a9adb8f1bbd80a81a5Alex Kuleszaimport com.android.settings.graph.UsageView; 35e2a276f2b6547884639fe94c801eb0a1f8a603e5Andrew Sappersteinimport com.android.settings.testutils.shadow.SettingsShadowResources; 363a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 373a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.junit.Before; 383a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.junit.Test; 393a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.junit.runner.RunWith; 403a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.mockito.Mock; 413a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.mockito.MockitoAnnotations; 423a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.robolectric.RuntimeEnvironment; 433a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleiimport org.robolectric.annotation.Config; 443a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 453a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 463a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei@RunWith(SettingsRobolectricTestRunner.class) 47e2a276f2b6547884639fe94c801eb0a1f8a603e5Andrew Sapperstein@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, 48e2a276f2b6547884639fe94c801eb0a1f8a603e5Andrew Sapperstein shadows = { 49e2a276f2b6547884639fe94c801eb0a1f8a603e5Andrew Sapperstein SettingsShadowResources.class, 50e2a276f2b6547884639fe94c801eb0a1f8a603e5Andrew Sapperstein SettingsShadowResources.SettingsShadowTheme.class 51e2a276f2b6547884639fe94c801eb0a1f8a603e5Andrew Sapperstein }) 523a03b722c67e343a3df8724b5f02f13d35252b22jackqdyuleipublic class BatteryHistoryPreferenceTest { 53cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez public static final String TEST_STRING = "test"; 543a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Mock 553a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private PreferenceViewHolder mViewHolder; 563a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Mock 573a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private BatteryInfo mBatteryInfo; 583a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Mock 593a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private TextView mTextView; 603a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Mock 613a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private View mItemView; 623a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Mock 633a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private UsageView mUsageView; 643a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Mock 653a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private View mLabelView; 663a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei private BatteryHistoryPreference mBatteryHistoryPreference; 673a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 683a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Before 693a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei public void setUp() { 703a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei MockitoAnnotations.initMocks(this); 713a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei final Context context = RuntimeEnvironment.application; 723a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei final View itemView = LayoutInflater.from(context).inflate(R.layout.battery_usage_graph, 733a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei null); 743a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 753a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei mBatteryHistoryPreference = new BatteryHistoryPreference(context, null); 763a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei mBatteryHistoryPreference.mBatteryInfo = mBatteryInfo; 774bd1e4f73b7b3b7efcf40e8056aba54dc3ea1ee6Filip Pavlis mViewHolder = spy(PreferenceViewHolder.createInstanceForTests(itemView)); 783a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei when(mViewHolder.findViewById(R.id.battery_usage)).thenReturn(mUsageView); 793a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei when(mViewHolder.findViewById(R.id.charge)).thenReturn(mTextView); 803a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei when(mUsageView.findViewById(anyInt())).thenReturn(mLabelView); 813a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei } 823a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 833a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei @Test 843a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei public void testOnBindViewHolder_updateBatteryUsage() { 853a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei mBatteryHistoryPreference.onBindViewHolder(mViewHolder); 863a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei 873a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei verify(mViewHolder).findViewById(R.id.battery_usage); 88046400c2c407429da47e6b2230ba8bbd21c43e9bMaurice Lam verify(mTextView).setText(nullable(String.class)); 893a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei verify(mBatteryInfo).bindHistory(mUsageView); 903a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei } 91cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez 92cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez @Test 93cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez public void testSetBottomSummary_updatesBottomSummaryTextIfSet() { 94cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez mBatteryHistoryPreference.setBottomSummary(TEST_STRING); 95cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez mBatteryHistoryPreference.onBindViewHolder(mViewHolder); 96cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez 97cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary); 98cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez assertThat(view.getVisibility()).isEqualTo(View.VISIBLE); 99cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez assertThat(view.getText()).isEqualTo(TEST_STRING); 1008ccb5a4698884cab16cdee86ce1f900b9f05e1e7Salvador Martinez assertThat(mBatteryHistoryPreference.hideSummary).isFalse(); 101cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez } 102cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez 103cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez @Test 104cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez public void testSetBottomSummary_leavesBottomSummaryTextBlankIfNotSet() { 105cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez mBatteryHistoryPreference.hideBottomSummary(); 106cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez mBatteryHistoryPreference.onBindViewHolder(mViewHolder); 107cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez 108cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary); 109cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez assertThat(view.getVisibility()).isEqualTo(View.GONE); 110cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez assertThat(view.getText()).isEqualTo(""); 1118ccb5a4698884cab16cdee86ce1f900b9f05e1e7Salvador Martinez assertThat(mBatteryHistoryPreference.hideSummary).isTrue(); 112cbefbc261f7f1f9d6a12909e66d1764a3c1031a9Salvador Martinez } 1133a03b722c67e343a3df8724b5f02f13d35252b22jackqdyulei} 114