001/**
002 * Copyright (c) 2004-2012 QOS.ch
003 * All rights reserved.
004 *
005 * Permission is hereby granted, free  of charge, to any person obtaining
006 * a  copy  of this  software  and  associated  documentation files  (the
007 * "Software"), to  deal in  the Software without  restriction, including
008 * without limitation  the rights to  use, copy, modify,  merge, publish,
009 * distribute,  sublicense, and/or sell  copies of  the Software,  and to
010 * permit persons to whom the Software  is furnished to do so, subject to
011 * the following conditions:
012 *
013 * The  above  copyright  notice  and  this permission  notice  shall  be
014 * included in all copies or substantial portions of the Software.
015 *
016 * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
017 * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
018 * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
019 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
020 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
021 * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
022 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023 *
024 */
025package org.slf4j.impl;
026
027import static org.junit.Assert.assertEquals;
028import static org.junit.Assert.assertFalse;
029import static org.junit.Assert.assertNull;
030import static org.junit.Assert.assertTrue;
031
032import java.io.ByteArrayOutputStream;
033import java.io.PrintStream;
034
035import org.junit.After;
036import org.junit.Before;
037import org.junit.Test;
038
039public class SimpleLoggerTest {
040
041    String A_KEY = SimpleLogger.LOG_KEY_PREFIX + "a";
042    PrintStream original = System.out;
043    ByteArrayOutputStream bout = new ByteArrayOutputStream();
044    PrintStream replacement = new PrintStream(bout);
045
046    @Before
047    public void before() {
048        System.setProperty(A_KEY, "info");
049    }
050
051    @After
052    public void after() {
053        System.clearProperty(A_KEY);
054        System.clearProperty(SimpleLogger.CACHE_OUTPUT_STREAM_STRING_KEY);
055        System.setErr(original);
056    }
057
058    @Test
059    public void emptyLoggerName() {
060        SimpleLogger simpleLogger = new SimpleLogger("a");
061        assertEquals("info", simpleLogger.recursivelyComputeLevelString());
062    }
063
064    @Test
065    public void offLevel() {
066        System.setProperty(A_KEY, "off");
067        SimpleLogger.init();
068        SimpleLogger simpleLogger = new SimpleLogger("a");
069        assertEquals("off", simpleLogger.recursivelyComputeLevelString());
070        assertFalse(simpleLogger.isErrorEnabled());
071    }
072
073    @Test
074    public void loggerNameWithNoDots_WithLevel() {
075        SimpleLogger.init();
076        SimpleLogger simpleLogger = new SimpleLogger("a");
077
078        assertEquals("info", simpleLogger.recursivelyComputeLevelString());
079    }
080
081    @Test
082    public void loggerNameWithOneDotShouldInheritFromParent() {
083        SimpleLogger simpleLogger = new SimpleLogger("a.b");
084        assertEquals("info", simpleLogger.recursivelyComputeLevelString());
085    }
086
087    @Test
088    public void loggerNameWithNoDots_WithNoSetLevel() {
089        SimpleLogger simpleLogger = new SimpleLogger("x");
090        assertNull(simpleLogger.recursivelyComputeLevelString());
091    }
092
093    @Test
094    public void loggerNameWithOneDot_NoSetLevel() {
095        SimpleLogger simpleLogger = new SimpleLogger("x.y");
096        assertNull(simpleLogger.recursivelyComputeLevelString());
097    }
098
099    @Test
100    public void checkUseOfLastSystemStreamReference() {
101        SimpleLogger.init();
102        SimpleLogger simpleLogger = new SimpleLogger(this.getClass().getName());
103
104        System.setErr(replacement);
105        simpleLogger.info("hello");
106        replacement.flush();
107        assertTrue(bout.toString().contains("INFO org.slf4j.impl.SimpleLoggerTest - hello"));
108    }
109
110    @Test
111    public void checkUseOfCachedOutputStream() {
112        System.setErr(replacement);
113        System.setProperty(SimpleLogger.CACHE_OUTPUT_STREAM_STRING_KEY, "true");
114        SimpleLogger.init();
115        SimpleLogger simpleLogger = new SimpleLogger(this.getClass().getName());
116        // change reference to original before logging
117        System.setErr(original);
118
119        simpleLogger.info("hello");
120        replacement.flush();
121        assertTrue(bout.toString().contains("INFO org.slf4j.impl.SimpleLoggerTest - hello"));
122    }
123}