172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz/* 272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * Copyright (C) 2016 The Android Open Source Project 372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * 472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * Licensed under the Apache License, Version 2.0 (the "License"); 572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * you may not use this file except in compliance with the License. 672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * You may obtain a copy of the License at 772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * 872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * http://www.apache.org/licenses/LICENSE-2.0 972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * 1072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * Unless required by applicable law or agreed to in writing, software 1172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * distributed under the License is distributed on an "AS IS" BASIS, 1272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * See the License for the specific language governing permissions and 1472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz * limitations under the License. 1572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz */ 1672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 1772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzpackage com.android.managedprovisioning.common; 1872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 1972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport static org.mockito.Mockito.when; 2072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 2172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.content.Context; 2272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.content.pm.ApplicationInfo; 2372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.content.pm.PackageManager; 2472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.content.pm.PackageManager.NameNotFoundException; 2572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.graphics.drawable.Drawable; 2672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.graphics.drawable.ColorDrawable; 2772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.test.AndroidTestCase; 2872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport android.test.suitebuilder.annotation.SmallTest; 2972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 3072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport org.mockito.Mock; 3172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport org.mockito.MockitoAnnotations; 3272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 3372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz@SmallTest 3472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzpublic class MdmPackageInfoTest extends AndroidTestCase { 3572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz private final static Drawable TEST_DRAWABLE = new ColorDrawable(0); 3672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz private final static String TEST_PACKAGE_NAME = "com.test.mdm"; 3772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz private final static String TEST_LABEL = "Test app"; 3872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 3972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz @Mock private Context mockContext; 4072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz @Mock private PackageManager mockPackageManager; 4172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 4272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz private final ApplicationInfo mApplicationInfo = new ApplicationInfo(); 4372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 4472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz @Override 4572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz public void setUp() throws Exception { 4672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // this is necessary for mockito to work 4772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString()); 4872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 4972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz MockitoAnnotations.initMocks(this); 5072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 5172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz when(mockContext.getPackageManager()).thenReturn(mockPackageManager); 5272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz when(mockPackageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0)) 5372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz .thenReturn(mApplicationInfo); 5472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz when(mockPackageManager.getApplicationIcon(TEST_PACKAGE_NAME)).thenReturn(TEST_DRAWABLE); 5572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz when(mockPackageManager.getApplicationLabel(mApplicationInfo)).thenReturn(TEST_LABEL); 5672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz } 5772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 5872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz public void testConstructor() { 5972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // GIVEN an app icon and an app label 6072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // WHEN MdmPackageInfo is constructed 6172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz MdmPackageInfo mdmInfo = new MdmPackageInfo(TEST_DRAWABLE, TEST_LABEL); 6272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // THEN the app icon and app label are stored in the MdmPackageInfo object 6372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz assertSame(TEST_DRAWABLE, mdmInfo.packageIcon); 6472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz assertEquals(TEST_LABEL, mdmInfo.appLabel); 6572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz } 6672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 6772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz public void testCreateFromPackageName() { 6872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // GIVEN a package name 6972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // WHEN MdmPackageInfo is created from package name 7072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz MdmPackageInfo mdmInfo = MdmPackageInfo.createFromPackageName(mockContext, 7172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz TEST_PACKAGE_NAME); 7272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // THEN the app icon and app label are loaded correctly from the package manager 7372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz assertSame(TEST_DRAWABLE, mdmInfo.packageIcon); 7472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz assertEquals(TEST_LABEL, mdmInfo.appLabel); 7572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz } 7672023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 7772023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz public void testCreateFromPackageName_NameNotFoundException() throws Exception { 7872023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // GIVEN that the package does not exist on the device 7972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // WHEN MdmPackageInfo is created from package name 8072023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz when(mockPackageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0)) 8172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz .thenThrow(new NameNotFoundException()); 8272023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz // THEN null is returned 8372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz assertNull(MdmPackageInfo.createFromPackageName(mockContext, TEST_PACKAGE_NAME)); 8472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz } 8572023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz} 86