From cf3649f21be44e94c9b8da9499e9e68f33fefeb5 Mon Sep 17 00:00:00 2001 From: Fan Wu Date: Wed, 27 Mar 2024 15:28:05 +0800 Subject: [PATCH] Remove LooperMode.LEGACY usage from settings/applications path. Bug: 331546577 Test: atest Change-Id: I419100b302bee55a06fbc481232927ea44a68bd3 --- ...ithAdminGrantedPermissionsCounterTest.java | 10 ++++--- ...WithAdminGrantedPermissionsListerTest.java | 21 ++++++++++----- .../ApplicationFeatureProviderImplTest.java | 22 ++++++++++++---- .../applications/InstalledAppCounterTest.java | 7 +++-- .../applications/InstalledAppListerTest.java | 26 ++++++++++--------- .../applications/OpenSupportedLinksTest.java | 15 ++++++----- .../InstantAppButtonDialogFragmentTest.java | 8 +++--- .../ZenAccessSettingObserverMixinTest.java | 16 +++++++----- 8 files changed, 79 insertions(+), 46 deletions(-) diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java index d27601e61de..2a09cdeb0d4 100644 --- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java @@ -41,21 +41,24 @@ import android.os.UserManager; import org.junit.Before; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowApplication; import java.util.Arrays; import java.util.Collections; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) public final class AppWithAdminGrantedPermissionsCounterTest { + @Rule + MockitoRule mMockitoRule = MockitoJUnit.rule(); + private final String APP_1 = "app1"; private final String APP_2 = "app2"; private final String APP_3 = "app3"; @@ -99,7 +102,6 @@ public final class AppWithAdminGrantedPermissionsCounterTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); mApp1 = buildInfo(APP_1_UID, APP_1, 0 /* flags */, Build.VERSION_CODES.M); diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java index f08a9dbfc62..cfa3352404b 100644 --- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java @@ -37,22 +37,27 @@ import android.os.UserHandle; import android.os.UserManager; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.LooperMode; -import org.robolectric.shadows.ShadowApplication; +import org.robolectric.android.util.concurrent.PausedExecutorService; +import org.robolectric.shadows.ShadowLooper; +import org.robolectric.shadows.ShadowPausedAsyncTask; import java.util.Arrays; import java.util.Collections; import java.util.List; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) public final class AppWithAdminGrantedPermissionsListerTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + private final String APP_1 = "app1"; private final String APP_2 = "app2"; private final String APP_3 = "app3"; @@ -85,10 +90,12 @@ public final class AppWithAdminGrantedPermissionsListerTest { private DevicePolicyManager mDevicePolicyManager; private List mAppList = Collections.emptyList(); + private PausedExecutorService mExecutorService; @Before public void setUp() { - MockitoAnnotations.initMocks(this); + mExecutorService = new PausedExecutorService(); + ShadowPausedAsyncTask.overrideExecutor(mExecutorService); } @Test @@ -185,9 +192,9 @@ public final class AppWithAdminGrantedPermissionsListerTest { // List all apps installed that were granted one or more permissions by the // admin. (new AppWithAdminGrantedPermissionsListerTestable(PERMISSIONS)).execute(); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); - // Wait for the background task to finish. - ShadowApplication.runBackgroundTasks(); assertThat(mAppList.size()).isEqualTo(3); InstalledAppListerTest.verifyListUniqueness(mAppList); diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java index 0a763ff2d63..a23ca692970 100644 --- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java @@ -55,12 +55,15 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.android.util.concurrent.PausedExecutorService; import org.robolectric.annotation.Config; -import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowApplication; +import org.robolectric.shadows.ShadowLooper; +import org.robolectric.shadows.ShadowPausedAsyncTask; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; @@ -72,9 +75,11 @@ import java.util.Set; * Tests for {@link ApplicationFeatureProviderImpl}. */ @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) public final class ApplicationFeatureProviderImplTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @@ -114,11 +119,10 @@ public final class ApplicationFeatureProviderImplTest { private int mAppCount = -1; private List mAppList = null; + private PausedExecutorService mExecutorService; @Before public void setUp() { - MockitoAnnotations.initMocks(this); - when(mContext.getApplicationContext()).thenReturn(mContext); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager); @@ -126,6 +130,9 @@ public final class ApplicationFeatureProviderImplTest { mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager, mPackageManagerService, mDevicePolicyManager, mWebViewUpdateServiceWrapper); + + mExecutorService = new PausedExecutorService(); + ShadowPausedAsyncTask.overrideExecutor(mExecutorService); } private void verifyCalculateNumberOfPolicyInstalledApps(boolean async) { @@ -155,6 +162,8 @@ public final class ApplicationFeatureProviderImplTest { mAppList = null; mProvider.listPolicyInstalledApps((list) -> mAppList = list); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); assertThat(mAppList).isNotNull(); assertThat(mAppList.size()).isEqualTo(1); assertThat(mAppList.get(0).appInfo.packageName).isEqualTo(APP_2); @@ -231,6 +240,9 @@ public final class ApplicationFeatureProviderImplTest { mAppList = null; mProvider.listAppsWithAdminGrantedPermissions(new String[]{PERMISSION}, (list) -> mAppList = list); + mExecutorService.runAll(); + ShadowLooper.idleMainLooper(); + assertThat(mAppList).isNotNull(); assertThat(mAppList.size()).isEqualTo(2); assertThat(Arrays.asList(mAppList.get(0).appInfo.packageName, diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java index e2c9573ab7e..fc5e76838cf 100644 --- a/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java +++ b/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java @@ -50,7 +50,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatcher; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowApplication; @@ -65,6 +66,9 @@ import java.util.Set; @LooperMode(LooperMode.Mode.LEGACY) public final class InstalledAppCounterTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + private static final String APP_1 = "app1"; private static final String APP_2 = "app2"; private static final String APP_3 = "app3"; @@ -103,7 +107,6 @@ public final class InstalledAppCounterTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); mFakeFeatureFlags = new FakeFeatureFlagsImpl(); mFakeFeatureFlags.setFlag(Flags.FLAG_ARCHIVING, true); diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java index 1287d13d5fb..d5fe0259801 100644 --- a/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java +++ b/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java @@ -36,15 +36,17 @@ import android.content.pm.UserInfo; import android.os.UserHandle; import android.os.UserManager; -import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatcher; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.LooperMode; -import org.robolectric.shadows.ShadowApplication; +import org.robolectric.android.util.concurrent.PausedExecutorService; +import org.robolectric.shadows.ShadowLooper; +import org.robolectric.shadows.ShadowPausedAsyncTask; import java.util.Arrays; import java.util.Collections; @@ -53,9 +55,11 @@ import java.util.List; import java.util.Set; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) public final class InstalledAppListerTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + private final String APP_1 = "app1"; private final String APP_2 = "app2"; private final String APP_3 = "app3"; @@ -77,11 +81,6 @@ public final class InstalledAppListerTest { private List mInstalledAppList = Collections.emptyList(); - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - private void expectQueryIntentActivities(int userId, String packageName, boolean launchable) { when(mPackageManager.queryIntentActivitiesAsUser( argThat(isLaunchIntentFor(packageName)), @@ -94,6 +93,9 @@ public final class InstalledAppListerTest { @Test public void testCountInstalledAppsAcrossAllUsers() { + PausedExecutorService executorService = new PausedExecutorService(); + ShadowPausedAsyncTask.overrideExecutor(executorService); + // There are two users. when(mUserManager.getProfiles(UserHandle.myUserId())).thenReturn(Arrays.asList( new UserInfo(MAIN_USER_ID, "main", UserInfo.FLAG_ADMIN), @@ -155,8 +157,8 @@ public final class InstalledAppListerTest { mInstalledAppList = Collections.emptyList(); final InstalledAppListerTestable counter = new InstalledAppListerTestable(); counter.execute(); - // Wait for the background task to finish. - ShadowApplication.runBackgroundTasks(); + executorService.runAll(); + ShadowLooper.idleMainLooper(); assertThat(mInstalledAppList.size()).isEqualTo(3); diff --git a/tests/robotests/src/com/android/settings/applications/OpenSupportedLinksTest.java b/tests/robotests/src/com/android/settings/applications/OpenSupportedLinksTest.java index 355b5db581f..df3bab89456 100644 --- a/tests/robotests/src/com/android/settings/applications/OpenSupportedLinksTest.java +++ b/tests/robotests/src/com/android/settings/applications/OpenSupportedLinksTest.java @@ -35,6 +35,7 @@ import android.util.ArraySet; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; +import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowUtils; @@ -42,22 +43,25 @@ import com.android.settingslib.widget.FooterPreference; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.annotation.LooperMode; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) @Config(shadows = { ShadowUtils.class, com.android.settings.testutils.shadow.ShadowFragment.class, }) public class OpenSupportedLinksTest { + + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + private static final String TEST_FOOTER_TITLE = "FooterTitle"; private static final String TEST_DOMAIN_LINK = "aaa.bbb.ccc"; private static final String TEST_SUMMARY = "TestSummary"; @@ -75,8 +79,7 @@ public class OpenSupportedLinksTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); + mContext = spy(ApplicationProvider.getApplicationContext()); mSettings = spy(new TestFragment(mContext, mPackageManager)); mCategory = spy(new PreferenceCategory(mContext)); mFooter = new FooterPreference.Builder(mContext).setTitle(TEST_FOOTER_TITLE).build(); diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java index 85be59e29e1..6b1bd7e2acc 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java @@ -32,6 +32,7 @@ import android.content.pm.PackageManager; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentActivity; +import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; @@ -41,12 +42,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.annotation.LooperMode; +import org.robolectric.shadows.ShadowLooper; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) @Config(shadows = ShadowAlertDialogCompat.class) public class InstantAppButtonDialogFragmentTest { @@ -58,9 +57,10 @@ public class InstantAppButtonDialogFragmentTest { @Before public void setUp() { final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class); - mContext = spy(RuntimeEnvironment.application); + mContext = spy(ApplicationProvider.getApplicationContext()); mFragment = InstantAppButtonDialogFragment.newInstance(TEST_PACKAGE); mFragment.show(activity.getSupportFragmentManager(), "InstantAppButtonDialogFragment"); + ShadowLooper.idleMainLooper(); } @Test diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/zenaccess/ZenAccessSettingObserverMixinTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/zenaccess/ZenAccessSettingObserverMixinTest.java index bdbd86341ee..42180751782 100644 --- a/tests/robotests/src/com/android/settings/applications/specialaccess/zenaccess/ZenAccessSettingObserverMixinTest.java +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/zenaccess/ZenAccessSettingObserverMixinTest.java @@ -28,28 +28,32 @@ import android.content.Context; import android.provider.Settings; import androidx.lifecycle.LifecycleOwner; +import androidx.test.core.app.ApplicationProvider; import com.android.settings.testutils.shadow.ShadowActivityManager; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.annotation.LooperMode; import org.robolectric.shadow.api.Shadow; +import org.robolectric.shadows.ShadowLooper; @RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) @Config(shadows = { ShadowActivityManager.class, }) public class ZenAccessSettingObserverMixinTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Mock private ZenAccessSettingObserverMixin.Listener mListener; @@ -60,8 +64,7 @@ public class ZenAccessSettingObserverMixinTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); + mContext = spy(ApplicationProvider.getApplicationContext()); mLifecycleOwner = () -> mLifecycle; mLifecycle = new Lifecycle(mLifecycleOwner); @@ -80,6 +83,7 @@ public class ZenAccessSettingObserverMixinTest { mContext.getContentResolver().notifyChange(Settings.Secure.getUriFor( Settings.Secure.ENABLED_NOTIFICATION_LISTENERS), null); + ShadowLooper.idleMainLooper(); verify(mListener).onZenAccessPolicyChanged(); }