package org.sef4j.core.api.logger; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.sef4j.core.helpers.senders.InMemoryEventSender; public class EventLoggerFactoryTest { private static class E {} private InMemoryEventSender<E> appender1 = new InMemoryEventSender<E>(); private InMemoryEventSender<E> appender2 = new InMemoryEventSender<E>(); private EventLoggerContext eventLoggerContext = new EventLoggerContext(); private EventLoggerFactory sut = new EventLoggerFactory(eventLoggerContext); private EventLogger loggerA = sut.getEventLogger("a"); private EventLogger loggerAB = sut.getEventLogger("a.b"); @Test public void testSendEvent_addAppender() { // Prepare E event = new E(); // Perform loggerA.sendEvent(event); // Post-check assertAppenderEvents(appender1); assertAppenderEvents(appender2); // Prepare // Perform eventLoggerContext.addAppender("appender1", appender1); eventLoggerContext.addAppender("appender2", appender2); // Post-check assertAppenderEvents(appender1); assertAppenderEvents(appender2); // Prepare eventLoggerContext.addLoggerToAppenderRef("a", "appender1", true); // Perform loggerA.sendEvent(event); // Post-check assertAppenderEvents(appender1, event); assertAppenderEvents(appender2); // Prepare // Perform loggerAB.sendEvent(event); // Post-check assertAppenderEvents(appender1, event); assertAppenderEvents(appender2); // Prepare eventLoggerContext.addLoggerToAppenderRef("a.b", "appender2", true); // Perform loggerAB.sendEvent(event); // Post-check assertAppenderEvents(appender1, event); assertAppenderEvents(appender2, event); } private static void assertAppenderEvents(InMemoryEventSender<E> appender, E... expectedEvents) { List<E> actualEvents = appender.clearAndGet(); int len = Math.min(expectedEvents.length, actualEvents.size()); // see assert below for (int i = 0; i < len; i++) { Assert.assertSame(expectedEvents[i], actualEvents.get(i)); } Assert.assertEquals(expectedEvents.length, actualEvents.size()); } }