• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 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 
17 package com.android.settings.widget;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 import static org.mockito.Mockito.mock;
21 import static org.mockito.Mockito.verify;
22 
23 import android.content.Context;
24 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
25 import android.support.v7.preference.PreferenceViewHolder;
26 import android.view.LayoutInflater;
27 import android.view.View;
28 import android.widget.CheckBox;
29 import android.widget.LinearLayout;
30 
31 import com.android.settings.R;
32 import com.android.settings.testutils.SettingsRobolectricTestRunner;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.robolectric.RuntimeEnvironment;
38 
39 @RunWith(SettingsRobolectricTestRunner.class)
40 public class MasterCheckBoxPreferenceTest {
41 
42     private Context mContext;
43     private MasterCheckBoxPreference mPreference;
44 
45     @Before
setUp()46     public void setUp() {
47         mContext = RuntimeEnvironment.application;
48         mPreference = new MasterCheckBoxPreference(mContext);
49     }
50 
51     @Test
createNewPreference_shouldSetLayout()52     public void createNewPreference_shouldSetLayout() {
53         assertThat(mPreference.getWidgetLayoutResource())
54                 .isEqualTo(R.layout.preference_widget_master_checkbox);
55     }
56 
57     @Test
setChecked_shouldUpdateCheckBoxCheckedState()58     public void setChecked_shouldUpdateCheckBoxCheckedState() {
59         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
60                 LayoutInflater.from(mContext).inflate(
61                   R.layout.preference_widget_master_checkbox, null));
62         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
63         mPreference.onBindViewHolder(holder);
64 
65         mPreference.setChecked(true);
66         assertThat(checkBox.isChecked()).isTrue();
67 
68         mPreference.setChecked(false);
69         assertThat(checkBox.isChecked()).isFalse();
70     }
71 
72     @Test
setEnabled_shouldUpdateCheckBoxEnabledState()73     public void setEnabled_shouldUpdateCheckBoxEnabledState() {
74         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
75                 LayoutInflater.from(mContext).inflate(
76                   R.layout.preference_widget_master_checkbox, null));
77         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
78         mPreference.onBindViewHolder(holder);
79 
80         mPreference.setEnabled(true);
81         assertThat(checkBox.isEnabled()).isTrue();
82 
83         mPreference.setEnabled(false);
84         assertThat(checkBox.isEnabled()).isFalse();
85     }
86 
87     @Test
setCheckboxEnabled_shouldOnlyUpdateCheckBoxEnabledState()88     public void setCheckboxEnabled_shouldOnlyUpdateCheckBoxEnabledState() {
89         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
90                 LayoutInflater.from(mContext).inflate(
91                         R.layout.preference_widget_master_checkbox, null));
92         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
93         mPreference.onBindViewHolder(holder);
94 
95         mPreference.setCheckBoxEnabled(false);
96         assertThat(mPreference.isEnabled()).isTrue();
97         assertThat(checkBox.isEnabled()).isFalse();
98 
99         mPreference.setCheckBoxEnabled(true);
100         assertThat(mPreference.isEnabled()).isTrue();
101         assertThat(checkBox.isEnabled()).isTrue();
102     }
103 
104     @Test
onBindViewHolder_shouldSetCheckboxEnabledState()105     public void onBindViewHolder_shouldSetCheckboxEnabledState() {
106         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
107                 LayoutInflater.from(mContext).inflate(
108                         R.layout.preference_widget_master_checkbox, null));
109         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
110 
111         mPreference.setCheckBoxEnabled(false);
112         mPreference.onBindViewHolder(holder);
113 
114         assertThat(mPreference.isEnabled()).isTrue();
115         assertThat(checkBox.isEnabled()).isFalse();
116 
117         mPreference.setCheckBoxEnabled(true);
118         assertThat(mPreference.isEnabled()).isTrue();
119         assertThat(checkBox.isEnabled()).isTrue();
120     }
121 
122     @Test
clickWidgetView_shouldToggleCheckBox()123     public void clickWidgetView_shouldToggleCheckBox() {
124         final LayoutInflater inflater = LayoutInflater.from(mContext);
125         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
126                 inflater.inflate(R.layout.preference_two_target, null));
127         final LinearLayout widgetView = holder.itemView.findViewById(android.R.id.widget_frame);
128         assertThat(widgetView).isNotNull();
129 
130         inflater.inflate(R.layout.preference_widget_master_checkbox, widgetView, true);
131         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
132         mPreference.onBindViewHolder(holder);
133 
134         widgetView.performClick();
135         assertThat(checkBox.isChecked()).isTrue();
136 
137         widgetView.performClick();
138         assertThat(checkBox.isChecked()).isFalse();
139     }
140 
141     @Test
clickWidgetView_shouldNotToggleCheckBoxIfDisabled()142     public void clickWidgetView_shouldNotToggleCheckBoxIfDisabled() {
143         final LayoutInflater inflater = LayoutInflater.from(mContext);
144         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
145                 inflater.inflate(R.layout.preference_two_target, null));
146         final LinearLayout widgetView = holder.itemView.findViewById(android.R.id.widget_frame);
147         assertThat(widgetView).isNotNull();
148 
149         inflater.inflate(R.layout.preference_widget_master_checkbox, widgetView, true);
150         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
151         mPreference.onBindViewHolder(holder);
152         mPreference.setEnabled(false);
153 
154         widgetView.performClick();
155         assertThat(checkBox.isChecked()).isFalse();
156     }
157 
158     @Test
clickWidgetView_shouldNotifyPreferenceChanged()159     public void clickWidgetView_shouldNotifyPreferenceChanged() {
160         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
161                 LayoutInflater.from(mContext).inflate(R.layout.preference_two_target, null));
162         final View widgetView = holder.findViewById(android.R.id.widget_frame);
163         final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
164         mPreference.setOnPreferenceChangeListener(listener);
165         mPreference.onBindViewHolder(holder);
166 
167         mPreference.setChecked(false);
168         widgetView.performClick();
169         verify(listener).onPreferenceChange(mPreference, true);
170 
171         mPreference.setChecked(true);
172         widgetView.performClick();
173         verify(listener).onPreferenceChange(mPreference, false);
174     }
175 
176     @Test
onBindViewHolder_checkBoxShouldHaveContentDescription()177     public void onBindViewHolder_checkBoxShouldHaveContentDescription() {
178         final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
179             LayoutInflater.from(mContext)
180                 .inflate(R.layout.preference_widget_master_checkbox, null));
181         final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget);
182         final String label = "TestButton";
183         mPreference.setTitle(label);
184 
185         mPreference.onBindViewHolder(holder);
186 
187         assertThat(checkBox.getContentDescription()).isEqualTo(label);
188     }
189 }
190