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

Commit 0101805b authored by Pratyush More's avatar Pratyush More Committed by Android (Google) Code Review
Browse files

Merge "Fix broken LocaleManagerServiceTest cases."

parents 6c4460d9 7a537e04
Loading
Loading
Loading
Loading
+28 −17
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import static org.mockito.Mockito.verify;
import android.Manifest;
import android.app.ActivityManagerInternal;
import android.content.Context;
import android.content.pm.InstallSourceInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.LocaleList;
@@ -60,13 +62,16 @@ public class LocaleManagerServiceTest {
    private static final String DEFAULT_LOCALE_TAGS = "en-XC, ar-XB";
    private static final LocaleList DEFAULT_LOCALES =
            LocaleList.forLanguageTags(DEFAULT_LOCALE_TAGS);
    private static final InstallSourceInfo DEFAULT_INSTALL_SOURCE_INFO = new InstallSourceInfo(
            /* initiatingPackageName = */ null, /* initiatingPackageSigningInfo = */ null,
            /* originatingPackageName = */ null, /* installingPackageName = */ null);

    private LocaleManagerService mLocaleManagerService;

    @Mock
    private Context mMockContext;
    @Mock
    private PackageManagerInternal mMockPackageManager;
    private PackageManagerInternal mMockPackageManagerInternal;
    @Mock
    private FakePackageConfigurationUpdater mFakePackageConfigurationUpdater;
    @Mock
@@ -75,11 +80,17 @@ public class LocaleManagerServiceTest {
    private ActivityManagerInternal mMockActivityManager;

    @Before
    public void setUp() {
    public void setUp() throws Exception {
        mMockContext = mock(Context.class);
        mMockActivityTaskManager = mock(ActivityTaskManagerInternal.class);
        mMockActivityManager = mock(ActivityManagerInternal.class);
        mMockPackageManager = mock(PackageManagerInternal.class);
        mMockPackageManagerInternal = mock(PackageManagerInternal.class);

        // For unit tests, set the default (null) installer info
        PackageManager mockPackageManager = mock(PackageManager.class);
        doReturn(DEFAULT_INSTALL_SOURCE_INFO).when(mockPackageManager)
                .getInstallSourceInfo(anyString());
        doReturn(mockPackageManager).when(mMockContext).getPackageManager();

        mFakePackageConfigurationUpdater = new FakePackageConfigurationUpdater();
        doReturn(mFakePackageConfigurationUpdater)
@@ -93,13 +104,13 @@ public class LocaleManagerServiceTest {
                        anyString(), anyString());

        mLocaleManagerService = new LocaleManagerService(mMockContext, mMockActivityTaskManager,
                mMockActivityManager, mMockPackageManager);
                mMockActivityManager, mMockPackageManagerInternal);
    }

    @Test(expected = SecurityException.class)
    public void testSetApplicationLocales_arbitraryAppWithoutPermissions_fails() throws Exception {
        doReturn(DEFAULT_UID)
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());
        setUpFailingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);

        try {
@@ -107,7 +118,7 @@ public class LocaleManagerServiceTest {
                    LocaleList.getEmptyLocaleList());
            fail("Expected SecurityException");
        } finally {
            verify(mMockContext).enforceCallingPermission(
            verify(mMockContext).enforceCallingOrSelfPermission(
                    eq(android.Manifest.permission.CHANGE_CONFIGURATION),
                    anyString());
            assertNoLocalesStored(mFakePackageConfigurationUpdater.getStoredLocales());
@@ -142,7 +153,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testSetApplicationLocales_arbitraryAppWithPermission_succeeds() throws Exception {
        doReturn(DEFAULT_UID)
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());
        // if package is not owned by the caller, the calling app should have the following
        //   permission. We will mock this to succeed to imitate that.
        setUpPassingPermissionCheckFor(Manifest.permission.CHANGE_CONFIGURATION);
@@ -157,7 +168,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testSetApplicationLocales_callerOwnsPackage_succeeds() throws Exception {
        doReturn(Binder.getCallingUid())
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());

        mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
                DEFAULT_LOCALES);
@@ -168,7 +179,7 @@ public class LocaleManagerServiceTest {
    @Test(expected = IllegalArgumentException.class)
    public void testSetApplicationLocales_invalidPackageOrUserId_fails() throws Exception {
        doReturn(INVALID_UID)
                .when(mMockPackageManager).getPackageUid(anyString(), anyInt(), anyInt());
                .when(mMockPackageManagerInternal).getPackageUid(anyString(), anyInt(), anyInt());
        try {
            mLocaleManagerService.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID,
                    LocaleList.getEmptyLocaleList());
@@ -180,7 +191,7 @@ public class LocaleManagerServiceTest {

    @Test(expected = SecurityException.class)
    public void testGetApplicationLocales_arbitraryAppWithoutPermission_fails() throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpFailingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);

@@ -188,7 +199,7 @@ public class LocaleManagerServiceTest {
            mLocaleManagerService.getApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID);
            fail("Expected SecurityException");
        } finally {
            verify(mMockContext).enforceCallingPermission(
            verify(mMockContext).enforceCallingOrSelfPermission(
                    eq(android.Manifest.permission.READ_APP_SPECIFIC_LOCALES),
                    anyString());
        }
@@ -198,7 +209,7 @@ public class LocaleManagerServiceTest {
    public void testGetApplicationLocales_appSpecificConfigAbsent_returnsEmptyList()
            throws Exception {
        // any valid app calling for its own package or having appropriate permission
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(null)
@@ -213,7 +224,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testGetApplicationLocales_appSpecificLocalesAbsent_returnsEmptyList()
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(new PackageConfig(/* nightMode = */ 0, /* locales = */ null))
@@ -228,7 +239,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testGetApplicationLocales_callerOwnsAppAndConfigPresent_returnsLocales()
            throws Exception {
        doReturn(Binder.getCallingUid()).when(mMockPackageManager)
        doReturn(Binder.getCallingUid()).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
                .when(mMockActivityTaskManager).getApplicationConfig(anyString(), anyInt());
@@ -242,7 +253,7 @@ public class LocaleManagerServiceTest {
    @Test
    public void testGetApplicationLocales_arbitraryCallerWithPermissions_returnsLocales()
            throws Exception {
        doReturn(DEFAULT_UID).when(mMockPackageManager)
        doReturn(DEFAULT_UID).when(mMockPackageManagerInternal)
                .getPackageUid(anyString(), anyInt(), anyInt());
        setUpPassingPermissionCheckFor(Manifest.permission.READ_APP_SPECIFIC_LOCALES);
        doReturn(new PackageConfig(/* nightMode = */ 0, DEFAULT_LOCALES))
@@ -260,10 +271,10 @@ public class LocaleManagerServiceTest {

    private void setUpFailingPermissionCheckFor(String permission) {
        doThrow(new SecurityException("Mock"))
                .when(mMockContext).enforceCallingPermission(eq(permission), any());
                .when(mMockContext).enforceCallingOrSelfPermission(eq(permission), any());
    }

    private void setUpPassingPermissionCheckFor(String permission) {
        doNothing().when(mMockContext).enforceCallingPermission(eq(permission), any());
        doNothing().when(mMockContext).enforceCallingOrSelfPermission(eq(permission), any());
    }
}