| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.content.pm.cts; |
| |
| import static org.junit.Assert.assertArrayEquals; |
| |
| import android.content.pm.ApplicationInfo; |
| import android.content.pm.Attribution; |
| import android.content.pm.ComponentInfo; |
| import android.content.pm.ConfigurationInfo; |
| import android.content.pm.PackageInfo; |
| import android.content.pm.PackageItemInfo; |
| import android.content.pm.PackageManager; |
| import android.content.pm.Signature; |
| import android.os.Parcel; |
| import android.platform.test.annotations.AppModeFull; |
| import android.test.AndroidTestCase; |
| |
| import java.util.Arrays; |
| |
| @AppModeFull // TODO(Instant) Figure out which APIs should work. |
| public class PackageInfoTest extends AndroidTestCase { |
| private PackageManager mPackageManager; |
| private PackageInfo mPackageInfo; |
| private PackageInfo mPackageInfoCmp; |
| private static final String PACKAGE_NAME = "android.content.cts"; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| mPackageManager = getContext().getPackageManager(); |
| mPackageInfo = mPackageManager.getPackageInfo(PACKAGE_NAME, PackageManager.GET_ACTIVITIES |
| | PackageManager.GET_GIDS | PackageManager.GET_CONFIGURATIONS |
| | PackageManager.GET_INSTRUMENTATION | PackageManager.GET_PERMISSIONS |
| | PackageManager.GET_PROVIDERS | PackageManager.GET_RECEIVERS |
| | PackageManager.GET_SERVICES | PackageManager.GET_ATTRIBUTIONS |
| | PackageManager.GET_SIGNATURES | PackageManager.GET_UNINSTALLED_PACKAGES); |
| } |
| |
| public void testPackageInfoOp() { |
| // Test constructor, describeContents, toString |
| new PackageInfo(); |
| assertEquals(0, mPackageInfo.describeContents()); |
| assertNotNull(mPackageInfo.toString()); |
| |
| // Test writeToParcel |
| Parcel p = Parcel.obtain(); |
| mPackageInfo.writeToParcel(p, 0); |
| p.setDataPosition(0); |
| mPackageInfoCmp = PackageInfo.CREATOR.createFromParcel(p); |
| checkPkgInfoSame(mPackageInfo, mPackageInfoCmp); |
| p.recycle(); |
| } |
| |
| public void testApplicationInfoSame() { |
| ApplicationInfo ai = mPackageInfo.applicationInfo; |
| |
| // Make sure all the components in it has the same ApplicationInfo. |
| for (ComponentInfo[] ar : new ComponentInfo[][]{ |
| mPackageInfo.activities, mPackageInfo.services, mPackageInfo.providers, |
| mPackageInfo.receivers}) { |
| for (ComponentInfo ci : ar) { |
| assertSame("component=" + ci.getComponentName(), ai, ci.applicationInfo); |
| } |
| } |
| } |
| |
| private void checkPkgInfoSame(PackageInfo expected, PackageInfo actual) { |
| assertEquals(expected.packageName, actual.packageName); |
| assertEquals(expected.getLongVersionCode(), actual.getLongVersionCode()); |
| assertEquals(expected.versionName, actual.versionName); |
| assertEquals(expected.sharedUserId, actual.sharedUserId); |
| assertEquals(expected.sharedUserLabel, actual.sharedUserLabel); |
| if (expected.applicationInfo != null) { |
| assertNotNull(actual.applicationInfo); |
| checkAppInfo(expected.applicationInfo, actual.applicationInfo); |
| } else { |
| assertNull(actual.applicationInfo); |
| } |
| assertTrue(Arrays.equals(expected.gids, actual.gids)); |
| checkInfoArray(expected.activities, actual.activities); |
| checkInfoArray(expected.receivers, actual.receivers); |
| checkInfoArray(expected.services, actual.services); |
| checkInfoArray(expected.providers, actual.providers); |
| checkInfoArray(expected.instrumentation, actual.instrumentation); |
| checkInfoArray(expected.permissions, actual.permissions); |
| assertTrue(Arrays.equals(expected.requestedPermissions, actual.requestedPermissions)); |
| checkSignatureInfo(expected.signatures, actual.signatures); |
| checkConfigInfo(expected.configPreferences, actual.configPreferences); |
| checkAttributionInfo(expected.attributions, actual.attributions); |
| } |
| |
| private void checkAppInfo(ApplicationInfo expected, ApplicationInfo actual) { |
| assertEquals(expected.taskAffinity, actual.taskAffinity); |
| assertEquals(expected.permission, actual.permission); |
| assertEquals(expected.processName, actual.processName); |
| assertEquals(expected.className, actual.className); |
| assertEquals(expected.theme, actual.theme); |
| assertEquals(expected.flags, actual.flags); |
| assertEquals(expected.sourceDir, actual.sourceDir); |
| assertEquals(expected.publicSourceDir, actual.publicSourceDir); |
| assertArrayEquals(expected.sharedLibraryFiles, actual.sharedLibraryFiles); |
| assertEquals(expected.dataDir, actual.dataDir); |
| assertEquals(expected.uid, actual.uid); |
| assertEquals(expected.enabled, actual.enabled); |
| assertEquals(expected.manageSpaceActivityName, actual.manageSpaceActivityName); |
| assertEquals(expected.descriptionRes, actual.descriptionRes); |
| } |
| |
| private void checkInfoArray(PackageItemInfo[] expected, PackageItemInfo[] actual) { |
| if (expected != null && expected.length > 0) { |
| assertNotNull(actual); |
| assertEquals(expected.length, actual.length); |
| for (int i = 0; i < expected.length; i++) { |
| assertEquals(expected[i].name, actual[i].name); |
| } |
| } else if (expected == null) { |
| assertNull(actual); |
| } else { |
| assertEquals(0, actual.length); |
| } |
| } |
| |
| private void checkSignatureInfo(Signature[] expected, Signature[] actual) { |
| if (expected != null && expected.length > 0) { |
| assertNotNull(actual); |
| assertEquals(expected.length, actual.length); |
| for (int i = 0; i < expected.length; i++) { |
| actual[i].equals(expected[i]); |
| } |
| } else if (expected == null) { |
| assertNull(actual); |
| } else { |
| assertEquals(0, actual.length); |
| } |
| } |
| |
| private void checkConfigInfo(ConfigurationInfo[] expected, ConfigurationInfo[] actual) { |
| if (expected != null && expected.length > 0) { |
| assertNotNull(actual); |
| assertEquals(expected.length, actual.length); |
| for (int i = 0; i < expected.length; i++) { |
| assertEquals(expected[i].reqKeyboardType, actual[i].reqKeyboardType); |
| assertEquals(expected[i].reqTouchScreen, actual[i].reqTouchScreen); |
| assertEquals(expected[i].reqInputFeatures, actual[i].reqInputFeatures); |
| assertEquals(expected[i].reqNavigation, actual[i].reqNavigation); |
| } |
| } else if (expected == null) { |
| assertNull(actual); |
| } else { |
| assertEquals(0, actual.length); |
| } |
| } |
| |
| private void checkAttributionInfo(Attribution[] expected, Attribution[] actual) { |
| if (expected != null && expected.length > 0) { |
| assertNotNull(actual); |
| assertEquals(expected.length, actual.length); |
| for (int i = 0; i < expected.length; i++) { |
| assertEquals(actual[i].getTag(), expected[i].getTag()); |
| assertEquals(actual[i].getTag(), expected[i].getTag()); |
| } |
| } else if (expected == null) { |
| assertNull(actual); |
| } else { |
| assertEquals(0, actual.length); |
| } |
| } |
| } |