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