Home | History | Annotate | Download | only in policy
      1 /*
      2  * Copyright (C) 2015 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 package com.android.systemui.statusbar.policy;
     17 
     18 import android.os.HandlerThread;
     19 import android.support.test.runner.AndroidJUnit4;
     20 import android.telephony.SubscriptionInfo;
     21 import android.test.suitebuilder.annotation.SmallTest;
     22 import com.android.systemui.R;
     23 import com.android.systemui.SysuiTestCase;
     24 import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
     25 import com.android.systemui.statusbar.policy.NetworkController.IconState;
     26 import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
     27 import java.util.ArrayList;
     28 import java.util.List;
     29 import org.junit.Before;
     30 import org.junit.runner.RunWith;
     31 import org.junit.Test;
     32 import org.mockito.ArgumentCaptor;
     33 import org.mockito.Mock;
     34 import org.mockito.Mockito;
     35 import org.mockito.MockitoAnnotations;
     36 
     37 import static junit.framework.Assert.assertTrue;
     38 import static junit.framework.Assert.assertEquals;
     39 
     40 import static org.mockito.Matchers.eq;
     41 
     42 @SmallTest
     43 @RunWith(AndroidJUnit4.class)
     44 public class CallbackHandlerTest extends SysuiTestCase {
     45 
     46     private CallbackHandler mHandler;
     47     private HandlerThread mHandlerThread;
     48 
     49     @Mock
     50     private EmergencyListener mEmengencyListener;
     51     @Mock
     52     private SignalCallback mSignalCallback;
     53 
     54     @Before
     55     public void setUp() throws Exception {
     56         mHandlerThread = new HandlerThread("TestThread");
     57         mHandlerThread.start();
     58         mHandler = new CallbackHandler(mHandlerThread.getLooper());
     59 
     60         MockitoAnnotations.initMocks(this);
     61         mHandler.setListening(mEmengencyListener, true);
     62         mHandler.setListening(mSignalCallback, true);
     63     }
     64 
     65     @Test
     66     public void testEmergencyListener() {
     67         mHandler.setEmergencyCallsOnly(true);
     68         waitForCallbacks();
     69 
     70         ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
     71         Mockito.verify(mEmengencyListener).setEmergencyCallsOnly(captor.capture());
     72         assertTrue(captor.getValue());
     73     }
     74 
     75     @Test
     76     public void testSignalCallback_setWifiIndicators() {
     77         boolean enabled = true;
     78         IconState status = new IconState(true, 0, "");
     79         IconState qs = new IconState(true, 1, "");
     80         boolean in = true;
     81         boolean out = true;
     82         String description = "Test";
     83         mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true);
     84         waitForCallbacks();
     85 
     86         ArgumentCaptor<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class);
     87         ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
     88         ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
     89         ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
     90         ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
     91         ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
     92         ArgumentCaptor<Boolean> isTransient = ArgumentCaptor.forClass(Boolean.class);
     93         Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(),
     94                 statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(),
     95                 descArg.capture(), isTransient.capture());
     96         assertEquals(enabled, (boolean) enableArg.getValue());
     97         assertEquals(status, statusArg.getValue());
     98         assertEquals(qs, qsArg.getValue());
     99         assertEquals(in, (boolean) inArg.getValue());
    100         assertEquals(out, (boolean) outArg.getValue());
    101         assertEquals(description, descArg.getValue());
    102         assertTrue(isTransient.getValue());
    103     }
    104 
    105     @Test
    106     public void testSignalCallback_setMobileDataIndicators() {
    107         IconState status = new IconState(true, 0, "");
    108         IconState qs = new IconState(true, 1, "");
    109         boolean in = true;
    110         boolean out = true;
    111         String typeDescription = "Test 1";
    112         String description = "Test 2";
    113         int type = R.drawable.stat_sys_data_fully_connected_1x;
    114         int qsType = R.drawable.ic_qs_signal_1x;
    115         boolean wide = true;
    116         int subId = 5;
    117         boolean roaming = true;
    118         mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
    119                 description, wide, subId, roaming);
    120         waitForCallbacks();
    121 
    122         ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
    123         ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
    124         ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
    125         ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
    126         ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
    127         ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
    128         ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class);
    129         ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
    130         ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
    131         ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
    132         Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
    133                 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
    134                 outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(),
    135                 subIdArg.capture(), eq(roaming));
    136         assertEquals(status, statusArg.getValue());
    137         assertEquals(qs, qsArg.getValue());
    138         assertEquals(type, (int) typeIconArg.getValue());
    139         assertEquals(qsType, (int) qsTypeIconArg.getValue());
    140         assertEquals(in, (boolean) inArg.getValue());
    141         assertEquals(out, (boolean) outArg.getValue());
    142         assertEquals(typeDescription, typeContentArg.getValue());
    143         assertEquals(description, descArg.getValue());
    144         assertEquals(wide, (boolean) wideArg.getValue());
    145         assertEquals(subId, (int) subIdArg.getValue());
    146     }
    147 
    148     @SuppressWarnings("unchecked")
    149     @Test
    150     public void testSignalCallback_setSubs() {
    151         List<SubscriptionInfo> subs = new ArrayList<>();
    152         mHandler.setSubs(subs);
    153         waitForCallbacks();
    154 
    155         ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class);
    156         Mockito.verify(mSignalCallback).setSubs(subsArg.capture());
    157         assertTrue(subs == subsArg.getValue());
    158     }
    159 
    160     @Test
    161     public void testSignalCallback_setNoSims() {
    162         boolean noSims = true;
    163         mHandler.setNoSims(noSims);
    164         waitForCallbacks();
    165 
    166         ArgumentCaptor<Boolean> noSimsArg = ArgumentCaptor.forClass(Boolean.class);
    167         Mockito.verify(mSignalCallback).setNoSims(noSimsArg.capture());
    168         assertEquals(noSims, (boolean) noSimsArg.getValue());
    169     }
    170 
    171     @Test
    172     public void testSignalCallback_setEthernetIndicators() {
    173         IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description");
    174         mHandler.setEthernetIndicators(state);
    175         waitForCallbacks();
    176 
    177         ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
    178         Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture());
    179         assertEquals(state, iconArg.getValue());
    180     }
    181 
    182     @Test
    183     public void testSignalCallback_setIsAirplaneMode() {
    184         IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description");
    185         mHandler.setIsAirplaneMode(state);
    186         waitForCallbacks();
    187 
    188         ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
    189         Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture());
    190         assertEquals(state, iconArg.getValue());
    191     }
    192 
    193     private void waitForCallbacks() {
    194         mHandlerThread.quitSafely();
    195         try {
    196             mHandlerThread.join();
    197         } catch (InterruptedException e) {
    198         }
    199     }
    200 
    201 }
    202