Home | History | Annotate | Download | only in autofill
      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