Home | History | Annotate | Download | only in systemui
      1 /*
      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 
     15 package com.android.systemui;
     16 
     17 import static org.mockito.ArgumentMatchers.any;
     18 import static org.mockito.ArgumentMatchers.eq;
     19 import static org.mockito.Mockito.mock;
     20 import static org.mockito.Mockito.spy;
     21 import static org.mockito.Mockito.timeout;
     22 import static org.mockito.Mockito.verify;
     23 
     24 import android.content.BroadcastReceiver;
     25 import android.content.ComponentName;
     26 import android.content.ContentProvider;
     27 import android.content.ContentResolver;
     28 import android.content.Context;
     29 import android.content.Intent;
     30 import android.content.IntentFilter;
     31 import android.net.Uri;
     32 import android.testing.AndroidTestingRunner;
     33 
     34 import androidx.test.filters.SmallTest;
     35 
     36 import com.android.settingslib.SliceBroadcastRelay;
     37 
     38 import org.junit.Test;
     39 import org.junit.runner.RunWith;
     40 import org.mockito.ArgumentCaptor;
     41 
     42 @RunWith(AndroidTestingRunner.class)
     43 @SmallTest
     44 public 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);
     64         intent.putExtra(SliceBroadcastRelay.EXTRA_URI, testUri);
     65 
     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 testUnregisterWithoutRegister() {
     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_UNREGISTER);
    108         intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
    109         relayHandler.handleIntent(intent);
    110         // No crash
    111     }
    112 
    113     @Test
    114     public void testRelay() {
    115         Receiver.sReceiver = mock(BroadcastReceiver.class);
    116         Uri testUri = new Uri.Builder()
    117                 .scheme(ContentResolver.SCHEME_CONTENT)
    118                 .authority("something")
    119                 .path("test")
    120                 .build();
    121         SliceBroadcastRelayHandler relayHandler = new SliceBroadcastRelayHandler();
    122         relayHandler.mContext = spy(mContext);
    123 
    124         Intent intent = new Intent(SliceBroadcastRelay.ACTION_REGISTER);
    125         intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0));
    126         intent.putExtra(SliceBroadcastRelay.EXTRA_RECEIVER,
    127                 new ComponentName(mContext.getPackageName(), Receiver.class.getName()));
    128         IntentFilter value = new IntentFilter(TEST_ACTION);
    129         intent.putExtra(SliceBroadcastRelay.EXTRA_FILTER, value);
    130 
    131         relayHandler.handleIntent(intent);
    132         ArgumentCaptor<BroadcastReceiver> relay = ArgumentCaptor.forClass(BroadcastReceiver.class);
    133         verify(relayHandler.mContext).registerReceiver(relay.capture(), eq(value));
    134         relay.getValue().onReceive(relayHandler.mContext, new Intent(TEST_ACTION));
    135 
    136         verify(Receiver.sReceiver, timeout(2000)).onReceive(any(), any());
    137     }
    138 
    139     public static class Receiver extends BroadcastReceiver {
    140         private static BroadcastReceiver sReceiver;
    141 
    142         @Override
    143         public void onReceive(Context context, Intent intent) {
    144             if (sReceiver != null) sReceiver.onReceive(context, intent);
    145         }
    146     }
    147 
    148 }