1 /* 2 * Copyright (C) 2016 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 17 package com.android.settings.datausage; 18 19 import static com.google.common.truth.Truth.assertThat; 20 import static org.mockito.Matchers.anyInt; 21 import static org.mockito.Matchers.anyObject; 22 import static org.mockito.Matchers.anyString; 23 import static org.mockito.Matchers.endsWith; 24 import static org.mockito.Mockito.doNothing; 25 import static org.mockito.Mockito.doReturn; 26 import static org.mockito.Mockito.never; 27 import static org.mockito.Mockito.spy; 28 import static org.mockito.Mockito.verify; 29 30 import android.app.Activity; 31 import android.content.Context; 32 import android.net.NetworkPolicyManager; 33 34 import com.android.settings.dashboard.SummaryLoader; 35 import com.android.settings.testutils.SettingsRobolectricTestRunner; 36 import com.android.settings.testutils.shadow.SettingsShadowResources; 37 import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl; 38 import com.android.settings.testutils.shadow.ShadowDashboardFragment; 39 import com.android.settings.testutils.shadow.ShadowDataUsageUtils; 40 import com.android.settings.testutils.shadow.ShadowUtils; 41 42 import org.junit.Before; 43 import org.junit.Test; 44 import org.junit.runner.RunWith; 45 import org.mockito.Mock; 46 import org.mockito.MockitoAnnotations; 47 import org.robolectric.Robolectric; 48 import org.robolectric.annotation.Config; 49 import org.robolectric.shadows.ShadowApplication; 50 51 @Config(shadows = { 52 SettingsShadowResourcesImpl.class, 53 SettingsShadowResources.SettingsShadowTheme.class, 54 ShadowUtils.class, 55 ShadowDataUsageUtils.class, 56 ShadowDashboardFragment.class 57 }) 58 @RunWith(SettingsRobolectricTestRunner.class) 59 public class DataUsageSummaryTest { 60 61 @Mock 62 private SummaryLoader mSummaryLoader; 63 @Mock 64 private NetworkPolicyManager mNetworkPolicyManager; 65 private Context mContext; 66 private Activity mActivity; 67 private SummaryLoader.SummaryProvider mSummaryProvider; 68 69 /** 70 * This set up is contrived to get a passing test so that the build doesn't block without tests. 71 * These tests should be updated as code gets refactored to improve testability. 72 */ 73 74 @Before setUp()75 public void setUp() { 76 MockitoAnnotations.initMocks(this); 77 ShadowApplication shadowContext = ShadowApplication.getInstance(); 78 shadowContext.setSystemService(Context.NETWORK_POLICY_SERVICE, mNetworkPolicyManager); 79 80 mContext = shadowContext.getApplicationContext(); 81 mActivity = spy(Robolectric.buildActivity(Activity.class).get()); 82 83 mSummaryProvider = DataUsageSummary.SUMMARY_PROVIDER_FACTORY 84 .createSummaryProvider(mActivity, mSummaryLoader); 85 } 86 87 @Test formatUsage_shouldLookLikeFormatFileSize()88 public void formatUsage_shouldLookLikeFormatFileSize() { 89 SettingsShadowResources.overrideResource(com.android.internal.R.string.fileSizeSuffix, 90 "%1$s %2$s"); 91 final long usage = 2147483648L; // 2GB 92 final String formattedUsage = 93 DataUsageSummary.formatUsage(mContext, "^1", usage).toString(); 94 final CharSequence formattedInIECUnit = DataUsageUtils.formatDataUsage(mContext, usage); 95 assertThat(formattedUsage).isEqualTo(formattedInIECUnit); 96 } 97 98 @Test setListening_shouldBlankSummaryWithNoSim()99 public void setListening_shouldBlankSummaryWithNoSim() { 100 ShadowDataUsageUtils.HAS_SIM = false; 101 mSummaryProvider.setListening(true); 102 verify(mSummaryLoader).setSummary(mSummaryProvider, null); 103 } 104 105 @Test setListening_shouldSetSummaryWithSim()106 public void setListening_shouldSetSummaryWithSim() { 107 ShadowDataUsageUtils.HAS_SIM = true; 108 mSummaryProvider.setListening(true); 109 verify(mSummaryLoader).setSummary(anyObject(), endsWith(" of data used")); 110 } 111 112 @Test configuration_withSim_shouldShowMobileAndWifi()113 public void configuration_withSim_shouldShowMobileAndWifi() { 114 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; 115 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 116 ShadowDataUsageUtils.DEFAULT_SUBSCRIPTION_ID = 1; 117 ShadowDataUsageUtils.HAS_SIM = true; 118 119 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 120 doReturn(mContext).when(dataUsageSummary).getContext(); 121 122 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 123 doNothing().when(dataUsageSummary).addWifiSection(); 124 doNothing().when(dataUsageSummary).addMobileSection(1); 125 126 dataUsageSummary.onCreate(null); 127 128 verify(dataUsageSummary).addWifiSection(); 129 verify(dataUsageSummary).addMobileSection(anyInt()); 130 } 131 132 @Test configuration_withoutSim_shouldShowWifiSectionOnly()133 public void configuration_withoutSim_shouldShowWifiSectionOnly() { 134 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; 135 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 136 ShadowDataUsageUtils.HAS_SIM = false; 137 138 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 139 doReturn(mContext).when(dataUsageSummary).getContext(); 140 141 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 142 doNothing().when(dataUsageSummary).addWifiSection(); 143 doNothing().when(dataUsageSummary).addMobileSection(1); 144 145 dataUsageSummary.onCreate(null); 146 147 verify(dataUsageSummary).addWifiSection(); 148 verify(dataUsageSummary, never()).addMobileSection(anyInt()); 149 } 150 151 @Test configuration_withoutMobile_shouldShowWifiSectionOnly()152 public void configuration_withoutMobile_shouldShowWifiSectionOnly() { 153 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = false; 154 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 155 ShadowDataUsageUtils.HAS_SIM = false; 156 157 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 158 doReturn(mContext).when(dataUsageSummary).getContext(); 159 160 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 161 doNothing().when(dataUsageSummary).addWifiSection(); 162 doNothing().when(dataUsageSummary).addMobileSection(1); 163 164 dataUsageSummary.onCreate(null); 165 166 verify(dataUsageSummary).addWifiSection(); 167 verify(dataUsageSummary, never()).addMobileSection(anyInt()); 168 } 169 } 170