AdvancedConnectedDeviceDashboardFragmentTest.java revision 5ef1f502f09ce534eb1d278e05b60dc012016441
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 */ 16package com.android.settings.connecteddevice; 17 18import static com.google.common.truth.Truth.assertThat; 19 20import static org.mockito.Mockito.when; 21 22import android.content.Context; 23import android.content.pm.PackageManager; 24import android.provider.SearchIndexableResource; 25 26import com.android.settings.TestConfig; 27import com.android.settings.core.PreferenceControllerMixin; 28import com.android.settings.nfc.NfcPreferenceController; 29import com.android.settings.testutils.FakeFeatureFactory; 30import com.android.settings.testutils.SettingsRobolectricTestRunner; 31import com.android.settings.testutils.XmlTestUtils; 32import com.android.settingslib.drawer.CategoryKey; 33 34import org.junit.Before; 35import org.junit.Test; 36import org.junit.runner.RunWith; 37import org.mockito.Answers; 38import org.mockito.Mock; 39import org.mockito.MockitoAnnotations; 40import org.robolectric.RuntimeEnvironment; 41import org.robolectric.annotation.Config; 42 43import java.util.List; 44 45@RunWith(SettingsRobolectricTestRunner.class) 46@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 47public class AdvancedConnectedDeviceDashboardFragmentTest { 48 49 @Mock(answer = Answers.RETURNS_DEEP_STUBS) 50 private Context mContext; 51 52 @Mock 53 private PackageManager mManager; 54 55 private FakeFeatureFactory mFeatureFactory; 56 private SmsMirroringFeatureProvider mFeatureProvider; 57 private AdvancedConnectedDeviceDashboardFragment mFragment; 58 private TestSmsMirroringPreferenceController mSmsMirroringPreferenceController; 59 60 private static final class TestSmsMirroringPreferenceController 61 extends SmsMirroringPreferenceController implements PreferenceControllerMixin { 62 63 private boolean mIsAvailable; 64 65 public TestSmsMirroringPreferenceController(Context context) { 66 super(context); 67 } 68 69 @Override 70 public boolean isAvailable() { 71 return mIsAvailable; 72 } 73 } 74 75 @Before 76 public void setUp() { 77 MockitoAnnotations.initMocks(this); 78 mFeatureFactory = FakeFeatureFactory.setupForTest(); 79 mFeatureProvider = mFeatureFactory.smsMirroringFeatureProvider; 80 81 mFragment = new AdvancedConnectedDeviceDashboardFragment(); 82 when(mContext.getPackageManager()).thenReturn(mManager); 83 84 mSmsMirroringPreferenceController = new TestSmsMirroringPreferenceController(mContext); 85 when(mFeatureProvider.getController(mContext)).thenReturn( 86 mSmsMirroringPreferenceController); 87 } 88 89 @Test 90 public void testCategory_isConnectedDevice() { 91 assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_DEVICE); 92 } 93 94 @Test 95 public void testSearchIndexProvider_shouldIndexResource() { 96 final List<SearchIndexableResource> indexRes = 97 mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext, 98 true /* enabled */); 99 100 assertThat(indexRes).isNotNull(); 101 assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); 102 } 103 104 @Test 105 public void testSearchIndexProvider_NoNfc_KeyAdded() { 106 when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false); 107 final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( 108 mContext); 109 110 assertThat(keys).isNotNull(); 111 assertThat(keys).contains(NfcPreferenceController.KEY_TOGGLE_NFC); 112 assertThat(keys).contains(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); 113 } 114 115 @Test 116 public void testSearchIndexProvider_NFC_KeyNotAdded() { 117 when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true); 118 final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( 119 mContext); 120 121 assertThat(keys).isNotNull(); 122 assertThat(keys).doesNotContain(NfcPreferenceController.KEY_TOGGLE_NFC); 123 assertThat(keys).doesNotContain(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); 124 } 125 126 @Test 127 public void testSearchIndexProvider_NoSmsMirroring_KeyAdded() { 128 when(mFeatureProvider.shouldShowSmsMirroring(mContext)).thenReturn(false); 129 mSmsMirroringPreferenceController.mIsAvailable = false; 130 131 final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( 132 mContext); 133 134 assertThat(keys).isNotNull(); 135 assertThat(keys).contains(mSmsMirroringPreferenceController.getPreferenceKey()); 136 } 137 138 @Test 139 public void testSearchIndexProvider_SmsMirroring_KeyNotAdded() { 140 when(mFeatureProvider.shouldShowSmsMirroring(mContext)).thenReturn(true); 141 mSmsMirroringPreferenceController.mIsAvailable = true; 142 143 final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( 144 mContext); 145 146 assertThat(keys).isNotNull(); 147 assertThat(keys).doesNotContain(mSmsMirroringPreferenceController.getPreferenceKey()); 148 } 149 150 @Test 151 public void testGetCategoryKey_returnCategoryDevice() { 152 assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_DEVICE); 153 } 154 155 @Test 156 public void testNonIndexableKeys_existInXmlLayout() { 157 final Context context = RuntimeEnvironment.application; 158 when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false); 159 final List<String> niks = ConnectedDeviceDashboardFragment.SEARCH_INDEX_DATA_PROVIDER 160 .getNonIndexableKeys(mContext); 161 final int xmlId = (new ConnectedDeviceDashboardFragment()).getPreferenceScreenResId(); 162 163 final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId); 164 165 assertThat(keys).containsAllIn(niks); 166 } 167} 168