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