Setup external/robolectric for SettingsRoboTests

Current failing tests: ab/I64100010182936387
Had to Ignore some of com.android.settings.accessibility tests, which will be fixed separately

Bug: 261728063
Test: atest SettingsRoboTests -- --test-arg com.android.tradefed.testtype.IsolatedHostTest:java-flags:-XX:CompressedClassSpaceSize=3g

Change-Id: I4a0cb992db924936826e0c9808accc78dddb5f30
This commit is contained in:
Rex Hoffman
2023-06-07 20:20:58 +00:00
committed by Kevin Liu
parent 4f510190b3
commit 3c961e1c0e
180 changed files with 1339 additions and 157 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settings.network;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
import android.content.Context;
import android.net.Uri;
@@ -30,8 +31,10 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
// import org.robolectric.annotation.LooperMode;
@RunWith(RobolectricTestRunner.class)
// @LooperMode(LooperMode.Mode.LEGACY)
public class MobileDataEnabledListenerTest {
private static final int SUB_ID_ONE = 111;
private static final int SUB_ID_TWO = 222;
@@ -54,6 +57,7 @@ public class MobileDataEnabledListenerTest {
mListener.start(SUB_ID_ONE);
final Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + SUB_ID_ONE);
mContext.getContentResolver().notifyChange(uri, null);
shadowMainLooper().idle();
verify(mClient).onMobileDataEnabledChange();
}
@@ -63,6 +67,7 @@ public class MobileDataEnabledListenerTest {
mListener.stop();
final Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + SUB_ID_ONE);
mContext.getContentResolver().notifyChange(uri, null);
shadowMainLooper().idle();
verify(mClient, never()).onMobileDataEnabledChange();
}
@@ -73,6 +78,7 @@ public class MobileDataEnabledListenerTest {
mListener.start(SUB_ID_TWO);
final Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + SUB_ID_TWO);
mContext.getContentResolver().notifyChange(uri, null);
shadowMainLooper().idle();
verify(mClient).onMobileDataEnabledChange();
}
}

View File

