blob: ed618171c2b864ee16d9bb0c60eca318e207d460 [file] [log] [blame]
package org.slf4j;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.spi.MDCAdapter;
import org.slf4j.spi.SLF4JServiceProvider;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
public class LoggerFactoryTest {
private PrintStream rawSyserr;
private ByteArrayOutputStream mockedSyserr;
final ClassLoader classLoaderOfLoggerFactory = LoggerFactory.class.getClassLoader();
@Before
public void setUp() {
rawSyserr = System.err;
mockedSyserr = new ByteArrayOutputStream();
System.setErr(new PrintStream(mockedSyserr));
}
@After
public void cleanUp() {
System.clearProperty(LoggerFactory.PROVIDER_PROPERTY_KEY);
System.setErr(rawSyserr);
}
@Test
public void testExplicitlySpecified() {
System.setProperty(LoggerFactory.PROVIDER_PROPERTY_KEY, "org.slf4j.LoggerFactoryTest$TestingProvider");
SLF4JServiceProvider provider = LoggerFactory.loadExplicitlySpecified(classLoaderOfLoggerFactory);
assertTrue("provider should be instance of TestingProvider class", provider instanceof TestingProvider);
assertTrue(mockedSyserr.toString().contains(" Attempting to load provider \"org.slf4j.LoggerFactoryTest$TestingProvider\" specified via \"slf4j.provider\" system property"));
System.out.println(mockedSyserr.toString());
}
@Test
public void testExplicitlySpecifiedNull() {
assertNull(LoggerFactory.loadExplicitlySpecified(classLoaderOfLoggerFactory));
}
@Test
public void testExplicitlySpecifyMissingServiceProvider() {
System.setProperty(LoggerFactory.PROVIDER_PROPERTY_KEY, "com.example.ServiceProvider");
SLF4JServiceProvider provider = LoggerFactory.loadExplicitlySpecified(classLoaderOfLoggerFactory);
assertNull(provider);
assertTrue(mockedSyserr.toString().contains("Failed to instantiate the specified SLF4JServiceProvider (com.example.ServiceProvider)"));
}
@Test
public void testExplicitlySpecifyNonServiceProvider() {
System.setProperty(LoggerFactory.PROVIDER_PROPERTY_KEY, "java.lang.String");
assertNull(LoggerFactory.loadExplicitlySpecified(classLoaderOfLoggerFactory));
assertTrue(mockedSyserr.toString().contains("Specified SLF4JServiceProvider (java.lang.String) does not implement SLF4JServiceProvider interface"));
}
public static class TestingProvider implements SLF4JServiceProvider {
@Override
public ILoggerFactory getLoggerFactory() {
return null;
}
@Override
public IMarkerFactory getMarkerFactory() {
return null;
}
@Override
public MDCAdapter getMDCAdapter() {
return null;
}
@Override
public String getRequestedApiVersion() {
return null;
}
@Override
public void initialize() {
}
}
}