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