package com.xtremelabs.robolectric.shadows; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; import com.xtremelabs.robolectric.Robolectric; import com.xtremelabs.robolectric.WithTestDefaultsRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static com.xtremelabs.robolectric.Robolectric.shadowOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.*; @RunWith(WithTestDefaultsRunner.class) public class ConnectivityManagerTest { private ConnectivityManager connectivityManager; private ShadowNetworkInfo shadowOfActiveNetworkInfo; private ShadowConnectivityManager shadowConnectivityManager; @Before public void setUp() throws Exception { connectivityManager = (ConnectivityManager) Robolectric.application.getSystemService(Context.CONNECTIVITY_SERVICE); shadowConnectivityManager = shadowOf(connectivityManager); shadowOfActiveNetworkInfo = shadowOf(connectivityManager.getActiveNetworkInfo()); } @Test public void getConnectivityManagerShouldNotBeNull() { assertNotNull(connectivityManager); assertNotNull(connectivityManager.getActiveNetworkInfo()); } @Test public void networkInfoShouldReturnTrueCorrectly() { shadowOfActiveNetworkInfo.setConnectionStatus(true); assertTrue(connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting()); assertTrue(connectivityManager.getActiveNetworkInfo().isConnected()); } @Test public void getNetworkInfoShouldReturnAssignedValue() throws Exception { NetworkInfo networkInfo = ShadowNetworkInfo.newInstance(NetworkInfo.DetailedState.CONNECTING); shadowConnectivityManager.setNetworkInfo(ConnectivityManager.TYPE_WIFI, networkInfo); NetworkInfo actual = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); assertThat(actual, sameInstance(networkInfo)); assertThat(actual.getDetailedState(), is(NetworkInfo.DetailedState.CONNECTING)); } @Test public void networkInfoShouldReturnFalseCorrectly() { shadowOfActiveNetworkInfo.setConnectionStatus(false); assertFalse(connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting()); assertFalse(connectivityManager.getActiveNetworkInfo().isConnected()); } @Test public void networkInfoShouldReturnTypeCorrectly(){ shadowOfActiveNetworkInfo.setConnectionType(ConnectivityManager.TYPE_MOBILE); assertEquals(ConnectivityManager.TYPE_MOBILE, shadowOfActiveNetworkInfo.getType()); shadowOfActiveNetworkInfo.setConnectionType(ConnectivityManager.TYPE_WIFI); assertEquals(ConnectivityManager.TYPE_WIFI, shadowOfActiveNetworkInfo.getType()); } @Test public void shouldGetAndSetBackgroundDataSetting() throws Exception { assertFalse(connectivityManager.getBackgroundDataSetting()); shadowConnectivityManager.setBackgroundDataSetting(true); assertTrue(connectivityManager.getBackgroundDataSetting()); } @Test public void shouldSetActiveNetworkInfo() throws Exception { shadowConnectivityManager.setActiveNetworkInfo(null); assertNull(connectivityManager.getActiveNetworkInfo()); shadowConnectivityManager.setActiveNetworkInfo(ShadowNetworkInfo.newInstance(null, ConnectivityManager.TYPE_MOBILE_HIPRI, TelephonyManager.NETWORK_TYPE_EDGE, true, false)); NetworkInfo info = connectivityManager.getActiveNetworkInfo(); assertEquals(ConnectivityManager.TYPE_MOBILE_HIPRI, info.getType()); assertEquals(TelephonyManager.NETWORK_TYPE_EDGE, info.getSubtype()); assertTrue(info.isAvailable()); assertFalse(info.isConnected()); } @Test public void shouldGetAllNetworkInfo() throws Exception { NetworkInfo[] infos = connectivityManager.getAllNetworkInfo(); assertNotNull(infos); assertEquals(1, infos.length); assertSame(connectivityManager.getActiveNetworkInfo(), infos[0]); shadowConnectivityManager.setActiveNetworkInfo(null); assertEquals(0, connectivityManager.getAllNetworkInfo().length); } }