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 *Visibility_setGoneForPrimaryButton_buttonGroupIsGone 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 mHolder = PreferenceViewHolder.createInstanceForTests( 52 View.inflate(context, R.layout.card_preference_layout, /* parent= */ null)); 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_buttonsLayoutIsGone()66 public void onBindViewHolder_noButtonVisible_buttonsLayoutIsGone() { 67 mCardPreference.onBindViewHolder(mHolder); 68 69 assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE); 70 } 71 72 @Test onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutIsVisible()73 public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutIsVisible() { 74 mCardPreference.setPrimaryButtonVisible(true); 75 76 mCardPreference.onBindViewHolder(mHolder); 77 78 assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(VISIBLE); 79 } 80 81 @Test onBindViewHolder_setPrimaryButtonVisibilityToVisible()82 public void onBindViewHolder_setPrimaryButtonVisibilityToVisible() { 83 mCardPreference.setPrimaryButtonVisible(true); 84 85 mCardPreference.onBindViewHolder(mHolder); 86 87 assertThat(getPrimaryButton().getVisibility()).isEqualTo(VISIBLE); 88 } 89 90 @Test onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutIsVisible()91 public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutIsVisible() { 92 mCardPreference.setSecondaryButtonVisible(true); 93 94 mCardPreference.onBindViewHolder(mHolder); 95 96 assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(VISIBLE); 97 } 98 99 @Test onBindViewHolder_setSecondaryButtonVisibilityToVisible()100 public void onBindViewHolder_setSecondaryButtonVisibilityToVisible() { 101 mCardPreference.setSecondaryButtonVisible(true); 102 103 mCardPreference.onBindViewHolder(mHolder); 104 105 assertThat(getSecondaryButton().getVisibility()).isEqualTo(VISIBLE); 106 } 107 108 @Test onBindViewHolder_setPrimaryButtonTextToExpectedText()109 public void onBindViewHolder_setPrimaryButtonTextToExpectedText() { 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_setSecondaryButtonTextToExpectedText()119 public void onBindViewHolder_setSecondaryButtonTextToExpectedText() { 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_callClickListener()143 public void performClickOnPrimaryButton_callClickListener() { 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_callClickListener()155 public void performClickOnSecondaryButton_callClickListener() { 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_isVisible()181 public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_isVisible() { 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_isEmptyText()201 public void setPrimaryButtonText_setNull_isEmptyText() { 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_clearTheOnClickListener()225 public void setPrimaryButtonClickListener_setNull_clearTheOnClickListener() { 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_isVisible()238 public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_isVisible() { 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_isEmptyText()258 public void setSecondaryButtonText_setNull_isEmptyText() { 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_clearTheOnClickListener()282 public void setSecondaryButtonClickListener_setNull_clearTheOnClickListener() { 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 setPrimaryButtonVisibility_setGoneForSecondaryButton_buttonGroupIsGone()295 public void setPrimaryButtonVisibility_setGoneForSecondaryButton_buttonGroupIsGone() { 296 mCardPreference.setPrimaryButtonVisible(true); 297 mCardPreference.setSecondaryButtonVisible(false); 298 mCardPreference.onBindViewHolder(mHolder); 299 assertWithMessage("PreCondition: buttonsView should be Visible") 300 .that(getCardPreferenceButtonsView().getVisibility()) 301 .isEqualTo(VISIBLE); 302 303 mCardPreference.setPrimaryButtonVisible(false); 304 305 assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE); 306 } 307 308 @Test setSecondaryButtonVisibility_setGoneForPrimaryButton_buttonGroupIsGone()309 public void setSecondaryButtonVisibility_setGoneForPrimaryButton_buttonGroupIsGone() { 310 mCardPreference.setPrimaryButtonVisible(false); 311 mCardPreference.setSecondaryButtonVisible(true); 312 mCardPreference.onBindViewHolder(mHolder); 313 assertWithMessage("PreCondition: buttonsView should be Visible") 314 .that(getCardPreferenceButtonsView().getVisibility()) 315 .isEqualTo(VISIBLE); 316 317 mCardPreference.setSecondaryButtonVisible(false); 318 319 assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE); 320 } 321 322 @Test resetLayoutState_buttonGroupIsGone()323 public void resetLayoutState_buttonGroupIsGone() { 324 mCardPreference.setPrimaryButtonVisible(true); 325 mCardPreference.setSecondaryButtonVisible(true); 326 mCardPreference.onBindViewHolder(mHolder); 327 328 mCardPreference.resetLayoutState(); 329 330 assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE); 331 } 332 getCardPreferenceButtonsView()333 private View getCardPreferenceButtonsView() { 334 return mHolder.findViewById(R.id.card_preference_buttons); 335 } 336 getPrimaryButton()337 private Button getPrimaryButton() { 338 return (Button) mHolder.findViewById(android.R.id.button1); 339 } 340 getSecondaryButton()341 private Button getSecondaryButton() { 342 return (Button) mHolder.findViewById(android.R.id.button2); 343 } 344 } 345