ConnectedDeviceDashboardFragmentTest.java revision 7c3a87ebd3a5a3805758bb246ee5f6af17c627a0
1/*
2 * Copyright (C) 2016 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.settings.connecteddevice;
17
18import android.content.Context;
19import android.content.pm.PackageManager;
20import android.nfc.NfcAdapter;
21import android.nfc.NfcManager;
22import android.provider.SearchIndexableResource;
23
24import com.android.settings.R;
25import com.android.settings.SettingsRobolectricTestRunner;
26import com.android.settings.TestConfig;
27import com.android.settings.dashboard.SummaryLoader;
28import com.android.settings.nfc.NfcPreferenceController;
29import com.android.settings.testutils.XmlTestUtils;
30import com.android.settingslib.drawer.CategoryKey;
31
32import org.junit.Before;
33import org.junit.Test;
34import org.junit.runner.RunWith;
35import org.mockito.Mock;
36import org.mockito.MockitoAnnotations;
37import org.robolectric.RuntimeEnvironment;
38import org.robolectric.annotation.Config;
39
40import java.util.List;
41
42import static android.content.Context.NFC_SERVICE;
43import static com.google.common.truth.Truth.assertThat;
44import static org.mockito.Mockito.mock;
45import static org.mockito.Mockito.verify;
46import static org.mockito.Mockito.verifyZeroInteractions;
47import static org.mockito.Mockito.when;
48
49@RunWith(SettingsRobolectricTestRunner.class)
50@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
51public class ConnectedDeviceDashboardFragmentTest {
52
53    @Mock
54    Context mContext;
55
56    @Mock
57    private PackageManager mManager;
58
59    private ConnectedDeviceDashboardFragment mFragment;
60
61    @Before
62    public void setUp() {
63        MockitoAnnotations.initMocks(this);
64        mFragment = new ConnectedDeviceDashboardFragment();
65        when(mContext.getPackageManager()).thenReturn(mManager);
66    }
67
68    @Test
69    public void testCategory_isConnectedDevice() {
70        assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_DEVICE);
71    }
72
73    @Test
74    public void testSearchIndexProvider_shouldIndexResource() {
75        final List<SearchIndexableResource> indexRes =
76                mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
77                        true /* enabled */);
78
79        assertThat(indexRes).isNotNull();
80        assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
81    }
82
83    @Test
84    public void testSearchIndexProvider_NoNfc_KeyAdded() {
85        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
86        final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(
87                mContext);
88
89        assertThat(keys).isNotNull();
90        assertThat(keys).contains(NfcPreferenceController.KEY_TOGGLE_NFC);
91        assertThat(keys).contains(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS);
92    }
93
94    @Test
95    public void testSearchIndexProvider_NFC_KeyNotAdded() {
96        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true);
97        final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(
98                mContext);
99
100        assertThat(keys).isNotNull();
101        assertThat(keys).doesNotContain(NfcPreferenceController.KEY_TOGGLE_NFC);
102        assertThat(keys).doesNotContain(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS);
103    }
104
105    @Test
106    public void testNonIndexableKeys_existInXmlLayout() {
107        final Context context = RuntimeEnvironment.application;
108        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
109        final List<String> niks = ConnectedDeviceDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
110                .getNonIndexableKeys(context);
111        final int xmlId = (new ConnectedDeviceDashboardFragment()).getPreferenceScreenResId();
112
113        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
114
115        assertThat(keys).containsAllIn(niks);
116    }
117
118    @Test
119    public void testSummaryProvider_hasNfc_shouldReturnNfcSummary() {
120        final NfcManager nfcManager = mock(NfcManager.class);
121        final SummaryLoader summaryLoader = mock(SummaryLoader.class);
122
123        when(mContext.getApplicationContext()).thenReturn(mContext);
124        when(mContext.getSystemService(NFC_SERVICE)).thenReturn(nfcManager);
125        when(nfcManager.getDefaultAdapter()).thenReturn(mock(NfcAdapter.class));
126
127        SummaryLoader.SummaryProvider provider =
128                new ConnectedDeviceDashboardFragment.SummaryProvider(mContext, summaryLoader);
129
130        provider.setListening(false);
131
132        verifyZeroInteractions(summaryLoader);
133
134        provider.setListening(true);
135
136        verify(mContext).getString(R.string.connected_devices_dashboard_summary);
137    }
138
139    @Test
140    public void testSummaryProvider_noNfc_shouldReturnNoNfcSummary() {
141        final SummaryLoader summaryLoader = mock(SummaryLoader.class);
142
143        when(mContext.getApplicationContext()).thenReturn(mContext);
144
145        SummaryLoader.SummaryProvider provider =
146                new ConnectedDeviceDashboardFragment.SummaryProvider(mContext, summaryLoader);
147
148        provider.setListening(false);
149
150        verifyZeroInteractions(summaryLoader);
151
152        provider.setListening(true);
153
154        verify(mContext).getString(R.string.connected_devices_dashboard_no_nfc_summary);
155    }
156}
157