1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settingslib.deviceinfo; 18 19 import static com.google.common.truth.Truth.assertWithMessage; 20 import static org.mockito.ArgumentMatchers.anyString; 21 import static org.mockito.ArgumentMatchers.nullable; 22 import static org.mockito.Mockito.doReturn; 23 import static org.mockito.Mockito.spy; 24 import static org.mockito.Mockito.times; 25 import static org.mockito.Mockito.verify; 26 27 import android.content.BroadcastReceiver; 28 import android.content.Context; 29 import android.content.IntentFilter; 30 import android.os.Handler; 31 32 import com.android.settingslib.SettingsLibRobolectricTestRunner; 33 import com.android.settingslib.core.lifecycle.Lifecycle; 34 35 import org.junit.Before; 36 import org.junit.Test; 37 import org.junit.runner.RunWith; 38 import org.mockito.ArgumentCaptor; 39 import org.mockito.Mock; 40 import org.mockito.MockitoAnnotations; 41 42 @RunWith(SettingsLibRobolectricTestRunner.class) 43 public class ConnectivityPreferenceControllerTest { 44 @Mock 45 private Context mContext; 46 47 @Mock 48 private Lifecycle mLifecycle; 49 50 @Before 51 public void setUp() { 52 MockitoAnnotations.initMocks(this); 53 } 54 55 @Test 56 public void testBroadcastReceiver() { 57 final AbstractConnectivityPreferenceController preferenceController = 58 spy(new ConcreteConnectivityPreferenceController(mContext, mLifecycle)); 59 60 final ArgumentCaptor<BroadcastReceiver> receiverArgumentCaptor = 61 ArgumentCaptor.forClass(BroadcastReceiver.class); 62 final ArgumentCaptor<IntentFilter> filterArgumentCaptor = 63 ArgumentCaptor.forClass(IntentFilter.class); 64 65 doReturn(new String[] {"Filter1", "Filter2"}) 66 .when(preferenceController).getConnectivityIntents(); 67 68 preferenceController.onStart(); 69 70 verify(mContext, times(1)) 71 .registerReceiver(receiverArgumentCaptor.capture(), 72 filterArgumentCaptor.capture(), 73 anyString(), nullable(Handler.class)); 74 75 final BroadcastReceiver receiver = receiverArgumentCaptor.getValue(); 76 final IntentFilter filter = filterArgumentCaptor.getValue(); 77 78 assertWithMessage("intent filter should match 'Filter1'") 79 .that(filter.matchAction("Filter1")) 80 .isTrue(); 81 assertWithMessage("intent filter should match 'Filter2'") 82 .that(filter.matchAction("Filter2")) 83 .isTrue(); 84 85 preferenceController.onStop(); 86 87 verify(mContext, times(1)).unregisterReceiver(receiver); 88 } 89 90 private static class ConcreteConnectivityPreferenceController 91 extends AbstractConnectivityPreferenceController { 92 93 94 public ConcreteConnectivityPreferenceController(Context context, 95 Lifecycle lifecycle) { 96 super(context, lifecycle); 97 } 98 99 @Override 100 public boolean isAvailable() { 101 return false; 102 } 103 104 @Override 105 public String getPreferenceKey() { 106 return null; 107 } 108 109 @Override 110 protected String[] getConnectivityIntents() { 111 return new String[0]; 112 } 113 114 @Override 115 protected void updateConnectivity() { 116 117 } 118 } 119 } 120