@Override public void run() { eventProcessor.init(); } });
synchronized void init() { if (initialised) { throw new IllegalStateException("already initialised"); } First<M, F> first = store.init(); dispatchModel(first.model()); dispatchEffects(first.effects()); initialised = true; for (E event : eventsReceivedBeforeInit) { update(event); } }
@Test public void shouldQueueUpdatesReceivedBeforeInit() throws Exception { stateConsumer.clearValues(); underTest = new EventProcessor<>(createStore(), effectConsumer, stateConsumer); underTest.update(1); underTest.update(2); underTest.update(3); underTest.init(); stateConsumer.assertValues("init!", "init!->1", "init!->1->2", "init!->1->2->3"); }
@Before public void setUp() throws Exception { effectConsumer = new RecordingConsumer<>(); stateConsumer = new RecordingConsumer<>(); underTest = new EventProcessor<>(createStore(), effectConsumer, stateConsumer); underTest.init(); }
@Override public void accept(E event) { eventProcessor.update(event); } };
public EventProcessor<M, E, F> create(Consumer<F> effectConsumer, Consumer<M> modelConsumer) { return new EventProcessor<>(store, checkNotNull(effectConsumer), checkNotNull(modelConsumer)); } }
synchronized void update(E event) { if (!initialised) { eventsReceivedBeforeInit.add(event); return; } Next<M, F> next = store.update(event); next.ifHasModel( new Consumer<M>() { @Override public void accept(M model) { dispatchModel(model); } }); dispatchEffects(next.effects()); }
@Override public void accept(E event) { eventProcessor.update(event); } };
public EventProcessor<M, E, F> create(Consumer<F> effectConsumer, Consumer<M> modelConsumer) { return new EventProcessor<>(store, checkNotNull(effectConsumer), checkNotNull(modelConsumer)); } }
synchronized void update(E event) { if (!initialised) { eventsReceivedBeforeInit.add(event); return; } Next<M, F> next = store.update(event); next.ifHasModel( new Consumer<M>() { @Override public void accept(M model) { dispatchModel(model); } }); dispatchEffects(next.effects()); }
synchronized void init() { if (initialised) { throw new IllegalStateException("already initialised"); } First<M, F> first = store.init(); dispatchModel(first.model()); dispatchEffects(first.effects()); initialised = true; for (E event : eventsReceivedBeforeInit) { update(event); } }
@Override public void run() { eventProcessor.init(); } });
@Test public void shouldEmitStateIfStateChanged() throws Exception { underTest.update(1); stateConsumer.assertValues("init!", "init!->1"); }
@Test public void shouldDisallowDuplicateInitialisation() throws Exception { assertThatThrownBy(() -> underTest.init()).isInstanceOf(IllegalStateException.class); }
@Test public void shouldNotEmitStateIfStateNotChanged() throws Exception { stateConsumer.clearValues(); underTest.update(0); stateConsumer.assertValues(); }
@Test public void shouldEmitEffectsWhenStateChanges() throws Exception { effectConsumer.clearValues(); underTest.update(3); effectConsumer.assertValuesInAnyOrder(10L, 20L, 30L); }