Author: nbubna
Date: Fri Sep 19 12:39:05 2008
New Revision: 697209

URL: http://svn.apache.org/viewvc?rev=697209&view=rev
Log:
make SystemLogChute serve as base for a more flexible TestLogChute

Modified:
    
velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/SystemLogChute.java
    
velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java
    
velocity/engine/trunk/src/test/org/apache/velocity/test/misc/TestLogChute.java

Modified: 
velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/SystemLogChute.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/SystemLogChute.java?rev=697209&r1=697208&r2=697209&view=diff
==============================================================================
--- 
velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/SystemLogChute.java
 (original)
+++ 
velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/SystemLogChute.java
 Fri Sep 19 12:39:05 2008
@@ -19,6 +19,7 @@
  * under the License.    
  */
 
+import java.io.PrintStream;
 import org.apache.velocity.runtime.RuntimeServices;
 
 /**
@@ -135,23 +136,22 @@
         String prefix = getPrefix(level);
         if (level >= this.errLevel)
         {
-            System.err.print(prefix);
-            System.err.println(message);
-            if (t != null)
-            {
-                System.err.println(t.getMessage());
-                t.printStackTrace();
-            }
+            write(System.err, prefix, message, t);
         }
         else
         {
-            System.out.print(prefix);
-            System.out.println(message);
-            if (t != null)
-            {
-                System.out.println(t.getMessage());
-                t.printStackTrace(System.out);
-            }
+            write(System.out, prefix, message, t);
+        }
+    }
+
+    protected void write(PrintStream stream, String prefix, String message, 
Throwable t)
+    {
+        stream.print(prefix);
+        stream.println(message);
+        if (t != null)
+        {
+            stream.println(t.getMessage());
+            t.printStackTrace(stream);
         }
     }
 

Modified: 
velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java?rev=697209&r1=697208&r2=697209&view=diff
==============================================================================
--- 
velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java 
(original)
+++ 
velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java 
Fri Sep 19 12:39:05 2008
@@ -27,7 +27,7 @@
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.runtime.RuntimeConstants;
-import org.apache.velocity.runtime.log.SystemLogChute;
+import org.apache.velocity.test.misc.TestLogChute;
 
 /**
  * Base for test cases that use evaluate, instead of going
@@ -38,6 +38,7 @@
     protected VelocityEngine engine;
     protected VelocityContext context;
     protected boolean DEBUG = false;
+    protected TestLogChute log;
 
     public BaseEvalTestCase(String name)
     {
@@ -49,9 +50,9 @@
         engine = new VelocityEngine();
 
         //by default, make the engine's log output go to the test-report
-        SystemLogChute log = new SystemLogChute();
-        log.setEnabledLevel(SystemLogChute.INFO_ID);
-        log.setSystemErrLevel(SystemLogChute.WARN_ID);
+        log = new TestLogChute(false, false);
+        log.setEnabledLevel(TestLogChute.INFO_ID);
+        log.setSystemErrLevel(TestLogChute.WARN_ID);
         engine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, log);
 
         context = new VelocityContext();

Modified: 
velocity/engine/trunk/src/test/org/apache/velocity/test/misc/TestLogChute.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/misc/TestLogChute.java?rev=697209&r1=697208&r2=697209&view=diff
==============================================================================
--- 
velocity/engine/trunk/src/test/org/apache/velocity/test/misc/TestLogChute.java 
(original)
+++ 
velocity/engine/trunk/src/test/org/apache/velocity/test/misc/TestLogChute.java 
Fri Sep 19 12:39:05 2008
@@ -19,153 +19,96 @@
  * under the License.    
  */
 
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
 import org.apache.velocity.runtime.RuntimeServices;
-import org.apache.velocity.runtime.log.LogChute;
+import org.apache.velocity.runtime.log.SystemLogChute;
 
 /**
- * LogChute implementation that creates a String in memory.  Used to test
- * log information.
+ * LogChute implementation that can easily capture output
+ * or suppress it entirely.  By default, both capture and suppress
+ * are on. To have this behave like a normal SystemLogChute,
+ * you must turn it on() and stopCapture().
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Will Glass-Husain</a>
+ * @author Nathan Bubna
  * @version $Id$
  */
