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