/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.sling.scripting.core.impl; import java.io.IOException; import junit.framework.TestCase; import org.apache.sling.scripting.core.impl.LogWriter; import org.slf4j.Logger; import org.slf4j.Marker; public class LogWriterTest extends TestCase { public void testCharacter() { MockLogger logger = new MockLogger(); LogWriter logWriter = new LogWriter(logger); // ensure logger is empty logger.getLastMessage(); // empty flush logWriter.flush(); String msg = logger.getLastMessage(); assertNull(msg); // write a single character, message only after flush logWriter.write('a'); assertNull(logger.getLastMessage()); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals("a", msg); // write a single CR, no message logWriter.write('\r'); assertNull(logger.getLastMessage()); // write a single LF, no message logWriter.write('\n'); assertNull(logger.getLastMessage()); // write three characters (one is CR) logWriter.write('a'); logWriter.write('\r'); logWriter.write('b'); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals("a", msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals("b", msg); // write three characters (one is LF) logWriter.write('a'); logWriter.write('\n'); logWriter.write('b'); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals("a", msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals("b", msg); } public void testStringCR() throws IOException { MockLogger logger = new MockLogger(); LogWriter logWriter = new LogWriter(logger); // ensure logger is empty logger.getLastMessage(); // empty flush logWriter.flush(); String msg = logger.getLastMessage(); assertNull(msg); // intermediate CR String tMsg1 = "Ein"; String tMsg2 = "Text"; String tMsg = tMsg1 + "\r" + tMsg2; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg1, msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg2, msg); // initial CR tMsg = "\r" + tMsg1 + tMsg2; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNull(msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg1 + tMsg2, msg); // terminating CR tMsg = tMsg1 + tMsg2 + "\r"; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg1+tMsg2, msg); logWriter.flush(); msg = logger.getLastMessage(); assertNull(msg); } public void testStringLF() throws IOException { MockLogger logger = new MockLogger(); LogWriter logWriter = new LogWriter(logger); // ensure logger is empty logger.getLastMessage(); // empty flush logWriter.flush(); String msg = logger.getLastMessage(); assertNull(msg); // intermediate LF String tMsg1 = "Ein"; String tMsg2 = "Text"; String tMsg = tMsg1 + "\n" + tMsg2; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg1, msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg2, msg); // initial LF tMsg = "\n" + tMsg1 + tMsg2; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNull(msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg1 + tMsg2, msg); // terminating LF tMsg = tMsg1 + tMsg2 + "\n"; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg1+tMsg2, msg); logWriter.flush(); msg = logger.getLastMessage(); assertNull(msg); } public void testString() throws IOException { MockLogger logger = new MockLogger(); LogWriter logWriter = new LogWriter(logger); // ensure logger is empty logger.getLastMessage(); // empty flush logWriter.flush(); String msg = logger.getLastMessage(); assertNull(msg); // flushed line String tMsg = "Ein Text"; logWriter.write(tMsg); msg = logger.getLastMessage(); assertNull(msg); logWriter.flush(); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg, msg); // CR terminated line logWriter.write(tMsg + "\r"); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg, msg); // LF terminated line logWriter.write(tMsg + "\n"); msg = logger.getLastMessage(); assertNotNull(msg); assertEquals(tMsg, msg); } private static class MockLogger implements Logger { private String lastMessage; String getLastMessage() { String msg = lastMessage; lastMessage = null; return msg; } public void debug(String msg) { fail("Unexpected call"); } public void debug(String format, Object arg) { fail("Unexpected call"); } public void debug(String format, Object[] argArray) { fail("Unexpected call"); } public void debug(String msg, Throwable t) { fail("Unexpected call"); } public void debug(Marker marker, String msg) { fail("Unexpected call"); } public void debug(String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void debug(Marker marker, String format, Object arg) { fail("Unexpected call"); } public void debug(Marker marker, String format, Object[] argArray) { fail("Unexpected call"); } public void debug(Marker marker, String msg, Throwable t) { fail("Unexpected call"); } public void debug(Marker marker, String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void error(String msg) { lastMessage = msg; } public void error(String format, Object arg) { fail("Unexpected call"); } public void error(String format, Object[] argArray) { fail("Unexpected call"); } public void error(String msg, Throwable t) { fail("Unexpected call"); } public void error(Marker marker, String msg) { fail("Unexpected call"); } public void error(String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void error(Marker marker, String format, Object arg) { fail("Unexpected call"); } public void error(Marker marker, String format, Object[] argArray) { fail("Unexpected call"); } public void error(Marker marker, String msg, Throwable t) { fail("Unexpected call"); } public void error(Marker marker, String format, Object arg1, Object arg2) { fail("Unexpected call"); } public String getName() { return "mock"; } public void info(String msg) { fail("Unexpected call"); } public void info(String format, Object arg) { fail("Unexpected call"); } public void info(String format, Object[] argArray) { fail("Unexpected call"); } public void info(String msg, Throwable t) { fail("Unexpected call"); } public void info(Marker marker, String msg) { fail("Unexpected call"); } public void info(String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void info(Marker marker, String format, Object arg) { fail("Unexpected call"); } public void info(Marker marker, String format, Object[] argArray) { fail("Unexpected call"); } public void info(Marker marker, String msg, Throwable t) { fail("Unexpected call"); } public void info(Marker marker, String format, Object arg1, Object arg2) { fail("Unexpected call"); } public boolean isDebugEnabled() { return false; } public boolean isDebugEnabled(Marker marker) { return false; } public boolean isErrorEnabled() { return true; } public boolean isErrorEnabled(Marker marker) { return true; } public boolean isInfoEnabled() { return false; } public boolean isInfoEnabled(Marker marker) { return false; } public boolean isTraceEnabled() { return false; } public boolean isTraceEnabled(Marker marker) { return false; } public boolean isWarnEnabled() { return false; } public boolean isWarnEnabled(Marker marker) { return false; } public void trace(String msg) { fail("Unexpected call"); } public void trace(String format, Object arg) { fail("Unexpected call"); } public void trace(String format, Object[] argArray) { fail("Unexpected call"); } public void trace(String msg, Throwable t) { fail("Unexpected call"); } public void trace(Marker marker, String msg) { fail("Unexpected call"); } public void trace(String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void trace(Marker marker, String format, Object arg) { fail("Unexpected call"); } public void trace(Marker marker, String format, Object[] argArray) { fail("Unexpected call"); } public void trace(Marker marker, String msg, Throwable t) { fail("Unexpected call"); } public void trace(Marker marker, String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void warn(String msg) { fail("Unexpected call"); } public void warn(String format, Object arg) { fail("Unexpected call"); } public void warn(String format, Object[] argArray) { fail("Unexpected call"); } public void warn(String msg, Throwable t) { fail("Unexpected call"); } public void warn(Marker marker, String msg) { fail("Unexpected call"); } public void warn(String format, Object arg1, Object arg2) { fail("Unexpected call"); } public void warn(Marker marker, String format, Object arg) { fail("Unexpected call"); } public void warn(Marker marker, String format, Object[] argArray) { fail("Unexpected call"); } public void warn(Marker marker, String msg, Throwable t) { fail("Unexpected call"); } public void warn(Marker marker, String format, Object arg1, Object arg2) { fail("Unexpected call"); } } }