• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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 android.view.View.GONE;
20 import static android.view.View.VISIBLE;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 import static com.google.common.truth.Truth.assertWithMessage;
24 
25 import android.content.Context;
26 import android.view.View;
27 import android.widget.Button;
28 
29 import androidx.preference.PreferenceViewHolder;
30 import androidx.test.core.app.ApplicationProvider;
31 
32 import com.android.settings.R;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.robolectric.RobolectricTestRunner;
38 
39 @RunWith(RobolectricTestRunner.class)
40 public class CardPreferenceTest {
41 
42     private CardPreference mCardPreference;
43     private PreferenceViewHolder mHolder;
44 
45     @Before
setUp()46     public void setUp() {
47         Context context = ApplicationProvider.getApplicationContext();
48         context.setTheme(R.style.Theme_Settings);
49         mCardPreference = new CardPreference(context);
50 
51         View rootView = View.inflate(context, R.layout.card_preference_layout, /* parent= */ null);
52         mHolder = PreferenceViewHolder.createInstanceForTests(rootView);
53     }
54 
55     @Test
newACardPreference_layoutResourceShouldBeCardPreferenceLayout()56     public void newACardPreference_layoutResourceShouldBeCardPreferenceLayout() {
57         Context context = ApplicationProvider.getApplicationContext();
58         context.setTheme(R.style.SettingsPreferenceTheme);
59 
60         CardPreference cardPreference = new CardPreference(context);
61 
62         assertThat(cardPreference.getLayoutResource()).isEqualTo(R.layout.card_preference_layout);
63     }
64 
65     @Test
onBindViewHolder_noButtonVisible_buttonsLayoutShouldBeGone()66     public void onBindViewHolder_noButtonVisible_buttonsLayoutShouldBeGone() {
67         mCardPreference.onBindViewHolder(mHolder);
68 
69         assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
70     }
71 
72     @Test
onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutShouldBeVisible()73     public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutShouldBeVisible() {
74         mCardPreference.setPrimaryButtonVisible(true);
75 
76         mCardPreference.onBindViewHolder(mHolder);
77 
78         assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(VISIBLE);
79     }
80 
81     @Test
onBindViewHolder_setPrimaryButtonVisibility_shouldApplyToPrimaryButton()82     public void onBindViewHolder_setPrimaryButtonVisibility_shouldApplyToPrimaryButton() {
83         mCardPreference.setPrimaryButtonVisible(true);
84 
85         mCardPreference.onBindViewHolder(mHolder);
86 
87         assertThat(getPrimaryButton().getVisibility()).isEqualTo(VISIBLE);
88     }
89 
90     @Test
onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutShouldBeVisible()91     public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutShouldBeVisible() {
92         mCardPreference.setSecondaryButtonVisible(true);
93 
94         mCardPreference.onBindViewHolder(mHolder);
95 
96         assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(VISIBLE);
97     }
98 
99     @Test
onBindViewHolder_setSecondaryButtonVisibility_shouldApplyToSecondaryButton()100     public void onBindViewHolder_setSecondaryButtonVisibility_shouldApplyToSecondaryButton() {
101         mCardPreference.setSecondaryButtonVisible(true);
102 
103         mCardPreference.onBindViewHolder(mHolder);
104 
105         assertThat(getSecondaryButton().getVisibility()).isEqualTo(VISIBLE);
106     }
107 
108     @Test
onBindViewHolder_setPrimaryButtonText_shouldApplyToPrimaryButton()109     public void onBindViewHolder_setPrimaryButtonText_shouldApplyToPrimaryButton() {
110         String expectedText = "primary-button";
111         mCardPreference.setPrimaryButtonText(expectedText);
112 
113         mCardPreference.onBindViewHolder(mHolder);
114 
115         assertThat(getPrimaryButton().getText().toString()).isEqualTo(expectedText);
116     }
117 
118     @Test
onBindViewHolder_setSecondaryButtonText_shouldApplyToSecondaryButton()119     public void onBindViewHolder_setSecondaryButtonText_shouldApplyToSecondaryButton() {
120         String expectedText = "secondary-button";
121         mCardPreference.setSecondaryButtonText(expectedText);
122 
123         mCardPreference.onBindViewHolder(mHolder);
124 
125         assertThat(getSecondaryButton().getText().toString()).isEqualTo(expectedText);
126     }
127 
128     @Test
onBindViewHolder_initialTextForPrimaryButtonShouldBeEmpty()129     public void onBindViewHolder_initialTextForPrimaryButtonShouldBeEmpty() {
130         mCardPreference.onBindViewHolder(mHolder);
131 
132         assertThat(getPrimaryButton().getText().toString()).isEqualTo("");
133     }
134 
135     @Test
onBindViewHolder_initialTextForSecondaryButtonShouldBeEmpty()136     public void onBindViewHolder_initialTextForSecondaryButtonShouldBeEmpty() {
137         mCardPreference.onBindViewHolder(mHolder);
138 
139         assertThat(getSecondaryButton().getText().toString()).isEqualTo("");
140     }
141 
142     @Test
performClickOnPrimaryButton_shouldCalledClickListener()143     public void performClickOnPrimaryButton_shouldCalledClickListener() {
144         final boolean[] hasCalled = {false};
145         View.OnClickListener clickListener = v -> hasCalled[0] = true;
146         mCardPreference.setPrimaryButtonClickListener(clickListener);
147 
148         mCardPreference.onBindViewHolder(mHolder);
149         getPrimaryButton().performClick();
150 
151         assertThat(hasCalled[0]).isTrue();
152     }
153 
154     @Test
performClickOnSecondaryButton_shouldCalledClickListener()155     public void performClickOnSecondaryButton_shouldCalledClickListener() {
156         final boolean[] hasCalled = {false};
157         View.OnClickListener clickListener = v -> hasCalled[0] = true;
158         mCardPreference.setSecondaryButtonClickListener(clickListener);
159 
160         mCardPreference.onBindViewHolder(mHolder);
161         getSecondaryButton().performClick();
162 
163         assertThat(hasCalled[0]).isTrue();
164     }
165 
166     @Test
onBindViewHolder_primaryButtonDefaultIsGone()167     public void onBindViewHolder_primaryButtonDefaultIsGone() {
168         mCardPreference.onBindViewHolder(mHolder);
169 
170         assertThat(getPrimaryButton().getVisibility()).isEqualTo(GONE);
171     }
172 
173     @Test
onBindViewHolder_secondaryButtonDefaultIsGone()174     public void onBindViewHolder_secondaryButtonDefaultIsGone() {
175         mCardPreference.onBindViewHolder(mHolder);
176 
177         assertThat(getSecondaryButton().getVisibility()).isEqualTo(GONE);
178     }
179 
180     @Test
setPrimaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible()181     public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() {
182         mCardPreference.setPrimaryButtonVisible(false);
183         mCardPreference.onBindViewHolder(mHolder);
184 
185         mCardPreference.setPrimaryButtonVisible(true);
186 
187         assertThat(getPrimaryButton().getVisibility()).isEqualTo(VISIBLE);
188     }
189 
190     @Test
setPrimaryButtonText_setAfterBindViewHolder_setOnUi()191     public void setPrimaryButtonText_setAfterBindViewHolder_setOnUi() {
192         String expectedText = "123456";
193         mCardPreference.onBindViewHolder(mHolder);
194 
195         mCardPreference.setPrimaryButtonText(expectedText);
196 
197         assertThat(getPrimaryButton().getText().toString()).isEqualTo(expectedText);
198     }
199 
200     @Test
setPrimaryButtonText_setNull_shouldBeEmptyText()201     public void setPrimaryButtonText_setNull_shouldBeEmptyText() {
202         final String emptyString = "";
203         mCardPreference.setPrimaryButtonText("1234");
204         mCardPreference.onBindViewHolder(mHolder);
205 
206         mCardPreference.setPrimaryButtonText(null);
207 
208         assertThat(getPrimaryButton().getText().toString()).isEqualTo(emptyString);
209     }
210 
211     @Test
setPrimaryButtonClickListener_setAfterOnBindViewHolder()212     public void setPrimaryButtonClickListener_setAfterOnBindViewHolder() {
213         final String[] hasCalled = {""};
214         String expectedClickedResult = "was called";
215         View.OnClickListener clickListener = v -> hasCalled[0] = expectedClickedResult;
216         mCardPreference.onBindViewHolder(mHolder);
217 
218         mCardPreference.setPrimaryButtonClickListener(clickListener);
219         getPrimaryButton().performClick();
220 
221         assertThat(hasCalled[0]).isEqualTo(expectedClickedResult);
222     }
223 
224     @Test
setPrimaryButtonClickListener_setNull_shouldClearTheOnClickListener()225     public void setPrimaryButtonClickListener_setNull_shouldClearTheOnClickListener() {
226         final String[] hasCalled = {"not called"};
227         View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
228         mCardPreference.setPrimaryButtonClickListener(clickListener);
229         mCardPreference.onBindViewHolder(mHolder);
230 
231         mCardPreference.setPrimaryButtonClickListener(null);
232         getPrimaryButton().performClick();
233 
234         assertThat(hasCalled[0]).isEqualTo("not called");
235     }
236 
237     @Test
setSecondaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible()238     public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() {
239         mCardPreference.setSecondaryButtonVisible(false);
240         mCardPreference.onBindViewHolder(mHolder);
241 
242         mCardPreference.setSecondaryButtonVisible(true);
243 
244         assertThat(getSecondaryButton().getVisibility()).isEqualTo(VISIBLE);
245     }
246 
247     @Test
setSecondaryButtonText_setAfterBindViewHolder_setOnUi()248     public void setSecondaryButtonText_setAfterBindViewHolder_setOnUi() {
249         String expectedText = "10101010";
250         mCardPreference.onBindViewHolder(mHolder);
251 
252         mCardPreference.setSecondaryButtonText(expectedText);
253 
254         assertThat(getSecondaryButton().getText().toString()).isEqualTo(expectedText);
255     }
256 
257     @Test
setSecondaryButtonText_setNull_shouldBeEmptyText()258     public void setSecondaryButtonText_setNull_shouldBeEmptyText() {
259         String emptyString = "";
260         mCardPreference.setSecondaryButtonText("1234");
261         mCardPreference.onBindViewHolder(mHolder);
262 
263         mCardPreference.setSecondaryButtonText(null);
264 
265         assertThat(getSecondaryButton().getText().toString()).isEqualTo(emptyString);
266     }
267 
268     @Test
setSecondaryButtonClickListener_setAfterOnBindViewHolder()269     public void setSecondaryButtonClickListener_setAfterOnBindViewHolder() {
270         final String[] hasCalled = {""};
271         String expectedClickedResult = "2nd was called";
272         View.OnClickListener clickListener = v -> hasCalled[0] = expectedClickedResult;
273         mCardPreference.onBindViewHolder(mHolder);
274 
275         mCardPreference.setSecondaryButtonClickListener(clickListener);
276         getSecondaryButton().performClick();
277 
278         assertThat(hasCalled[0]).isEqualTo(expectedClickedResult);
279     }
280 
281     @Test
setSecondaryButtonClickListener_setNull_shouldClearTheOnClickListener()282     public void setSecondaryButtonClickListener_setNull_shouldClearTheOnClickListener() {
283         final String[] hasCalled = {"not called"};
284         View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
285         mCardPreference.setSecondaryButtonClickListener(clickListener);
286         mCardPreference.onBindViewHolder(mHolder);
287 
288         mCardPreference.setSecondaryButtonClickListener(null);
289         getSecondaryButton().performClick();
290 
291         assertThat(hasCalled[0]).isEqualTo("not called");
292     }
293 
294     @Test
295     public void
setPrimaryButtonVisibility_onlyPrimaryButtonVisible_setGone_buttonGroupShouldBeGone()296             setPrimaryButtonVisibility_onlyPrimaryButtonVisible_setGone_buttonGroupShouldBeGone() {
297         mCardPreference.setPrimaryButtonVisible(true);
298         mCardPreference.setSecondaryButtonVisible(false);
299         mCardPreference.onBindViewHolder(mHolder);
300         assertWithMessage("PreCondition: buttonsView should be Visible")
301                 .that(getCardPreferenceButtonsView().getVisibility())
302                 .isEqualTo(VISIBLE);
303 
304         mCardPreference.setPrimaryButtonVisible(false);
305 
306         assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
307     }
308 
309     @Test
310     public void
setSecondaryButtonVisibility_only2ndButtonVisible_setGone_buttonGroupShouldBeGone()311             setSecondaryButtonVisibility_only2ndButtonVisible_setGone_buttonGroupShouldBeGone() {
312         mCardPreference.setPrimaryButtonVisible(false);
313         mCardPreference.setSecondaryButtonVisible(true);
314         mCardPreference.onBindViewHolder(mHolder);
315         assertWithMessage("PreCondition: buttonsView should be Visible")
316                 .that(getCardPreferenceButtonsView().getVisibility())
317                 .isEqualTo(VISIBLE);
318 
319         mCardPreference.setSecondaryButtonVisible(false);
320 
321         assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
322     }
323 
getCardPreferenceButtonsView()324     private View getCardPreferenceButtonsView() {
325         return mHolder.findViewById(R.id.card_preference_buttons);
326     }
327 
getPrimaryButton()328     private Button getPrimaryButton() {
329         return (Button) mHolder.findViewById(android.R.id.button1);
330     }
331 
getSecondaryButton()332     private Button getSecondaryButton() {
333         return (Button) mHolder.findViewById(android.R.id.button2);
334     }
335 }
336