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