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

Commit 27efa546 authored by ykhung's avatar ykhung
Browse files

Fix failed tests since presubmit is ignored in ag/15802168

Bug: 198553245
Test: make SettingsRoboTests
Change-Id: I91e715a6bfb64419b457812423996365a9464a93
parent a3b89868
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -113,7 +113,9 @@ public class BatteryDiffEntry {
    /** Gets the app icon {@link Drawable} for this entry. */
    public Drawable getAppIcon() {
        loadLabelAndIcon();
        return mAppIcon.getConstantState().newDrawable();
        return mAppIcon != null && mAppIcon.getConstantState() != null
                ? mAppIcon.getConstantState().newDrawable()
                : null;
    }

    /** Gets the app icon id for this entry. */
+4 −1
Original line number Diff line number Diff line
@@ -105,6 +105,9 @@ public final class BatteryChartPreferenceControllerTest {
        doReturn(new String[] {"com.android.googlequicksearchbox"})
            .when(mFeatureFactory.powerUsageFeatureProvider)
            .getHideApplicationSummary(mContext);
        doReturn(new String[] {"com.android.gms.persistent"})
            .when(mFeatureFactory.powerUsageFeatureProvider)
            .getHideApplicationEntries(mContext);
        mBatteryChartPreferenceController = createController();
        mBatteryChartPreferenceController.mPrefContext = mContext;
        mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
@@ -661,7 +664,7 @@ public final class BatteryChartPreferenceControllerTest {

        // Verifies the items which are defined in the array list.
        assertThat(mBatteryChartPreferenceController
                .isValidToShowEntry("com.google.android.gms.persistent"))
                .isValidToShowEntry("com.android.gms.persistent"))
            .isFalse();
    }

+59 −9
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
@@ -28,6 +29,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable.ConstantState;
import android.os.BatteryConsumer;
import android.os.UserHandle;
import android.os.UserManager;
@@ -41,6 +43,10 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Resetter;

import java.util.ArrayList;
import java.util.Collections;
@@ -48,6 +54,7 @@ import java.util.List;
import java.util.Locale;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = {BatteryDiffEntryTest.ShadowUserHandle.class})
public final class BatteryDiffEntryTest {

    private Context mContext;
@@ -60,10 +67,12 @@ public final class BatteryDiffEntryTest {
    @Mock private Drawable mockBadgedDrawable;
    @Mock private BatteryHistEntry mBatteryHistEntry;
    @Mock private PackageInfo mockPackageInfo;
    @Mock private ConstantState mockConstantState;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        ShadowUserHandle.reset();
        mContext = spy(RuntimeEnvironment.application);
        doReturn(mContext).when(mContext).getApplicationContext();
        doReturn(mockUserManager).when(mContext).getSystemService(UserManager.class);
@@ -229,6 +238,7 @@ public final class BatteryDiffEntryTest {
        final ContentValues values = getContentValuesWithType(
            ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
        final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
        mockConstantState(mockDrawable);

        final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);

@@ -239,20 +249,32 @@ public final class BatteryDiffEntryTest {
    }

    @Test
    public void testGetAppIcon_uidConsumerWithNullIcon_returnDefaultActivityIcon()
    public void testGetAppIcon_uidConsumerForNonOwner_returnDefaultActivityIconWithBadge()
            throws Exception {
        ShadowUserHandle.setUid(10);
        final BatteryDiffEntry entry = createBatteryDiffEntry(mockDrawable);
        final int userId = UserHandle.getUserId(1001);
        mockConstantState(mockDrawable);
        mockConstantState(mockBadgedDrawable);
        doReturn(mockBadgedDrawable).when(mockUserManager)
            .getBadgedIconForUser(mockDrawable, new UserHandle(userId));
            .getBadgedIconForUser(eq(mockDrawable), any());

        entry.mAppIcon = null;
        assertThat(entry.getAppIcon()).isEqualTo(mockBadgedDrawable);
    }

    @Test
    public void testGetAppIcon_uidConsumerWithNullIcon_returnDefaultActivityIcon()
            throws Exception {
        final BatteryDiffEntry entry = createBatteryDiffEntry(mockDrawable);
        mockConstantState(mockDrawable);

        entry.mAppIcon = null;
        assertThat(entry.getAppIcon()).isEqualTo(mockDrawable);
        assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
        // Verifies the app label in the cache.
        final BatteryEntry.NameAndIcon nameAndIcon =
            BatteryDiffEntry.sResourceCache.get(entry.getKey());
        assertThat(nameAndIcon.icon).isEqualTo(mockBadgedDrawable);
        assertThat(nameAndIcon.icon).isEqualTo(mockDrawable);
    }

    @Test
@@ -272,19 +294,17 @@ public final class BatteryDiffEntryTest {
    @Test
    public void testClearCache_switchLocale_clearCacheIconAndLabel() throws Exception {
        final int userId = UserHandle.getUserId(1001);
        doReturn(mockBadgedDrawable).when(mockUserManager)
            .getBadgedIconForUser(mockDrawable, new UserHandle(userId));
        doReturn(mockDrawable2).when(mockUserManager)
            .getBadgedIconForUser(mockDrawable2, new UserHandle(userId));
        Locale.setDefault(new Locale("en_US"));
        final BatteryDiffEntry entry1 = createBatteryDiffEntry(mockDrawable);
        assertThat(entry1.getAppIcon()).isEqualTo(mockBadgedDrawable);
        mockConstantState(mockDrawable);
        assertThat(entry1.getAppIcon()).isEqualTo(mockDrawable);
        // Switch the locale into another one.
        Locale.setDefault(new Locale("zh_TW"));

        final BatteryDiffEntry entry2 = createBatteryDiffEntry(mockDrawable2);

        // We should get new drawable without caching.
        mockConstantState(mockDrawable2);
        assertThat(entry2.getAppIcon()).isEqualTo(mockDrawable2);
        // Verifies the cache is updated into the new drawable.
        final BatteryEntry.NameAndIcon nameAndIcon =
@@ -440,4 +460,34 @@ public final class BatteryDiffEntryTest {
            .getPackagesForUid(1001);
        return createBatteryDiffEntry(10, batteryHistEntry);
    }

    private void mockConstantState(Drawable drawable) {
        doReturn(mockConstantState).when(drawable).getConstantState();
        doReturn(drawable).when(mockConstantState).newDrawable();
    }

    @Implements(UserHandle.class)
    public static class ShadowUserHandle {
        // Sets the default as thte OWNER role.
        private static int sUid = 0;

        public static void setUid(int uid) {
            sUid = uid;
        }

        @Implementation
        public static int myUserId() {
            return sUid;
        }

        @Implementation
        public static int getUserId(int userId) {
            return sUid;
        }

        @Resetter
        public static void reset() {
            sUid = 0;
        }
    }
}