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