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 17package com.android.settingslib.deviceinfo; 18 19import static com.google.common.truth.Truth.assertThat; 20import static org.robolectric.shadow.api.Shadow.extract; 21 22import android.net.ConnectivityManager; 23import android.os.UserManager; 24import android.util.SparseBooleanArray; 25 26import com.android.settingslib.SettingsLibRobolectricTestRunner; 27 28import org.junit.Before; 29import org.junit.Test; 30import org.junit.runner.RunWith; 31import org.robolectric.RuntimeEnvironment; 32import org.robolectric.annotation.Config; 33import org.robolectric.annotation.Implementation; 34import org.robolectric.annotation.Implements; 35 36@RunWith(SettingsLibRobolectricTestRunner.class) 37@Config(shadows = {SimStatusImeiInfoPreferenceControllerTest.ShadowUserManager.class, 38 SimStatusImeiInfoPreferenceControllerTest.ShadowConnectivityManager.class}) 39public class SimStatusImeiInfoPreferenceControllerTest { 40 41 private AbstractSimStatusImeiInfoPreferenceController mController; 42 43 @Before 44 public void setUp() { 45 mController = new AbstractSimStatusImeiInfoPreferenceController( 46 RuntimeEnvironment.application) { 47 @Override 48 public String getPreferenceKey() { 49 return null; 50 } 51 }; 52 } 53 54 @Test 55 public void testIsAvailable_isAdminAndHasMobile_shouldReturnTrue() { 56 ShadowUserManager userManager = 57 extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); 58 userManager.setIsAdminUser(true); 59 ShadowConnectivityManager connectivityManager = 60 extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class)); 61 connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true); 62 63 assertThat(mController.isAvailable()).isTrue(); 64 } 65 66 @Test 67 public void testIsAvailable_isAdminButNoMobile_shouldReturnFalse() { 68 ShadowUserManager userManager = 69 extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); 70 userManager.setIsAdminUser(true); 71 ShadowConnectivityManager connectivityManager = 72 extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class)); 73 connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false); 74 75 assertThat(mController.isAvailable()).isFalse(); 76 } 77 78 @Test 79 public void testIsAvailable_isNotAdmin_shouldReturnFalse() { 80 ShadowUserManager userManager = 81 extract(RuntimeEnvironment.application.getSystemService(UserManager.class)); 82 userManager.setIsAdminUser(false); 83 84 assertThat(mController.isAvailable()).isFalse(); 85 } 86 87 @Implements(UserManager.class) 88 public static class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager { 89 90 private boolean mAdminUser; 91 92 public void setIsAdminUser(boolean isAdminUser) { 93 mAdminUser = isAdminUser; 94 } 95 96 @Implementation 97 public boolean isAdminUser() { 98 return mAdminUser; 99 } 100 } 101 102 @Implements(ConnectivityManager.class) 103 public static class ShadowConnectivityManager 104 extends org.robolectric.shadows.ShadowConnectivityManager { 105 106 private final SparseBooleanArray mSupportedNetworkTypes = new SparseBooleanArray(); 107 108 public void setNetworkSupported(int networkType, boolean supported) { 109 mSupportedNetworkTypes.put(networkType, supported); 110 } 111 112 @Implementation 113 public boolean isNetworkSupported(int networkType) { 114 return mSupportedNetworkTypes.get(networkType); 115 } 116 } 117} 118