1 /* 2 * Copyright 2018 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 package com.android.settings.connecteddevice; 17 18 import android.content.Context; 19 import android.content.pm.PackageManager; 20 21 import android.support.v7.preference.Preference; 22 23 import com.android.settings.bluetooth.BluetoothDeviceUpdater; 24 import com.android.settings.dashboard.DashboardFragment; 25 import com.android.settings.testutils.SettingsRobolectricTestRunner; 26 27 import org.junit.Before; 28 import org.junit.Test; 29 import org.junit.runner.RunWith; 30 import org.mockito.Mock; 31 import org.mockito.MockitoAnnotations; 32 import org.robolectric.RuntimeEnvironment; 33 34 import static com.android.settings.core.BasePreferenceController.AVAILABLE; 35 import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; 36 import static com.google.common.truth.Truth.assertThat; 37 import static org.mockito.Mockito.*; 38 39 @RunWith(SettingsRobolectricTestRunner.class) 40 public class PreviouslyConnectedDevicePreferenceControllerTest { 41 42 private final String KEY = "test_key"; 43 44 @Mock 45 private DashboardFragment mDashboardFragment; 46 @Mock 47 private BluetoothDeviceUpdater mBluetoothDeviceUpdater; 48 @Mock 49 private PackageManager mPackageManager; 50 51 private Context mContext; 52 private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController; 53 private Preference mPreference; 54 55 @Before setUp()56 public void setUp() { 57 MockitoAnnotations.initMocks(this); 58 mContext = spy(RuntimeEnvironment.application); 59 doReturn(mContext).when(mDashboardFragment).getContext(); 60 doReturn(mPackageManager).when(mContext).getPackageManager(); 61 mPreConnectedDeviceController = 62 new PreviouslyConnectedDevicePreferenceController(mContext, KEY); 63 mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater); 64 65 mPreference = new Preference(mContext); 66 mPreConnectedDeviceController.setPreference(mPreference); 67 } 68 69 @Test callbackCanRegisterAndUnregister()70 public void callbackCanRegisterAndUnregister() { 71 // register the callback in onStart() 72 mPreConnectedDeviceController.onStart(); 73 verify(mBluetoothDeviceUpdater).registerCallback(); 74 75 // unregister the callback in onStop() 76 mPreConnectedDeviceController.onStop(); 77 verify(mBluetoothDeviceUpdater).unregisterCallback(); 78 } 79 80 @Test getAvailabilityStatus_noBluetoothFeature_returnUnSupported()81 public void getAvailabilityStatus_noBluetoothFeature_returnUnSupported() { 82 doReturn(false).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); 83 assertThat(mPreConnectedDeviceController.getAvailabilityStatus()).isEqualTo( 84 CONDITIONALLY_UNAVAILABLE); 85 } 86 @Test getAvailabilityStatus_hasBluetoothFeature_returnSupported()87 public void getAvailabilityStatus_hasBluetoothFeature_returnSupported() { 88 doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); 89 assertThat(mPreConnectedDeviceController.getAvailabilityStatus()).isEqualTo( 90 AVAILABLE); 91 } 92 93 @Test onDeviceAdded_addFirstDevice_preferenceIsEnable()94 public void onDeviceAdded_addFirstDevice_preferenceIsEnable() { 95 doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); 96 mPreConnectedDeviceController.setPreferenceSize(0); 97 mPreConnectedDeviceController.onDeviceAdded(mPreference); 98 99 assertThat(mPreference.isEnabled()).isTrue(); 100 } 101 102 @Test onDeviceRemoved_removeLastDevice_preferenceIsDisable()103 public void onDeviceRemoved_removeLastDevice_preferenceIsDisable() { 104 doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); 105 mPreConnectedDeviceController.setPreferenceSize(1); 106 mPreConnectedDeviceController.onDeviceRemoved(mPreference); 107 108 assertThat(mPreference.isEnabled()).isFalse(); 109 } 110 } 111