aboutsummaryrefslogtreecommitdiff
path: root/library/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorTest.java')
-rw-r--r--library/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorTest.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/library/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorTest.java b/library/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorTest.java
new file mode 100644
index 00000000..5a0afe91
--- /dev/null
+++ b/library/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorTest.java
@@ -0,0 +1,141 @@
+package com.bumptech.glide.manager;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadows.ShadowConnectivityManager;
+import org.robolectric.shadows.ShadowNetworkInfo;
+
+import static junit.framework.Assert.assertEquals;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+@RunWith(RobolectricTestRunner.class)
+public class DefaultConnectivityMonitorTest {
+ private ConnectivityMonitor.ConnectivityListener listener;
+ private DefaultConnectivityMonitor monitor;
+
+ @Before
+ public void setUp() {
+ listener = mock(ConnectivityMonitor.ConnectivityListener.class);
+ monitor = new DefaultConnectivityMonitor(Robolectric.application, listener);
+ }
+
+ @Test
+ public void testRegistersReceiverOnRegister() {
+ monitor.register();
+
+ assertEquals(1, getConnectivityReceiverCount());
+ }
+
+ @Test
+ public void testDoesNotRegisterTwiceOnRegister() {
+ monitor.register();
+ monitor.register();
+
+ assertEquals(1, getConnectivityReceiverCount());
+ }
+
+ @Test
+ public void testUnregistersReceiverOnUnregister() {
+ monitor.register();
+ monitor.unregister();
+
+ assertEquals(0, getConnectivityReceiverCount());
+ }
+
+ @Test
+ public void testHandlesUnregisteringTwiceInARow() {
+ monitor.unregister();
+ monitor.unregister();
+
+ assertEquals(0, getConnectivityReceiverCount());
+ }
+
+ @Test
+ public void testDoesNotNotifyListenerIfConnectedAndBecomesConnected() {
+ ConnectivityHarness harness = new ConnectivityHarness();
+ harness.connect();
+
+ monitor.register();
+ harness.broadcast();
+
+ verify(listener, never()).onConnectivityChanged(anyBoolean());
+ }
+
+ @Test
+ public void testNotifiesListenerIfConnectedAndBecomesDisconnected() {
+ ConnectivityHarness harness = new ConnectivityHarness();
+ harness.connect();
+
+ monitor.register();
+ harness.disconnect();
+ harness.broadcast();
+
+ verify(listener).onConnectivityChanged(eq(false));
+ }
+
+ @Test
+ public void testNotifiesListenerIfDisconnectedAndBecomesConnected() {
+ ConnectivityHarness harness = new ConnectivityHarness();
+ harness.disconnect();
+
+ monitor.register();
+ harness.connect();
+ harness.broadcast();
+
+ verify(listener).onConnectivityChanged(eq(true));
+ }
+
+ @Test
+ public void testDoesNotNotifyListenerWhenNotRegistered() {
+ ConnectivityHarness harness = new ConnectivityHarness();
+ harness.disconnect();
+
+ monitor.register();
+ monitor.unregister();
+ harness.connect();
+ harness.broadcast();
+
+ verify(listener, never()).onConnectivityChanged(anyBoolean());
+ }
+
+ private int getConnectivityReceiverCount() {
+ Intent connectivity = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
+ return Robolectric.getShadowApplication().getReceiversForIntent(connectivity).size();
+ }
+
+ private static class ConnectivityHarness {
+ private final ShadowConnectivityManager shadowConnectivityManager;
+
+ public ConnectivityHarness() {
+ ConnectivityManager connectivityManager =
+ (ConnectivityManager) Robolectric.application.getSystemService(Context.CONNECTIVITY_SERVICE);
+ shadowConnectivityManager = Robolectric.shadowOf(connectivityManager);
+ }
+
+ public void disconnect() {
+ shadowConnectivityManager.setActiveNetworkInfo(null);
+ }
+
+ public void connect() {
+ NetworkInfo networkInfo = ShadowNetworkInfo.newInstance(NetworkInfo.DetailedState.CONNECTED, 0, 0, true,
+ true);
+ shadowConnectivityManager.setActiveNetworkInfo(networkInfo);
+ }
+
+ public void broadcast() {
+ Intent connected = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
+ Robolectric.shadowOf(Robolectric.application).sendBroadcast(connected);
+ }
+ }
+} \ No newline at end of file