diff options
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.java | 141 |
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 |