aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Berkel <jan.berkel@gmail.com>2012-09-10 18:21:31 +0200
committerJan Berkel <jan.berkel@gmail.com>2012-09-10 18:21:31 +0200
commit96fdd17081c3b220bd0ab5f8e1950aecee074f36 (patch)
treedd0d55a683824e22ffa963aaf683749eaf8fecfe
parent33e482246b1884708434b34bb4188f92734cf07d (diff)
downloadrobolectric-96fdd17081c3b220bd0ab5f8e1950aecee074f36.tar.gz
Improved ShadowNetworkInfo / ShadowConnectivityManager
* Added getSubtype() * Made it possible to set null active networkinfo
-rw-r--r--src/main/java/com/xtremelabs/robolectric/shadows/ShadowConnectivityManager.java28
-rw-r--r--src/main/java/com/xtremelabs/robolectric/shadows/ShadowNetworkInfo.java40
-rw-r--r--src/test/java/com/xtremelabs/robolectric/shadows/ConnectivityManagerTest.java33
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);
+ }
}