/*
* Copyright 2012 Jason Miller
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jj.logging;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.*;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.slf4j.Logger;
/**
* @author jason
*
*/
@RunWith(MockitoJUnitRunner.class)
public class LoggersTest {
private static final String NAMES_LOGGER_EVENT = "names logger event";
@Retention(RetentionPolicy.RUNTIME)
private @interface Ann1 {}
@Ann1
private class Ann1Event extends LoggedEvent {
@Override
public void describeTo(Logger logger) {}
}
@Retention(RetentionPolicy.RUNTIME)
private @interface Ann2 {}
@Ann2
private class Ann2Event extends LoggedEvent {
@Override
public void describeTo(Logger logger) {}
}
@Retention(RetentionPolicy.RUNTIME)
private @interface Ann3 {}
@Ann3
private class Ann3Event extends LoggedEvent {
@Override
public void describeTo(Logger logger) {}
}
private class NamesLoggerEvent extends LoggedEvent implements NamesLogger {
@Override
public void describeTo(Logger logger) {}
@Override
public String loggerName() {
return NAMES_LOGGER_EVENT;
}
}
private @Mock Logger logger1;
private @Mock Logger logger2;
private @Mock Logger logger3;
@Test
public void test() {
// given
Map<Class<? extends Annotation>, Logger> loggers = new HashMap<>();
loggers.put(Ann1.class, logger1);
loggers.put(Ann2.class, logger2);
loggers.put(Ann3.class, logger3);
Loggers l = new Loggers(loggers);
// when, then
assertThat(l.findLogger(new Ann1Event()), is(logger1));
assertThat(l.findLogger(new Ann2Event()), is(logger2));
assertThat(l.findLogger(new Ann3Event()), is(logger3));
Logger logger = l.findLogger(new NamesLoggerEvent());
assertThat(logger.getName(), is(NAMES_LOGGER_EVENT));
}
}