package org.sef4j.core.api.logger; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.sef4j.core.api.EventSender; import org.sef4j.core.api.logger.EventLoggerContext; import org.sef4j.core.api.logger.EventLoggerContext.EventLoggerContextListener; import org.sef4j.core.helpers.senders.InMemoryEventSender; public class EventLoggerContextTest { private static class E {} private EventSender<E> appender1 = new InMemoryEventSender<E>(); private EventSender<E> appender2 = new InMemoryEventSender<E>(); private EventLoggerContext sut = new EventLoggerContext(); private static class InnerContextListener implements EventLoggerContextListener { List<String> changeLoggerNames = new ArrayList<String>(); public void onChangeInheritedLoggers(String eventLoggerName) { changeLoggerNames.add(eventLoggerName); } public List<String> clearAndGetChangeLoggerNames() { List<String> res = new ArrayList<String>(changeLoggerNames); changeLoggerNames.clear(); return res; } } private InnerContextListener listener = new InnerContextListener(); @Test public void testGetInheritedAppendersFor() { // Prepare // Perform sut.addAppender("appender1", appender1); sut.addLoggerToAppenderRef("a.b", "appender1", true); sut.addAppender("appender2", appender2); sut.addLoggerToAppenderRef("a.b.c", "appender2", true); sut.addLoggerToAppenderRef("a.b.c.d", "appender1", false); // Post-check EventSender<E>[] rootAppenders = sut.getInheritedAppendersFor(""); Assert.assertEquals(0, rootAppenders.length); EventSender<E>[] aAppenders = sut.getInheritedAppendersFor("a"); Assert.assertEquals(0, aAppenders.length); Assert.assertSame(rootAppenders, aAppenders); // memory optim check.. share array res EventSender<E>[] abAppenders = sut.getInheritedAppendersFor("a.b"); Assert.assertEquals(1, abAppenders.length); Assert.assertSame(appender1, abAppenders[0]); EventSender<E>[] abcAppenders = sut.getInheritedAppendersFor("a.b.c"); Assert.assertEquals(2, abcAppenders.length); Assert.assertSame(appender1, abcAppenders[0]); Assert.assertSame(appender2, abcAppenders[1]); EventSender<E>[] abcdAppenders = sut.getInheritedAppendersFor("a.b.c.d"); Assert.assertEquals(1, abcdAppenders.length); Assert.assertSame(appender2, abcdAppenders[0]); EventSender<E>[] azAppenders = sut.getInheritedAppendersFor("a.z"); Assert.assertSame(aAppenders, azAppenders);// memory optim check.. share array res EventSender<E>[] abczAppenders = sut.getInheritedAppendersFor("a.b.c.z"); Assert.assertSame(abcAppenders, abczAppenders);// memory optim check.. share array res EventSender<E>[] abcdzAppenders = sut.getInheritedAppendersFor("a.b.c.d.z"); Assert.assertSame(abcdAppenders, abcdzAppenders); // memory optim check.. share array res } @Test public void testAddContextListener() { // Prepare sut.addContextListener(listener); // Perform sut.addAppender("appender1", appender1); // Post-check assertListenerChanges(listener); // Prepare // Perform sut.addLoggerToAppenderRef("a.b", "appender1", true); // Post-check assertListenerChanges(listener, "a.b"); // Prepare // Perform sut.addAppender("appender2", appender2); // Post-check assertListenerChanges(listener); // Prepare // Perform sut.addLoggerToAppenderRef("a.b.c", "appender2", true); // Post-check assertListenerChanges(listener, "a.b.c"); // Prepare // Perform sut.addLoggerToAppenderRef("a.b.c.d", "appender1", false); // Post-check assertListenerChanges(listener, "a.b.c.d"); } private static void assertListenerChanges(InnerContextListener listener, String... expectedChanges) { List<String> actualChanges = listener.clearAndGetChangeLoggerNames(); int len = Math.min(expectedChanges.length, actualChanges.size()); // see assert below for (int i = 0; i < len; i++) { Assert.assertEquals(expectedChanges[i], actualChanges.get(i)); } Assert.assertEquals(expectedChanges.length, actualChanges.size()); } }