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