Merge "Fix flaky JUnit test"

This commit is contained in:
Jeremy Goldman
2020-10-28 08:34:51 +00:00
committed by Android (Google) Code Review
2 changed files with 39 additions and 23 deletions

View File

@@ -51,6 +51,7 @@ import com.android.settingslib.utils.ThreadUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@@ -147,10 +148,27 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
@Override @Override
public boolean setChecked(boolean isChecked) { public boolean setChecked(boolean isChecked) {
if (isChecked) { if (isChecked) {
setAutomaticSelectionMode();
return false;
} else {
final Bundle bundle = new Bundle();
bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
new SubSettingLauncher(mContext)
.setDestination(NetworkSelectSettings.class.getName())
.setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
.setTitleRes(R.string.choose_network_title)
.setArguments(bundle)
.launch();
return false;
}
}
@VisibleForTesting
Future setAutomaticSelectionMode() {
final long startMillis = SystemClock.elapsedRealtime(); final long startMillis = SystemClock.elapsedRealtime();
showAutoSelectProgressBar(); showAutoSelectProgressBar();
mSwitchPreference.setEnabled(false); mSwitchPreference.setEnabled(false);
ThreadUtils.postOnBackgroundThread(() -> { return ThreadUtils.postOnBackgroundThread(() -> {
// set network selection mode in background // set network selection mode in background
mTelephonyManager.setNetworkSelectionModeAutomatic(); mTelephonyManager.setNetworkSelectionModeAutomatic();
final int mode = mTelephonyManager.getNetworkSelectionMode(); final int mode = mTelephonyManager.getNetworkSelectionMode();
@@ -165,21 +183,8 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
lsn.onNetworkSelectModeChanged(); lsn.onNetworkSelectModeChanged();
} }
dismissProgressBar(); dismissProgressBar();
}, }, Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0));
Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0));
}); });
return false;
} else {
final Bundle bundle = new Bundle();
bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
new SubSettingLauncher(mContext)
.setDestination(NetworkSelectSettings.class.getName())
.setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
.setTitleRes(R.string.choose_network_title)
.setArguments(bundle)
.launch();
return false;
}
} }
public AutoSelectPreferenceController init(Lifecycle lifecycle, int subId) { public AutoSelectPreferenceController init(Lifecycle lifecycle, int subId) {

View File

@@ -18,6 +18,7 @@ package com.android.settings.network.telephony.gsm;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@@ -42,6 +43,9 @@ import org.mockito.Answers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class AutoSelectPreferenceControllerTest { public class AutoSelectPreferenceControllerTest {
private static final int SUB_ID = 2; private static final int SUB_ID = 2;
@@ -93,7 +97,14 @@ public class AutoSelectPreferenceControllerTest {
when(mTelephonyManager.getNetworkSelectionMode()).thenReturn( when(mTelephonyManager.getNetworkSelectionMode()).thenReturn(
TelephonyManager.NETWORK_SELECTION_MODE_AUTO); TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
assertThat(mController.setChecked(true)).isFalse(); // Wait for asynchronous thread to finish, otherwise test will flake.
Future thread = mController.setAutomaticSelectionMode();
try {
thread.get();
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
fail("Exception during automatic selection");
}
verify(mProgressDialog).show(); verify(mProgressDialog).show();
verify(mTelephonyManager).setNetworkSelectionModeAutomatic(); verify(mTelephonyManager).setNetworkSelectionModeAutomatic();