package org.robolectric.shadows; import android.content.Context; import android.net.DhcpInfo; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.util.Pair; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowWifiManagerTest { private final WifiManager wifiManager = (WifiManager) RuntimeEnvironment.application.getSystemService(Context.WIFI_SERVICE); private final ShadowWifiManager shadowWifiManager = shadowOf(wifiManager); @Test public void shouldReturnWifiInfo() { assertThat(wifiManager.getConnectionInfo().getClass()).isEqualTo(WifiInfo.class); } @Test(expected = SecurityException.class) public void setWifiEnabled_shouldThrowSecurityExceptionWhenAccessWifiStatePermissionNotGranted() throws Exception { shadowWifiManager.setAccessWifiStatePermission(false); wifiManager.setWifiEnabled(true); } @Test(expected = SecurityException.class) public void isWifiEnabled_shouldThrowSecurityExceptionWhenAccessWifiStatePermissionNotGranted() throws Exception { shadowWifiManager.setAccessWifiStatePermission(false); wifiManager.isWifiEnabled(); } @Test(expected = SecurityException.class) public void getConnectionInfo_shouldThrowSecurityExceptionWhenAccessWifiStatePermissionNotGranted() throws Exception { shadowWifiManager.setAccessWifiStatePermission(false); wifiManager.getConnectionInfo(); } @Test public void shouldEnableNetworks() throws Exception { wifiManager.enableNetwork(666, true); Pair<Integer, Boolean> lastEnabled = shadowWifiManager.getLastEnabledNetwork(); assertThat(lastEnabled).isEqualTo(new Pair<>(666, true)); wifiManager.enableNetwork(777, false); lastEnabled = shadowWifiManager.getLastEnabledNetwork(); assertThat(lastEnabled).isEqualTo(new Pair<>(777, false)); } @Test public void shouldReturnSetScanResults() throws Exception { List<ScanResult> scanResults = new ArrayList<>(); shadowWifiManager.setScanResults(scanResults); assertThat(wifiManager.getScanResults()).isSameAs(scanResults); } @Test public void shouldReturnDhcpInfo() { DhcpInfo dhcpInfo = new DhcpInfo(); shadowWifiManager.setDhcpInfo(dhcpInfo); assertThat(wifiManager.getDhcpInfo()).isSameAs(dhcpInfo); } @Test public void shouldRecordTheLastAddedNetwork() throws Exception { WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.networkId = -1; int networkId = wifiManager.addNetwork(wifiConfiguration); assertThat(networkId).isEqualTo(0); assertThat(wifiManager.getConfiguredNetworks().get(0)).isNotSameAs(wifiConfiguration); assertThat(wifiConfiguration.networkId).isEqualTo(-1); assertThat(wifiManager.getConfiguredNetworks().get(0).networkId).isEqualTo(0); WifiConfiguration anotherConfig = new WifiConfiguration(); assertThat(wifiManager.addNetwork(anotherConfig)).isEqualTo(1); assertThat(anotherConfig.networkId).isEqualTo(-1); assertThat(wifiManager.getConfiguredNetworks().get(1).networkId).isEqualTo(1); } @Test public void updateNetwork_shouldReplaceNetworks() throws Exception { WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.networkId = -1; wifiManager.addNetwork(wifiConfiguration); WifiConfiguration anotherConfig = new WifiConfiguration(); int networkId = wifiManager.addNetwork(anotherConfig); assertThat(networkId).isEqualTo(1); WifiConfiguration configuration = new WifiConfiguration(); configuration.networkId = networkId; configuration.priority = 44; assertThat(wifiManager.updateNetwork(configuration)).isEqualTo(networkId); List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); assertThat(configuredNetworks.size()).isEqualTo(2); assertThat(configuration.priority).isEqualTo(44); assertThat(configuredNetworks.get(1).priority).isEqualTo(44); } @Test public void removeNetwork() throws Exception { WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.networkId = 123; wifiManager.addNetwork(wifiConfiguration); List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); assertThat(list.size()).isEqualTo(1); wifiManager.removeNetwork(0); list = wifiManager.getConfiguredNetworks(); assertThat(list.size()).isEqualTo(0); } @Test public void updateNetwork_shouldRejectNullandNewConfigs() throws Exception { WifiConfiguration config = new WifiConfiguration(); config.networkId = -1; assertThat(wifiManager.updateNetwork(config)).isEqualTo(-1); assertThat(wifiManager.updateNetwork(null)).isEqualTo(-1); assertThat(wifiManager.getConfiguredNetworks()).isEmpty(); } @Test public void shouldSaveConfigurations() throws Exception { assertThat(wifiManager.saveConfiguration()).isTrue(); assertThat(shadowWifiManager.wasConfigurationSaved()).isTrue(); } @Test public void shouldCreateWifiLock() throws Exception { assertThat(wifiManager.createWifiLock("TAG")).isNotNull(); assertThat(wifiManager.createWifiLock(1, "TAG")).isNotNull(); } @Test public void shouldAcquireAndReleaseWifilockRefCounted() throws Exception { WifiManager.WifiLock lock = wifiManager.createWifiLock("TAG"); lock.acquire(); lock.acquire(); assertThat(lock.isHeld()).isTrue(); lock.release(); assertThat(lock.isHeld()).isTrue(); lock.release(); assertThat(lock.isHeld()).isFalse(); } @Test public void shouldAcquireAndReleaseWifilockNonRefCounted() throws Exception { WifiManager.WifiLock lock = wifiManager.createWifiLock("TAG"); lock.setReferenceCounted(false); lock.acquire(); assertThat(lock.isHeld()).isTrue(); lock.acquire(); assertThat(lock.isHeld()).isTrue(); lock.release(); assertThat(lock.isHeld()).isFalse(); } @Test(expected = RuntimeException.class) public void shouldThrowRuntimeExceptionIfLockisUnderlocked() throws Exception { WifiManager.WifiLock lock = wifiManager.createWifiLock("TAG"); lock.release(); } @Test(expected = UnsupportedOperationException.class) public void shouldThrowUnsupportedOperationIfLockisOverlocked() throws Exception { WifiManager.WifiLock lock = wifiManager.createWifiLock("TAG"); for (int i=0; i<ShadowWifiManager.ShadowWifiLock.MAX_ACTIVE_LOCKS; i++) lock.acquire(); } @Test public void shouldCalculateSignalLevelSetBefore() { ShadowWifiManager.setSignalLevelInPercent(0.5f); assertThat(WifiManager.calculateSignalLevel(0, 5)).isEqualTo(2); assertThat(WifiManager.calculateSignalLevel(2, 5)).isEqualTo(2); ShadowWifiManager.setSignalLevelInPercent(0.9f); assertThat(WifiManager.calculateSignalLevel(0, 5)).isEqualTo(3); assertThat(WifiManager.calculateSignalLevel(2, 5)).isEqualTo(3); ShadowWifiManager.setSignalLevelInPercent(1f); assertThat(WifiManager.calculateSignalLevel(0, 4)).isEqualTo(3); assertThat(WifiManager.calculateSignalLevel(2, 4)).isEqualTo(3); ShadowWifiManager.setSignalLevelInPercent(0); assertThat(WifiManager.calculateSignalLevel(0, 5)).isEqualTo(0); assertThat(WifiManager.calculateSignalLevel(2, 5)).isEqualTo(0); } @Test(expected = IllegalArgumentException.class) public void shouldThrowIllegalArgumentExceptionWhenSignalLevelToLow() { ShadowWifiManager.setSignalLevelInPercent(-0.01f); } @Test(expected = IllegalArgumentException.class) public void shouldThrowIllegalArgumentExceptionWhenSignalLevelToHigh() { ShadowWifiManager.setSignalLevelInPercent(1.01f); } @Test public void startScan_shouldNotThrowException() { assertThat(wifiManager.startScan()).isTrue(); } }