package com.aconex.scrutineer; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Matchers.matches; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.slf4j.Logger; public class LogUtilsTest { private static final String LOG_MESSAGE = "Log Message"; private static final int NUM_ITEMS = 10; @Mock private Logger logger; public LogUtilsTest() { MockitoAnnotations.initMocks(this); } @Test public void shouldSetLoggerAsAStaticField() { assertThat(StaticTester.class.getName(), is(StaticTester.LOG.getName())); } @Test(expected = Exception.class ) public void shouldThrowExceptionForNonStaticLogField() { new NonStaticTester(); } @Test(expected = Exception.class ) public void shouldThrowExceptionIfLogIsInstantiatedInline() { LogUtils.loggerForThisClass(); } @Test public void shouldNotLogWhenDebugIsDisabled() { reset(logger); when(logger.isDebugEnabled()).thenReturn(false); LogUtils.debug(logger, LOG_MESSAGE); verify(logger, times(0)).debug(LOG_MESSAGE); } @Test public void shouldLogWhenDebugIsEnabled() { when(logger.isDebugEnabled()).thenReturn(true); LogUtils.debug(logger, LOG_MESSAGE); verify(logger).debug(LOG_MESSAGE); } @Test public void shouldLogInfoMessages() { LogUtils.info(logger, LOG_MESSAGE); verify(logger).info(LOG_MESSAGE); } @Test public void shouldLogErrorMessages() { LogUtils.error(logger, LOG_MESSAGE); verify(logger).error(LOG_MESSAGE); } @Test public void shouldLogTimeTakenInfoMessages() { long startTime = System.currentTimeMillis(); LogUtils.infoTimeTaken(logger, startTime, NUM_ITEMS, LOG_MESSAGE); String pattern = String.format("%s - took (.*) seconds to do 10 items at (.*) per second.",LOG_MESSAGE); verify(logger).info(matches(pattern)); } // CHECKSTYLE:OFF -- Dummy example classes. Rather make them small than to turn Checkstyle on. private static class StaticTester { protected static final Logger LOG = LogUtils.loggerForThisClass(); } private static class NonStaticTester { @SuppressWarnings("unused") private final Logger log = LogUtils.loggerForThisClass(); } // CHECKSTYLE:ON }