package com.google.code.microlog4android; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Test; import android.test.AndroidTestCase; import com.google.code.microlog4android.appender.Appender; import com.google.code.microlog4android.appender.LogCatAppender; import com.google.code.microlog4android.repository.DefaultLoggerRepository; public class LoggerTest { private Logger logger; @Before public void setup() { logger = new Logger(LoggerTest.class.getName()); logger.setCommonRepository(DefaultLoggerRepository.INSTANCE); } @After public void teardown() { DefaultLoggerRepository.INSTANCE.reset(); } @Test public void testGetEffectiveLevel() { DefaultLoggerRepository.INSTANCE.getLogger(LoggerTest.class.getName()); DefaultLoggerRepository.INSTANCE.setLevel(LoggerTest.class.getName(), Level.DEBUG); Level returnLevel = logger.getEffectiveLevel(); assertEquals(Level.DEBUG, returnLevel); } @Test(expected = IllegalArgumentException.class) public void testAddAppenderNullInput() { logger.addAppender(null); } @Test public void testAddAppender() { logger.addAppender(new LogCatAppender()); assertEquals(1, logger.getNumberOfAppenders()); } @Test public void testAddAppenderDuplicateValue() { LogCatAppender lcAppender = new LogCatAppender(); logger.addAppender(lcAppender); logger.addAppender(lcAppender); assertEquals(1, logger.getNumberOfAppenders()); } @Test(expected = IllegalArgumentException.class) public void testRemoveAppenderNullInput() { logger.removeAppender(null); } @Test public void testRemoveAppenderOpenLog() throws IOException { Appender mockedAppender = mock(Appender.class); when(mockedAppender.isLogOpen()).thenReturn(true); logger.addAppender(mockedAppender); logger.removeAppender(mockedAppender); verify(mockedAppender).close(); assertEquals(0, logger.getNumberOfAppenders()); } @Test public void testRemoveAppenderClosedLog() throws IOException { Appender mockedAppender = mock(Appender.class); when(mockedAppender.isLogOpen()).thenReturn(false); logger.addAppender(mockedAppender); logger.removeAppender(mockedAppender); verify(mockedAppender, times(0)).close(); assertEquals(0, logger.getNumberOfAppenders()); } @Test public void testRemoveAllAppenders() { LogCatAppender lcAppender1 = new LogCatAppender(); LogCatAppender lcAppender2 = new LogCatAppender(); logger.addAppender(lcAppender1); logger.addAppender(lcAppender2); logger.removeAllAppenders(); assertEquals(0, logger.getNumberOfAppenders()); } @Test(expected = IllegalArgumentException.class) public void testLogNullLevelInput() { logger.log(null, "", null); } @Test public void testLogValidLevel() { Appender mockedAppender = mock(Appender.class); logger.addAppender(mockedAppender); DefaultLoggerRepository.INSTANCE.getLogger(LoggerTest.class.getName()); DefaultLoggerRepository.INSTANCE.setLevel(LoggerTest.class.getName(), Level.DEBUG); logger.log(Level.INFO, "test"); verify(mockedAppender).doLog(anyString(), anyString(), anyLong(), any(Level.class), anyString(), any(Throwable.class)); } @Test public void testLogInvalidLevel() { Appender mockedAppender = mock(Appender.class); logger.addAppender(mockedAppender); DefaultLoggerRepository.INSTANCE.getLogger(LoggerTest.class.getName()); DefaultLoggerRepository.INSTANCE.setLevel(LoggerTest.class.getName(), Level.INFO); logger.log(Level.DEBUG, "test"); verifyZeroInteractions(mockedAppender); } @Test public void testDefaultLevel() { Logger defaultLevelLogger = DefaultLoggerRepository.INSTANCE.getLogger(LoggerTest.class.getName()); assertEquals(Level.DEBUG, defaultLevelLogger.getEffectiveLevel()); } }