1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.content.pm.cts; 18 19 20 import android.content.pm.ApplicationInfo; 21 import android.content.pm.ConfigurationInfo; 22 import android.content.pm.PackageInfo; 23 import android.content.pm.PackageItemInfo; 24 import android.content.pm.PackageManager; 25 import android.content.pm.Signature; 26 import android.os.Parcel; 27 import android.test.AndroidTestCase; 28 29 import java.util.Arrays; 30 31 public class PackageInfoTest extends AndroidTestCase { 32 private PackageManager mPackageManager; 33 private PackageInfo mPackageInfo; 34 private PackageInfo mPackageInfoCmp; 35 private static final String PACKAGE_NAME = "android.content.cts"; 36 37 @Override 38 protected void setUp() throws Exception { 39 super.setUp(); 40 mPackageManager = getContext().getPackageManager(); 41 mPackageInfo = mPackageManager.getPackageInfo(PACKAGE_NAME, PackageManager.GET_ACTIVITIES 42 | PackageManager.GET_GIDS | PackageManager.GET_CONFIGURATIONS 43 | PackageManager.GET_INSTRUMENTATION | PackageManager.GET_PERMISSIONS 44 | PackageManager.GET_PROVIDERS | PackageManager.GET_RECEIVERS 45 | PackageManager.GET_SERVICES | PackageManager.GET_SIGNATURES 46 | PackageManager.GET_UNINSTALLED_PACKAGES); 47 } 48 49 public void testPackageInfoOp() { 50 // Test constructor, describeContents, toString 51 new PackageInfo(); 52 assertEquals(0, mPackageInfo.describeContents()); 53 assertNotNull(mPackageInfo.toString()); 54 55 // Test writeToParcel 56 Parcel p = Parcel.obtain(); 57 mPackageInfo.writeToParcel(p, 0); 58 p.setDataPosition(0); 59 mPackageInfoCmp = PackageInfo.CREATOR.createFromParcel(p); 60 checkPkgInfoSame(mPackageInfo, mPackageInfoCmp); 61 p.recycle(); 62 } 63 64 private void checkPkgInfoSame(PackageInfo expected, PackageInfo actual) { 65 assertEquals(expected.packageName, actual.packageName); 66 assertEquals(expected.getLongVersionCode(), actual.getLongVersionCode()); 67 assertEquals(expected.versionName, actual.versionName); 68 assertEquals(expected.sharedUserId, actual.sharedUserId); 69 assertEquals(expected.sharedUserLabel, actual.sharedUserLabel); 70 if (expected.applicationInfo != null) { 71 assertNotNull(actual.applicationInfo); 72 checkAppInfo(expected.applicationInfo, actual.applicationInfo); 73 } else { 74 assertNull(actual.applicationInfo); 75 } 76 assertTrue(Arrays.equals(expected.gids, actual.gids)); 77 checkInfoArray(expected.activities, actual.activities); 78 checkInfoArray(expected.receivers, actual.receivers); 79 checkInfoArray(expected.services, actual.services); 80 checkInfoArray(expected.providers, actual.providers); 81 checkInfoArray(expected.instrumentation, actual.instrumentation); 82 checkInfoArray(expected.permissions, actual.permissions); 83 assertTrue(Arrays.equals(expected.requestedPermissions, actual.requestedPermissions)); 84 checkSignatureInfo(expected.signatures, actual.signatures); 85 checkConfigInfo(expected.configPreferences, actual.configPreferences); 86 } 87 88 private void checkAppInfo(ApplicationInfo expected, ApplicationInfo actual) { 89 assertEquals(expected.taskAffinity, actual.taskAffinity); 90 assertEquals(expected.permission, actual.permission); 91 assertEquals(expected.processName, actual.processName); 92 assertEquals(expected.className, actual.className); 93 assertEquals(expected.theme, actual.theme); 94 assertEquals(expected.flags, actual.flags); 95 assertEquals(expected.sourceDir, actual.sourceDir); 96 assertEquals(expected.publicSourceDir, actual.publicSourceDir); 97 assertEquals(expected.sharedLibraryFiles, actual.sharedLibraryFiles); 98 assertEquals(expected.dataDir, actual.dataDir); 99 assertEquals(expected.uid, actual.uid); 100 assertEquals(expected.enabled, actual.enabled); 101 assertEquals(expected.manageSpaceActivityName, actual.manageSpaceActivityName); 102 assertEquals(expected.descriptionRes, actual.descriptionRes); 103 } 104 105 private void checkInfoArray(PackageItemInfo[] expected, PackageItemInfo[] actual) { 106 if (expected != null && expected.length > 0) { 107 assertNotNull(actual); 108 assertEquals(expected.length, actual.length); 109 for (int i = 0; i < expected.length; i++) { 110 assertEquals(expected[i].name, actual[i].name); 111 } 112 } else if (expected == null) { 113 assertNull(actual); 114 } else { 115 assertEquals(0, actual.length); 116 } 117 } 118 119 private void checkSignatureInfo(Signature[] expected, Signature[] actual) { 120 if (expected != null && expected.length > 0) { 121 assertNotNull(actual); 122 assertEquals(expected.length, actual.length); 123 for (int i = 0; i < expected.length; i++) { 124 actual[i].equals(expected[i]); 125 } 126 } else if (expected == null) { 127 assertNull(actual); 128 } else { 129 assertEquals(0, actual.length); 130 } 131 } 132 133 private void checkConfigInfo(ConfigurationInfo[] expected, ConfigurationInfo[] actual) { 134 if (expected != null && expected.length > 0) { 135 assertNotNull(actual); 136 assertEquals(expected.length, actual.length); 137 for (int i = 0; i < expected.length; i++) { 138 assertEquals(expected[i].reqKeyboardType, actual[i].reqKeyboardType); 139 assertEquals(expected[i].reqTouchScreen, actual[i].reqTouchScreen); 140 assertEquals(expected[i].reqInputFeatures, actual[i].reqInputFeatures); 141 assertEquals(expected[i].reqNavigation, actual[i].reqNavigation); 142 } 143 } else if (expected == null) { 144 assertNull(actual); 145 } else { 146 assertEquals(0, actual.length); 147 } 148 } 149 } 150