/*
* Copyright (c) 2013-2014, Pierre Laporte
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* along with this work; if not, see <http://www.gnu.org/licenses/>.
*/
package fr.pingtimeout.tyrion.util;
import org.junit.Test;
import java.io.PrintStream;
import static org.mockito.Mockito.*;
public class SimpleLoggerTest {
@Test
public void no_messages_should_be_printed_with_off_level() {
// Given
PrintStream printStream = mock(PrintStream.class);
SimpleLogger simpleLogger = new SimpleLogger(SimpleLogger.Level.OFF, printStream);
Object[] args = {"Foo", "bar"};
String message = "Test String";
// When
printMessageWithEveryLevel(simpleLogger, message, args, new Exception());
// Then
verifyZeroInteractions(printStream);
verifyNoMoreInteractions(printStream);
}
@Test
public void only_warn_messages_should_be_printed_with_warn_level() {
// Given
PrintStream printStream = mock(PrintStream.class);
SimpleLogger simpleLogger = new SimpleLogger(SimpleLogger.Level.WARN, printStream);
Object[] args = {"Foo", "bar"};
String message = "Test String";
// When
printMessageWithEveryLevel(simpleLogger, message, args, new Exception());
// Then
verify(printStream).printf("WARN - " + message + "\n", args);
verifyNoMoreInteractions(printStream);
}
@Test
public void only_warn_and_info_messages_should_be_printed_with_info_level() {
// Given
PrintStream printStream = mock(PrintStream.class);
SimpleLogger simpleLogger = new SimpleLogger(SimpleLogger.Level.INFO, printStream);
Object[] args = {"Foo", "bar"};
String message = "Test String";
// When
printMessageWithEveryLevel(simpleLogger, message, args, new Exception());
// Then
verify(printStream).printf("WARN - " + message + "\n", args);
verify(printStream).printf("INFO - " + message + "\n", args);
verifyNoMoreInteractions(printStream);
}
@Test
public void only_warn_info_and_debug_messages_should_be_printed_with_debug_level() {
// Given
PrintStream printStream = mock(PrintStream.class);
SimpleLogger simpleLogger = new SimpleLogger(SimpleLogger.Level.DEBUG, printStream);
Object[] args = {"Foo", "bar"};
String message = "Test String";
Exception exception = new Exception();
// When
printMessageWithEveryLevel(simpleLogger, message, args, exception);
// Then
verify(printStream).printf("WARN - " + message + "\n", args);
verify(printStream).printf("INFO - " + message + "\n", args);
verify(printStream).printf("DEBUG - " + message + "\n", args);
verify(printStream).println(exception);
// Do not check the "at ..." lines
}
@Test
public void all_messages_should_be_printed_with_trace_level() {
// Given
PrintStream printStream = mock(PrintStream.class);
SimpleLogger simpleLogger = new SimpleLogger(SimpleLogger.Level.TRACE, printStream);
Object[] args = {"Foo", "bar"};
String message = "Test String";
Exception exception = new Exception();
// When
printMessageWithEveryLevel(simpleLogger, message, args, exception);
// Then
verify(printStream).printf("WARN - " + message + "\n", args);
verify(printStream).printf("INFO - " + message + "\n", args);
verify(printStream).printf("DEBUG - " + message + "\n", args);
verify(printStream).printf("TRACE - " + message + "\n", args);
verify(printStream).println(exception);
// Do not check the "at ..." lines
}
@Test
public void static_methods_should_delegate_to_logger() {
// Given
SimpleLogger simpleLogger = mock(SimpleLogger.class);
SimpleLogger.log = simpleLogger;
Object[] args = {"Foo", "bar"};
String message = "Test String";
Exception exception = new Exception();
// When
SimpleLogger.warn(message, args);
SimpleLogger.info(message, args);
SimpleLogger.debug(message, args);
SimpleLogger.debug(exception);
SimpleLogger.trace(message, args);
// Then
verify(simpleLogger).warnMessage(message, args);
verify(simpleLogger).infoMessage(message, args);
verify(simpleLogger).debugMessage(message, args);
verify(simpleLogger).traceMessage(message, args);
verify(simpleLogger).debugMessage(exception);
}
private void printMessageWithEveryLevel(SimpleLogger simpleLogger, String message, Object[] args, Exception exception) {
simpleLogger.warnMessage(message, args);
simpleLogger.infoMessage(message, args);
simpleLogger.debugMessage(message, args);
simpleLogger.debugMessage(exception);
simpleLogger.traceMessage(message, args);
}
}