blob: c191325c8b951f0c57c55b072cef1ac1f528b36f [file] [log] [blame]
Juan Langc6b85002017-06-01 14:40:19 -07001/*
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 */
16package com.android.emergency.preferences;
17
18import static com.google.common.truth.Truth.assertThat;
Juan Langaaaabf32017-06-07 10:29:48 -070019import static org.mockito.Mockito.eq;
Fan Zhangcbe03d92017-10-18 11:20:51 -070020import static org.mockito.Mockito.mock;
Maurice Lamc1ebcb22017-09-06 13:18:30 -070021import static org.mockito.Mockito.nullable;
Juan Langaaaabf32017-06-07 10:29:48 -070022import static org.mockito.Mockito.spy;
Fan Zhangcbe03d92017-10-18 11:20:51 -070023import static org.mockito.Mockito.verify;
Juan Langc6b85002017-06-01 14:40:19 -070024import static org.mockito.Mockito.when;
25
Juan Langaaaabf32017-06-07 10:29:48 -070026import android.content.Context;
27import android.content.SharedPreferences;
Juan Lang2c0518a2017-05-10 17:00:32 -070028import android.support.v7.preference.PreferenceGroup;
29import android.support.v7.preference.PreferenceManager;
30import android.support.v7.preference.PreferenceScreen;
Fan Zhangcbe03d92017-10-18 11:20:51 -070031import android.text.Editable;
32import android.view.View;
Juan Langc6b85002017-06-01 14:40:19 -070033import android.widget.AutoCompleteTextView;
34
35import com.android.emergency.PreferenceKeys;
Juan Langc6b85002017-06-01 14:40:19 -070036import com.android.emergency.TestConfig;
37
38import org.junit.Before;
39import org.junit.Test;
40import org.junit.runner.RunWith;
41import org.mockito.Mock;
42import org.mockito.MockitoAnnotations;
43import org.robolectric.RobolectricTestRunner;
44import org.robolectric.RuntimeEnvironment;
45import org.robolectric.annotation.Config;
Fan Zhangcbe03d92017-10-18 11:20:51 -070046import org.robolectric.util.ReflectionHelpers;
Juan Langc6b85002017-06-01 14:40:19 -070047
48/** Unit tests for {@link NameAutoCompletePreference}. */
Juan Langc6b85002017-06-01 14:40:19 -070049@RunWith(RobolectricTestRunner.class)
50@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
51public class NameAutoCompletePreferenceTest {
Juan Langaaaabf32017-06-07 10:29:48 -070052 @Mock private PreferenceManager mPreferenceManager;
53 @Mock private SharedPreferences mSharedPreferences;
Juan Langc6b85002017-06-01 14:40:19 -070054 @Mock private NameAutoCompletePreference.SuggestionProvider mAutoCompleteSuggestionProvider;
55 private NameAutoCompletePreference mPreference;
56
57 @Before
58 public void setUp() {
59 MockitoAnnotations.initMocks(this);
60
Juan Langaaaabf32017-06-07 10:29:48 -070061 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);
Juan Langc6b85002017-06-01 14:40:19 -070071 }
72
73 @Test
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
Juan Langaaaabf32017-06-07 10:29:48 -070083 public void testReloadFromPreference() throws Throwable {
84 mPreference.setKey(PreferenceKeys.KEY_NAME);
85
86 String name = "John";
Maurice Lamc1ebcb22017-09-06 13:18:30 -070087 when(mSharedPreferences.getString(eq(mPreference.getKey()), nullable(String.class)))
88 .thenReturn(name);
Juan Langaaaabf32017-06-07 10:29:48 -070089
90 mPreference.reloadFromPreference();
91 assertThat(mPreference.getText()).isEqualTo(name);
92 assertThat(mPreference.isNotSet()).isFalse();
93 }
94
95 @Test
Juan Langc6b85002017-06-01 14:40:19 -070096 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
104 public void testGetAutoCompleteTextView() {
105 AutoCompleteTextView autoCompleteTextView = mPreference.getAutoCompleteTextView();
106 assertThat(autoCompleteTextView).isNotNull();
107 }
108
109 @Test
110 public void testCreateAutocompleteSuggestions_noNameToSuggest() {
111 when(mAutoCompleteSuggestionProvider.hasNameToSuggest()).thenReturn(false);
112 assertThat(mPreference.createAutocompleteSuggestions()).isEqualTo(new String[] {});
113 }
114
115 @Test
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 }
Fan Zhangcbe03d92017-10-18 11:20:51 -0700122
123 @Test
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 }
Juan Langc6b85002017-06-01 14:40:19 -0700135}