1 package com.android.systemui.qs.tiles.dialog; 2 3 import static com.android.systemui.qs.tiles.dialog.InternetDetailsContentController.MAX_WIFI_ENTRY_COUNT; 4 5 import static com.google.common.truth.Truth.assertThat; 6 7 import static org.mockito.ArgumentMatchers.any; 8 import static org.mockito.Mockito.anyString; 9 import static org.mockito.Mockito.doNothing; 10 import static org.mockito.Mockito.mock; 11 import static org.mockito.Mockito.never; 12 import static org.mockito.Mockito.verify; 13 import static org.mockito.Mockito.when; 14 15 import android.content.Context; 16 import android.graphics.drawable.Drawable; 17 import android.testing.TestableResources; 18 import android.view.View; 19 import android.widget.LinearLayout; 20 21 import androidx.test.ext.junit.runners.AndroidJUnit4; 22 import androidx.test.filters.SmallTest; 23 24 import com.android.systemui.SysuiTestCase; 25 import com.android.systemui.res.R; 26 import com.android.wifitrackerlib.WifiEntry; 27 28 import kotlinx.coroutines.CoroutineScope; 29 30 import org.junit.Before; 31 import org.junit.Rule; 32 import org.junit.Test; 33 import org.junit.runner.RunWith; 34 import org.mockito.Mock; 35 import org.mockito.Spy; 36 import org.mockito.junit.MockitoJUnit; 37 import org.mockito.junit.MockitoRule; 38 39 import java.util.Arrays; 40 import java.util.List; 41 42 @SmallTest 43 @RunWith(AndroidJUnit4.class) 44 public class InternetAdapterTest extends SysuiTestCase { 45 46 private static final String WIFI_KEY = "Wi-Fi_Key"; 47 private static final String WIFI_TITLE = "Wi-Fi Title"; 48 private static final String WIFI_SUMMARY = "Wi-Fi Summary"; 49 private static final int GEAR_ICON_RES_ID = R.drawable.ic_settings_24dp; 50 private static final int LOCK_ICON_RES_ID = R.drawable.ic_friction_lock_closed; 51 52 @Rule 53 public MockitoRule mRule = MockitoJUnit.rule(); 54 @Spy 55 private Context mSpyContext = mContext; 56 @Mock 57 CoroutineScope mScope; 58 59 @Mock 60 private WifiEntry mInternetWifiEntry; 61 @Mock 62 private List<WifiEntry> mWifiEntries; 63 @Mock 64 private WifiEntry mWifiEntry; 65 @Mock 66 private InternetDetailsContentController mInternetDetailsContentController; 67 @Mock 68 private Drawable mWifiDrawable; 69 @Mock 70 private Drawable mGearIcon; 71 @Mock 72 private Drawable mLockIcon; 73 74 private TestableResources mTestableResources; 75 private InternetAdapter mInternetAdapter; 76 private InternetAdapter.InternetViewHolder mViewHolder; 77 78 @Before setUp()79 public void setUp() { 80 mTestableResources = mContext.getOrCreateTestableResources(); 81 when(mInternetWifiEntry.getTitle()).thenReturn(WIFI_TITLE); 82 when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); 83 when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true); 84 when(mInternetWifiEntry.hasInternetAccess()).thenReturn(true); 85 when(mWifiEntry.getKey()).thenReturn(WIFI_KEY); 86 when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE); 87 when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); 88 89 mInternetAdapter = new InternetAdapter(mInternetDetailsContentController, mScope); 90 mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mContext), 0); 91 mInternetAdapter.setWifiEntries(Arrays.asList(mWifiEntry), 1 /* wifiEntriesCount */); 92 } 93 94 @Test getItemCount_returnWifiEntriesCount()95 public void getItemCount_returnWifiEntriesCount() { 96 for (int i = 0; i < MAX_WIFI_ENTRY_COUNT; i++) { 97 mInternetAdapter.setWifiEntries(mWifiEntries, i /* wifiEntriesCount */); 98 99 assertThat(mInternetAdapter.getItemCount()).isEqualTo(i); 100 } 101 } 102 103 @Test onBindViewHolder_bindWithOpenWifiNetwork_verifyView()104 public void onBindViewHolder_bindWithOpenWifiNetwork_verifyView() { 105 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_NONE); 106 mInternetAdapter.onBindViewHolder(mViewHolder, 0); 107 108 assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE); 109 assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE); 110 assertThat(mViewHolder.mWifiIcon.getVisibility()).isEqualTo(View.VISIBLE); 111 assertThat(mViewHolder.mWifiEndIcon.getVisibility()).isEqualTo(View.GONE); 112 } 113 114 @Test onBindViewHolder_bindWithSecurityWifiNetwork_verifyView()115 public void onBindViewHolder_bindWithSecurityWifiNetwork_verifyView() { 116 when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_PSK); 117 mInternetAdapter.onBindViewHolder(mViewHolder, 0); 118 119 assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE); 120 assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE); 121 assertThat(mViewHolder.mWifiIcon.getVisibility()).isEqualTo(View.VISIBLE); 122 assertThat(mViewHolder.mWifiEndIcon.getVisibility()).isEqualTo(View.VISIBLE); 123 } 124 125 @Test onBindViewHolder_getWifiDrawableNull_noCrash()126 public void onBindViewHolder_getWifiDrawableNull_noCrash() { 127 when(mInternetDetailsContentController.getWifiDrawable(any())).thenReturn(null); 128 129 mInternetAdapter.onBindViewHolder(mViewHolder, 0); 130 131 assertThat(mViewHolder.mWifiIcon.getDrawable()).isNull(); 132 } 133 134 @Test onBindViewHolder_getWifiDrawableNotNull_setWifiIconDrawable()135 public void onBindViewHolder_getWifiDrawableNotNull_setWifiIconDrawable() { 136 when(mInternetDetailsContentController.getWifiDrawable(any())).thenReturn(mWifiDrawable); 137 138 mInternetAdapter.onBindViewHolder(mViewHolder, 0); 139 140 assertThat(mViewHolder.mWifiIcon.getDrawable()).isEqualTo(mWifiDrawable); 141 } 142 143 @Test setWifiEntries_wifiCountLessThenMaxCount_setWifiCount()144 public void setWifiEntries_wifiCountLessThenMaxCount_setWifiCount() { 145 final int wifiCount = MAX_WIFI_ENTRY_COUNT - 1; 146 mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT; 147 148 mInternetAdapter.setWifiEntries(mWifiEntries, wifiCount); 149 150 assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(wifiCount); 151 } 152 153 @Test setWifiEntries_wifiCountGreaterThenMaxCount_setMaxCount()154 public void setWifiEntries_wifiCountGreaterThenMaxCount_setMaxCount() { 155 final int wifiCount = MAX_WIFI_ENTRY_COUNT; 156 mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT - 1; 157 158 mInternetAdapter.setWifiEntries(mWifiEntries, wifiCount); 159 160 assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(mInternetAdapter.mMaxEntriesCount); 161 } 162 163 @Test setMaxEntriesCount_maxCountLessThenZero_doNothing()164 public void setMaxEntriesCount_maxCountLessThenZero_doNothing() { 165 mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT; 166 final int maxCount = -1; 167 168 mInternetAdapter.setMaxEntriesCount(maxCount); 169 170 assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(MAX_WIFI_ENTRY_COUNT); 171 } 172 173 @Test setMaxEntriesCount_maxCountGreaterThenWifiCount_updateMaxCount()174 public void setMaxEntriesCount_maxCountGreaterThenWifiCount_updateMaxCount() { 175 mInternetAdapter.mWifiEntriesCount = MAX_WIFI_ENTRY_COUNT - 2; 176 mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT; 177 final int maxCount = MAX_WIFI_ENTRY_COUNT - 1; 178 179 mInternetAdapter.setMaxEntriesCount(maxCount); 180 181 assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2); 182 assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(maxCount); 183 } 184 185 @Test setMaxEntriesCount_maxCountLessThenWifiCount_updateBothCount()186 public void setMaxEntriesCount_maxCountLessThenWifiCount_updateBothCount() { 187 mInternetAdapter.mWifiEntriesCount = MAX_WIFI_ENTRY_COUNT; 188 mInternetAdapter.mMaxEntriesCount = MAX_WIFI_ENTRY_COUNT; 189 final int maxCount = MAX_WIFI_ENTRY_COUNT - 1; 190 191 mInternetAdapter.setMaxEntriesCount(maxCount); 192 193 assertThat(mInternetAdapter.mWifiEntriesCount).isEqualTo(maxCount); 194 assertThat(mInternetAdapter.mMaxEntriesCount).isEqualTo(maxCount); 195 } 196 197 @Test viewHolderShouldEnabled_wifiCanConnect_returnTrue()198 public void viewHolderShouldEnabled_wifiCanConnect_returnTrue() { 199 when(mWifiEntry.canConnect()).thenReturn(true); 200 201 assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isTrue(); 202 } 203 204 @Test viewHolderShouldEnabled_wifiCanNotConnect_returnFalse()205 public void viewHolderShouldEnabled_wifiCanNotConnect_returnFalse() { 206 when(mWifiEntry.canConnect()).thenReturn(false); 207 208 assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isFalse(); 209 } 210 211 @Test viewHolderShouldEnabled_wifiCanNotConnectButCanDisconnect_returnTrue()212 public void viewHolderShouldEnabled_wifiCanNotConnectButCanDisconnect_returnTrue() { 213 when(mWifiEntry.canConnect()).thenReturn(false); 214 when(mWifiEntry.canConnect()).thenReturn(true); 215 216 assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isTrue(); 217 } 218 219 @Test viewHolderShouldEnabled_wifiCanNotConnectButIsSaved_returnTrue()220 public void viewHolderShouldEnabled_wifiCanNotConnectButIsSaved_returnTrue() { 221 when(mWifiEntry.canConnect()).thenReturn(false); 222 when(mWifiEntry.isSaved()).thenReturn(true); 223 224 assertThat(mViewHolder.shouldEnabled(mWifiEntry)).isTrue(); 225 } 226 227 @Test viewHolderOnWifiClick_wifiShouldEditBeforeConnect_startActivity()228 public void viewHolderOnWifiClick_wifiShouldEditBeforeConnect_startActivity() { 229 when(mWifiEntry.shouldEditBeforeConnect()).thenReturn(true); 230 mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mSpyContext), 0); 231 doNothing().when(mSpyContext).startActivity(any()); 232 233 mViewHolder.onWifiClick(mWifiEntry, mock(View.class)); 234 235 verify(mInternetDetailsContentController).startActivityForDialog(any()); 236 verify(mSpyContext, never()).startActivity(any()); 237 } 238 239 @Test viewHolderOnWifiClick_wifiCanConnect_connectWifi()240 public void viewHolderOnWifiClick_wifiCanConnect_connectWifi() { 241 when(mWifiEntry.canConnect()).thenReturn(true); 242 243 mViewHolder.onWifiClick(mWifiEntry, mock(View.class)); 244 245 verify(mInternetDetailsContentController).connect(mWifiEntry); 246 } 247 248 @Test viewHolderOnWifiClick_wifiCanNotConnectButIsSaved_launchWifiDetailsSetting()249 public void viewHolderOnWifiClick_wifiCanNotConnectButIsSaved_launchWifiDetailsSetting() { 250 when(mWifiEntry.canConnect()).thenReturn(false); 251 when(mWifiEntry.isSaved()).thenReturn(true); 252 253 mViewHolder.onWifiClick(mWifiEntry, mock(View.class)); 254 255 verify(mInternetDetailsContentController).launchWifiDetailsSetting(anyString(), any()); 256 } 257 258 @Test viewHolderUpdateEndIcon_wifiConnected_updateGearIcon()259 public void viewHolderUpdateEndIcon_wifiConnected_updateGearIcon() { 260 mTestableResources.addOverride(GEAR_ICON_RES_ID, mGearIcon); 261 262 mViewHolder.updateEndIcon(WifiEntry.CONNECTED_STATE_CONNECTED, WifiEntry.SECURITY_PSK); 263 264 assertThat(mViewHolder.mWifiEndIcon.getDrawable()).isEqualTo(mGearIcon); 265 } 266 267 @Test viewHolderUpdateEndIcon_wifiDisconnectedAndSecurityPsk_updateLockIcon()268 public void viewHolderUpdateEndIcon_wifiDisconnectedAndSecurityPsk_updateLockIcon() { 269 mTestableResources.addOverride(LOCK_ICON_RES_ID, mLockIcon); 270 271 mViewHolder.updateEndIcon(WifiEntry.CONNECTED_STATE_DISCONNECTED, WifiEntry.SECURITY_PSK); 272 273 assertThat(mViewHolder.mWifiEndIcon.getDrawable()).isEqualTo(mLockIcon); 274 } 275 276 @Test viewHolderUpdateEndIcon_wifiDisconnectedAndSecurityNone_hideIcon()277 public void viewHolderUpdateEndIcon_wifiDisconnectedAndSecurityNone_hideIcon() { 278 mViewHolder.updateEndIcon(WifiEntry.CONNECTED_STATE_DISCONNECTED, WifiEntry.SECURITY_NONE); 279 280 assertThat(mViewHolder.mWifiEndIcon.getVisibility()).isEqualTo(View.GONE); 281 } 282 } 283