1/*
2 * Copyright (C) 2017 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 */
16package com.android.settings.fuelgauge;
17
18import static com.google.common.truth.Truth.assertThat;
19import static org.mockito.ArgumentMatchers.nullable;
20import static org.mockito.Matchers.anyInt;
21import static org.mockito.Mockito.spy;
22import static org.mockito.Mockito.verify;
23import static org.mockito.Mockito.when;
24
25import android.content.Context;
26import android.support.v7.preference.PreferenceViewHolder;
27import android.view.LayoutInflater;
28import android.view.View;
29import android.widget.TextView;
30
31import com.android.settings.R;
32import com.android.settings.testutils.SettingsRobolectricTestRunner;
33import com.android.settings.TestConfig;
34import com.android.settings.graph.UsageView;
35import com.android.settings.testutils.shadow.SettingsShadowResources;
36
37import org.junit.Before;
38import org.junit.Test;
39import org.junit.runner.RunWith;
40import org.mockito.Mock;
41import org.mockito.MockitoAnnotations;
42import org.robolectric.RuntimeEnvironment;
43import org.robolectric.annotation.Config;
44
45
46@RunWith(SettingsRobolectricTestRunner.class)
47@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
48        shadows = {
49                SettingsShadowResources.class,
50                SettingsShadowResources.SettingsShadowTheme.class
51        })
52public class BatteryHistoryPreferenceTest {
53    public static final String TEST_STRING = "test";
54    @Mock
55    private PreferenceViewHolder mViewHolder;
56    @Mock
57    private BatteryInfo mBatteryInfo;
58    @Mock
59    private TextView mTextView;
60    @Mock
61    private View mItemView;
62    @Mock
63    private UsageView mUsageView;
64    @Mock
65    private View mLabelView;
66    private BatteryHistoryPreference mBatteryHistoryPreference;
67
68    @Before
69    public void setUp() {
70        MockitoAnnotations.initMocks(this);
71        final Context context = RuntimeEnvironment.application;
72        final View itemView = LayoutInflater.from(context).inflate(R.layout.battery_usage_graph,
73                null);
74
75        mBatteryHistoryPreference = new BatteryHistoryPreference(context, null);
76        mBatteryHistoryPreference.mBatteryInfo = mBatteryInfo;
77        mViewHolder = spy(PreferenceViewHolder.createInstanceForTests(itemView));
78        when(mViewHolder.findViewById(R.id.battery_usage)).thenReturn(mUsageView);
79        when(mViewHolder.findViewById(R.id.charge)).thenReturn(mTextView);
80        when(mUsageView.findViewById(anyInt())).thenReturn(mLabelView);
81    }
82
83    @Test
84    public void testOnBindViewHolder_updateBatteryUsage() {
85        mBatteryHistoryPreference.onBindViewHolder(mViewHolder);
86
87        verify(mViewHolder).findViewById(R.id.battery_usage);
88        verify(mTextView).setText(nullable(String.class));
89        verify(mBatteryInfo).bindHistory(mUsageView);
90    }
91
92    @Test
93    public void testSetBottomSummary_updatesBottomSummaryTextIfSet() {
94        mBatteryHistoryPreference.setBottomSummary(TEST_STRING);
95        mBatteryHistoryPreference.onBindViewHolder(mViewHolder);
96
97        TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary);
98        assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
99        assertThat(view.getText()).isEqualTo(TEST_STRING);
100        assertThat(mBatteryHistoryPreference.hideSummary).isFalse();
101    }
102
103    @Test
104    public void testSetBottomSummary_leavesBottomSummaryTextBlankIfNotSet() {
105        mBatteryHistoryPreference.hideBottomSummary();
106        mBatteryHistoryPreference.onBindViewHolder(mViewHolder);
107
108        TextView view = (TextView) mViewHolder.findViewById(R.id.bottom_summary);
109        assertThat(view.getVisibility()).isEqualTo(View.GONE);
110        assertThat(view.getText()).isEqualTo("");
111        assertThat(mBatteryHistoryPreference.hideSummary).isTrue();
112    }
113}
114