CachedBluetoothDeviceTest.java revision 6258aae54824a7c3cd3974822b0b6835ab8a45de
16258aae54824a7c3cd3974822b0b6835ab8a45deJack He/* 26258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Copyright (C) 2017 The Android Open Source Project 36258aae54824a7c3cd3974822b0b6835ab8a45deJack He * 46258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Licensed under the Apache License, Version 2.0 (the "License"); 56258aae54824a7c3cd3974822b0b6835ab8a45deJack He * you may not use this file except in compliance with the License. 66258aae54824a7c3cd3974822b0b6835ab8a45deJack He * You may obtain a copy of the License at 76258aae54824a7c3cd3974822b0b6835ab8a45deJack He * 86258aae54824a7c3cd3974822b0b6835ab8a45deJack He * http://www.apache.org/licenses/LICENSE-2.0 96258aae54824a7c3cd3974822b0b6835ab8a45deJack He * 106258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Unless required by applicable law or agreed to in writing, software 116258aae54824a7c3cd3974822b0b6835ab8a45deJack He * distributed under the License is distributed on an "AS IS" BASIS, 126258aae54824a7c3cd3974822b0b6835ab8a45deJack He * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136258aae54824a7c3cd3974822b0b6835ab8a45deJack He * See the License for the specific language governing permissions and 146258aae54824a7c3cd3974822b0b6835ab8a45deJack He * limitations under the License. 156258aae54824a7c3cd3974822b0b6835ab8a45deJack He */ 166258aae54824a7c3cd3974822b0b6835ab8a45deJack Hepackage com.android.settingslib.bluetooth; 176258aae54824a7c3cd3974822b0b6835ab8a45deJack He 186258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static com.google.common.truth.Truth.assertThat; 196258aae54824a7c3cd3974822b0b6835ab8a45deJack He 206258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static org.mockito.Mockito.doAnswer; 216258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static org.mockito.Mockito.spy; 226258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport static org.mockito.Mockito.when; 236258aae54824a7c3cd3974822b0b6835ab8a45deJack He 246258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothAdapter; 256258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothDevice; 266258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.bluetooth.BluetoothProfile; 276258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport android.content.Context; 286258aae54824a7c3cd3974822b0b6835ab8a45deJack He 296258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport com.android.settingslib.R; 306258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport com.android.settingslib.TestConfig; 316258aae54824a7c3cd3974822b0b6835ab8a45deJack He 326258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.Before; 336258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.Test; 346258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.junit.runner.RunWith; 356258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.mockito.Mock; 366258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.mockito.MockitoAnnotations; 376258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.RobolectricTestRunner; 386258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.RuntimeEnvironment; 396258aae54824a7c3cd3974822b0b6835ab8a45deJack Heimport org.robolectric.annotation.Config; 406258aae54824a7c3cd3974822b0b6835ab8a45deJack He 416258aae54824a7c3cd3974822b0b6835ab8a45deJack He@RunWith(RobolectricTestRunner.class) 426258aae54824a7c3cd3974822b0b6835ab8a45deJack He@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, resourceDir = 436258aae54824a7c3cd3974822b0b6835ab8a45deJack He "../../res") 446258aae54824a7c3cd3974822b0b6835ab8a45deJack Hepublic class CachedBluetoothDeviceTest { 456258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 466258aae54824a7c3cd3974822b0b6835ab8a45deJack He private LocalBluetoothAdapter mAdapter; 476258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 486258aae54824a7c3cd3974822b0b6835ab8a45deJack He private LocalBluetoothProfileManager mProfileManager; 496258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 506258aae54824a7c3cd3974822b0b6835ab8a45deJack He private HeadsetProfile mHfpProfile; 516258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 526258aae54824a7c3cd3974822b0b6835ab8a45deJack He private A2dpProfile mA2dpProfile; 536258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 546258aae54824a7c3cd3974822b0b6835ab8a45deJack He private HidProfile mHidProfile; 556258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Mock 566258aae54824a7c3cd3974822b0b6835ab8a45deJack He private BluetoothDevice mDevice; 576258aae54824a7c3cd3974822b0b6835ab8a45deJack He private CachedBluetoothDevice mCachedDevice; 586258aae54824a7c3cd3974822b0b6835ab8a45deJack He private Context mContext; 596258aae54824a7c3cd3974822b0b6835ab8a45deJack He private int mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 606258aae54824a7c3cd3974822b0b6835ab8a45deJack He 616258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Before 626258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void setUp() { 636258aae54824a7c3cd3974822b0b6835ab8a45deJack He MockitoAnnotations.initMocks(this); 646258aae54824a7c3cd3974822b0b6835ab8a45deJack He mContext = RuntimeEnvironment.application; 656258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON); 666258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mHfpProfile.isProfileReady()).thenReturn(true); 676258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mA2dpProfile.isProfileReady()).thenReturn(true); 686258aae54824a7c3cd3974822b0b6835ab8a45deJack He when(mHidProfile.isProfileReady()).thenReturn(true); 696258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice = spy( 706258aae54824a7c3cd3974822b0b6835ab8a45deJack He new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice)); 716258aae54824a7c3cd3974822b0b6835ab8a45deJack He doAnswer((invocation) -> mBatteryLevel).when(mCachedDevice).getBatteryLevel(); 726258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 736258aae54824a7c3cd3974822b0b6835ab8a45deJack He 746258aae54824a7c3cd3974822b0b6835ab8a45deJack He /** 756258aae54824a7c3cd3974822b0b6835ab8a45deJack He * Test to verify the current test context object works so that we are not checking null 766258aae54824a7c3cd3974822b0b6835ab8a45deJack He * against null 776258aae54824a7c3cd3974822b0b6835ab8a45deJack He */ 786258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 796258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testContextMock() { 806258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mContext.getString(R.string.bluetooth_connected)).isEqualTo("Connected"); 816258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 826258aae54824a7c3cd3974822b0b6835ab8a45deJack He 836258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 846258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testGetConnectionSummary_testSingleProfileConnectDisconnect() { 856258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test without battery level 866258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be connected and test connection state summary 876258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 886258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 896258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected)); 906258aae54824a7c3cd3974822b0b6835ab8a45deJack He 916258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be disconnected and test connection state summary 926258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 936258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 946258aae54824a7c3cd3974822b0b6835ab8a45deJack He 956258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test with battery level 966258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = 10; 976258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be connected and test connection state summary 986258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 996258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1006258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_battery_level, 1016258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1026258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1036258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be disconnected and test connection state summary 1046258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1056258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1066258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1076258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level 1086258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN; 1096258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1106258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be connected and test connection state summary 1116258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 1126258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1136258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected)); 1146258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1156258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HID profile to be disconnected and test connection state summary 1166258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1176258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1186258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 1196258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1206258aae54824a7c3cd3974822b0b6835ab8a45deJack He @Test 1216258aae54824a7c3cd3974822b0b6835ab8a45deJack He public void testGetConnectionSummary_testMultipleProfileConnectDisconnect() { 1226258aae54824a7c3cd3974822b0b6835ab8a45deJack He mBatteryLevel = 10; 1236258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1246258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Set HFP, A2DP and HID profile to be connected and test connection state summary 1256258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 1266258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); 1276258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_CONNECTED); 1286258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1296258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_battery_level, 1306258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1316258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1326258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect HFP only and test connection state summary 1336258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 1346258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1356258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_no_headset_battery_level, 1366258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1376258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1386258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect A2DP only and test connection state summary 1396258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); 1406258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED); 1416258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1426258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_no_a2dp_battery_level, 1436258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1446258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1456258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect both HFP and A2DP and test connection state summary 1466258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED); 1476258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(mContext.getString( 1486258aae54824a7c3cd3974822b0b6835ab8a45deJack He R.string.bluetooth_connected_no_headset_no_a2dp_battery_level, 1496258aae54824a7c3cd3974822b0b6835ab8a45deJack He com.android.settingslib.Utils.formatPercentage(mBatteryLevel))); 1506258aae54824a7c3cd3974822b0b6835ab8a45deJack He 1516258aae54824a7c3cd3974822b0b6835ab8a45deJack He // Disconnect all profiles and test connection state summary 1526258aae54824a7c3cd3974822b0b6835ab8a45deJack He mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED); 1536258aae54824a7c3cd3974822b0b6835ab8a45deJack He assertThat(mCachedDevice.getConnectionSummary()).isNull(); 1546258aae54824a7c3cd3974822b0b6835ab8a45deJack He } 1556258aae54824a7c3cd3974822b0b6835ab8a45deJack He} 156