@@ -99,6 +99,9 @@ import org.robolectric.shadows.ShadowToast;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class,
})
public class NetworkProviderSettingsTest {
private static final int XML_RES = R.xml.wifi_tether_settings;

View File

@@ -20,12 +20,14 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -81,6 +83,7 @@ public class SubscriptionsChangeListenerTest {
final ContentResolver contentResolver = mock(ContentResolver.class);
when(mContext.getContentResolver()).thenReturn(contentResolver);
initListener(false);
shadowMainLooper().idle();
verify(contentResolver, never()).registerContentObserver(any(Uri.class), anyBoolean(),
any(ContentObserver.class));
verify(mSubscriptionManager, never()).addOnSubscriptionsChangedListener(any(), any());
@@ -93,6 +96,7 @@ public class SubscriptionsChangeListenerTest {
final ArgumentCaptor<SubscriptionManager.OnSubscriptionsChangedListener> captor =
ArgumentCaptor.forClass(SubscriptionManager.OnSubscriptionsChangedListener.class);
verify(mSubscriptionManager).addOnSubscriptionsChangedListener(any(), captor.capture());
shadowMainLooper().idle();
captor.getValue().onSubscriptionsChanged();
verify(mClient).onSubscriptionsChanged();
}
@@ -104,9 +108,11 @@ public class SubscriptionsChangeListenerTest {
mContext.sendStickyBroadcast(intent);
initListener(true);
shadowMainLooper().idle();
verify(mClient, never()).onSubscriptionsChanged();
mContext.sendStickyBroadcast(intent);
shadowMainLooper().idle();
verify(mClient, times(1)).onSubscriptionsChanged();
}
@@ -115,8 +121,10 @@ public class SubscriptionsChangeListenerTest {
initListener(true);
final ArgumentCaptor<BroadcastReceiver> broadcastReceiverCaptor =
ArgumentCaptor.forClass(BroadcastReceiver.class);
shadowMainLooper().idle();
verify(mContext).registerReceiver(broadcastReceiverCaptor.capture(), any());
broadcastReceiverCaptor.getValue().onReceive(mContext, null);
shadowMainLooper().idle();
verify(mClient).onSubscriptionsChanged();
}
@@ -125,7 +133,8 @@ public class SubscriptionsChangeListenerTest {
initListener(true);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
mListener.onChange(false, mAirplaneModeUri);
verify(mClient).onAirplaneModeChanged(true);
shadowMainLooper().idle();
verify(mClient, atLeastOnce()).onAirplaneModeChanged(true);
assertThat(mListener.isAirplaneModeOn()).isTrue();
}
@@ -134,7 +143,8 @@ public class SubscriptionsChangeListenerTest {
initListener(true);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
mListener.onChange(false, mAirplaneModeUri);
verify(mClient).onAirplaneModeChanged(false);
shadowMainLooper().idle();
verify(mClient, atLeastOnce()).onAirplaneModeChanged(false);
assertThat(mListener.isAirplaneModeOn()).isFalse();
}

View File

@@ -24,6 +24,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothPan;
@@ -205,6 +206,7 @@ public class TetherPreferenceControllerTest {
context.sendBroadcast(new Intent(TetheringManager.ACTION_TETHER_STATE_CHANGED));
shadowMainLooper().idle();
verify(mController).updateSummary();
}
}

View File

@@ -29,6 +29,7 @@ import android.util.FeatureFlagUtils;
import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.After;
@@ -39,13 +40,16 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowUserManager;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowRestrictedLockUtilsInternal.class, ShadowUtils.class})
@Config(shadows = {
ShadowRestrictedLockUtilsInternal.class,
ShadowUtils.class,
ShadowUserManager.class,
})
public class TopLevelNetworkEntryPreferenceControllerTest {
@Mock
@@ -58,7 +62,7 @@ public class TopLevelNetworkEntryPreferenceControllerTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
final ShadowUserManager um = Shadows.shadowOf(
final ShadowUserManager um = Shadow.extract(
RuntimeEnvironment.application.getSystemService(UserManager.class));
um.setIsAdminUser(true);

View File

@@ -54,7 +54,6 @@ import androidx.preference.SwitchPreference;
import com.android.settings.R;
import com.android.settings.network.ProxySubscriptionManager;
import com.android.settings.network.apn.ApnEditor.ApnData;
import com.android.settings.testutils.shadow.ShadowFragment;
import org.junit.Before;
import org.junit.Test;
@@ -69,6 +68,9 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class,
})
public class ApnEditorTest {
private static final Object[] APN_DATA = {
@@ -497,7 +499,6 @@ public class ApnEditorTest {
}
@Test
@Config(shadows = ShadowFragment.class)
public void onCreate_notAdminUser_shouldFinish() {
doReturn(false).when(mUserManager).isAdminUser();
@@ -507,7 +508,6 @@ public class ApnEditorTest {
}
@Test
@Config(shadows = ShadowFragment.class)
public void onCreate_hasUserRestriction_shouldFinish() {
doReturn(true).when(mUserManager)
.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
@@ -518,7 +518,6 @@ public class ApnEditorTest {
}
@Test
@Config(shadows = ShadowFragment.class)
public void onCreate_noAction_shouldFinishAndNoCrash() {
ProxySubscriptionManager proxySubscriptionMgr = mock(ProxySubscriptionManager.class);
mApnEditorUT.mProxySubscriptionMgr = proxySubscriptionMgr;

View File

@@ -58,7 +58,10 @@ import org.robolectric.util.ReflectionHelpers;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowEntityHeaderController.class)
@Config(shadows = {
ShadowEntityHeaderController.class,
com.android.settings.testutils.shadow.ShadowFragment.class,
})
public class MobileNetworkSettingsTest {
@Mock
private TelephonyManager mTelephonyManager;

View File

@@ -76,6 +76,9 @@ import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class,
})
public class TetherSettingsTest {
private Context mContext;