2 * Copyright (C) 2017 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings.applications.defaultapps;
20 import android.content.ComponentName;
21 import android.content.Context;
22 import android.os.UserManager;
23 import android.support.v7.preference.Preference;
25 import com.android.settings.testutils.SettingsRobolectricTestRunner;
26 import com.android.settings.TestConfig;
27 import com.android.settings.applications.PackageManagerWrapper;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Answers;
33 import org.mockito.Mock;
34 import org.mockito.MockitoAnnotations;
35 import org.robolectric.annotation.Config;
36 import org.robolectric.util.ReflectionHelpers;
38 import static com.google.common.truth.Truth.assertThat;
39 import static org.mockito.Matchers.anyList;
40 import static org.mockito.Mockito.doReturn;
41 import static org.mockito.Mockito.mock;
42 import static org.mockito.Mockito.spy;
43 import static org.mockito.Mockito.verify;
44 import static org.mockito.Mockito.when;
46 @RunWith(SettingsRobolectricTestRunner.class)
47 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
48 public class DefaultHomePreferenceControllerTest {
51 private Context mContext;
53 private UserManager mUserManager;
54 @Mock(answer = Answers.RETURNS_DEEP_STUBS)
55 private PackageManagerWrapper mPackageManager;
57 private DefaultHomePreferenceController mController;
61 MockitoAnnotations.initMocks(this);
62 when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
64 mController = spy(new DefaultHomePreferenceController(mContext));
65 ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
69 public void isAlwaysAvailable() {
70 assertThat(mController.isAvailable()).isTrue();
74 public void getDefaultApp_shouldGetDefaultBrowserPackage() {
75 assertThat(mController.getDefaultAppInfo()).isNotNull();
77 verify(mPackageManager).getHomeActivities(anyList());
81 public void updateState_noDefaultApp_shouldAskPackageManagerForOnlyApp() {
82 doReturn(null).when(mController).getDefaultAppInfo();
84 mController.updateState(mock(Preference.class));
86 verify(mPackageManager).getHomeActivities(anyList());
90 public void testIsHomeDefault_noDefaultSet_shouldReturnTrue() {
91 when(mPackageManager.getHomeActivities(anyList())).thenReturn(null);
92 assertThat(DefaultHomePreferenceController.isHomeDefault("test.pkg", mPackageManager))
97 public void testIsHomeDefault_defaultSetToPkg_shouldReturnTrue() {
98 final String pkgName = "test.pkg";
99 final ComponentName defaultHome = new ComponentName(pkgName, "class");
101 when(mPackageManager.getHomeActivities(anyList())).thenReturn(defaultHome);
103 assertThat(DefaultHomePreferenceController.isHomeDefault(pkgName, mPackageManager))
108 public void testIsHomeDefault_defaultSetToOtherPkg_shouldReturnFalse() {
109 final String pkgName = "test.pkg";
110 final ComponentName defaultHome = new ComponentName("not" + pkgName, "class");
112 when(mPackageManager.getHomeActivities(anyList())).thenReturn(defaultHome);
114 assertThat(DefaultHomePreferenceController.isHomeDefault(pkgName, mPackageManager))