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.tv.settings.autofill; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.doReturn; 22 import static org.mockito.Mockito.times; 23 import static org.mockito.Mockito.verify; 24 import static org.robolectric.shadow.api.Shadow.extract; 25 26 import android.os.UserManager; 27 import android.provider.Settings; 28 import android.support.v7.preference.Preference; 29 import android.support.v7.preference.PreferenceScreen; 30 31 import com.android.tv.settings.RadioPreference; 32 import com.android.tv.settings.TvSettingsRobolectricTestRunner; 33 import com.android.tv.settings.testutils.ShadowInputMethodManager; 34 import com.android.tv.settings.testutils.ShadowUserManager; 35 import com.android.tv.settings.testutils.TvShadowActivityThread; 36 import com.android.tv.settings.testutils.Utils; 37 38 import org.junit.Before; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 import org.mockito.ArgumentCaptor; 42 import org.mockito.Mock; 43 import org.mockito.MockitoAnnotations; 44 import org.mockito.Spy; 45 import org.robolectric.RuntimeEnvironment; 46 import org.robolectric.annotation.Config; 47 import org.robolectric.shadows.ShadowSettings; 48 49 @RunWith(TvSettingsRobolectricTestRunner.class) 50 @Config(shadows = { 51 ShadowUserManager.class, 52 TvShadowActivityThread.class, 53 ShadowInputMethodManager.class}) 54 public class AutofillPickerFragmentTest { 55 @Spy 56 private AutofillPickerFragment mFragment; 57 58 private ShadowUserManager mUserManager; 59 60 @Mock 61 private PreferenceScreen mPreferenceScreen; 62 63 private RadioPreference mNonePreference; 64 65 @Before 66 public void setUp() { 67 MockitoAnnotations.initMocks(this); 68 mUserManager = extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); 69 mUserManager.setIsAdminUser(true); 70 doReturn(RuntimeEnvironment.application).when(mFragment).getContext(); 71 mFragment.onAttach(RuntimeEnvironment.application); 72 73 doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen(); 74 mNonePreference = new RadioPreference(mFragment.getContext()); 75 doReturn(mNonePreference).when(mPreferenceScreen).findPreference( 76 AutofillPickerFragment.KEY_FOR_NONE); 77 } 78 79 @Test 80 public void selectedService() { 81 82 Utils.addAutofill("com.test.AutofillPackage", "com.test.AutofillPackage.MyService"); 83 84 ShadowSettings.ShadowGlobal.putString(mFragment.getContext().getContentResolver(), 85 Settings.Secure.AUTOFILL_SERVICE, 86 "com.test.AutofillPackage/com.test.AutofillPackage.MyService"); 87 88 mFragment.bind(mPreferenceScreen, false); 89 90 ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class); 91 verify(mPreferenceScreen, times(1)).addPreference(captor.capture()); 92 RadioPreference pref = (RadioPreference) captor.getValue(); 93 assertThat("com.test.AutofillPackage.MyService").isEqualTo(pref.getTitle()); 94 assertThat(pref.isChecked()).isTrue(); 95 96 assertThat(mNonePreference.isChecked()).isFalse(); 97 } 98 99 @Test 100 public void selectedNone() { 101 102 Utils.addAutofill("com.test.AutofillPackage", "com.test.AutofillPackage.MyService"); 103 104 mFragment.bind(mPreferenceScreen, false); 105 106 ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class); 107 verify(mPreferenceScreen, times(1)).addPreference(captor.capture()); 108 RadioPreference pref = (RadioPreference) captor.getValue(); 109 assertThat("com.test.AutofillPackage.MyService").isEqualTo(pref.getTitle()); 110 assertThat(pref.isChecked()).isFalse(); 111 112 assertThat(mNonePreference.isChecked()).isTrue(); 113 } 114 } 115