/* * Copyright (c) 2016, Michael * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.logging.tools; import org.jowidgets.logging.api.ILogger; /** * Logger mock that can be used for JUnit tests */ public class LoggerMock extends AbstractLoggerAdapter implements ILogger { private boolean traceEnabled; private boolean debugEnabled; private boolean infoEnabled; private boolean warnEnabled; private boolean errorEnabled; private LoggerMockMessage lastMessage; /** * Creates a new logger that have all log levels enabled */ public LoggerMock() { this.traceEnabled = true; this.debugEnabled = true; this.infoEnabled = true; this.warnEnabled = true; this.errorEnabled = true; } /** * Gets the last logged message without changing it, may be null * * @return The last logged message, may be null */ public LoggerMockMessage peekLastMessage() { return lastMessage; } /** * Removes the last logged message and return it * * @return The last logged message, may be null */ public LoggerMockMessage popLastMessage() { final LoggerMockMessage result = lastMessage; lastMessage = null; return result; } /** * Resets the logger mock */ public void reset() { popLastMessage(); setEnabled(true); } /** * @return True if a message is available */ public boolean hasMessage() { return lastMessage != null; } /** * Sets the enabled state for all log levels * * @param enabled The enabled state to set */ public void setEnabled(final boolean enabled) { setErrorEnabled(enabled); setWarnEnabled(enabled); setInfoEnabled(enabled); setDebugEnabled(enabled); setTraceEnabled(enabled); } @Override public boolean isTraceEnabled() { return traceEnabled; } public void setTraceEnabled(final boolean traceEnabled) { this.traceEnabled = traceEnabled; } @Override public boolean isDebugEnabled() { return debugEnabled; } public void setDebugEnabled(final boolean debugEnabled) { this.debugEnabled = debugEnabled; } @Override public boolean isInfoEnabled() { return infoEnabled; } public void setInfoEnabled(final boolean infoEnabled) { this.infoEnabled = infoEnabled; } @Override public boolean isWarnEnabled() { return warnEnabled; } public void setWarnEnabled(final boolean warnEnabled) { this.warnEnabled = warnEnabled; } @Override public boolean isErrorEnabled() { return errorEnabled; } public void setErrorEnabled(final boolean errorEnabled) { this.errorEnabled = errorEnabled; } @Override public void error(final String wrapperFQCN, final String message, final Throwable throwable) { logMessage(LogLevel.ERROR, message, throwable); } @Override public void warn(final String wrapperFQCN, final String message, final Throwable throwable) { logMessage(LogLevel.WARN, message, throwable); } @Override public void info(final String wrapperFQCN, final String message, final Throwable throwable) { logMessage(LogLevel.INFO, message, throwable); } @Override public void debug(final String wrapperFQCN, final String message, final Throwable throwable) { logMessage(LogLevel.DEBUG, message, throwable); } @Override public void trace(final String wrapperFQCN, final String message, final Throwable throwable) { logMessage(LogLevel.TRACE, message, throwable); } private void logMessage(final LogLevel level, final String message, final Throwable throwable) { if (LogLevel.ERROR.equals(level) && !isErrorEnabled()) { return; } else if (LogLevel.WARN.equals(level) && !isWarnEnabled()) { return; } else if (LogLevel.INFO.equals(level) && !isInfoEnabled()) { return; } else if (LogLevel.DEBUG.equals(level) && !isDebugEnabled()) { return; } else if (LogLevel.TRACE.equals(level) && !isTraceEnabled()) { return; } else { lastMessage = new LoggerMockMessage(level, message, throwable); } } }