blob: 7d556236b518ab9c7ee8611b77dc2d494928064e [file] [log] [blame]
Jason Monk0b5e52c2018-04-19 22:14:46 -04001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui;
16
17import static org.mockito.ArgumentMatchers.any;
18import static org.mockito.ArgumentMatchers.eq;
19import static org.mockito.Mockito.mock;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000020import static org.mockito.Mockito.never;
Jason Monk0b5e52c2018-04-19 22:14:46 -040021import static org.mockito.Mockito.spy;
22import static org.mockito.Mockito.timeout;
23import static org.mockito.Mockito.verify;
24
25import android.content.BroadcastReceiver;
26import android.content.ComponentName;
27import android.content.ContentProvider;
28import android.content.ContentResolver;
29import android.content.Context;
30import android.content.Intent;
31import android.content.IntentFilter;
32import android.net.Uri;
Jason Monk0b5e52c2018-04-19 22:14:46 -040033import android.testing.AndroidTestingRunner;
34
Brett Chabot84151d92019-02-27 15:37:59 -080035import androidx.test.filters.SmallTest;
36
Jason Monk0b5e52c2018-04-19 22:14:46 -040037import com.android.settingslib.SliceBroadcastRelay;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000038import com.android.systemui.broadcast.BroadcastDispatcher;
Jason Monk0b5e52c2018-04-19 22:14:46 -040039
Dave Mankoffa5d8a392019-10-10 12:21:09 -040040import org.junit.Before;
Jason Monk0b5e52c2018-04-19 22:14:46 -040041import org.junit.Test;
42import org.junit.runner.RunWith;
43import org.mockito.ArgumentCaptor;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000044import org.mockito.Mock;
45import org.mockito.MockitoAnnotations;
Jason Monk0b5e52c2018-04-19 22:14:46 -040046
47@RunWith(AndroidTestingRunner.class)
48@SmallTest
49public class SliceBroadcastRelayHandlerTest extends SysuiTestCase {
50
51 private static final String TEST_ACTION = "com.android.systemui.action.TEST_ACTION";
Dave Mankoffa5d8a392019-10-10 12:21:09 -040052 private SliceBroadcastRelayHandler mRelayHandler;
53 private Context mSpyContext;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000054 @Mock
55 private BroadcastDispatcher mBroadcastDispatcher;
56
Dave Mankoffa5d8a392019-10-10 12:21:09 -040057 @Before
58 public void setup() {
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000059 MockitoAnnotations.initMocks(this);
Dave Mankoffa5d8a392019-10-10 12:21:09 -040060 mSpyContext = spy(mContext);
61
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000062 mRelayHandler = new SliceBroadcastRelayHandler(mSpyContext, mBroadcastDispatcher);
Dave Mankoffa5d8a392019-10-10 12:21:09 -040063 }
Jason Monk0b5e52c2018-04-19 22:14:46 -040064
65 @Test
66 public void testRegister() {
67 Uri testUri = new Uri.Builder()
68 .scheme(ContentResolver.SCHEME_CONTENT)
69 .authority("something")
70 .path("test")
71 .build();
Jason Monk0b5e52c2018-04-19 22:14:46 -040072
73 Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
74 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
75 intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
76 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
77 IntentFilter value = new IntentFilter(TEST_ACTION);
78 intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
Matthew Fritze429d27d2018-05-02 19:43:39 -070079 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, testUri);
Jason Monk0b5e52c2018-04-19 22:14:46 -040080
Dave Mankoffa5d8a392019-10-10 12:21:09 -040081 mRelayHandler.handleIntent(intent);
82 verify(mSpyContext).registerReceiver(any(), eq(value));
Jason Monk0b5e52c2018-04-19 22:14:46 -040083 }
84
85 @Test
86 public void testUnregister() {
87 Uri testUri = new Uri.Builder()
88 .scheme(ContentResolver.SCHEME_CONTENT)
89 .authority("something")
90 .path("test")
91 .build();
Jason Monk0b5e52c2018-04-19 22:14:46 -040092
93 Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
94 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
95 intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
96 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
97 IntentFilter value = new IntentFilter(TEST_ACTION);
98 intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
99
Dave Mankoffa5d8a392019-10-10 12:21:09 -0400100 mRelayHandler.handleIntent(intent);
Jason Monk0b5e52c2018-04-19 22:14:46 -0400101 ArgumentCaptor<BroadcastReceiver> relay = ArgumentCaptor.forClass(BroadcastReceiver.class);
Dave Mankoffa5d8a392019-10-10 12:21:09 -0400102 verify(mSpyContext).registerReceiver(relay.capture(), eq(value));
Jason Monk0b5e52c2018-04-19 22:14:46 -0400103
104 intent = new Intent(SliceBroadcastRelay.ACTION_UNREGISTER);
105 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
Dave Mankoffa5d8a392019-10-10 12:21:09 -0400106 mRelayHandler.handleIntent(intent);
107 verify(mSpyContext).unregisterReceiver(eq(relay.getValue()));
Jason Monk0b5e52c2018-04-19 22:14:46 -0400108 }
109
110 @Test
Sunny Goyala21570c72019-04-19 15:05:41 -0700111 public void testUnregisterWithoutRegister() {
112 Uri testUri = new Uri.Builder()
113 .scheme(ContentResolver.SCHEME_CONTENT)
114 .authority("something")
115 .path("test")
116 .build();
Sunny Goyala21570c72019-04-19 15:05:41 -0700117
118 Intent intent = new Intent(SliceBroadcastRelay.ACTION_UNREGISTER);
119 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
Dave Mankoffa5d8a392019-10-10 12:21:09 -0400120 mRelayHandler.handleIntent(intent);
Sunny Goyala21570c72019-04-19 15:05:41 -0700121 // No crash
122 }
123
124 @Test
Jason Monk0b5e52c2018-04-19 22:14:46 -0400125 public void testRelay() {
126 Receiver.sReceiver = mock(BroadcastReceiver.class);
127 Uri testUri = new Uri.Builder()
128 .scheme(ContentResolver.SCHEME_CONTENT)
129 .authority("something")
130 .path("test")
131 .build();
Jason Monk0b5e52c2018-04-19 22:14:46 -0400132 Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
133 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
134 intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
135 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
136 IntentFilter value = new IntentFilter(TEST_ACTION);
137 intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
138
Dave Mankoffa5d8a392019-10-10 12:21:09 -0400139 mRelayHandler.handleIntent(intent);
Jason Monk0b5e52c2018-04-19 22:14:46 -0400140 ArgumentCaptor<BroadcastReceiver> relay = ArgumentCaptor.forClass(BroadcastReceiver.class);
Dave Mankoffa5d8a392019-10-10 12:21:09 -0400141 verify(mSpyContext).registerReceiver(relay.capture(), eq(value));
142 relay.getValue().onReceive(mSpyContext, new Intent(TEST_ACTION));
Jason Monk0b5e52c2018-04-19 22:14:46 -0400143
144 verify(Receiver.sReceiver, timeout(2000)).onReceive(any(), any());
145 }
146
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000147 @Test
148 public void testRegisteredWithDispatcher() {
149 mRelayHandler.start();
150
151 verify(mBroadcastDispatcher)
152 .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
153 verify(mSpyContext, never())
154 .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
155 }
156
Jason Monk0b5e52c2018-04-19 22:14:46 -0400157 public static class Receiver extends BroadcastReceiver {
158 private static BroadcastReceiver sReceiver;
159
160 @Override
161 public void onReceive(Context context, Intent intent) {
162 if (sReceiver != null) sReceiver.onReceive(context, intent);
163 }
164 }
165
166}