• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.settings;
2 
3 import static com.google.common.truth.Truth.assertThat;
4 
5 import static org.mockito.Matchers.anyString;
6 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
7 import static org.mockito.Mockito.mock;
8 import static org.mockito.Mockito.spy;
9 import static org.mockito.Mockito.when;
10 
11 import android.content.Context;
12 import android.content.pm.ApplicationInfo;
13 import android.net.ConnectivityManager;
14 import android.net.LinkAddress;
15 import android.net.LinkProperties;
16 import android.net.Network;
17 import android.net.wifi.WifiManager;
18 import android.os.Bundle;
19 import android.os.storage.DiskInfo;
20 import android.os.storage.StorageManager;
21 import android.os.storage.VolumeInfo;
22 import android.text.SpannableString;
23 import android.text.SpannableStringBuilder;
24 import android.text.format.DateUtils;
25 import android.text.style.TtsSpan;
26 
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.mockito.Mock;
31 import org.mockito.MockitoAnnotations;
32 import org.robolectric.RuntimeEnvironment;
33 import org.robolectric.annotation.Config;
34 
35 import java.net.InetAddress;
36 
37 @RunWith(SettingsRobolectricTestRunner.class)
38 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
39 public class UtilsTest {
40 
41     private static final String TIME_DESCRIPTION = "1 day 20 hours 30 minutes";
42     private Context mContext;
43     @Mock
44     private WifiManager wifiManager;
45     @Mock
46     private Network network;
47     @Mock
48     private ConnectivityManager connectivityManager;
49 
50     @Before
setUp()51     public void setUp() {
52         MockitoAnnotations.initMocks(this);
53 
54         mContext = spy(RuntimeEnvironment.application);
55         when(mContext.getSystemService(WifiManager.class)).thenReturn(wifiManager);
56         when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
57                 .thenReturn(connectivityManager);
58     }
59 
60     @Test
testGetWifiIpAddresses_succeeds()61     public void testGetWifiIpAddresses_succeeds() throws Exception {
62         when(wifiManager.getCurrentNetwork()).thenReturn(network);
63         LinkAddress address = new LinkAddress(InetAddress.getByName("127.0.0.1"), 0);
64         LinkProperties lp = new LinkProperties();
65         lp.addLinkAddress(address);
66         when(connectivityManager.getLinkProperties(network)).thenReturn(lp);
67 
68         assertThat(Utils.getWifiIpAddresses(mContext)).isEqualTo("127.0.0.1");
69     }
70 
71     @Test
testGetWifiIpAddresses_nullLinkProperties()72     public void testGetWifiIpAddresses_nullLinkProperties() {
73         when(wifiManager.getCurrentNetwork()).thenReturn(network);
74         // Explicitly set the return value to null for readability sake.
75         when(connectivityManager.getLinkProperties(network)).thenReturn(null);
76 
77         assertThat(Utils.getWifiIpAddresses(mContext)).isNull();
78     }
79 
80     @Test
testGetWifiIpAddresses_nullNetwork()81     public void testGetWifiIpAddresses_nullNetwork() {
82         // Explicitly set the return value to null for readability sake.
83         when(wifiManager.getCurrentNetwork()).thenReturn(null);
84 
85         assertThat(Utils.getWifiIpAddresses(mContext)).isNull();
86     }
87 
88     @Test
testAssignDefaultPhoto_ContextNull_ReturnFalseAndNotCrash()89     public void testAssignDefaultPhoto_ContextNull_ReturnFalseAndNotCrash() {
90         // Should not crash here
91         assertThat(Utils.assignDefaultPhoto(null, 0)).isFalse();
92     }
93 
94     @Test
testFormatElapsedTime_WithSeconds_ShowSeconds()95     public void testFormatElapsedTime_WithSeconds_ShowSeconds() {
96         final double testMillis = 5 * DateUtils.MINUTE_IN_MILLIS;
97         final String expectedTime = "5m 0s";
98 
99         assertThat(Utils.formatElapsedTime(mContext, testMillis, true).toString()).isEqualTo(
100                 expectedTime);
101     }
102 
103     @Test
testFormatElapsedTime_NoSeconds_DoNotShowSeconds()104     public void testFormatElapsedTime_NoSeconds_DoNotShowSeconds() {
105         final double testMillis = 5 * DateUtils.MINUTE_IN_MILLIS;
106         final String expectedTime = "5m";
107 
108         assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
109                 expectedTime);
110     }
111 
112     @Test
testFormatElapsedTime_TimeMoreThanOneDay_ShowCorrectly()113     public void testFormatElapsedTime_TimeMoreThanOneDay_ShowCorrectly() {
114         final double testMillis = 2 * DateUtils.DAY_IN_MILLIS
115                 + 4 * DateUtils.HOUR_IN_MILLIS + 15 * DateUtils.MINUTE_IN_MILLIS;
116         final String expectedTime = "2d 4h 15m";
117 
118         assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
119                 expectedTime);
120     }
121 
122     @Test
testFormatElapsedTime_onlyContainsMinute_hasTtsSpan()123     public void testFormatElapsedTime_onlyContainsMinute_hasTtsSpan() {
124         final double testMillis = 15 * DateUtils.MINUTE_IN_MILLIS;
125 
126         final CharSequence charSequence = Utils.formatElapsedTime(mContext, testMillis, false);
127         assertThat(charSequence).isInstanceOf(SpannableStringBuilder.class);
128 
129         final SpannableStringBuilder expectedString = (SpannableStringBuilder) charSequence;
130         final TtsSpan[] ttsSpans = expectedString.getSpans(0, expectedString.length(),
131                 TtsSpan.class);
132 
133         assertThat(ttsSpans).asList().hasSize(1);
134         assertThat(ttsSpans[0].getType()).isEqualTo(TtsSpan.TYPE_MEASURE);
135     }
136 
137     @Test
testInitializeVolumeDoesntBreakOnNullVolume()138     public void testInitializeVolumeDoesntBreakOnNullVolume() {
139         VolumeInfo info = new VolumeInfo("id", 0, new DiskInfo("id", 0), "");
140         StorageManager storageManager = mock(StorageManager.class, RETURNS_DEEP_STUBS);
141         when(storageManager.findVolumeById(anyString())).thenReturn(info);
142 
143         Utils.maybeInitializeVolume(storageManager, new Bundle());
144     }
145 
146     @Test
testGetInstallationStatus_notInstalled_shouldReturnUninstalled()147     public void testGetInstallationStatus_notInstalled_shouldReturnUninstalled() {
148         assertThat(Utils.getInstallationStatus(new ApplicationInfo()))
149                 .isEqualTo(R.string.not_installed);
150     }
151 
152     @Test
testGetInstallationStatus_enabled_shouldReturnInstalled()153     public void testGetInstallationStatus_enabled_shouldReturnInstalled() {
154         final ApplicationInfo info = new ApplicationInfo();
155         info.flags = ApplicationInfo.FLAG_INSTALLED;
156         info.enabled = true;
157 
158         assertThat(Utils.getInstallationStatus(info)).isEqualTo(R.string.installed);
159     }
160 
161     @Test
testGetInstallationStatus_disabled_shouldReturnDisabled()162     public void testGetInstallationStatus_disabled_shouldReturnDisabled() {
163         final ApplicationInfo info = new ApplicationInfo();
164         info.flags = ApplicationInfo.FLAG_INSTALLED;
165         info.enabled = false;
166 
167         assertThat(Utils.getInstallationStatus(info)).isEqualTo(R.string.disabled);
168     }
169 }
170