Home | History | Annotate | Download | only in inputmethod
      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.inputmethod;
     18 
     19 import static org.mockito.Mockito.atLeastOnce;
     20 import static org.mockito.Mockito.doReturn;
     21 import static org.mockito.Mockito.never;
     22 import static org.mockito.Mockito.verify;
     23 import static org.robolectric.shadow.api.Shadow.extract;
     24 
     25 import android.os.UserManager;
     26 import android.provider.Settings;
     27 import android.support.v7.preference.ListPreference;
     28 import android.support.v7.preference.Preference;
     29 import android.support.v7.preference.PreferenceCategory;
     30 import android.support.v7.preference.PreferenceScreen;
     31 
     32 import com.android.tv.settings.R;
     33 import com.android.tv.settings.TvSettingsRobolectricTestRunner;
     34 import com.android.tv.settings.testutils.ShadowInputMethodManager;
     35 import com.android.tv.settings.testutils.ShadowUserManager;
     36 import com.android.tv.settings.testutils.TvShadowActivityThread;
     37 import com.android.tv.settings.testutils.Utils;
     38 
     39 import org.junit.Before;
     40 import org.junit.Test;
     41 import org.junit.runner.RunWith;
     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 KeyboardFragmentTest {
     55     @Spy
     56     private KeyboardFragment mKeyboardFragment;
     57 
     58     private ShadowUserManager mUserManager;
     59 
     60     @Mock
     61     private PreferenceScreen mPreferenceScreen;
     62 
     63     @Mock
     64     private PreferenceCategory mAutofillCategory;
     65 
     66     @Mock
     67     private Preference mCurrentAutofill;
     68 
     69     @Mock
     70     private PreferenceCategory mKeyboardCategory;
     71 
     72     @Mock
     73     private ListPreference mCurrentKeyboard;
     74 
     75     @Before
     76     public void setUp() {
     77         MockitoAnnotations.initMocks(this);
     78         mUserManager = extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
     79         mUserManager.setIsAdminUser(true);
     80         doReturn(RuntimeEnvironment.application).when(mKeyboardFragment).getContext();
     81         mKeyboardFragment.onAttach(RuntimeEnvironment.application);
     82         doReturn(RuntimeEnvironment.application).when(mKeyboardFragment).getPreferenceContext();
     83 
     84         doReturn(mPreferenceScreen).when(mKeyboardFragment).getPreferenceScreen();
     85 
     86         doReturn(mKeyboardCategory).when(mKeyboardFragment).findPreference(
     87                 KeyboardFragment.KEY_KEYBOARD_CATEGORY);
     88 
     89         doReturn(mCurrentKeyboard).when(mKeyboardFragment).findPreference(
     90                 KeyboardFragment.KEY_CURRENT_KEYBOARD);
     91         doReturn(1).when(mKeyboardCategory).getPreferenceCount();
     92         doReturn(mCurrentKeyboard).when(mKeyboardCategory).getPreference(0);
     93 
     94         doReturn(mAutofillCategory).when(mKeyboardFragment).findPreference(
     95                 KeyboardFragment.KEY_AUTOFILL_CATEGORY);
     96 
     97         doReturn(mCurrentAutofill).when(mKeyboardFragment).findPreference(
     98                 KeyboardFragment.KEY_CURRENT_AUTOFILL);
     99         doReturn(1).when(mAutofillCategory).getPreferenceCount();
    100         doReturn(mCurrentAutofill).when(mAutofillCategory).getPreference(0);
    101     }
    102 
    103     @Test
    104     public void testUpdateAutofillSettings_noCandiate() {
    105 
    106         mKeyboardFragment.updateUi();
    107 
    108         verify(mPreferenceScreen, atLeastOnce()).setTitle(R.string.system_keyboard);
    109         verify(mPreferenceScreen, never()).setTitle(R.string.system_keyboard_autofill);
    110 
    111         verify(mKeyboardCategory, atLeastOnce()).setVisible(false);
    112         verify(mKeyboardCategory, never()).setVisible(true);
    113 
    114         verify(mAutofillCategory, atLeastOnce()).setVisible(false);
    115         verify(mAutofillCategory, never()).setVisible(true);
    116     }
    117 
    118     @Test
    119     public void testUpdateAutofillSettings_selected() {
    120 
    121         Utils.addAutofill("com.test.AutofillPackage", "com.test.AutofillPackage.MyService");
    122 
    123         ShadowSettings.ShadowGlobal.putString(mKeyboardFragment.getContext().getContentResolver(),
    124                 Settings.Secure.AUTOFILL_SERVICE,
    125                 "com.test.AutofillPackage/com.test.AutofillPackage.MyService");
    126 
    127         mKeyboardFragment.updateUi();
    128 
    129         verify(mPreferenceScreen, atLeastOnce()).setTitle(R.string.system_keyboard_autofill);
    130         verify(mPreferenceScreen, never()).setTitle(R.string.system_keyboard);
    131 
    132         verify(mKeyboardCategory, atLeastOnce()).setVisible(true);
    133         verify(mKeyboardCategory, never()).setVisible(false);
    134 
    135         verify(mAutofillCategory, atLeastOnce()).setVisible(true);
    136         verify(mAutofillCategory, never()).setVisible(false);
    137 
    138         verify(mCurrentAutofill, atLeastOnce()).setSummary(
    139                 "com.test.AutofillPackage.MyService");
    140     }
    141 
    142     @Test
    143     public void testUpdateAutofillSettings_selectedNone() {
    144 
    145         Utils.addAutofill("com.test.AutofillPackage", "com.test.AutofillPackage.MyService");
    146 
    147         ShadowSettings.ShadowGlobal.putString(mKeyboardFragment.getContext().getContentResolver(),
    148                 Settings.Secure.AUTOFILL_SERVICE, null);
    149 
    150         mKeyboardFragment.updateUi();
    151 
    152         verify(mPreferenceScreen, atLeastOnce()).setTitle(R.string.system_keyboard_autofill);
    153         verify(mPreferenceScreen, never()).setTitle(R.string.system_keyboard);
    154 
    155         verify(mKeyboardCategory, atLeastOnce()).setVisible(true);
    156         verify(mKeyboardCategory, never()).setVisible(false);
    157 
    158         verify(mAutofillCategory, atLeastOnce()).setVisible(true);
    159         verify(mAutofillCategory, never()).setVisible(false);
    160 
    161         verify(mCurrentAutofill, atLeastOnce()).setSummary(
    162                 mKeyboardFragment.getContext().getString(R.string.autofill_none));
    163     }
    164 
    165 }
    166