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