1 /* 2 * Copyright (C) 2017 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 package com.android.emergency.preferences; 17 18 import static com.google.common.truth.Truth.assertThat; 19 import static org.mockito.Mockito.eq; 20 import static org.mockito.Mockito.mock; 21 import static org.mockito.Mockito.nullable; 22 import static org.mockito.Mockito.spy; 23 import static org.mockito.Mockito.verify; 24 import static org.mockito.Mockito.when; 25 26 import android.content.Context; 27 import android.content.SharedPreferences; 28 import android.support.v7.preference.PreferenceGroup; 29 import android.support.v7.preference.PreferenceManager; 30 import android.support.v7.preference.PreferenceScreen; 31 import android.text.Editable; 32 import android.view.View; 33 import android.widget.AutoCompleteTextView; 34 35 import com.android.emergency.PreferenceKeys; 36 import com.android.emergency.TestConfig; 37 38 import org.junit.Before; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 import org.mockito.Mock; 42 import org.mockito.MockitoAnnotations; 43 import org.robolectric.RobolectricTestRunner; 44 import org.robolectric.RuntimeEnvironment; 45 import org.robolectric.annotation.Config; 46 import org.robolectric.util.ReflectionHelpers; 47 48 /** Unit tests for {@link NameAutoCompletePreference}. */ 49 @RunWith(RobolectricTestRunner.class) 50 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 51 public class NameAutoCompletePreferenceTest { 52 @Mock private PreferenceManager mPreferenceManager; 53 @Mock private SharedPreferences mSharedPreferences; 54 @Mock private NameAutoCompletePreference.SuggestionProvider mAutoCompleteSuggestionProvider; 55 private NameAutoCompletePreference mPreference; 56 57 @Before setUp()58 public void setUp() { 59 MockitoAnnotations.initMocks(this); 60 61 when(mPreferenceManager.getSharedPreferences()).thenReturn(mSharedPreferences); 62 63 Context context = RuntimeEnvironment.application; 64 65 mPreference = 66 spy(new NameAutoCompletePreference(context, null, mAutoCompleteSuggestionProvider)); 67 68 PreferenceGroup prefRoot = spy(new PreferenceScreen(context, null)); 69 when(prefRoot.getPreferenceManager()).thenReturn(mPreferenceManager); 70 prefRoot.addPreference(mPreference); 71 } 72 73 @Test testProperties()74 public void testProperties() { 75 assertThat(mPreference).isNotNull(); 76 assertThat(mPreference.isEnabled()).isTrue(); 77 assertThat(mPreference.isPersistent()).isTrue(); 78 assertThat(mPreference.isSelectable()).isTrue(); 79 assertThat(mPreference.isNotSet()).isTrue(); 80 } 81 82 @Test testReloadFromPreference()83 public void testReloadFromPreference() throws Throwable { 84 mPreference.setKey(PreferenceKeys.KEY_NAME); 85 86 String name = "John"; 87 when(mSharedPreferences.getString(eq(mPreference.getKey()), nullable(String.class))) 88 .thenReturn(name); 89 90 mPreference.reloadFromPreference(); 91 assertThat(mPreference.getText()).isEqualTo(name); 92 assertThat(mPreference.isNotSet()).isFalse(); 93 } 94 95 @Test testSetText()96 public void testSetText() throws Throwable { 97 final String name = "John"; 98 mPreference.setText(name); 99 assertThat(mPreference.getText()).isEqualTo(name); 100 assertThat(mPreference.getSummary()).isEqualTo(name); 101 } 102 103 @Test testGetAutoCompleteTextView()104 public void testGetAutoCompleteTextView() { 105 AutoCompleteTextView autoCompleteTextView = mPreference.getAutoCompleteTextView(); 106 assertThat(autoCompleteTextView).isNotNull(); 107 } 108 109 @Test testCreateAutocompleteSuggestions_noNameToSuggest()110 public void testCreateAutocompleteSuggestions_noNameToSuggest() { 111 when(mAutoCompleteSuggestionProvider.hasNameToSuggest()).thenReturn(false); 112 assertThat(mPreference.createAutocompleteSuggestions()).isEqualTo(new String[] {}); 113 } 114 115 @Test testCreateAutocompleteSuggestions_nameToSuggest()116 public void testCreateAutocompleteSuggestions_nameToSuggest() { 117 final String name = "Jane"; 118 when(mAutoCompleteSuggestionProvider.hasNameToSuggest()).thenReturn(true); 119 when(mAutoCompleteSuggestionProvider.getNameSuggestion()).thenReturn(name); 120 assertThat(mPreference.createAutocompleteSuggestions()).isEqualTo(new String[] {name}); 121 } 122 123 @Test testBindDialog_shouldFocusOnEditText()124 public void testBindDialog_shouldFocusOnEditText() { 125 final AutoCompleteTextView editText = mock(AutoCompleteTextView.class); 126 final Editable text = mock(Editable.class); 127 when(editText.getText()).thenReturn(text); 128 when(text.length()).thenReturn(0); 129 ReflectionHelpers.setField(mPreference, "mAutoCompleteTextView", editText); 130 131 mPreference.onBindDialogView(mock(View.class)); 132 133 verify(editText).requestFocus(); 134 } 135 } 136