[Wi-Fi] Enhance AddAppNetworksFragment unit test cases

Add new unit test cases in AddAppNetworksFragmentTest.java

The coverage rate of com.android.settings.wifi.addappnetworks will raise from 65% to 81%

Bug: 151696220
Test: make RunSettingsRoboTests ROBOTEST_FILTER=AddAppNetworksFragmentTest
Change-Id: Iae15b5ad27b20f90cbf8b0318a24a9069b738a33
This commit is contained in:
govenliu
2020-05-15 15:59:18 +08:00
parent 2c8448e927
commit 23d91663f6
2 changed files with 203 additions and 17 deletions

View File

@@ -86,9 +86,9 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
static final int RESULT_NETWORK_ALREADY_EXISTS = 2; static final int RESULT_NETWORK_ALREADY_EXISTS = 2;
// Handler messages for controlling different state and delay showing the status message. // Handler messages for controlling different state and delay showing the status message.
private static final int MESSAGE_START_SAVING_NETWORK = 1; @VisibleForTesting static final int MESSAGE_START_SAVING_NETWORK = 1;
private static final int MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK = 2; @VisibleForTesting static final int MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK = 2;
private static final int MESSAGE_SHOW_SAVE_FAILED = 3; @VisibleForTesting static final int MESSAGE_SHOW_SAVE_FAILED = 3;
private static final int MESSAGE_FINISH = 4; private static final int MESSAGE_FINISH = 4;
// Signal level for the initial signal icon. // Signal level for the initial signal icon.
@@ -137,7 +137,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
private WifiManager.ActionListener mSaveListener; private WifiManager.ActionListener mSaveListener;
private WifiManager mWifiManager; private WifiManager mWifiManager;
private final Handler mHandler = new Handler() { @VisibleForTesting
final Handler mHandler = new Handler() {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
showSaveStatusByState(msg.what); showSaveStatusByState(msg.what);
@@ -638,7 +639,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
/** /**
* Call framework API to save single network. * Call framework API to save single network.
*/ */
private void saveNetwork(int index) { @VisibleForTesting
void saveNetwork(int index) {
final PasspointConfiguration passpointConfig = final PasspointConfiguration passpointConfig =
mUiToRequestedList.get(index).mWifiNetworkSuggestion.getPasspointConfig(); mUiToRequestedList.get(index).mWifiNetworkSuggestion.getPasspointConfig();
if (passpointConfig != null) { if (passpointConfig != null) {
@@ -689,7 +691,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
return SettingsEnums.PANEL_ADD_WIFI_NETWORKS; return SettingsEnums.PANEL_ADD_WIFI_NETWORKS;
} }
private void showSaveStatusByState(int status) { @VisibleForTesting
void showSaveStatusByState(int status) {
switch (status) { switch (status) {
case MESSAGE_START_SAVING_NETWORK: case MESSAGE_START_SAVING_NETWORK:
if (mIsSingleNetwork) { if (mIsSingleNetwork) {

View File

@@ -18,9 +18,12 @@ package com.android.settings.wifi.addappnetworks;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -35,6 +38,7 @@ import android.provider.Settings;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R; import com.android.settings.R;
import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry;
@@ -43,8 +47,10 @@ import com.android.wifitrackerlib.WifiPickerTracker;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.androidx.fragment.FragmentController; import org.robolectric.shadows.androidx.fragment.FragmentController;
@@ -74,26 +80,33 @@ public class AddAppNetworksFragmentTest {
private ArrayList<Integer> mFakedResultArrayList = new ArrayList<>(); private ArrayList<Integer> mFakedResultArrayList = new ArrayList<>();
@Mock @Mock
private WifiEntry mMockWifiEntry; private WifiEntry mWifiEntry;
@Mock @Mock
private WifiPickerTracker mMockWifiPickerTracker; private WifiPickerTracker mWifiPickerTracker;
@Mock @Mock
private WifiManager mMockWifiManager; private WifiManager mWifiManager;
private FragmentActivity mActivity;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mAddAppNetworksFragment = spy(new AddAppNetworksFragment()); mAddAppNetworksFragment = spy(new AddAppNetworksFragment());
mActivity = spy(Robolectric.setupActivity(FragmentActivity.class));
doReturn(mActivity).when(mAddAppNetworksFragment).getActivity();
when(mWifiManager.isWifiEnabled()).thenReturn(true);
when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
mNewWpaSuggestionEntry = generateRegularWifiSuggestion(FAKE_NEW_WPA_SSID, mNewWpaSuggestionEntry = generateRegularWifiSuggestion(FAKE_NEW_WPA_SSID,
WifiConfiguration.KeyMgmt.WPA_PSK, "1234567890"); WifiConfiguration.KeyMgmt.WPA_PSK, "1234567890");
mNewOpenSuggestionEntry = generateRegularWifiSuggestion(FAKE_NEW_OPEN_SSID, mNewOpenSuggestionEntry = generateRegularWifiSuggestion(FAKE_NEW_OPEN_SSID,
WifiConfiguration.KeyMgmt.NONE, null); WifiConfiguration.KeyMgmt.NONE, null);
mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID, mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID,
WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\""); WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\"");
when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
mAddAppNetworksFragment.mWifiPickerTracker = mMockWifiPickerTracker; mAddAppNetworksFragment.mWifiPickerTracker = mWifiPickerTracker;
setUpOneScannedNetworkWithScanedLevel4(); setUpOneScannedNetworkWithScanedLevel4();
} }
@@ -213,7 +226,7 @@ public class AddAppNetworksFragmentTest {
@Test @Test
public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() { public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() {
// Arrange // Arrange
when(mMockWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED); when(mWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
// Setup a fake saved network list and assign to fragment. // Setup a fake saved network list and assign to fragment.
addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry); addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
// Setup one specified networks and its results and assign to fragment. // Setup one specified networks and its results and assign to fragment.
@@ -233,7 +246,7 @@ public class AddAppNetworksFragmentTest {
@Test @Test
public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() { public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() {
// Arrange // Arrange
when(mMockWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED); when(mWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
// Setup a fake saved network list and assign to fragment. // Setup a fake saved network list and assign to fragment.
addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry); addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
// Setup one specified networks and its results and assign to fragment. // Setup one specified networks and its results and assign to fragment.
@@ -263,12 +276,182 @@ public class AddAppNetworksFragmentTest {
verify(mAddAppNetworksFragment.mWorkerThread).quit(); verify(mAddAppNetworksFragment.mWorkerThread).quit();
} }
@Test
public void status_withOneNetworkSave_shouldShowOneNetworkSaving() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.showSaveStatusByState(
AddAppNetworksFragment.MESSAGE_START_SAVING_NETWORK);
final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById(
R.id.single_status);
assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString(
R.string.wifi_add_app_single_network_saving_summary));
}
@Test
public void status_withTwoNetworksSave_shouldShowMultipleNetworksSaving() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.showSaveStatusByState(
AddAppNetworksFragment.MESSAGE_START_SAVING_NETWORK);
final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById(
R.id.app_summary);
assertThat(textView.getText()).isEqualTo(
mAddAppNetworksFragment.getString(R.string.wifi_add_app_networks_saving_summary,
2));
}
@Test
public void status_withOneNetworkSaved_shouldShowOneNetworkSaved() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.showSaveStatusByState(
AddAppNetworksFragment.MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK);
final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById(
R.id.single_status);
assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString(
R.string.wifi_add_app_single_network_saved_summary));
}
@Test
public void status_withTwoNetworksSaved_shouldShowMultipleNetworksSaved() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.showSaveStatusByState(
AddAppNetworksFragment.MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK);
final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById(
R.id.app_summary);
assertThat(textView.getText()).isEqualTo(
mAddAppNetworksFragment.getString(R.string.wifi_add_app_networks_saved_summary));
}
@Test
public void status_withOneNetworkSaveFailed_shouldShowOneNetworkFailed() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.showSaveStatusByState(
AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED);
final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById(
R.id.single_status);
assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString(
R.string.wifi_add_app_network_save_failed_summary));
}
@Test
public void status_withTwoNetworksSaveFailed_shouldShowMultipleNetworksFailed() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.showSaveStatusByState(
AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED);
final TextView textView = (TextView) mAddAppNetworksFragment.mLayoutView.findViewById(
R.id.app_summary);
assertThat(textView.getText()).isEqualTo(mAddAppNetworksFragment.getString(
R.string.wifi_add_app_network_save_failed_summary));
}
@Test
public void saveOneNetwork_shouldCallWifiManagerSaveOnce() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.saveNetwork(0 /* index */);
verify(mWifiManager, times(1)).save(any(), any());
}
@Test
public void onSuccess_saveTwoNetworks_shouldCallWifiNamagerSaveTwice() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.saveNetwork(0 /* index */);
final ArgumentCaptor<WifiManager.ActionListener> wifiCallbackCaptor =
ArgumentCaptor.forClass(WifiManager.ActionListener.class);
verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture());
wifiCallbackCaptor.getValue().onSuccess();
verify(mWifiManager, times(2)).save(any(), any());
}
@Test
public void onFailedFirstOne_saveTwoNetworks_shouldAlsoCallWifiNamagerSaveTwice() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.saveNetwork(0 /* index */);
final ArgumentCaptor<WifiManager.ActionListener> wifiCallbackCaptor =
ArgumentCaptor.forClass(WifiManager.ActionListener.class);
verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture());
wifiCallbackCaptor.getValue().onFailure(anyInt());
verify(mWifiManager, times(2)).save(any(), any());
}
@Test
public void saveSuccess_shouldEnterShowAndConnectState() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.saveNetwork(0 /* index */);
final ArgumentCaptor<WifiManager.ActionListener> wifiCallbackCaptor =
ArgumentCaptor.forClass(WifiManager.ActionListener.class);
verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture());
wifiCallbackCaptor.getValue().onSuccess();
assertThat(mAddAppNetworksFragment.mHandler.hasMessages(
AddAppNetworksFragment.MESSAGE_SHOW_SAVED_AND_CONNECT_NETWORK)).isTrue();
}
@Test
public void saveFailed_shouldEnterFailedState() {
addOneSpecifiedRegularNetworkSuggestion(mNewWpaSuggestionEntry);
setUpBundle(mFakedSpecifiedNetworksList);
setupFragment();
mAddAppNetworksFragment.saveNetwork(0 /* index */);
final ArgumentCaptor<WifiManager.ActionListener> wifiCallbackCaptor =
ArgumentCaptor.forClass(
WifiManager.ActionListener.class);
verify(mWifiManager).save(any(WifiConfiguration.class), wifiCallbackCaptor.capture());
wifiCallbackCaptor.getValue().onFailure(1 /* reason */);
assertThat(mAddAppNetworksFragment.mHandler.hasMessages(
AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED)).isTrue();
}
private void setUpOneScannedNetworkWithScanedLevel4() { private void setUpOneScannedNetworkWithScanedLevel4() {
final ArrayList list = new ArrayList<>(); final ArrayList list = new ArrayList<>();
list.add(mMockWifiEntry); list.add(mWifiEntry);
when(mMockWifiPickerTracker.getWifiEntries()).thenReturn(list); when(mWifiPickerTracker.getWifiEntries()).thenReturn(list);
when(mMockWifiEntry.getSsid()).thenReturn(FAKE_NEW_OPEN_SSID); when(mWifiEntry.getSsid()).thenReturn(FAKE_NEW_OPEN_SSID);
when(mMockWifiEntry.getLevel()).thenReturn(SCANED_LEVEL4); when(mWifiEntry.getLevel()).thenReturn(SCANED_LEVEL4);
} }
private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) { private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) {