package org.sef4j.core.helpers.senders.multiplexer; import java.util.Arrays; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.sef4j.core.helpers.senders.InMemoryEventSender; public class DefaultMapDemultiplexerEventSenderTest { protected static class E {} private static final String KEY1 = "key1"; private static final String KEY2 = "key2"; protected InMemoryEventSender<E> targetDefaultSender = new InMemoryEventSender<E>(); protected InMemoryEventSender<E> targetKey1Sender = new InMemoryEventSender<E>(); protected InMemoryEventSender<E> targetKey2Sender = new InMemoryEventSender<E>(); protected DefaultMapDemultiplexerEventSender<String,E> sut = new DefaultMapDemultiplexerEventSender<String,E>(); protected E e1 = new E(); protected MultiplexedEvent<String,E> wrappedE1 = new MultiplexedEvent<String,E>(KEY1, e1); protected E e2 = new E(); protected MultiplexedEvent<String,E> wrappedE2 = new MultiplexedEvent<String,E>(KEY2, e2); @Test public void testSendEvent_dispatchToDefault() { // Prepare // Perform sut.sendEvent(wrappedE1); // Post-check List<E> receivedDefaultEvents = targetDefaultSender.clearAndGet(); Assert.assertEquals(0, receivedDefaultEvents.size()); // Prepare sut.setDefaultEventSender(targetDefaultSender); // Perform sut.sendEvent(wrappedE1); // Post-check receivedDefaultEvents = targetDefaultSender.clearAndGet(); Assert.assertEquals(1, receivedDefaultEvents.size()); Assert.assertSame(e1, receivedDefaultEvents.get(0)); } @Test public void testSendEvent_wrappedKey1_dispatchToTarget1() { // Prepare sut.putEventSenderDispatcher(KEY1, targetKey1Sender); // Perform sut.sendEvent(wrappedE1); // Post-check List<E> receivedTarget1Events = targetKey1Sender.clearAndGet(); Assert.assertEquals(1, receivedTarget1Events.size()); Assert.assertSame(e1, receivedTarget1Events.get(0)); List<E> receivedTarget2Events = targetKey2Sender.clearAndGet(); Assert.assertEquals(0, receivedTarget2Events.size()); } @Test public void testSendEvent_wrappedKey1_dispatchE2ToDefault() { // Prepare sut.putEventSenderDispatcher(KEY1, targetKey1Sender); sut.setDefaultEventSender(targetDefaultSender); // Perform sut.sendEvent(wrappedE2); // Post-check List<E> receivedDefaultEvents = targetDefaultSender.clearAndGet(); Assert.assertEquals(1, receivedDefaultEvents.size()); Assert.assertSame(e2, receivedDefaultEvents.get(0)); } @Test public void testSendEvents_wrappedKey1_dispatchToTarget1() { // Prepare sut.putEventSenderDispatcher(KEY1, targetKey1Sender); sut.putEventSenderDispatcher(KEY2, targetKey2Sender); sut.setDefaultEventSender(targetDefaultSender); // Perform sut.sendEvents(Arrays.asList(new MultiplexedEvent[] { wrappedE1, wrappedE1, wrappedE2 })); // Post-check List<E> receivedTarget1Events = targetKey1Sender.clearAndGet(); Assert.assertEquals(2, receivedTarget1Events.size()); Assert.assertSame(e1, receivedTarget1Events.get(0)); Assert.assertSame(e1, receivedTarget1Events.get(1)); List<E> receivedTarget2Events = targetKey2Sender.clearAndGet(); Assert.assertEquals(1, receivedTarget2Events.size()); Assert.assertSame(e2, receivedTarget2Events.get(0)); List<E> receivedDefaultEvents = targetDefaultSender.clearAndGet(); Assert.assertEquals(0, receivedDefaultEvents.size()); } }