1 /* 2 * Copyright (C) 2017 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 com.android.settings.deviceinfo.firmwareversion; 18 19 import static com.android.settings.deviceinfo.firmwareversion.SecurityPatchLevelDialogController.SECURITY_PATCH_LABEL_ID; 20 import static com.android.settings.deviceinfo.firmwareversion.SecurityPatchLevelDialogController.SECURITY_PATCH_VALUE_ID; 21 import static org.mockito.ArgumentMatchers.any; 22 import static org.mockito.ArgumentMatchers.anyInt; 23 import static org.mockito.ArgumentMatchers.eq; 24 import static org.mockito.Mockito.never; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.verify; 27 import static org.mockito.Mockito.when; 28 29 import android.content.Context; 30 import android.os.Build; 31 import android.view.View; 32 33 import com.android.settings.testutils.SettingsRobolectricTestRunner; 34 import com.android.settingslib.wrapper.PackageManagerWrapper; 35 36 import org.junit.Before; 37 import org.junit.Test; 38 import org.junit.runner.RunWith; 39 import org.mockito.Mock; 40 import org.mockito.MockitoAnnotations; 41 import org.robolectric.RuntimeEnvironment; 42 import org.robolectric.util.ReflectionHelpers; 43 44 import java.util.Collections; 45 46 @RunWith(SettingsRobolectricTestRunner.class) 47 public class SecurityPatchLevelDialogControllerTest { 48 49 @Mock 50 private PackageManagerWrapper mPackageManager; 51 @Mock 52 private FirmwareVersionDialogFragment mDialog; 53 @Mock 54 private View mView; 55 56 private Context mContext; 57 private SecurityPatchLevelDialogController mController; 58 59 @Before 60 public void setup() { 61 MockitoAnnotations.initMocks(this); 62 mContext = spy(RuntimeEnvironment.application); 63 when(mDialog.getContext()).thenReturn(mContext); 64 } 65 66 @Test 67 public void initialize_noPatchInfo_shouldRemoveSettingFromDialog() { 68 ReflectionHelpers.setStaticField(Build.VERSION.class, "SECURITY_PATCH", ""); 69 mController = new SecurityPatchLevelDialogController(mDialog); 70 71 mController.initialize(); 72 73 verify(mDialog).removeSettingFromScreen(SECURITY_PATCH_VALUE_ID); 74 verify(mDialog).removeSettingFromScreen(SECURITY_PATCH_LABEL_ID); 75 } 76 77 @Test 78 public void initialize_patchInfoAvailable_shouldRegisterListeners() { 79 ReflectionHelpers.setStaticField(Build.VERSION.class, "SECURITY_PATCH", "foobar"); 80 mController = new SecurityPatchLevelDialogController(mDialog); 81 82 mController.initialize(); 83 84 verify(mDialog).registerClickListener(eq(SECURITY_PATCH_LABEL_ID), any()); 85 verify(mDialog).registerClickListener(eq(SECURITY_PATCH_VALUE_ID), any()); 86 } 87 88 @Test 89 public void onClick_noActivityIntent_shouldDoNothing() { 90 when(mPackageManager.queryIntentActivities(any(), anyInt())) 91 .thenReturn(Collections.emptyList()); 92 mController = new SecurityPatchLevelDialogController(mDialog); 93 ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager); 94 95 mController.onClick(mView); 96 97 verify(mContext, never()).startActivity(any()); 98 } 99 100 @Test 101 public void onClick_activityIntentFound_shouldStartActivity() { 102 when(mPackageManager.queryIntentActivities(any(), anyInt())) 103 .thenReturn(Collections.singletonList(null)); 104 mController = new SecurityPatchLevelDialogController(mDialog); 105 ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager); 106 107 mController.onClick(mView); 108 109 verify(mContext).startActivity(any()); 110 } 111 } 112