• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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