/**
* Copyright (C) 2000-2016 Atomikos <info@atomikos.com>
*
* LICENSE CONDITIONS
*
* See http://www.atomikos.com/Main/WhichLicenseApplies for details.
*/
package com.atomikos.logging;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
public class JULLoggerFactoryTestJUnit extends AbstractLoggerFactoryTest {
// can't mock the "logger" Itself but Logger call a "publish" method on a
// mocked handler
private Handler handler = Mockito.mock(Handler.class);
@Override
public void setUp() {
LoggerFactory.setLoggerFactoryDelegate(new JULLoggerFactoryDelegate());
logger = LoggerFactory.createLogger(getClass());
getUnderlyingLogger().addHandler(handler);
getUnderlyingLogger().setLevel(Level.INFO);
}
public void testAssertSlf4jLoggerCreated() {
assertTrue(logger instanceof JULLogger);
}
@Override
protected void assertLoggedAsDebug() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.FINE, false);
}
@Override
protected void assertLoggedAsDebugWithException() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.FINE, true);
}
@Override
protected void assertLoggedAsInfo() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.INFO, false);
}
@Override
protected void assertLoggedAsInfoWithException() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.INFO, true);
}
@Override
protected void assertLoggedAsWarning() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.WARNING, false);
}
@Override
protected void assertLoggedAsWarningWithException() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.WARNING, true);
}
private void assertLogRecord(LogRecord logRecord, Level expectedLevel,
boolean withThrowable) {
assertEquals(MESSAGE, logRecord.getMessage());
assertEquals(expectedLevel, logRecord.getLevel());
if (withThrowable) {
assertNotNull(logRecord.getThrown());
} else {
assertNull(logRecord.getThrown());
}
}
public void testIsInfoEnabled() {
getUnderlyingLogger().setLevel(Level.WARNING);
super.testIsInfoEnabled();
}
@Override
protected void configureLoggingFrameworkWithInfo() {
getUnderlyingLogger().setLevel(Level.INFO);
}
@Override
protected void configureLoggingFrameworkWithDebug() {
getUnderlyingLogger().setLevel(Level.FINE);
}
private java.util.logging.Logger getUnderlyingLogger() {
return java.util.logging.Logger.getLogger(getClass().getName());
}
@Override
protected void assertLoggedAsError() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.SEVERE, false);
}
@Override
protected void assertLoggedAsErrorWithException() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.SEVERE, true);
}
@Override
protected void configureLoggingFrameworkWithError() {
getUnderlyingLogger().setLevel(Level.SEVERE);
}
@Override
protected void configureLoggingFrameworkWithNone() {
getUnderlyingLogger().setLevel(Level.OFF);
}
@Override
protected void configureLoggingFrameworkWithTrace() {
getUnderlyingLogger().setLevel(Level.FINEST);
}
@Override
protected void assertLoggedAsTrace() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.FINEST, false);
}
@Override
protected void assertLoggedAsTraceWithException() {
ArgumentCaptor<LogRecord> arg = ArgumentCaptor.forClass(LogRecord.class);
Mockito.verify(handler).publish(arg.capture());
LogRecord logRecord = arg.getValue();
assertLogRecord(logRecord, Level.FINEST, true);
}
}