1 package com.android.settings.wifi; 2 3 import static com.android.settings.wifi.ConfigureWifiSettings.KEY_INSTALL_CREDENTIALS; 4 5 import static com.google.common.truth.Truth.assertThat; 6 7 import static org.mockito.Mockito.any; 8 import static org.mockito.Mockito.doReturn; 9 import static org.mockito.Mockito.mock; 10 import static org.mockito.Mockito.never; 11 import static org.mockito.Mockito.spy; 12 import static org.mockito.Mockito.verify; 13 import static org.mockito.Mockito.when; 14 15 import android.content.Context; 16 import android.net.wifi.WifiManager; 17 import android.os.Bundle; 18 import android.os.UserManager; 19 import android.view.View; 20 import android.widget.TextView; 21 22 import androidx.annotation.Nullable; 23 import androidx.fragment.app.FragmentActivity; 24 import androidx.preference.Preference; 25 import androidx.preference.PreferenceScreen; 26 import androidx.test.core.app.ApplicationProvider; 27 28 import com.android.settings.dashboard.DashboardFragment; 29 import com.android.settings.testutils.XmlTestUtils; 30 import com.android.settingslib.core.AbstractPreferenceController; 31 32 import org.junit.Before; 33 import org.junit.Rule; 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 import org.mockito.Mock; 37 import org.mockito.Spy; 38 import org.mockito.junit.MockitoJUnit; 39 import org.mockito.junit.MockitoRule; 40 import org.robolectric.RobolectricTestRunner; 41 import org.robolectric.annotation.Config; 42 import org.robolectric.annotation.Implementation; 43 import org.robolectric.annotation.Implements; 44 45 import java.util.List; 46 47 @RunWith(RobolectricTestRunner.class) 48 @Config(shadows = { 49 com.android.settings.testutils.shadow.ShadowFragment.class, 50 }) 51 public class ConfigureWifiSettingsTest { 52 53 @Rule 54 public final MockitoRule mMockitoRule = MockitoJUnit.rule(); 55 @Spy 56 Context mContext = ApplicationProvider.getApplicationContext(); 57 @Mock 58 UserManager mUserManager; 59 @Mock 60 WifiManager mWifiManager; 61 @Mock 62 FragmentActivity mActivity; 63 @Mock 64 WifiWakeupPreferenceController mWifiWakeupPreferenceController; 65 @Mock 66 Preference mInstallCredentialsPref; 67 @Mock 68 PreferenceScreen mPreferenceScreen; 69 @Mock 70 TextView mEmptyView; 71 72 TestConfigureWifiSettings mSettings; 73 74 @Before setUp()75 public void setUp() { 76 when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); 77 when(mUserManager.isGuestUser()).thenReturn(false); 78 when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager); 79 80 mSettings = spy(new TestConfigureWifiSettings()); 81 when(mSettings.getContext()).thenReturn(mContext); 82 when(mSettings.getActivity()).thenReturn(mActivity); 83 when(mSettings.use(WifiWakeupPreferenceController.class)) 84 .thenReturn(mWifiWakeupPreferenceController); 85 when(mSettings.findPreference(KEY_INSTALL_CREDENTIALS)).thenReturn(mInstallCredentialsPref); 86 } 87 88 @Test onAttach_isNotGuestUser_setupController()89 public void onAttach_isNotGuestUser_setupController() { 90 when(mUserManager.isGuestUser()).thenReturn(false); 91 92 mSettings.onAttach(mContext); 93 94 verify(mWifiWakeupPreferenceController).setFragment(any()); 95 } 96 97 @Test onAttach_isGuestUser_doNotSetupController()98 public void onAttach_isGuestUser_doNotSetupController() { 99 when(mUserManager.isGuestUser()).thenReturn(true); 100 101 mSettings.onAttach(mContext); 102 103 verify(mWifiWakeupPreferenceController, never()).setFragment(any()); 104 } 105 106 @Test 107 @Config(shadows = ShadowDashboardFragment.class) onCreate_isNotGuestUser_setupPreference()108 public void onCreate_isNotGuestUser_setupPreference() { 109 when(mUserManager.isGuestUser()).thenReturn(false); 110 111 mSettings.onCreate(null); 112 113 verify(mInstallCredentialsPref).setOnPreferenceClickListener(any()); 114 } 115 116 @Test 117 @Config(shadows = ShadowDashboardFragment.class) onCreate_isGuestUser_doNotSetupPreference()118 public void onCreate_isGuestUser_doNotSetupPreference() { 119 when(mUserManager.isGuestUser()).thenReturn(true); 120 121 mSettings.onCreate(null); 122 123 verify(mInstallCredentialsPref, never()).setOnPreferenceClickListener(any()); 124 } 125 126 @Test 127 @Config(shadows = ShadowDashboardFragment.class) onViewCreated_isNotGuestUser_doNotRestrictUi()128 public void onViewCreated_isNotGuestUser_doNotRestrictUi() { 129 when(mUserManager.isGuestUser()).thenReturn(false); 130 when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView); 131 doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen(); 132 133 mSettings.onViewCreated(mock(View.class), null); 134 135 verify(mEmptyView, never()).setVisibility(View.VISIBLE); 136 verify(mPreferenceScreen, never()).removeAll(); 137 } 138 139 @Test 140 @Config(shadows = ShadowDashboardFragment.class) onViewCreated_isGuestUser_restrictUi()141 public void onViewCreated_isGuestUser_restrictUi() { 142 when(mUserManager.isGuestUser()).thenReturn(true); 143 when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView); 144 doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen(); 145 146 mSettings.onViewCreated(mock(View.class), null); 147 148 verify(mEmptyView).setVisibility(View.VISIBLE); 149 verify(mPreferenceScreen).removeAll(); 150 } 151 152 @Test 153 @Config(qualifiers = "mcc999") getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource()154 public void getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() { 155 final List<String> niks = 156 ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); 157 158 final int xmlId = mSettings.getPreferenceScreenResId(); 159 final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId); 160 assertThat(keys).isNotNull(); 161 assertThat(niks).containsAtLeastElementsIn(keys); 162 } 163 164 public static class TestConfigureWifiSettings extends ConfigureWifiSettings { 165 @Override use(Class<T> clazz)166 public <T extends AbstractPreferenceController> T use(Class<T> clazz) { 167 return super.use(clazz); 168 } 169 } 170 171 @Implements(DashboardFragment.class) 172 public static class ShadowDashboardFragment { 173 @Implementation onCreate(Bundle icicle)174 public void onCreate(Bundle icicle) { 175 // do nothing 176 } 177 178 @Implementation onViewCreated(View view, @Nullable Bundle savedInstanceState)179 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 180 // do nothing 181 } 182 } 183 } 184