FooterPreferenceMixinTest.java revision 5efe8f0a096fd13d5ecdacf90447e0b4ef132967
15efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang/* 25efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * Copyright (C) 2016 The Android Open Source Project 35efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * 45efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * Licensed under the Apache License, Version 2.0 (the "License"); 55efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * you may not use this file except in compliance with the License. 65efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * You may obtain a copy of the License at 75efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * 85efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * http://www.apache.org/licenses/LICENSE-2.0 95efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * 105efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * Unless required by applicable law or agreed to in writing, software 115efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * distributed under the License is distributed on an "AS IS" BASIS, 125efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * See the License for the specific language governing permissions and 145efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang * limitations under the License. 155efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang */ 165efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 175efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langpackage com.android.settingslib.widget; 185efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 195efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport android.support.v14.preference.PreferenceFragment; 205efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport android.support.v7.preference.PreferenceManager; 215efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport android.support.v7.preference.PreferenceScreen; 225efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 235efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport com.android.settingslib.SettingLibRobolectricTestRunner; 245efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport com.android.settingslib.TestConfig; 255efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport com.android.settingslib.core.lifecycle.Lifecycle; 265efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 275efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.junit.Before; 285efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.junit.Test; 295efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.junit.runner.RunWith; 305efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.mockito.Mock; 315efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.mockito.MockitoAnnotations; 325efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.robolectric.annotation.Config; 335efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport org.robolectric.shadows.ShadowApplication; 345efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 355efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport static com.google.common.truth.Truth.assertThat; 365efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport static org.mockito.Matchers.any; 375efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport static org.mockito.Mockito.mock; 385efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport static org.mockito.Mockito.times; 395efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport static org.mockito.Mockito.verify; 405efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langimport static org.mockito.Mockito.when; 415efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 425efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang@RunWith(SettingLibRobolectricTestRunner.class) 435efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 445efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Langpublic class FooterPreferenceMixinTest { 455efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 465efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Mock 475efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang private PreferenceFragment mFragment; 485efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Mock 495efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang private PreferenceScreen mScreen; 505efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 515efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang private Lifecycle mLifecycle; 525efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang private FooterPreferenceMixin mMixin; 535efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 545efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Before 555efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang public void setUp() { 565efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang MockitoAnnotations.initMocks(this); 575efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang mLifecycle = new Lifecycle(); 585efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang when(mFragment.getPreferenceManager()).thenReturn(mock(PreferenceManager.class)); 595efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang when(mFragment.getPreferenceManager().getContext()) 605efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang .thenReturn(ShadowApplication.getInstance().getApplicationContext()); 615efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang mMixin = new FooterPreferenceMixin(mFragment, mLifecycle); 625efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang } 635efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 645efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Test 655efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang public void createFooter_screenNotAvailable_noCrash() { 665efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang assertThat(mMixin.createFooterPreference()).isNotNull(); 675efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang } 685efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 695efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Test 705efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang public void createFooter_screenAvailable_canAttachToScreen() { 715efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang when(mFragment.getPreferenceScreen()).thenReturn(mScreen); 725efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 735efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang final FooterPreference preference = mMixin.createFooterPreference(); 745efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 755efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang assertThat(preference).isNotNull(); 765efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang verify(mScreen).addPreference(preference); 775efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang } 785efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 795efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Test 805efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang public void createFooter_screenAvailableDelayed_canAttachToScreen() { 815efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang final FooterPreference preference = mMixin.createFooterPreference(); 825efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 835efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang mLifecycle.setPreferenceScreen(mScreen); 845efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 855efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang assertThat(preference).isNotNull(); 865efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang verify(mScreen).addPreference(preference); 875efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang } 885efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 895efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang @Test 905efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang public void createFooterTwice_screenAvailable_replaceOldFooter() { 915efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang when(mFragment.getPreferenceScreen()).thenReturn(mScreen); 925efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 935efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang mMixin.createFooterPreference(); 945efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang mMixin.createFooterPreference(); 955efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 965efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang verify(mScreen).removePreference(any(FooterPreference.class)); 975efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang verify(mScreen, times(2)).addPreference(any(FooterPreference.class)); 985efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang } 995efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang 1005efe8f0a096fd13d5ecdacf90447e0b4ef132967Juan Lang} 101