private void setupWithEffects( Connectable<TestEffect, TestEvent> effectHandler, WorkRunner effectRunner) { observer = new RecordingModelObserver<>(); mobiusLoop = MobiusLoop.create(mobiusStore, effectHandler, eventSource, immediateRunner, effectRunner); mobiusLoop.observe(observer); }
@Override @Nonnull public MobiusLoop<M, E, F> startFrom(M startModel) { LoggingInit<M, F> loggingInit = new LoggingInit<>(init, logger); LoggingUpdate<M, E, F> loggingUpdate = new LoggingUpdate<>(update, logger); return MobiusLoop.create( MobiusStore.create(loggingInit, loggingUpdate, checkNotNull(startModel)), effectHandler, eventSource, checkNotNull(eventRunner.get()), checkNotNull(effectRunner.get())); }
@Override @Nonnull public MobiusLoop<M, E, F> startFrom(M startModel) { LoggingInit<M, F> loggingInit = new LoggingInit<>(init, logger); LoggingUpdate<M, E, F> loggingUpdate = new LoggingUpdate<>(update, logger); return MobiusLoop.create( MobiusStore.create(loggingInit, loggingUpdate, checkNotNull(startModel)), effectHandler, eventSource, checkNotNull(eventRunner.get()), checkNotNull(effectRunner.get())); }
@Test public void shouldThrowForEventSourceEventsAfterDispose() throws Exception { FakeEventSource<TestEvent> eventSource = new FakeEventSource<>(); mobiusLoop = MobiusLoop.create( mobiusStore, effectHandler, eventSource, immediateRunner, immediateRunner); observer = new RecordingModelObserver<>(); // to clear out the init from the previous setup mobiusLoop.observe(observer); eventSource.emit(new EventWithSafeEffect("one")); mobiusLoop.dispose(); assertThatThrownBy(() -> eventSource.emit(new EventWithSafeEffect("two"))) .isInstanceOf(IllegalStateException.class); observer.assertStates("init", "init->one"); }
@Test public void shouldSupportUnregisteringObserver() throws Exception { observer = new RecordingModelObserver<>(); mobiusLoop = MobiusLoop.create( mobiusStore, effectHandler, eventSource, immediateRunner, immediateRunner); Disposable unregister = mobiusLoop.observe(observer); mobiusLoop.dispatchEvent(new TestEvent("active observer")); unregister.dispose(); mobiusLoop.dispatchEvent(new TestEvent("shouldn't be seen")); observer.assertStates("init", "init->active observer"); }