@Test public void testNonLifecycleEvents() { NaviEmitter activity = NaviEmitter.createActivityEmitter(); LifecycleProvider<ActivityEvent> provider = NaviLifecycle.createActivityLifecycleProvider(activity); TestObserver<ActivityEvent> testObserver = provider.lifecycle().test(); activity.onViewStateRestored(new Bundle()); testObserver.assertNoValues(); testObserver.assertNoErrors(); }
@Test public void testLeakFree() { NaviEmitter activity = NaviEmitter.createActivityEmitter(); LifecycleProvider<ActivityEvent> provider = NaviLifecycle.createActivityLifecycleProvider(activity); WeakReference<NaviEmitter> activityRef = new WeakReference<>(activity); WeakReference<LifecycleProvider<ActivityEvent>> providerRef = new WeakReference<>(provider); Observable<Object> observable = PublishSubject.create().hide(); TestObserver<Object> testObserver = observable.compose(provider.bindUntilEvent(ActivityEvent.STOP)).test(); activity.onCreate(null); activity.onStart(); activity.onResume(); activity.onPause(); activity.onStop(); activity.onDestroy(); activity = null; provider = null; TestUtil.cleanGarbage(); assertNull(activityRef.get()); assertNull(providerRef.get()); } }
@Test public void testLifecycle() { NaviEmitter activity = NaviEmitter.createActivityEmitter(); LifecycleProvider<ActivityEvent> provider = NaviLifecycle.createActivityLifecycleProvider(activity); TestObserver<ActivityEvent> testObserver = provider.lifecycle().test(); activity.onCreate(null); activity.onStart(); activity.onResume(); activity.onPause(); activity.onStop(); activity.onDestroy(); testObserver.assertValues( ActivityEvent.CREATE, ActivityEvent.START, ActivityEvent.RESUME, ActivityEvent.PAUSE, ActivityEvent.STOP, ActivityEvent.DESTROY ); }
@Test public void testPersistance() { NaviEmitter activity = NaviEmitter.createActivityEmitter(); LifecycleProvider<ActivityEvent> provider = NaviLifecycle.createActivityLifecycleProvider(activity); TestObserver<ActivityEvent> testObserver = provider.lifecycle().test(); activity.onCreate(null); activity.onStart(); activity.onResume(); activity.onPause(); activity.onStop(); activity.onDestroy(); // Verify that you can remain subscribed until the Activity is completely gone activity.onCreate(null); testObserver.assertValues( ActivityEvent.CREATE, ActivityEvent.START, ActivityEvent.RESUME, ActivityEvent.PAUSE, ActivityEvent.STOP, ActivityEvent.DESTROY, ActivityEvent.CREATE ); }
@Test public void testBindUntilEvent() { NaviEmitter activity = createActivityEmitter(); LifecycleProvider<ActivityEvent> provider = createActivityLifecycleProvider(activity); Observable<Object> observable = create().hide(); TestObserver<Object> testObserver = observable.compose(provider.bindUntilEvent(STOP)).test(); activity.onCreate(null); testObserver.assertNotComplete(); activity.onStart(); testObserver.assertNotComplete(); activity.onResume(); testObserver.assertNotComplete(); activity.onPause(); testObserver.assertNotComplete(); activity.onStop(); testObserver.assertComplete(); }
@Test public void testBindToLifecycle() { NaviEmitter activity = createActivityEmitter(); LifecycleProvider<ActivityEvent> provider = createActivityLifecycleProvider(activity); Observable<Object> observable = create().hide(); activity.onCreate(null); TestObserver<Object> createObserver = observable.compose(provider.bindToLifecycle()).test(); activity.onStart(); createObserver.assertNotComplete(); TestObserver<Object> startObserver = observable.compose(provider.bindToLifecycle()).test(); activity.onResume(); createObserver.assertNotComplete(); startObserver.assertNotComplete(); TestObserver<Object> resumeTestSub = observable.compose(provider.bindToLifecycle()).test(); activity.onPause(); createObserver.assertNotComplete(); startObserver.assertNotComplete(); resumeTestSub.assertComplete(); TestObserver<Object> pauseObserver = observable.compose(provider.bindToLifecycle()).test(); activity.onStop(); createObserver.assertNotComplete(); startObserver.assertComplete(); pauseObserver.assertComplete(); TestObserver<Object> stopObserver = observable.compose(provider.bindToLifecycle()).test(); activity.onDestroy(); createObserver.assertComplete(); stopObserver.assertComplete(); }
@Test public void handlesEventsNone() { NaviComponent component = NaviEmitter.createActivityEmitter(); assertTrue(component.handlesEvents()); }
@Test public void handlesEventsSingle() { NaviComponent component = NaviEmitter.createActivityEmitter(); assertTrue(component.handlesEvents(Event.CREATE)); assertFalse(component.handlesEvents(Event.CREATE_VIEW)); }
@Test public void restoreInstanceStateWithNullBundle() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Bundle> listener = mock(Listener.class); emitter.addListener(Event.RESTORE_INSTANCE_STATE, listener); emitter.onRestoreInstanceState(null); verify(listener).call(any(Bundle.class)); }
@Test public void throwOnAddUnsupportedListener() { final NaviEmitter emitter = NaviEmitter.createActivityEmitter(); exception.expect(IllegalArgumentException.class); emitter.addListener(Event.DETACH, mock(Listener.class)); } }
@Test public void add() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Object> listener = mock(Listener.class); emitter.addListener(Event.START, listener); emitter.onStart(); verify(listener).call(any()); }
@Test public void createWithNullBundle() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Bundle> listener = mock(Listener.class); emitter.addListener(Event.CREATE, listener); emitter.onCreate(null); verify(listener).call(any(Bundle.class)); }
@Test public void handlesEventsMultiple() { NaviComponent component = NaviEmitter.createActivityEmitter(); assertTrue(component.handlesEvents(Event.CREATE, Event.START, Event.RESUME)); assertFalse(component.handlesEvents(Event.ATTACH, Event.CREATE_VIEW)); assertFalse(component.handlesEvents(Event.CREATE, Event.CREATE_VIEW)); }
@Test public void postCreateWithNullBundle() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Bundle> listener = mock(Listener.class); emitter.addListener(Event.POST_CREATE, listener); emitter.onPostCreate(null); verify(listener).call(any(Bundle.class)); }
@Test public void remove() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Object> listener = mock(Listener.class); emitter.addListener(Event.START, listener); emitter.removeListener(listener); emitter.onStart(); verifyNoMoreInteractions(listener); }
@Test public void doubleAdd() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Object> listener = mock(Listener.class); emitter.addListener(Event.START, listener); emitter.addListener(Event.START, listener); emitter.onStart(); verify(listener).call(any()); }
@Test public void throwsOnMultiAdd() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Bundle> listener = mock(Listener.class); emitter.addListener(Event.CREATE, listener); exception.expect(IllegalStateException.class); emitter.addListener(Event.SAVE_INSTANCE_STATE, listener); }
@Test public void doubleRemove() { NaviEmitter emitter = NaviEmitter.createActivityEmitter(); Listener<Object> listener = mock(Listener.class); emitter.addListener(Event.START, listener); emitter.removeListener(listener); emitter.removeListener(listener); emitter.onStart(); verifyNoMoreInteractions(listener); } }