package com.bumptech.glide.manager; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 18) public class LifecycleTest { private ActivityFragmentLifecycle lifecycle; private LifecycleListener listener; @Before public void setUp() { lifecycle = new ActivityFragmentLifecycle(); listener = mock(LifecycleListener.class); } @Test public void testNotifiesAddedListenerOnStart() { lifecycle.addListener(listener); lifecycle.onStart(); verify(listener).onStart(); } @Test public void testNotifiesAddedListenerOfStartIfStarted() { lifecycle.onStart(); lifecycle.addListener(listener); verify(listener).onStart(); } @Test public void testDoesNotNotifyAddedListenerOfStartIfDestroyed() { lifecycle.onStart(); lifecycle.onStop(); lifecycle.onDestroy(); lifecycle.addListener(listener); verify(listener, never()).onStart(); } @Test public void testDoesNotNotifyListenerOfStartIfStartedThenStopped() { lifecycle.onStart(); lifecycle.onStop(); lifecycle.addListener(listener); verify(listener, never()).onStart(); } @Test public void testNotifiesAddedListenerOnStop() { lifecycle.onStart(); lifecycle.addListener(listener); lifecycle.onStop(); verify(listener).onStop(); } @Test public void testNotifiesAddedListenerOfStopIfStopped() { lifecycle.onStop(); lifecycle.addListener(listener); verify(listener).onStop(); } @Test public void testDoesNotNotifyAddedListenerOfStopIfDestroyed() { lifecycle.onStart(); lifecycle.onStop(); lifecycle.onDestroy(); lifecycle.addListener(listener); verify(listener, never()).onStop(); } @Test public void testDoesNotNotifyListenerOfStopIfStoppedThenStarted() { lifecycle.onStop(); lifecycle.onStart(); lifecycle.addListener(listener); verify(listener, never()).onStop(); } @Test public void testNotifiesAddedListenerOnDestroy() { lifecycle.addListener(listener); lifecycle.onDestroy(); verify(listener).onDestroy(); } @Test public void testNotifiesAddedListenerOfDestroyIfDestroyed() { lifecycle.onDestroy(); lifecycle.addListener(listener); verify(listener).onDestroy(); } @Test public void testNotifiesMultipleListeners() { lifecycle.onStart(); int toNotify = 20; List<LifecycleListener> listeners = new ArrayList<>(); for (int i = 0; i < toNotify; i++) { listeners.add(mock(LifecycleListener.class)); } for (LifecycleListener lifecycleListener : listeners) { lifecycle.addListener(lifecycleListener); } lifecycle.onStop(); lifecycle.onDestroy(); for (LifecycleListener lifecycleListener : listeners) { verify(lifecycleListener).onStart(); verify(lifecycleListener).onStop(); verify(lifecycleListener).onDestroy(); } } }