Home | History | Annotate | Download | only in deviceinfo
      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