private static PackageInfo newPackageInfo(String packageName, Signature... signatures) { PackageInfo firstPackageInfo = new PackageInfo(); firstPackageInfo.packageName = packageName; firstPackageInfo.signatures = signatures; return firstPackageInfo; }
/** @deprecated Use {@link #installPackage(PackageInfo)} instead. */ @Deprecated public void addPackage(String packageName) { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = packageName; ApplicationInfo applicationInfo = new ApplicationInfo(); applicationInfo.packageName = packageName; // TODO: setUpPackageStorage should be in installPackage but we need to fix all tests first setUpPackageStorage(applicationInfo); packageInfo.applicationInfo = applicationInfo; installPackage(packageInfo); }
private static PackageInfo createPackageInfoWithPackageName(String packageName) { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = packageName; packageInfo.applicationInfo = new ApplicationInfo(); packageInfo.applicationInfo.packageName = packageName; packageInfo.applicationInfo.name = TEST_PACKAGE_LABEL; return packageInfo; }
@Test @Config(minSdk = 26) public void shouldReturnStoredPackageInfoForGetCurrentWebViewPackageIfSet() { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "org.robolectric.shadows.shadowebviewtest"; ShadowWebView.setCurrentWebViewPackage(packageInfo); assertThat(WebView.getCurrentWebViewPackage()).isEqualTo(packageInfo); } }
@Test @Config(minSdk = N, maxSdk = N_MR1) // Functionality removed in O public void whenPreconfigured_getPackageSizeInfo_callsBackWithConfiguredValues() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "org.robolectric"; PackageStats packageStats = new PackageStats("org.robolectric"); shadowPackageManager.addPackage(packageInfo, packageStats); IPackageStatsObserver packageStatsObserver = mock(IPackageStatsObserver.class); packageManager.getPackageSizeInfo("org.robolectric", packageStatsObserver); verify(packageStatsObserver).onGetStatsCompleted(packageStatsCaptor.capture(), eq(true)); assertThat(packageStatsCaptor.getValue().packageName).isEqualTo("org.robolectric"); assertThat(packageStatsCaptor.getValue().toString()).isEqualTo(packageStats.toString()); }
@Test @Config(minSdk = N, maxSdk = N_MR1) // Functionality removed in O public void whenPreconfiguredForAnotherPackage_getPackageSizeInfo_callsBackWithConfiguredValues() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "org.other"; PackageStats packageStats = new PackageStats("org.other"); shadowPackageManager.addPackage(packageInfo, packageStats); IPackageStatsObserver packageStatsObserver = mock(IPackageStatsObserver.class); packageManager.getPackageSizeInfo("org.other", packageStatsObserver); verify(packageStatsObserver).onGetStatsCompleted(packageStatsCaptor.capture(), eq(true)); assertThat(packageStatsCaptor.getValue().packageName).isEqualTo("org.other"); assertThat(packageStatsCaptor.getValue().toString()).isEqualTo(packageStats.toString()); }
@Test @Config(minSdk = LOLLIPOP) public void addPackageShouldNotCreateSessions() { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowPackageManager.installPackage(packageInfo); assertThat(packageManager.getPackageInstaller().getAllSessions()).isEmpty(); }
@Test public void getApplicationInfo_OtherApplication() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo = new ApplicationInfo(); packageInfo.applicationInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo.name = TEST_PACKAGE_LABEL; shadowPackageManager.installPackage(packageInfo); ApplicationInfo info = packageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0); assertThat(info).isNotNull(); assertThat(info.packageName).isEqualTo(TEST_PACKAGE_NAME); assertThat(packageManager.getApplicationLabel(info).toString()).isEqualTo(TEST_PACKAGE_LABEL); }
@Test public void getInstalledApplications() { List<ApplicationInfo> installedApplications = packageManager.getInstalledApplications(0); // Default should include the application under test assertThat(installedApplications).hasSize(1); assertThat(installedApplications.get(0).packageName).isEqualTo("org.robolectric"); PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "org.other"; packageInfo.applicationInfo = new ApplicationInfo(); packageInfo.applicationInfo.packageName = "org.other"; shadowPackageManager.installPackage(packageInfo); installedApplications = packageManager.getInstalledApplications(0); assertThat(installedApplications).hasSize(2); assertThat(installedApplications.get(1).packageName).isEqualTo("org.other"); }
@Test public void deletePackage_missingRequiredPermission() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowPackageManager.installPackage(packageInfo); IPackageDeleteObserver mockObserver = mock(IPackageDeleteObserver.class); packageManager.deletePackage(packageInfo.packageName, mockObserver, 0); shadowPackageManager.doPendingUninstallCallbacks(); assertThat(shadowPackageManager.getDeletedPackages()).hasSize(0); verify(mockObserver) .packageDeleted(packageInfo.packageName, PackageManager.DELETE_FAILED_INTERNAL_ERROR); }
@Test public void getResourcesForApplication_anotherPackage() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "another.package"; ApplicationInfo applicationInfo = new ApplicationInfo(); applicationInfo.packageName = "another.package"; packageInfo.applicationInfo = applicationInfo; shadowPackageManager.installPackage(packageInfo); assertThat(packageManager.getResourcesForApplication("another.package")).isNotNull(); assertThat(packageManager.getResourcesForApplication("another.package")) .isNotEqualTo(ApplicationProvider.getApplicationContext().getResources()); }
@Test public void packageManager() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowOf(RuntimeEnvironment.application.getPackageManager()).addPackage(packageInfo); } }
@Test public void getPackageArchiveInfo() { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.flags = ApplicationInfo.FLAG_INSTALLED; appInfo.packageName = TEST_PACKAGE_NAME; appInfo.sourceDir = TEST_APP_PATH; appInfo.name = TEST_PACKAGE_LABEL; PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo = appInfo; shadowPackageManager.installPackage(packageInfo); PackageInfo packageInfoResult = shadowPackageManager.getPackageArchiveInfo(TEST_APP_PATH, 0); assertThat(packageInfoResult).isNotNull(); ApplicationInfo applicationInfo = packageInfoResult.applicationInfo; assertThat(applicationInfo).isInstanceOf(ApplicationInfo.class); assertThat(applicationInfo.packageName).isEqualTo(TEST_PACKAGE_NAME); assertThat(applicationInfo.sourceDir).isEqualTo(TEST_APP_PATH); }
@Test public void addPackageShouldUseUidToProvidePackageName() throws Exception { PackageInfo packageInfoOne = new PackageInfo(); packageInfoOne.packageName = "package.one"; packageInfoOne.applicationInfo = new ApplicationInfo(); packageInfoOne.applicationInfo.uid = 1234; packageInfoOne.applicationInfo.packageName = packageInfoOne.packageName; shadowPackageManager.installPackage(packageInfoOne); PackageInfo packageInfoTwo = new PackageInfo(); packageInfoTwo.packageName = "package.two"; packageInfoTwo.applicationInfo = new ApplicationInfo(); packageInfoTwo.applicationInfo.uid = 1234; packageInfoTwo.applicationInfo.packageName = packageInfoTwo.packageName; shadowPackageManager.installPackage(packageInfoTwo); assertThat(packageManager.getPackagesForUid(1234)) .asList() .containsExactly("package.one", "package.two"); }
@Test public void installPackage_defaults() { PackageInfo info = new PackageInfo(); info.packageName = "name"; info.activities = new ActivityInfo[] {new ActivityInfo()}; shadowPackageManager.installPackage(info); PackageInfo installed = shadowPackageManager.getInternalMutablePackageInfo("name"); ActivityInfo activity = installed.activities[0]; assertThat(installed.applicationInfo).isNotNull(); assertThat(installed.applicationInfo.packageName).isEqualTo("name"); assertThat((installed.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0) .named("%s is installed", installed.applicationInfo) .isTrue(); assertThat(activity.packageName).isEqualTo("name"); // this should be really equal in parcel sense as ApplicationInfo doesn't implement equals(). assertThat(activity.applicationInfo).isEqualTo(installed.applicationInfo); assertThat(installed.applicationInfo.processName).isEqualTo("name"); assertThat(activity.name).isNotEmpty(); }
@Test public void removePackage_shouldHideItFromGetApplicationInfo() { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo = new ApplicationInfo(); packageInfo.applicationInfo.packageName = TEST_PACKAGE_NAME; packageInfo.applicationInfo.name = TEST_PACKAGE_LABEL; shadowPackageManager.installPackage(packageInfo); shadowPackageManager.removePackage(TEST_PACKAGE_NAME); try { packageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0); fail("NameNotFoundException not thrown"); } catch (NameNotFoundException e) { // expected } }
@Test @Config(minSdk = M) public void testRevokeRuntimePermission() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.requestedPermissions = new String[] {"android.permission.SEND_SMS", "android.permission.READ_SMS"}; packageInfo.requestedPermissionsFlags = new int[] {REQUESTED_PERMISSION_GRANTED, REQUESTED_PERMISSION_GRANTED}; shadowPackageManager.installPackage(packageInfo); packageManager.revokeRuntimePermission( TEST_PACKAGE_NAME, "android.permission.SEND_SMS", Process.myUserHandle()); assertThat(packageInfo.requestedPermissionsFlags[0]).isEqualTo(0); assertThat(packageInfo.requestedPermissionsFlags[1]).isEqualTo(REQUESTED_PERMISSION_GRANTED); packageManager.revokeRuntimePermission( TEST_PACKAGE_NAME, "android.permission.READ_SMS", Process.myUserHandle()); assertThat(packageInfo.requestedPermissionsFlags[0]).isEqualTo(0); assertThat(packageInfo.requestedPermissionsFlags[1]).isEqualTo(0); }
@Test @Config(minSdk = M) public void testGrantRuntimePermission() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.requestedPermissions = new String[] {"android.permission.SEND_SMS", "android.permission.READ_SMS"}; packageInfo.requestedPermissionsFlags = new int[] {0, 0}; // Not granted by default shadowPackageManager.installPackage(packageInfo); packageManager.grantRuntimePermission( TEST_PACKAGE_NAME, "android.permission.SEND_SMS", Process.myUserHandle()); assertThat(packageInfo.requestedPermissionsFlags[0]).isEqualTo(REQUESTED_PERMISSION_GRANTED); assertThat(packageInfo.requestedPermissionsFlags[1]).isEqualTo(0); packageManager.grantRuntimePermission( TEST_PACKAGE_NAME, "android.permission.READ_SMS", Process.myUserHandle()); assertThat(packageInfo.requestedPermissionsFlags[0]).isEqualTo(REQUESTED_PERMISSION_GRANTED); assertThat(packageInfo.requestedPermissionsFlags[1]).isEqualTo(REQUESTED_PERMISSION_GRANTED); }
@Test public void deletePackage() throws Exception { // Apps must have the android.permission.DELETE_PACKAGES set to delete packages. PackageManager packageManager = ApplicationProvider.getApplicationContext().getPackageManager(); shadowPackageManager.getInternalMutablePackageInfo( ApplicationProvider.getApplicationContext().getPackageName()) .requestedPermissions = new String[] {android.Manifest.permission.DELETE_PACKAGES}; PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowPackageManager.installPackage(packageInfo); IPackageDeleteObserver mockObserver = mock(IPackageDeleteObserver.class); packageManager.deletePackage(packageInfo.packageName, mockObserver, 0); shadowPackageManager.doPendingUninstallCallbacks(); assertThat(shadowPackageManager.getDeletedPackages()).contains(packageInfo.packageName); verify(mockObserver).packageDeleted(packageInfo.packageName, PackageManager.DELETE_SUCCEEDED); }
@Test @Config(minSdk = M) public void testGrantRuntimePermission_doesntRequestPermission() throws Exception { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; packageInfo.requestedPermissions = new String[] {"android.permission.SEND_SMS", "android.permission.READ_SMS"}; packageInfo.requestedPermissionsFlags = new int[] {0, 0}; // Not granted by default shadowPackageManager.installPackage(packageInfo); try { packageManager.grantRuntimePermission( // This permission is not granted to the package. TEST_PACKAGE_NAME, "android.permission.RECEIVE_SMS", Process.myUserHandle()); fail("Exception expected"); } catch (SecurityException expected) { } }