blob: c6e85c3f81a061ebb4dac35ab80f3e4cd4978a23 [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;
20import static org.mockito.Mockito.spy;
21import static org.mockito.Mockito.timeout;
22import static org.mockito.Mockito.verify;
23
24import android.content.BroadcastReceiver;
25import android.content.ComponentName;
26import android.content.ContentProvider;
27import android.content.ContentResolver;
28import android.content.Context;
29import android.content.Intent;
30import android.content.IntentFilter;
31import android.net.Uri;
Jason Monk0b5e52c2018-04-19 22:14:46 -040032import android.testing.AndroidTestingRunner;
33
Brett Chabot84151d92019-02-27 15:37:59 -080034import androidx.test.filters.SmallTest;
35
Jason Monk0b5e52c2018-04-19 22:14:46 -040036import com.android.settingslib.SliceBroadcastRelay;
37
38import org.junit.Test;
39import org.junit.runner.RunWith;
40import org.mockito.ArgumentCaptor;
41
42@RunWith(AndroidTestingRunner.class)
43@SmallTest
44public class SliceBroadcastRelayHandlerTest extends SysuiTestCase {
45
46 private static final String TEST_ACTION = "com.android.systemui.action.TEST_ACTION";
47
48 @Test
49 public void testRegister() {
50 Uri testUri = new Uri.Builder()
51 .scheme(ContentResolver.SCHEME_CONTENT)
52 .authority("something")
53 .path("test")
54 .build();
55 SliceBroadcastRelayHandler relayHandler = new SliceBroadcastRelayHandler();
56 relayHandler.mContext = spy(mContext);
57
58 Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
59 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
60 intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
61 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
62 IntentFilter value = new IntentFilter(TEST_ACTION);
63 intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
Matthew Fritze429d27d2018-05-02 19:43:39 -070064 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, testUri);
Jason Monk0b5e52c2018-04-19 22:14:46 -040065
66 relayHandler.handleIntent(intent);
67 verify(relayHandler.mContext).registerReceiver(any(), eq(value));
68 }
69
70 @Test
71 public void testUnregister() {
72 Uri testUri = new Uri.Builder()
73 .scheme(ContentResolver.SCHEME_CONTENT)
74 .authority("something")
75 .path("test")
76 .build();
77 SliceBroadcastRelayHandler relayHandler = new SliceBroadcastRelayHandler();
78 relayHandler.mContext = spy(mContext);
79
80 Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
81 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
82 intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
83 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
84 IntentFilter value = new IntentFilter(TEST_ACTION);
85 intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
86
87 relayHandler.handleIntent(intent);
88 ArgumentCaptor<BroadcastReceiver> relay = ArgumentCaptor.forClass(BroadcastReceiver.class);
89 verify(relayHandler.mContext).registerReceiver(relay.capture(), eq(value));
90
91 intent = new Intent(SliceBroadcastRelay.ACTION_UNREGISTER);
92 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
93 relayHandler.handleIntent(intent);
94 verify(relayHandler.mContext).unregisterReceiver(eq(relay.getValue()));
95 }
96
97 @Test
98 public void testRelay() {
99 Receiver.sReceiver = mock(BroadcastReceiver.class);
100 Uri testUri = new Uri.Builder()
101 .scheme(ContentResolver.SCHEME_CONTENT)
102 .authority("something")
103 .path("test")
104 .build();
105 SliceBroadcastRelayHandler relayHandler = new SliceBroadcastRelayHandler();
106 relayHandler.mContext = spy(mContext);
107
108 Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
109 intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
110 intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
111 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
112 IntentFilter value = new IntentFilter(TEST_ACTION);
113 intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
114
115 relayHandler.handleIntent(intent);
116 ArgumentCaptor<BroadcastReceiver> relay = ArgumentCaptor.forClass(BroadcastReceiver.class);
117 verify(relayHandler.mContext).registerReceiver(relay.capture(), eq(value));
118 relay.getValue().onReceive(relayHandler.mContext, new Intent(TEST_ACTION));
119
120 verify(Receiver.sReceiver, timeout(2000)).onReceive(any(), any());
121 }
122
123 public static class Receiver extends BroadcastReceiver {
124 private static BroadcastReceiver sReceiver;
125
126 @Override
127 public void onReceive(Context context, Intent intent) {
128 if (sReceiver != null) sReceiver.onReceive(context, intent);
129 }
130 }
131
132}