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