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.api.EventSender;
import org.sef4j.core.helpers.senders.InMemoryEventSender;
public class DefaultWrapperMultiplexerEventSenderTest {
protected static class E {}
private static final String KEY1 = "key1";
private static final String KEY2 = "key2";
protected E e1 = new E();
protected E e2 = new E();
protected InMemoryEventSender<MultiplexedEvent<String,E>> targetSender = new InMemoryEventSender<MultiplexedEvent<String,E>>();
protected DefaultWrapperMultiplexerEventSender<String,E> sut = new DefaultWrapperMultiplexerEventSender<String,E>(targetSender);
@Test
public void testMultiplexSendEvent() {
// Prepare
// Perform
sut.multiplexSendEvent(KEY1, e1);
sut.multiplexSendEvent(KEY2, e2);
// Post-check
List<MultiplexedEvent<String, E>> res = targetSender.clearAndGet();
Assert.assertEquals(2, res.size());
MultiplexedEvent<String, E> res0 = res.get(0);
Assert.assertEquals(KEY1, res0.getKey());
Assert.assertSame(e1, res0.getWrappedEvent());
MultiplexedEvent<String, E> res1 = res.get(1);
Assert.assertEquals(KEY2, res1.getKey());
Assert.assertSame(e2, res1.getWrappedEvent());
}
@Test
public void testMultiplexSendEvents() {
// Prepare
// Perform
sut.multiplexSendEvents(KEY1, Arrays.asList(new E[] { e1, e2 }));
// Post-check
List<MultiplexedEvent<String, E>> res = targetSender.clearAndGet();
Assert.assertEquals(2, res.size());
MultiplexedEvent<String, E> res0 = res.get(0);
Assert.assertEquals(KEY1, res0.getKey());
Assert.assertSame(e1, res0.getWrappedEvent());
MultiplexedEvent<String, E> res1 = res.get(1);
Assert.assertEquals(KEY1, res1.getKey());
Assert.assertSame(e2, res1.getWrappedEvent());
}
@Test
public void testEventSenderFor_sendEvent() {
// Prepare
EventSender<E> senderForKey1 = sut.eventSenderFor(KEY1);
// Perform
senderForKey1.sendEvent(e1);
// Post-check
List<MultiplexedEvent<String, E>> res = targetSender.clearAndGet();
Assert.assertEquals(1, res.size());
MultiplexedEvent<String, E> res0 = res.get(0);
Assert.assertEquals(KEY1, res0.getKey());
Assert.assertSame(e1, res0.getWrappedEvent());
}
}