package com.flexpoker.framework.event.subscriber; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.junit.Test; import com.flexpoker.framework.event.Event; import com.flexpoker.framework.event.EventHandler; import com.flexpoker.game.command.events.BlindsIncreasedEvent; import com.flexpoker.game.command.events.GameFinishedEvent; import com.flexpoker.game.command.events.GameJoinedEvent; public class InMemoryThreadSafeEventSubscriberHelperTest { @Test public void testSentInOrderRunsInOrder() { UUID tableId = UUID.randomUUID(); BlindsIncreasedEvent event1 = new BlindsIncreasedEvent(tableId, 1); GameFinishedEvent event2 = new GameFinishedEvent(tableId, 2); GameJoinedEvent event3 = new GameJoinedEvent(tableId, 3, UUID.randomUUID()); Map<Class<? extends Event>, EventHandler<? extends Event>> handlerMap = new HashMap<>(); final List<Event> eventRunList = new ArrayList<>(); handlerMap.put(event1.getClass(), x -> { eventRunList.add(event1); }); handlerMap.put(event2.getClass(), x -> { eventRunList.add(event2); }); handlerMap.put(event3.getClass(), x -> { eventRunList.add(event3); }); InMemoryThreadSafeEventSubscriberHelper sut = new InMemoryThreadSafeEventSubscriberHelper<>(); sut.setHandlerMap(handlerMap); sut.receive(event1); sut.receive(event2); sut.receive(event3); assertEquals(event1, eventRunList.get(0)); assertEquals(event2, eventRunList.get(1)); assertEquals(event3, eventRunList.get(2)); } @Test public void testSentInSwappedOrderRunsInOrder() { UUID tableId = UUID.randomUUID(); BlindsIncreasedEvent event1 = new BlindsIncreasedEvent(tableId, 1); GameFinishedEvent event2 = new GameFinishedEvent(tableId, 2); GameJoinedEvent event3 = new GameJoinedEvent(tableId, 3, UUID.randomUUID()); Map<Class<? extends Event>, EventHandler<? extends Event>> handlerMap = new HashMap<>(); final List<Event> eventRunList = new ArrayList<>(); handlerMap.put(event1.getClass(), x -> { eventRunList.add(event1); }); handlerMap.put(event2.getClass(), x -> { eventRunList.add(event2); }); handlerMap.put(event3.getClass(), x -> { eventRunList.add(event3); }); InMemoryThreadSafeEventSubscriberHelper sut = new InMemoryThreadSafeEventSubscriberHelper<>(); sut.setHandlerMap(handlerMap); sut.receive(event2); sut.receive(event3); sut.receive(event1); assertEquals(event1, eventRunList.get(0)); assertEquals(event2, eventRunList.get(1)); assertEquals(event3, eventRunList.get(2)); } }