diff options
author | Jan Berkel <jan.berkel@gmail.com> | 2012-09-10 18:21:31 +0200 |
---|---|---|
committer | Jan Berkel <jan.berkel@gmail.com> | 2012-09-10 18:21:31 +0200 |
commit | 96fdd17081c3b220bd0ab5f8e1950aecee074f36 (patch) | |
tree | dd0d55a683824e22ffa963aaf683749eaf8fecfe | |
parent | 33e482246b1884708434b34bb4188f92734cf07d (diff) | |
download | robolectric-96fdd17081c3b220bd0ab5f8e1950aecee074f36.tar.gz |
Improved ShadowNetworkInfo / ShadowConnectivityManager
* Added getSubtype()
* Made it possible to set null active networkinfo
3 files changed, 80 insertions, 21 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowConnectivityManager.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowConnectivityManager.java index 3dcbb884c..f3c1548a0 100644 --- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowConnectivityManager.java +++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowConnectivityManager.java @@ -8,8 +8,6 @@ import com.xtremelabs.robolectric.internal.Implements; import java.util.HashMap; import java.util.Map; -import static com.xtremelabs.robolectric.Robolectric.newInstanceOf; - /** * Shadow of {@code ConnectivityManager} that provides for the simulation of * the active connection status. @@ -19,19 +17,22 @@ import static com.xtremelabs.robolectric.Robolectric.newInstanceOf; public class ShadowConnectivityManager { private NetworkInfo activeNetwork; - private NetworkInfo[] networkInfo; private boolean backgroundDataSetting; private Map<Integer, NetworkInfo> networkTypeToNetworkInfo = new HashMap<Integer, NetworkInfo>(); + public void __constructor__() { + setActiveNetworkInfo(ShadowNetworkInfo.newInstance()); + } + @Implementation public NetworkInfo getActiveNetworkInfo() { - return activeNetwork == null ? activeNetwork = newInstanceOf(NetworkInfo.class) : activeNetwork; + return activeNetwork; } @Implementation public NetworkInfo[] getAllNetworkInfo() { - return networkInfo == null ? networkInfo = new NetworkInfo[]{getActiveNetworkInfo()} : networkInfo; + return networkTypeToNetworkInfo.values().toArray(new NetworkInfo[networkTypeToNetworkInfo.size()]); } @Implementation @@ -39,16 +40,25 @@ public class ShadowConnectivityManager { return networkTypeToNetworkInfo.get(networkType); } - public void setNetworkInfo(int networkType, NetworkInfo networkInfo) { - networkTypeToNetworkInfo.put(networkType, networkInfo); - } - @Implementation public boolean getBackgroundDataSetting() { return backgroundDataSetting; } + public void setNetworkInfo(int networkType, NetworkInfo networkInfo) { + networkTypeToNetworkInfo.put(networkType, networkInfo); + } + public void setBackgroundDataSetting(boolean b) { backgroundDataSetting = b; } + + public void setActiveNetworkInfo(NetworkInfo info) { + activeNetwork = info; + if (info != null) { + networkTypeToNetworkInfo.put(info.getType(), info); + } else { + networkTypeToNetworkInfo.clear(); + } + } } diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowNetworkInfo.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowNetworkInfo.java index fcd33d821..7446b970e 100644 --- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowNetworkInfo.java +++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowNetworkInfo.java @@ -14,9 +14,10 @@ import static com.xtremelabs.robolectric.Robolectric.shadowOf; @Implements(NetworkInfo.class) public class ShadowNetworkInfo { - private boolean isAvailable = true; - private boolean isConnected = true; - private int connectionType = ConnectivityManager.TYPE_MOBILE; + private boolean isAvailable; + private boolean isConnected; + private int connectionType; + private int connectionSubType; private NetworkInfo.DetailedState detailedState; public static NetworkInfo newInstance() { @@ -24,8 +25,19 @@ public class ShadowNetworkInfo { } public static NetworkInfo newInstance(NetworkInfo.DetailedState detailedState) { + return newInstance(detailedState, ConnectivityManager.TYPE_MOBILE, 0, true, true); + } + + public static NetworkInfo newInstance(NetworkInfo.DetailedState detailedState, int type, int subType, + boolean isAvailable, + boolean isConnected) { NetworkInfo networkInfo = Robolectric.newInstanceOf(NetworkInfo.class); - shadowOf(networkInfo).setDetailedState(detailedState); + final ShadowNetworkInfo info = shadowOf(networkInfo); + info.setConnectionType(type); + info.setSubType(subType); + info.setDetailedState(detailedState); + info.setAvailableStatus(isAvailable); + info.setConnectionStatus(isConnected); return networkInfo; } @@ -55,6 +67,16 @@ public class ShadowNetworkInfo { return connectionType; } + @Implementation + public int getSubtype() { + return connectionSubType; + } + + @Implementation + public boolean isAvailable() { + return isAvailable; + } + /** * Non-Android accessor * Sets up the return value of {@link #isAvailable()}. @@ -64,12 +86,6 @@ public class ShadowNetworkInfo { public void setAvailableStatus(boolean isAvailable) { this.isAvailable = isAvailable; } - - - @Implementation - public boolean isAvailable() { - return isAvailable; - } /** * Non-Android accessor @@ -91,6 +107,10 @@ public class ShadowNetworkInfo { this.connectionType = connectionType; } + public void setSubType(int subType) { + this.connectionSubType = subType; + } + public void setDetailedState(NetworkInfo.DetailedState detailedState) { this.detailedState = detailedState; } diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ConnectivityManagerTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ConnectivityManagerTest.java index 947c4a3aa..7355d4a50 100644 --- a/src/test/java/com/xtremelabs/robolectric/shadows/ConnectivityManagerTest.java +++ b/src/test/java/com/xtremelabs/robolectric/shadows/ConnectivityManagerTest.java @@ -3,6 +3,8 @@ 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; @@ -57,12 +59,12 @@ public class ConnectivityManagerTest { 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()); } @@ -73,4 +75,31 @@ public class ConnectivityManagerTest { 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); + } } |