/* * Copyright 2013 Philip Schiffer * * 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 de.psdev.slf4j.android.logger; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import org.hamcrest.CoreMatchers; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import android.util.Log; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, shadows = { EnhancedShadowLog.class }) public class AndroidLoggerAdapterTest { private Logger mLogger; @Before public void setUp() throws Exception { mLogger = LoggerFactory.getLogger(AndroidLoggerAdapterTest.class); EnhancedShadowLog.stream = System.out; } @Test public void testInitialization() throws Exception { assertEquals("should have read correct log tag from properties", "TestLogTag", AndroidLoggerAdapter.getLogTag()); assertEquals("should have correct name", AndroidLoggerAdapterTest.class.getName(), mLogger.getName()); assertEquals("should have correct log level", LogLevel.TRACE, AndroidLoggerAdapter.getLogLevel()); } @Test public void testIsTraceEnabled() throws Exception { assertTrue("trace should be enabled", mLogger.isTraceEnabled()); } @Test public void testTrace() throws Exception { mLogger.trace("test trace"); assertLog(Log.VERBOSE, "test trace"); } @Test public void testTraceWithArg() throws Exception { mLogger.trace("test trace {}", "argument"); assertLog(Log.VERBOSE, "test trace argument"); } @Test public void testTraceWithTwoArgs() throws Exception { mLogger.trace("test trace {} {}", "argument", "argument2"); assertLog(Log.VERBOSE, "test trace argument argument2"); } @Test public void testTraceWithVarArgs() throws Exception { mLogger.trace("test trace {} {} {}", "argument", "argument2", "argument3"); assertLog(Log.VERBOSE, "test trace argument argument2 argument3"); } @Test public void testTraceWithArgAndThrowable() throws Exception { final Exception exception = new Exception("test trace exception"); mLogger.trace("test trace {} {} {}", "argument", "argument2", "argument3", exception); assertLog(Log.VERBOSE, "test trace argument argument2 argument3", exception); } @Test public void testTraceWithThrowable() throws Exception { final Exception exception = new Exception("test trace exception"); mLogger.trace("test trace", exception); assertLog(Log.VERBOSE, "test trace", exception); } @Test public void testIsDebugEnabled() throws Exception { assertTrue("debug should be enabled", mLogger.isDebugEnabled()); } @Test public void testDebug() throws Exception { mLogger.debug("test debug"); assertLog(Log.DEBUG, "test debug"); } @Test public void testDebugWithArg() throws Exception { mLogger.debug("test debug {}", "argument"); assertLog(Log.DEBUG, "test debug argument"); } @Test public void testDebugWithTwoArgs() throws Exception { mLogger.debug("test debug {} {}", "argument", "argument2"); assertLog(Log.DEBUG, "test debug argument argument2"); } @Test public void testDebugWithVarArgs() throws Exception { mLogger.debug("test debug {} {} {}", "argument", "argument2", "argument3"); assertLog(Log.DEBUG, "test debug argument argument2 argument3"); } @Test public void testDebugWithArgAndThrowable() throws Exception { final Exception exception = new Exception("test debug exception"); mLogger.debug("test debug {} {} {}", "argument", "argument2", "argument3", exception); assertLog(Log.DEBUG, "test debug argument argument2 argument3", exception); } @Test public void testDebugWithThrowable() throws Exception { final Exception exception = new Exception("test debug exception"); mLogger.debug("test debug", exception); assertLog(Log.DEBUG, "test debug", exception); } @Test public void testIsInfoEnabled() throws Exception { assertTrue("info should be enabled", mLogger.isInfoEnabled()); } @Test public void testInfo() throws Exception { mLogger.info("test info"); assertLog(Log.INFO, "test info"); } @Test public void testInfoWithArg() throws Exception { mLogger.info("test info {}", "argument"); assertLog(Log.INFO, "test info argument"); } @Test public void testInfoWithTwoArgs() throws Exception { mLogger.info("test info {} {}", "argument", "argument2"); assertLog(Log.INFO, "test info argument argument2"); } @Test public void testInfoWithVarArgs() throws Exception { mLogger.info("test info {} {} {}", "argument", "argument2", "argument3"); assertLog(Log.INFO, "test info argument argument2 argument3"); } @Test public void testInfoWithArgAndThrowable() throws Exception { final Exception exception = new Exception("test info exception"); mLogger.info("test info {} {} {}", "argument", "argument2", "argument3", exception); assertLog(Log.INFO, "test info argument argument2 argument3", exception); } @Test public void testInfoWithThrowable() throws Exception { final Exception exception = new Exception("test info exception"); mLogger.info("test info", exception); assertLog(Log.INFO, "test info", exception); } @Test public void testIsWarnEnabled() throws Exception { assertTrue("warn should be enabled", mLogger.isWarnEnabled()); } @Test public void testWarn() throws Exception { mLogger.warn("test info"); assertLog(Log.WARN, "test info"); } @Test public void testWarnWithArg() throws Exception { mLogger.warn("test warn {}", "argument"); assertLog(Log.WARN, "test warn argument"); } @Test public void testWarnWithTwoArgs() throws Exception { mLogger.warn("test warn {} {}", "argument", "argument2"); assertLog(Log.WARN, "test warn argument argument2"); } @Test public void testWarnWithVarArgs() throws Exception { mLogger.warn("test warn {} {} {}", "argument", "argument2", "argument3"); assertLog(Log.WARN, "test warn argument argument2 argument3"); } @Test public void testWarnWithArgAndThrowable() throws Exception { final Exception exception = new Exception("test warn exception"); mLogger.warn("test warn {} {} {}", "argument", "argument2", "argument3", exception); assertLog(Log.WARN, "test warn argument argument2 argument3", exception); } @Test public void testWarnWithThrowable() throws Exception { final Exception exception = new Exception("test warn exception"); mLogger.warn("test warn", exception); assertLog(Log.WARN, "test warn", exception); } @Test public void testIsErrorEnabled() throws Exception { assertTrue("error should be enabled", mLogger.isErrorEnabled()); } @Test public void testError() throws Exception { mLogger.error("test error"); assertLog(Log.ERROR, "test error"); } @Test public void testErrorWithArg() throws Exception { mLogger.error("test error {}", "argument"); assertLog(Log.ERROR, "test error argument"); } @Test public void testErrorWithTwoArgs() throws Exception { mLogger.error("test error {} {}", "argument", "argument2"); assertLog(Log.ERROR, "test error argument argument2"); } @Test public void testErrorWithVarArgs() throws Exception { mLogger.error("test error {} {} {}", "argument", "argument2", "argument3"); assertLog(Log.ERROR, "test error argument argument2 argument3"); } @Test public void testErrorWithArgAndThrowable() throws Exception { final Exception exception = new Exception("test error exception"); mLogger.error("test error {} {} {}", "argument", "argument2", "argument3", exception); assertLog(Log.ERROR, "test error argument argument2 argument3", exception); } @Test public void testErrorWithThrowable() throws Exception { final Exception exception = new Exception("test error exception"); mLogger.error("test error", exception); assertLog(Log.ERROR, "test error", exception); } @Test public void testInnerclassMatching() throws Exception { final InnerClassTest innerClassTest = new InnerClassTest(); innerClassTest.doSomething(); assertLog(Log.INFO, "inner class match"); assertThat("should contain correct class name", EnhancedShadowLog.getLogs().get(0).msg, CoreMatchers.containsString("InnerClassTest")); } @After public void tearDown() throws Exception { EnhancedShadowLog.reset(); } // Helper private static void assertLog(final int expectedLogLevel, final String expectedContainedText) { assertLog(expectedLogLevel, expectedContainedText, null); } private static void assertLog(final int expectedLogLevel, final String expectedContainedText, final Throwable expectedThrowable) { assertEquals("should have logged 1 message", 1L, EnhancedShadowLog.getLogs().size()); final EnhancedShadowLog.LogItem logItem = EnhancedShadowLog.getLogs().get(0); assertEquals("should have correct type", expectedLogLevel, logItem.type); assertThat("should contain message", logItem.msg, CoreMatchers.containsString(expectedContainedText)); assertThat("should contain class", logItem.msg, CoreMatchers.containsString( AndroidLoggerAdapterTest.class.getSimpleName())); assertEquals("should have correct log tag", "TestLogTag", logItem.tag); if (expectedThrowable != null) { assertEquals("should have logged the correct throwable", expectedThrowable, logItem.throwable); } } class InnerClassTest { public void doSomething() { mLogger.info("inner class match"); } } }