/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2013, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.core; import static ch.qos.logback.core.BasicStatusManager.MAX_HEADER_COUNT; import static ch.qos.logback.core.BasicStatusManager.TAIL_SIZE; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import ch.qos.logback.core.spi.ContextAware; import ch.qos.logback.core.spi.ContextAwareBase; import ch.qos.logback.core.status.ErrorStatus; import ch.qos.logback.core.status.OnConsoleStatusListener; import ch.qos.logback.core.status.Status; import ch.qos.logback.core.status.StatusListener; public class BasicStatusManagerTest { BasicStatusManager bsm = new BasicStatusManager(); Context context = new ContextBase(); ContextAware contextAware = new ContextAwareBase(); OnConsoleStatusListener csl = new OnConsoleStatusListener(); @Before public void before() { contextAware.setContext(context); csl.setContext(context); bsm.clear(); } @Test public void smoke() { bsm.add(new ErrorStatus("hello", this)); assertEquals(Status.ERROR, bsm.getLevel()); List<Status> statusList = bsm.getCopyOfStatusList(); assertNotNull(statusList); assertEquals(1, statusList.size()); assertEquals("hello", statusList.get(0).getMessage()); } @Test public void many() { int margin = 300; int len = MAX_HEADER_COUNT+TAIL_SIZE+margin; for(int i = 0; i < len; i++) { bsm.add(new ErrorStatus(""+i, this)); } List<Status> statusList = bsm.getCopyOfStatusList(); assertNotNull(statusList); assertEquals(MAX_HEADER_COUNT+TAIL_SIZE, statusList.size()); List<Status> witness = new ArrayList<Status>(); for(int i = 0; i < MAX_HEADER_COUNT; i++) { witness.add(new ErrorStatus(""+i, this)); } for(int i = 0; i < TAIL_SIZE; i++) { witness.add(new ErrorStatus(""+(MAX_HEADER_COUNT+margin+i), this)); } assertEquals(witness, statusList); } @Test public void returnsTrueForNewlyAddedConsoleListener() { assertTrue(bsm.addUniquely(csl, contextAware)); assertEquals(OnConsoleStatusListener.class, bsm.getCopyOfStatusListenerList().get(0).getClass()); List<StatusListener> statusList = bsm.getCopyOfStatusListenerList(); assertEquals(1, statusList.size()); } @Test public void returnsFalseWhenNoConsoleListenerAdded() { bsm.addUniquely(csl, contextAware); assertFalse(bsm.addUniquely(csl, contextAware)); List<StatusListener> statusList = bsm.getCopyOfStatusListenerList(); assertEquals(1, statusList.size()); } @Test public void addsConsoleStatusListenerOnlyIfAbsent() { bsm.addUniquely(csl, contextAware); List<StatusListener> statusList = bsm.getCopyOfStatusListenerList(); assertEquals(1, statusList.size()); assertEquals(csl, statusList.get(0)); bsm.addUniquely(csl, contextAware); statusList = bsm.getCopyOfStatusListenerList(); assertEquals(1, statusList.size()); assertEquals(csl, statusList.get(0)); } }