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 */ 16package com.android.systemui.statusbar.policy; 17 18import android.os.HandlerThread; 19import android.support.test.runner.AndroidJUnit4; 20import android.telephony.SubscriptionInfo; 21import android.test.suitebuilder.annotation.SmallTest; 22import com.android.systemui.R; 23import com.android.systemui.SysuiTestCase; 24import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; 25import com.android.systemui.statusbar.policy.NetworkController.IconState; 26import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; 27import java.util.ArrayList; 28import java.util.List; 29import org.junit.Before; 30import org.junit.runner.RunWith; 31import org.junit.Test; 32import org.mockito.ArgumentCaptor; 33import org.mockito.Mock; 34import org.mockito.Mockito; 35import org.mockito.MockitoAnnotations; 36 37import static junit.framework.Assert.assertTrue; 38import static junit.framework.Assert.assertEquals; 39 40import static org.mockito.Matchers.eq; 41 42@SmallTest 43@RunWith(AndroidJUnit4.class) 44public 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 String secondaryLabel = "Secondary label"; 84 mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true, secondaryLabel); 85 waitForCallbacks(); 86 87 ArgumentCaptor<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class); 88 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class); 89 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class); 90 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); 91 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); 92 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); 93 ArgumentCaptor<Boolean> isTransient = ArgumentCaptor.forClass(Boolean.class); 94 ArgumentCaptor<String> secondary = ArgumentCaptor.forClass(String.class); 95 Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(), 96 statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(), 97 descArg.capture(), isTransient.capture(), secondary.capture()); 98 assertEquals(enabled, (boolean) enableArg.getValue()); 99 assertEquals(status, statusArg.getValue()); 100 assertEquals(qs, qsArg.getValue()); 101 assertEquals(in, (boolean) inArg.getValue()); 102 assertEquals(out, (boolean) outArg.getValue()); 103 assertEquals(description, descArg.getValue()); 104 assertTrue(isTransient.getValue()); 105 assertEquals(secondaryLabel, secondary.getValue()); 106 } 107 108 @Test 109 public void testSignalCallback_setMobileDataIndicators() { 110 IconState status = new IconState(true, 0, ""); 111 IconState qs = new IconState(true, 1, ""); 112 boolean in = true; 113 boolean out = true; 114 String typeDescription = "Test 1"; 115 String description = "Test 2"; 116 int type = TelephonyIcons.ICON_1X; 117 int qsType = TelephonyIcons.ICON_1X; 118 boolean wide = true; 119 int subId = 5; 120 boolean roaming = true; 121 mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription, 122 description, wide, subId, roaming); 123 waitForCallbacks(); 124 125 ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class); 126 ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class); 127 ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class); 128 ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class); 129 ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); 130 ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); 131 ArgumentCaptor<String> typeContentArg = ArgumentCaptor.forClass(String.class); 132 ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); 133 ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class); 134 ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class); 135 Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(), 136 qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(), 137 outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(), 138 subIdArg.capture(), eq(roaming)); 139 assertEquals(status, statusArg.getValue()); 140 assertEquals(qs, qsArg.getValue()); 141 assertEquals(type, (int) typeIconArg.getValue()); 142 assertEquals(qsType, (int) qsTypeIconArg.getValue()); 143 assertEquals(in, (boolean) inArg.getValue()); 144 assertEquals(out, (boolean) outArg.getValue()); 145 assertEquals(typeDescription, typeContentArg.getValue()); 146 assertEquals(description, descArg.getValue()); 147 assertEquals(wide, (boolean) wideArg.getValue()); 148 assertEquals(subId, (int) subIdArg.getValue()); 149 } 150 151 @SuppressWarnings("unchecked") 152 @Test 153 public void testSignalCallback_setSubs() { 154 List<SubscriptionInfo> subs = new ArrayList<>(); 155 mHandler.setSubs(subs); 156 waitForCallbacks(); 157 158 ArgumentCaptor<ArrayList> subsArg = ArgumentCaptor.forClass(ArrayList.class); 159 Mockito.verify(mSignalCallback).setSubs(subsArg.capture()); 160 assertTrue(subs == subsArg.getValue()); 161 } 162 163 @Test 164 public void testSignalCallback_setNoSims() { 165 boolean noSims = true; 166 boolean simDetected = false; 167 mHandler.setNoSims(noSims, simDetected); 168 waitForCallbacks(); 169 170 Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected)); 171 } 172 173 @Test 174 public void testSignalCallback_setEthernetIndicators() { 175 IconState state = new IconState(true, R.drawable.stat_sys_ethernet, "Test Description"); 176 mHandler.setEthernetIndicators(state); 177 waitForCallbacks(); 178 179 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 180 Mockito.verify(mSignalCallback).setEthernetIndicators(iconArg.capture()); 181 assertEquals(state, iconArg.getValue()); 182 } 183 184 @Test 185 public void testSignalCallback_setIsAirplaneMode() { 186 IconState state = new IconState(true, R.drawable.stat_sys_airplane_mode, "Test Description"); 187 mHandler.setIsAirplaneMode(state); 188 waitForCallbacks(); 189 190 ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 191 Mockito.verify(mSignalCallback).setIsAirplaneMode(iconArg.capture()); 192 assertEquals(state, iconArg.getValue()); 193 } 194 195 private void waitForCallbacks() { 196 mHandlerThread.quitSafely(); 197 try { 198 mHandlerThread.join(); 199 } catch (InterruptedException e) { 200 } 201 } 202 203} 204