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.settings.datausage;
18
19import static com.google.common.truth.Truth.assertThat;
20import static org.mockito.Matchers.anyInt;
21import static org.mockito.Mockito.when;
22
23import android.content.Context;
24import android.net.ConnectivityManager;
25import android.telephony.TelephonyManager;
26import android.util.DataUnit;
27
28import com.android.settings.testutils.SettingsRobolectricTestRunner;
29
30import org.junit.Before;
31import org.junit.Test;
32import org.junit.runner.RunWith;
33import org.mockito.Mock;
34import org.mockito.MockitoAnnotations;
35import org.robolectric.shadows.ShadowApplication;
36
37@RunWith(SettingsRobolectricTestRunner.class)
38public final class DataUsageUtilsTest {
39
40    @Mock
41    private ConnectivityManager mManager;
42    @Mock
43    private TelephonyManager mTelephonyManager;
44    private Context mContext;
45
46    @Before
47    public void setUp() {
48        MockitoAnnotations.initMocks(this);
49        ShadowApplication shadowContext = ShadowApplication.getInstance();
50        mContext = shadowContext.getApplicationContext();
51        shadowContext.setSystemService(Context.CONNECTIVITY_SERVICE, mManager);
52        shadowContext.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager);
53    }
54
55    @Test
56    public void mobileDataStatus_whenNetworkIsSupported() {
57        when(mManager.isNetworkSupported(anyInt())).thenReturn(true);
58        boolean hasMobileData = DataUsageUtils.hasMobileData(mContext);
59        assertThat(hasMobileData).isTrue();
60    }
61
62    @Test
63    public void mobileDataStatus_whenNetworkIsNotSupported() {
64        when(mManager.isNetworkSupported(anyInt())).thenReturn(false);
65        boolean hasMobileData = DataUsageUtils.hasMobileData(mContext);
66        assertThat(hasMobileData).isFalse();
67    }
68
69    @Test
70    public void hasSim_simStateReady() {
71        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
72        boolean hasSim = DataUsageUtils.hasSim(mContext);
73        assertThat(hasSim).isTrue();
74    }
75
76    @Test
77    public void hasSim_simStateMissing() {
78        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
79        boolean hasSim = DataUsageUtils.hasSim(mContext);
80        assertThat(hasSim).isFalse();
81    }
82
83    @Test
84    public void formatDataUsage_useIECUnit() {
85        final CharSequence formattedDataUsage = DataUsageUtils.formatDataUsage(
86                mContext, DataUnit.GIBIBYTES.toBytes(1));
87
88        assertThat(formattedDataUsage).isEqualTo("1.00 GB");
89    }
90}
91