Author: bodewig
Date: Tue May  6 19:44:37 2014
New Revision: 1592848

URL: http://svn.apache.org/r1592848
Log:
PR 56470 - merge messages in LogCapturer only when asked to

Modified:
    ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/LogCapturer.java
    
ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/LogCapturerTest.java

Modified: 
ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/LogCapturer.java
URL: 
http://svn.apache.org/viewvc/ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/LogCapturer.java?rev=1592848&r1=1592847&r2=1592848&view=diff
==============================================================================
--- ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/LogCapturer.java 
(original)
+++ ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/LogCapturer.java 
Tue May  6 19:44:37 2014
@@ -20,6 +20,10 @@
 
 package org.apache.ant.antunit;
 
+import java.util.Iterator;
+import java.util.List;
+import java.util.LinkedList;
+
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.Project;
@@ -36,11 +40,7 @@ import org.apache.tools.ant.util.StringU
 public class LogCapturer implements BuildListener {
     public static final String REFERENCE_ID = "ant.antunit.log";
 
-    private StringBuffer err = new StringBuffer();
-    private StringBuffer warn = new StringBuffer();
-    private StringBuffer info = new StringBuffer();
-    private StringBuffer verbose = new StringBuffer();
-    private StringBuffer debug = new StringBuffer();
+    private List/*<BuildEvent>*/ events = new LinkedList();
     private Project p;
 
     public LogCapturer(Project p) {
@@ -50,38 +50,84 @@ public class LogCapturer implements Buil
     }
 
     /**
-     * All messages with <code>logLevel == Project.MSG_ERR</code>.
+     * All messages with <code>logLevel == Project.MSG_ERR</code>
+     * merging messages into a single line.
      */
     public String getErrLog() {
-        return err.toString();
+        return getErrLog(true);
     }
     /**
      * All messages with <code>logLevel == Project.MSG_WARN</code> or
-     * more severe.
+     * more severe merging messages into a single line.
      */
     public String getWarnLog() {
-        return warn.toString();
+        return getWarnLog(true);
     }
     /**
      * All messages with <code>logLevel == Project.MSG_INFO</code> or
-     * more severe.
+     * more severe merging messages into a single line.
      */
     public String getInfoLog() {
-        return info.toString();
+        return getInfoLog(true);
     }
     /**
      * All messages with <code>logLevel == Project.MSG_VERBOSE</code> or
-     * more severe.
+     * more severe merging messages into a single line.
      */
     public String getVerboseLog() {
-        return verbose.toString();
+        return getVerboseLog(true);
     }
     /**
      * All messages with <code>logLevel == Project.MSG_DEBUG</code> or
-     * more severe.
+     * more severe merging messages into a single line.
      */
     public String getDebugLog() {
-        return debug.toString();
+        return getDebugLog(true);
+    }
+
+    /**
+     * All messages with <code>logLevel == Project.MSG_ERR</code>.
+     * @param mergeLines whether to merge messages into a single line
+     * or split them into multiple lines
+     */
+    public String getErrLog(boolean mergeLines) {
+        return getLog(Project.MSG_ERR, mergeLines);
+    }
+    /**
+     * All messages with <code>logLevel == Project.MSG_WARN</code> or
+     * more severe.
+     * @param mergeLines whether to merge messages into a single line
+     * or split them into multiple lines
+     */
+    public String getWarnLog(boolean mergeLines) {
+        return getLog(Project.MSG_WARN, mergeLines);
+    }
+    /**
+     * All messages with <code>logLevel == Project.MSG_INFO</code> or
+     * more severe.
+     * @param mergeLines whether to merge messages into a single line
+     * or split them into multiple lines
+     */
+    public String getInfoLog(boolean mergeLines) {
+        return getLog(Project.MSG_INFO, mergeLines);
+    }
+    /**
+     * All messages with <code>logLevel == Project.MSG_VERBOSE</code> or
+     * more severe.
+     * @param mergeLines whether to merge messages into a single line
+     * or split them into multiple lines
+     */
+    public String getVerboseLog(boolean mergeLines) {
+        return getLog(Project.MSG_VERBOSE, mergeLines);
+    }
+    /**
+     * All messages with <code>logLevel == Project.MSG_DEBUG</code> or
+     * more severe.
+     * @param mergeLines whether to merge messages into a single line
+     * or split them into multiple lines
+     */
+    public String getDebugLog(boolean mergeLines) {
+        return getLog(Project.MSG_DEBUG, mergeLines);
     }
 
     /**
@@ -119,24 +165,24 @@ public class LogCapturer implements Buil
      * Record the message.
      */
     public void messageLogged(BuildEvent event) {
-        if (event.getPriority() <= Project.MSG_ERR) {
-            append(err, event);
-        }
-        if (event.getPriority() <= Project.MSG_WARN) {
-            append(warn, event);
-        }
-        if (event.getPriority() <= Project.MSG_INFO) {
-            append(info, event);
-        }
-        if (event.getPriority() <= Project.MSG_VERBOSE) {
-            append(verbose, event);
-        }
-        if (event.getPriority() <= Project.MSG_DEBUG) {
-            append(debug, event);
+        events.add(event);
+    }
+
+    private String getLog(int minPriority, boolean mergeLines) {
+        StringBuffer sb = new StringBuffer();
+        for (Iterator/*<BuildEvent>*/ it = events.iterator(); it.hasNext(); ) {
+            append(sb, (BuildEvent) it.next(), minPriority, mergeLines);
         }
+        return sb.toString();
     }
 
-    private static void append(StringBuffer sb, BuildEvent event) {
-        sb.append(event.getMessage()).append(StringUtils.LINE_SEP);
+    private static void append(StringBuffer sb, BuildEvent event,
+                               int minPriority, boolean mergeLines) {
+        if (event.getPriority() <= minPriority) {
+            sb.append(event.getMessage());
+            if (!mergeLines) {
+                sb.append(StringUtils.LINE_SEP);
+            }
+        }
     }
 }

Modified: 
ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/LogCapturerTest.java
URL: 
http://svn.apache.org/viewvc/ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/LogCapturerTest.java?rev=1592848&r1=1592847&r2=1592848&view=diff
==============================================================================
--- 
ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/LogCapturerTest.java
 (original)
+++ 
ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/LogCapturerTest.java
 Tue May  6 19:44:37 2014
@@ -21,6 +21,7 @@ package org.apache.ant.antunit;
 
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.util.StringUtils;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
@@ -55,6 +56,33 @@ public class LogCapturerTest extends Tes
         assertMessages(c.getDebugLog(), messages, Project.MSG_DEBUG);
     }
 
+    public void testWithoutMerge() {
+        Project p = new Project();
+        LogCapturer c = new LogCapturer(p);
+
+        for (int i = 0; i < 2; i++) {
+            BuildEvent be = new BuildEvent(p);
+            be.setMessage(String.valueOf(i), 0);
+            c.messageLogged(be);
+        }
+        Assert.assertEquals(c.getErrLog(false),
+                            "0" + StringUtils.LINE_SEP
+                            + "1" + StringUtils.LINE_SEP);
+    }
+
+    public void testWithMerge() {
+        Project p = new Project();
+        LogCapturer c = new LogCapturer(p);
+
+        for (int i = 0; i < 2; i++) {
+            BuildEvent be = new BuildEvent(p);
+            be.setMessage(String.valueOf(i), 0);
+            c.messageLogged(be);
+        }
+        Assert.assertEquals(c.getErrLog(), "01");
+        Assert.assertEquals(c.getErrLog(true), "01");
+    }
+
     private static void assertMessages(String actual, String[] messages,
                                        int upTo) {
         for (int i = 0; i <= upTo && i < messages.length; i++) {
@@ -66,4 +94,4 @@ public class LogCapturerTest extends Tes
                               actual.indexOf(messages[i]) == -1);
         }
     }
-}
\ No newline at end of file
+}


Reply via email to