-public class TestLogChute implements LogChute
+public class TestLogChute extends SystemLogChute
 {
     public static final String TEST_LOGGER_LEVEL = 
"runtime.log.logsystem.test.level";
 
-    private StringBuffer log = new StringBuffer();
+    private ByteArrayOutputStream log;
+    private PrintStream systemDotIn;
+    private boolean suppress = true;
+    private boolean capture = true;
 
-    private int logLevel;
-    private boolean on;
+    public TestLogChute()
+    {
+        log = new ByteArrayOutputStream();
+        systemDotIn = new PrintStream(log, true);
+    }
+
+    public TestLogChute(boolean suppress, boolean capture)
+    {
+        this();
+        this.suppress = suppress;
+        this.capture = capture;
+    }
     
     public void init(RuntimeServices rs) throws Exception
     {
+        super.init(rs);
+
         String level = rs.getString(TEST_LOGGER_LEVEL, "debug");
-        logLevel = getLevelNumber(level, LogChute.DEBUG_ID);
+        setEnabledLevel(toLevel(level));
     }
 
     public void on()
     {
-        on = true;
+        suppress = false;
     }
 
     public void off()
     {
-        on = false;
+        suppress = true;
     }
 
-    public void log(int level, String message)
+    public void startCapture()
     {
-        if (on && level >= logLevel)
-        {
-            String levelName;
-            levelName = getLevelName(level);
-            log.append(" [").append(levelName).append("] ");
-            log.append(message);
-            log.append("\n");
-        }
+        capture = true;
     }
-    
-    /**
-     * Return the stored log messages to date.
-     * @return log messages
-     */
-    public String getLog()
+
+    public void stopCapture()
     {
-        return log.toString();
+        capture = false;
     }
 
-    /**
-     * Return the name corresponding to each level
-     * @param level integer level
-     * @return String level name
-     */
-    private String getLevelName(int level)
+    public boolean isLevelEnabled(int level)
     {
-        String levelName;
-        if (level == LogChute.DEBUG_ID)
-        {
-            levelName = "debug";
-        }
-        else if (level == LogChute.INFO_ID)
-        {
-            levelName = "info";
-        }
-        else if (level == LogChute.TRACE_ID)
-        {
-            levelName = "trace";
-        }
-        else if (level == LogChute.WARN_ID)
-        {
-            levelName = "warn";
-        }
-        else if (level == LogChute.ERROR_ID)
-        {
-            levelName = "error";
-        }
-        else 
-        {
-            levelName = "";
-        }
-
-        return levelName;
+        return !suppress && super.isLevelEnabled(level);
     }
+            
 
-    /**
-     * Return the integer level correspoding to the string number, or use the 
default
-     * @param level name
-     * @param defaultLevel the default if the name does not exist
-     * @return integer level
-     */
-    private int getLevelNumber(String level, int defaultLevel)
+    protected void write(PrintStream ps, String prefix, String message, 
Throwable t)
     {
-        if (level == null)
-        {
-            return defaultLevel;
-        }
-        else if (level.equalsIgnoreCase("DEBUG"))
-        {
-            return LogChute.DEBUG_ID;
-        }
-        else if (level.equalsIgnoreCase("ERROR"))
-        {
-            return LogChute.ERROR_ID;
-        }
-        else if (level.equalsIgnoreCase("INFO"))
-        {
-            return LogChute.INFO_ID;
-        }
-        else if (level.equalsIgnoreCase("TRACE"))
+        if (capture)
         {
-            return LogChute.TRACE_ID;
+            super.write(systemDotIn, prefix, message, t);
         }
-        else if (level.equalsIgnoreCase("WARN"))
+        else
         {
-            return LogChute.WARN_ID;
-        }
-        else 
-        {
-            return defaultLevel;
-        }
-    }
-    
-    public void log(int level, String message, Throwable t)
-    {
-        if (on && level >= logLevel)
-        {
-            String levelName;
-            levelName = getLevelName(level);
-            log.append(" [").append(levelName).append("] ");
-            log.append(message);
-            log.append("\n");
-            log.append(t.toString());
-            log.append("\n");
+            super.write(ps, prefix, message, t);
         }
     }
 
-    public boolean isLevelEnabled(int level)
+    /**
+     * Return the captured log messages to date.
+     * @return log messages
+     */
+    public String getLog()
     {
-        return level >= logLevel;
+        return log.toString();
     }
 
 }


Reply via email to