/** This method is getting renamed to {link {@link #installPackage}. */ @Deprecated public void addPackage(PackageInfo packageInfo) { installPackage(packageInfo); }
/** @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); }
@Test public void checkSignatures_neitherSigned() throws Exception { shadowPackageManager.installPackage(newPackageInfo("first.package", (Signature[]) null)); shadowPackageManager.installPackage(newPackageInfo("second.package", (Signature[]) null)); assertThat(packageManager.checkSignatures("first.package", "second.package")) .isEqualTo(SIGNATURE_NEITHER_SIGNED); }
@Test public void checkSignatures_firstNotSigned() throws Exception { shadowPackageManager.installPackage(newPackageInfo("first.package", (Signature[]) null)); shadowPackageManager.installPackage( newPackageInfo("second.package", new Signature("00000000"))); assertThat(packageManager.checkSignatures("first.package", "second.package")) .isEqualTo(SIGNATURE_FIRST_NOT_SIGNED); }
@Test public void checkSignatures_secondNotSigned() throws Exception { shadowPackageManager.installPackage(newPackageInfo("first.package", new Signature("00000000"))); shadowPackageManager.installPackage(newPackageInfo("second.package", (Signature[]) null)); assertThat(packageManager.checkSignatures("first.package", "second.package")) .isEqualTo(SIGNATURE_SECOND_NOT_SIGNED); }
@Test @Config(minSdk = android.os.Build.VERSION_CODES.P) public void isPackageSuspended_installedNeverSuspendedPackage_shouldReturnFalse() throws NameNotFoundException { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); assertThat(packageManager.isPackageSuspended(TEST_PACKAGE_NAME)).isFalse(); }
@Test public void checkSignatures_same() throws Exception { shadowPackageManager.installPackage(newPackageInfo("first.package", new Signature("00000000"))); shadowPackageManager.installPackage( newPackageInfo("second.package", new Signature("00000000"))); assertThat(packageManager.checkSignatures("first.package", "second.package")) .isEqualTo(SIGNATURE_MATCH); }
@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 @Config(minSdk = LOLLIPOP) public void addPackageShouldNotCreateSessions() { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = "test.package"; shadowPackageManager.installPackage(packageInfo); assertThat(packageManager.getPackageInstaller().getAllSessions()).isEmpty(); }
@Test @Config(minSdk = android.os.Build.VERSION_CODES.P) public void getPackageSetting_removedPackage_shouldReturnNull() { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); shadowPackageManager.removePackage(TEST_PACKAGE_NAME); assertThat(shadowPackageManager.getPackageSetting(TEST_PACKAGE_NAME)).isNull(); }
@Test public void checkSignatures_noMatch() throws Exception { shadowPackageManager.installPackage(newPackageInfo("first.package", new Signature("00000000"))); shadowPackageManager.installPackage( newPackageInfo("second.package", new Signature("FFFFFFFF"))); assertThat(packageManager.checkSignatures("first.package", "second.package")) .isEqualTo(SIGNATURE_NO_MATCH); }
@Test @Config(minSdk = android.os.Build.VERSION_CODES.P) public void isPackageSuspended_installedSuspendedPackage_shouldReturnTrue() throws NameNotFoundException { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); setPackagesSuspended( new String[] {TEST_PACKAGE_NAME}, /* suspended= */ true, /* appExtras= */ null, /* launcherExtras= */ null, /* dialogMessage= */ null); assertThat(packageManager.isPackageSuspended(TEST_PACKAGE_NAME)).isTrue(); }
@Test public void checkSignatures_noMatch_mustBeExact() throws Exception { shadowPackageManager.installPackage(newPackageInfo("first.package", new Signature("00000000"))); shadowPackageManager.installPackage( newPackageInfo("second.package", new Signature("00000000"), new Signature("FFFFFFFF"))); assertThat(packageManager.checkSignatures("first.package", "second.package")) .isEqualTo(SIGNATURE_NO_MATCH); }
@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 @Config(minSdk = android.os.Build.VERSION_CODES.P) public void getPackageSetting_installedNeverSuspendedPackage_shouldReturnUnsuspendedSetting() { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); PackageSetting setting = shadowPackageManager.getPackageSetting(TEST_PACKAGE_NAME); assertThat(setting.isSuspended()).isFalse(); assertThat(setting.getDialogMessage()).isNull(); assertThat(setting.getSuspendedAppExtras()).isNull(); assertThat(setting.getSuspendedLauncherExtras()).isNull(); }
@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 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 = android.os.Build.VERSION_CODES.P) public void getPackageSetting_installedSuspendedPackage_shouldReturnSuspendedSetting() { shadowPackageManager.installPackage(createPackageInfoWithPackageName(TEST_PACKAGE_NAME)); PersistableBundle appExtras = new PersistableBundle(); appExtras.putString("key", "value"); PersistableBundle launcherExtras = new PersistableBundle(); launcherExtras.putInt("number", 7); setPackagesSuspended( new String[] {TEST_PACKAGE_NAME}, true, appExtras, launcherExtras, "Dialog message"); PackageSetting setting = shadowPackageManager.getPackageSetting(TEST_PACKAGE_NAME); assertThat(setting.isSuspended()).isTrue(); assertThat(setting.getDialogMessage()).isEqualTo("Dialog message"); assertThat(setting.getSuspendedAppExtras().getString("key")).isEqualTo("value"); assertThat(setting.getSuspendedLauncherExtras().getInt("number")).isEqualTo(7); }