1 package com.android.systemui.broadcast
2 
3 import android.content.BroadcastReceiver
4 import android.os.UserHandle
5 import android.testing.AndroidTestingRunner
6 import androidx.test.filters.SmallTest
7 import com.android.systemui.SysuiTestCase
8 import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger
9 import com.google.common.truth.Truth.assertThat
10 import org.junit.Before
11 import org.junit.Test
12 import org.junit.runner.RunWith
13 import org.mockito.Mock
14 import org.mockito.Mockito.verify
15 import org.mockito.MockitoAnnotations
16 
17 @RunWith(AndroidTestingRunner::class)
18 @SmallTest
19 class PendingRemovalStoreTest : SysuiTestCase() {
20 
21     @Mock
22     private lateinit var logger: BroadcastDispatcherLogger
23     @Mock
24     private lateinit var receiverOne: BroadcastReceiver
25     @Mock
26     private lateinit var receiverTwo: BroadcastReceiver
27 
28     private lateinit var store: PendingRemovalStore
29 
30     @Before
31     fun setUp() {
32         MockitoAnnotations.initMocks(this)
33 
34         store = PendingRemovalStore(logger)
35     }
36 
37     @Test
38     fun testTagForRemoval_logged() {
39         val user = 10
40         store.tagForRemoval(receiverOne, 10)
41 
42         verify(logger).logTagForRemoval(user, receiverOne)
43     }
44 
45     @Test
46     fun testClearedPendingRemoval_logged() {
47         val user = UserHandle.USER_ALL
48         store.clearPendingRemoval(receiverOne, user)
49 
50         verify(logger).logClearedAfterRemoval(user, receiverOne)
51     }
52 
53     @Test
54     fun testTaggedReceiverMarkedAsPending_specificUser() {
55         val user = 10
56         store.tagForRemoval(receiverOne, user)
57 
58         assertThat(store.isPendingRemoval(receiverOne, user)).isTrue()
59         assertThat(store.isPendingRemoval(receiverOne, user + 1)).isFalse()
60         assertThat(store.isPendingRemoval(receiverOne, UserHandle.USER_ALL)).isFalse()
61     }
62 
63     @Test
64     fun testTaggedReceiverMarkedAsPending_allUsers() {
65         val user = 10
66         store.tagForRemoval(receiverOne, UserHandle.USER_ALL)
67 
68         assertThat(store.isPendingRemoval(receiverOne, user)).isTrue()
69         assertThat(store.isPendingRemoval(receiverOne, user + 1)).isTrue()
70         assertThat(store.isPendingRemoval(receiverOne, UserHandle.USER_ALL)).isTrue()
71     }
72 
73     @Test
74     fun testOnlyBlockCorrectReceiver() {
75         val user = 10
76         store.tagForRemoval(receiverOne, user)
77 
78         assertThat(store.isPendingRemoval(receiverOne, user)).isTrue()
79         assertThat(store.isPendingRemoval(receiverTwo, user)).isFalse()
80     }
81 }