Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25ed73fa authored by Kevin Han's avatar Kevin Han
Browse files

Add tests for HibernatedAppsPreferenceControllerTest

Add tests for getNumHibernated in HibernatedAppsPreferenceController
based off the major use cases.

Bug: 187745929
Test: atest HibernatedAppsPreferenceControllerTest
Change-Id: I7bee75075f12fc1661f1b12da82e6ccb16eaa06d
parent 989570a9
Loading
Loading
Loading
Loading
+59 −18
Original line number Diff line number Diff line
@@ -24,17 +24,24 @@ import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.usage.IUsageStatsManager;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.apphibernation.AppHibernationManager;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.res.Resources;
import android.os.RemoteException;
import android.provider.DeviceConfig;

import androidx.test.core.app.ApplicationProvider;
@@ -58,11 +65,11 @@ public class HibernatedAppsPreferenceControllerTest {
    PackageManager mPackageManager;
    @Mock
    AppHibernationManager mAppHibernationManager;
    @Mock
    IUsageStatsManager mIUsageStatsManager;
    private static final String KEY = "key";
    private Context mContext;
    private HibernatedAppsPreferenceController mController;
    private PackageInfo mHibernatedPackage;
    private PackageInfo mAutoRevokedPackage;

    @Before
    public void setUp() {
@@ -73,10 +80,9 @@ public class HibernatedAppsPreferenceControllerTest {
        when(mContext.getPackageManager()).thenReturn(mPackageManager);
        when(mContext.getSystemService(AppHibernationManager.class))
                .thenReturn(mAppHibernationManager);
        when(mContext.getSystemService(UsageStatsManager.class)).thenReturn(
                new UsageStatsManager(mContext, mIUsageStatsManager));
        mController = new HibernatedAppsPreferenceController(mContext, KEY);
        mHibernatedPackage =
                getHibernatedPackage(mAppHibernationManager, mPackageManager, mContext);
        mAutoRevokedPackage = getAutoRevokedPackage(mPackageManager, mContext);
    }

    @Test
@@ -88,36 +94,71 @@ public class HibernatedAppsPreferenceControllerTest {
    }

    @Test
    public void getSummary_shouldReturnCorrectly() {
    public void getSummary_getsRightCountForHibernatedPackage() {
        final PackageInfo hibernatedPkg = getHibernatedPackage();
        when(mPackageManager.getInstalledPackages(anyInt())).thenReturn(
                Arrays.asList(hibernatedPkg, new PackageInfo()));
        when(mContext.getResources()).thenReturn(mock(Resources.class));

        mController.getSummary();
        verify(mContext.getResources()).getQuantityString(anyInt(), eq(1), eq(1));
    }

    @Test
    public void getSummary_getsRightCountForUnusedAutoRevokedPackage() {
        final PackageInfo autoRevokedPkg = getAutoRevokedPackage();
        when(mPackageManager.getInstalledPackages(anyInt())).thenReturn(
                Arrays.asList(autoRevokedPkg, new PackageInfo()));
        when(mContext.getResources()).thenReturn(mock(Resources.class));

        mController.getSummary();
        verify(mContext.getResources()).getQuantityString(anyInt(), eq(1), eq(1));
    }

    @Test
    public void getSummary_getsRightCountForUsedAutoRevokedPackage() {
        final PackageInfo usedAutoRevokedPkg = getAutoRevokedPackage();
        setAutoRevokedPackageUsageStats();
        when(mPackageManager.getInstalledPackages(anyInt())).thenReturn(
                Arrays.asList(mHibernatedPackage, mAutoRevokedPackage, new PackageInfo()));
                Arrays.asList(usedAutoRevokedPkg, new PackageInfo()));
        when(mContext.getResources()).thenReturn(mock(Resources.class));
        final int totalHibernated = 2;

        mController.getSummary();
        verify(mContext.getResources()).getQuantityString(
                anyInt(), eq(totalHibernated), eq(totalHibernated));
        verify(mContext.getResources()).getQuantityString(anyInt(), eq(0), eq(0));
    }

    private static PackageInfo getHibernatedPackage(
            AppHibernationManager apm, PackageManager pm, Context context) {
    private PackageInfo getHibernatedPackage() {
        final PackageInfo pi = new PackageInfo();
        pi.packageName = HIBERNATED_PACKAGE_NAME;
        pi.requestedPermissions = new String[] {PERMISSION};
        when(apm.getHibernatingPackagesForUser()).thenReturn(Arrays.asList(pi.packageName));
        when(pm.getPermissionFlags(
                pi.requestedPermissions[0], pi.packageName, context.getUser()))
        when(mAppHibernationManager.getHibernatingPackagesForUser())
                .thenReturn(Arrays.asList(pi.packageName));
        when(mPackageManager.getPermissionFlags(
                pi.requestedPermissions[0], pi.packageName, mContext.getUser()))
                .thenReturn(PackageManager.FLAG_PERMISSION_AUTO_REVOKED);
        return pi;
    }

    private static PackageInfo getAutoRevokedPackage(PackageManager pm, Context context) {
    private PackageInfo getAutoRevokedPackage() {
        final PackageInfo pi = new PackageInfo();
        pi.packageName = AUTO_REVOKED_PACKAGE_NAME;
        pi.requestedPermissions = new String[] {PERMISSION};
        when(pm.getPermissionFlags(
                pi.requestedPermissions[0], pi.packageName, context.getUser()))
        when(mPackageManager.getPermissionFlags(
                pi.requestedPermissions[0], pi.packageName, mContext.getUser()))
                .thenReturn(PackageManager.FLAG_PERMISSION_AUTO_REVOKED);
        return pi;
    }

    private void setAutoRevokedPackageUsageStats() {
        final UsageStats us = new UsageStats();
        us.mPackageName = AUTO_REVOKED_PACKAGE_NAME;
        us.mLastTimeVisible = System.currentTimeMillis();
        try {
            when(mIUsageStatsManager.queryUsageStats(
                    anyInt(), anyLong(), anyLong(), anyString(), anyInt()))
                    .thenReturn(new ParceledListSlice(Arrays.asList(us)));
        } catch (RemoteException e) {
            // no-op
        }
    }
}