• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2023 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.server.bluetooth.test
17 
18 import android.content.ContentResolver
19 import android.content.Context
20 import android.os.Looper
21 import android.provider.Settings
22 import androidx.test.core.app.ApplicationProvider
23 import com.android.server.bluetooth.BleScanSettingListener.initialize
24 import com.android.server.bluetooth.BleScanSettingListener.isScanAllowed
25 import com.google.common.truth.Truth.assertThat
26 import org.junit.Before
27 import org.junit.Test
28 import org.junit.runner.RunWith
29 import org.robolectric.RobolectricTestRunner
30 import org.robolectric.Shadows.shadowOf
31 
32 @RunWith(RobolectricTestRunner::class)
33 class BleScanSettingListenerTest {
34     private val resolver: ContentResolver =
35         ApplicationProvider.getApplicationContext<Context>().getContentResolver()
36 
37     private val looper: Looper = Looper.getMainLooper()
38 
39     private var callbackTriggered: Boolean = false
40 
41     @Before
setupnull42     public fun setup() {
43         callbackTriggered = false
44     }
45 
startListenernull46     private fun startListener() {
47         initialize(looper, resolver, this::callback)
48     }
49 
enableSettingnull50     private fun enableSetting() {
51         Settings.Global.putInt(resolver, Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE, 1)
52         shadowOf(looper).idle()
53     }
54 
disableSettingnull55     private fun disableSetting() {
56         Settings.Global.putInt(resolver, Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE, 0)
57         shadowOf(looper).idle()
58     }
59 
callbacknull60     private fun callback() {
61         callbackTriggered = true
62     }
63 
64     @Test
initialize_whenNoSettings_isOffnull65     fun initialize_whenNoSettings_isOff() {
66         startListener()
67 
68         assertThat(isScanAllowed).isFalse()
69         assertThat(callbackTriggered).isFalse()
70     }
71 
72     @Test
initialize_whenSettingsOff_isOffnull73     fun initialize_whenSettingsOff_isOff() {
74         disableSetting()
75 
76         startListener()
77 
78         assertThat(isScanAllowed).isFalse()
79         assertThat(callbackTriggered).isFalse()
80     }
81 
82     @Test
initialize_whenSettingsOn_isScanAllowednull83     fun initialize_whenSettingsOn_isScanAllowed() {
84         enableSetting()
85         startListener()
86 
87         assertThat(isScanAllowed).isTrue()
88         assertThat(callbackTriggered).isFalse()
89     }
90 
91     @Test
changeModeToOn_whenSettingsOn_isScanAllowedAndEventDiscardednull92     fun changeModeToOn_whenSettingsOn_isScanAllowedAndEventDiscarded() {
93         enableSetting()
94         startListener()
95 
96         enableSetting()
97 
98         assertThat(isScanAllowed).isTrue()
99         assertThat(callbackTriggered).isFalse()
100     }
101 
102     @Test
changeModeToOff_whenSettingsOff_isOffAndEventDiscardednull103     fun changeModeToOff_whenSettingsOff_isOffAndEventDiscarded() {
104         startListener()
105 
106         disableSetting()
107 
108         assertThat(isScanAllowed).isFalse()
109         assertThat(callbackTriggered).isFalse()
110     }
111 
112     @Test
changeModeToOn_whenSettingsOff_isScanAllowedWithoutCallbacknull113     fun changeModeToOn_whenSettingsOff_isScanAllowedWithoutCallback() {
114         startListener()
115 
116         enableSetting()
117 
118         assertThat(isScanAllowed).isTrue()
119         assertThat(callbackTriggered).isFalse()
120     }
121 
122     @Test
changeModeToOff_whenSettingsOn_isOffAndCallbackTriggerednull123     fun changeModeToOff_whenSettingsOn_isOffAndCallbackTriggered() {
124         enableSetting()
125         startListener()
126 
127         disableSetting()
128 
129         assertThat(isScanAllowed).isFalse()
130         assertThat(callbackTriggered).isTrue()
131     }
132 }
133