@Override public void call(final Subscriber<? super FeatureEvent> subscriber) { verifyMainThread(); FeatureEventListener listener = new FeatureEventListener() { @Override public void onFeatureEvent(FeatureEvent event) { if (!subscriber.isUnsubscribed()) { subscriber.onNext(event); } } }; subscriber.add( new MainThreadSubscription() { @Override protected void onUnsubscribe() { featureController.removeFeatureEventListener(listener); } }); featureController.addFeatureEventListener(listener); } }
@Test public void addFeatureEventListener_should_relayTheEventsFromTheAdapterViewTypeDelegates() { //GIVEN AdapterViewTypeDelegate stubAdapterViewTypeDelegate = new StubAdapterViewTypeDelegate(); FeatureController<String> featureController = new StubFeatureController<>(asList(stubAdapterViewTypeDelegate)); FeatureEventListener mockListener = createMock(FeatureEventListener.class); final FeatureEvent featureEvent = new FeatureEvent() {}; mockListener.onFeatureEvent(featureEvent); replay(mockListener); //WHEN featureController.addFeatureEventListener(mockListener); stubAdapterViewTypeDelegate.fireEvent(featureEvent); //THEN verify(mockListener); }
@Test public void removeFeatureEventListener_should_stopRelayingTheEventsFromTheAdapterViewTypeDelegates() { //GIVEN AdapterViewTypeDelegate stubAdapterViewTypeDelegate = new StubAdapterViewTypeDelegate(); FeatureController<String> featureController = new StubFeatureController<>(asList(stubAdapterViewTypeDelegate)); FeatureEventListener mockListener = createMock(FeatureEventListener.class); final FeatureEvent featureEvent = new FeatureEvent() {}; replay(mockListener); //WHEN featureController.addFeatureEventListener(mockListener); featureController.removeFeatureEventListener(mockListener); stubAdapterViewTypeDelegate.fireEvent(featureEvent); //THEN verify(mockListener); } }