You are viewing a plain text version of this content. The canonical link for it is here.
Posted to surefire-commits@maven.apache.org by ca...@apache.org on 2006/06/15 17:49:51 UTC

svn commit: r414622 - in /maven/surefire/trunk/surefire-api: ./ src/main/java/org/apache/maven/surefire/report/ src/test/java/org/apache/maven/surefire/report/

Author: carlos
Date: Thu Jun 15 08:49:51 2006
New Revision: 414622

URL: http://svn.apache.org/viewvc?rev=414622&view=rev
Log:
Refactor ConsoleReporter output

Added:
    maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java   (with props)
    maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java   (with props)
Modified:
    maven/surefire/trunk/surefire-api/pom.xml
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java

Modified: maven/surefire/trunk/surefire-api/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/pom.xml?rev=414622&r1=414621&r2=414622&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/pom.xml (original)
+++ maven/surefire/trunk/surefire-api/pom.xml Thu Jun 15 08:49:51 2006
@@ -14,6 +14,11 @@
       <version>1.1</version>
     </dependency>
     <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.1</version>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java?rev=414622&r1=414621&r2=414622&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java Thu Jun 15 08:49:51 2006
@@ -28,6 +28,12 @@
 public abstract class AbstractConsoleReporter
     extends AbstractTextReporter
 {
+    private static final String TEST_SET_STARTING_PREFIX = "Running ";
+
+    private static final String TEST_SET_STARTING_GROUP_PREFIX = " (of ";
+
+    private static final String TEST_SET_STARTING_GROUP_SUFIX = ")";
+
     protected static final int BUFFER_SIZE = 4096;
 
     protected AbstractConsoleReporter( String format, Boolean trimStackTrace )
@@ -42,12 +48,7 @@
     {
         super.testSetStarting( report );
 
-        String message = "Running " + report.getName();
-        if ( report.getGroup() != null && !report.getName().equals( report.getGroup() ) )
-        {
-            message = message + " (of " + report.getGroup() + ")";
-        }
-        writeMessage( message );
+        writeMessage( getTestSetStartingMessage( report ) );
     }
 
     public void runStarting( int testCount )
@@ -82,5 +83,61 @@
         writer.println( report.getMessage() );
         writer.println( getStackTrace( report ) );
         writer.flush();
+    }
+
+    /**
+     * Get the test set starting message for a report.
+     * eg. "Running org.foo.BarTest ( of group )"
+     * 
+     * @todo internationalize
+     * @param report report whose test set is starting
+     * @return the message
+     */
+    public String getTestSetStartingMessage( ReportEntry report )
+    {
+        StringBuffer message = new StringBuffer();
+        message.append( TEST_SET_STARTING_PREFIX );
+        message.append( report.getName() );
+
+        if ( report.getGroup() != null && !report.getName().equals( report.getGroup() ) )
+        {
+            message.append( TEST_SET_STARTING_GROUP_PREFIX );
+            message.append( report.getGroup() );
+            message.append( TEST_SET_STARTING_GROUP_SUFIX );
+        }
+        return message.toString();
+    }
+
+    /**
+     * Parses a Surefire test set starting message into a {@link ReportEntry} object.
+     * Only name and group will be set if applicable.
+     * 
+     * @param message
+     * @return the parsed {@link ReportEntry}
+     */
+    public ReportEntry parseTestSetStartingMessage( String message )
+    {
+        ReportEntry reportEntry = new ReportEntry();
+        int i = message.indexOf( TEST_SET_STARTING_GROUP_PREFIX );
+        int j;
+        if ( i >= 0 )
+        {
+            j = message.indexOf( TEST_SET_STARTING_GROUP_SUFIX );
+            if ( j <= 0 )
+            {
+                throw new RuntimeException( "Message provided can not be parsed" );
+            }
+            reportEntry.setGroup( message.substring( i + TEST_SET_STARTING_GROUP_PREFIX.length(), j ) );
+        }
+        else
+        {
+            i = message.length();
+            if ( i <= 0 )
+            {
+                throw new RuntimeException( "Message provided can not be parsed" );
+            }
+        }
+        reportEntry.setName( message.substring( TEST_SET_STARTING_PREFIX.length(), i ) );
+        return reportEntry;
     }
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java?rev=414622&r1=414621&r2=414622&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java Thu Jun 15 08:49:51 2006
@@ -16,13 +16,28 @@
  * limitations under the License.
  */
 
+/**
+ * Surefire reporter that will prefix surefire output to make it easier to parse when forking tests
+ * 
+ * @version $Id$
+ */
 public class ForkingConsoleReporter
     extends ConsoleReporter
 {
+    /**
+     * Surefire output lines not part of header or footer, nor test output will start with this value.
+     * eg. "Running org.foo.BarTest" or "Tests run: ..."
+     */
     public static final String FORKING_PREFIX_STANDARD = "@SL";
 
+    /**
+     * Surefire output lines part of the header will start with this value
+     */
     public static final String FORKING_PREFIX_HEADING = "@HL";
 
+    /**
+     * Surefire output lines part of the footer will start with this value
+     */
     public static final String FORKING_PREFIX_FOOTER = "@FL";
 
     public ForkingConsoleReporter( Boolean trimStackTrace )
@@ -30,6 +45,9 @@
         super( trimStackTrace );
     }
 
+    /**
+     * Write a header line prepending {@link #FORKING_PREFIX_HEADING}
+     */
     public void writeHeading( String message )
     {
         writer.print( FORKING_PREFIX_HEADING );
@@ -37,6 +55,9 @@
         super.writeHeading( message );
     }
 
+    /**
+     * Write a footer line prepending {@link #FORKING_PREFIX_FOOTER}
+     */
     public void writeFooter( String footer )
     {
         writer.print( FORKING_PREFIX_FOOTER );
@@ -45,6 +66,9 @@
         super.writeMessage( footer );
     }
 
+    /**
+     * Write a surefire message line prepending {@link #FORKING_PREFIX_STANDARD}
+     */
     public void writeMessage( String message )
     {
         writer.print( FORKING_PREFIX_STANDARD );

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java?rev=414622&r1=414621&r2=414622&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java Thu Jun 15 08:49:51 2006
@@ -16,6 +16,10 @@
  * limitations under the License.
  */
 
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang.builder.ToStringBuilder;
+
 public class ReportEntry
 {
     private Object source;
@@ -28,6 +32,10 @@
 
     private StackTraceWriter stackTraceWriter;
 
+    public ReportEntry()
+    {
+    }
+
     public ReportEntry( Object source, String name, String message )
     {
         this( source, name, null, message );
@@ -58,15 +66,20 @@
             throw new NullPointerException( "message is null" );
         }
 
-        this.source = source;
+        this.setSource( source );
 
-        this.name = name;
+        this.setName( name );
 
-        this.group = group;
+        this.setGroup( group );
 
-        this.message = message;
+        this.setMessage( message );
 
-        this.stackTraceWriter = stackTraceWriter;
+        this.setStackTraceWriter( stackTraceWriter );
+    }
+
+    public void setSource( Object source )
+    {
+        this.source = source;
     }
 
     public Object getSource()
@@ -74,24 +87,89 @@
         return source;
     }
 
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
     public String getName()
     {
         return name;
     }
 
+    public void setGroup( String group )
+    {
+        this.group = group;
+    }
+
     public String getGroup()
     {
         return group;
     }
 
+    public void setMessage( String message )
+    {
+        this.message = message;
+    }
+
     public String getMessage()
     {
         return message;
     }
 
+    public void setStackTraceWriter( StackTraceWriter stackTraceWriter )
+    {
+        this.stackTraceWriter = stackTraceWriter;
+    }
+
     public StackTraceWriter getStackTraceWriter()
     {
         return stackTraceWriter;
     }
-}
 
+    public boolean equals( Object obj )
+    {
+        if ( obj instanceof ReportEntry == false )
+        {
+            return false;
+        }
+        if ( this == obj )
+        {
+            return true;
+        }
+        ReportEntry rhs = (ReportEntry) obj;
+        return new EqualsBuilder()
+            .append( getSource(), rhs.getSource() )
+            .append( getName(), rhs.getName() )
+            .append( getGroup(), rhs.getGroup() )
+            .append( getMessage(), rhs.getMessage() )
+            .append( getStackTraceWriter(), rhs.getStackTraceWriter() )
+            .isEquals();
+    }
+
+    public String toString()
+    {
+        return new ToStringBuilder( this )
+            .append( "source", getSource() )
+            .append( "name", getName() )
+            .append( "group", getGroup() )
+            .append( "message", getMessage() )
+            .append( "stackTraceWriter", getStackTraceWriter() )
+            .toString();
+    }
+
+    public int hashCode()
+    {
+        // you pick a hard-coded, randomly chosen, non-zero, odd number
+        // ideally different for each class
+        // good resource at http://primes.utm.edu/lists/small/1000.txt
+        return new HashCodeBuilder( 5897, 6653 )
+            .append( getSource() )
+            .append( getName() )
+            .append( getGroup() )
+            .append( getMessage() )
+            .append( getStackTraceWriter() )
+            .toHashCode();
+    }
+
+}

Added: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java?rev=414622&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java (added)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java Thu Jun 15 08:49:51 2006
@@ -0,0 +1,84 @@
+package org.apache.maven.surefire.report;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Test for AbstractConsoleReporter
+ * 
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class AbstractConsoleReporterTest
+    extends TestCase
+{
+
+    private AbstractConsoleReporter consoleReporter;
+
+    private ReportEntry report;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        report = new ReportEntry();
+        report.setGroup( "group" );
+        report.setName( "name" );
+    }
+
+    protected void setConsoleReporter( AbstractConsoleReporter consoleReporter )
+    {
+        this.consoleReporter = consoleReporter;
+    }
+
+    protected AbstractConsoleReporter getConsoleReporter()
+    {
+        return consoleReporter;
+    }
+
+    public void testTestSetStarting()
+        throws Exception
+    {
+        consoleReporter.testSetStarting( report );
+    }
+
+    public void testGetTestSetStartingMessage()
+        throws Exception
+    {
+        String message = consoleReporter.getTestSetStartingMessage( report );
+        assertEquals( "Running name (of group)", message );
+
+        report.setGroup( null );
+        message = consoleReporter.getTestSetStartingMessage( report );
+        assertEquals( "Running name", message );
+    }
+
+    public void testParseTestSetStartingMessage()
+        throws Exception
+    {
+        String message = "Running name (of group)";
+        ReportEntry actualReport = consoleReporter.parseTestSetStartingMessage( message );
+        assertEquals( report, actualReport );
+
+        report.setGroup( null );
+        message = "Running name";
+        actualReport = consoleReporter.parseTestSetStartingMessage( message );
+        assertEquals( report, actualReport );
+    }
+
+}

Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java?rev=414622&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java (added)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java Thu Jun 15 08:49:51 2006
@@ -0,0 +1,37 @@
+package org.apache.maven.surefire.report;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Test for {@link ForkingConsoleReporter}
+ * 
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class ForkingConsoleReporterTest
+    extends AbstractConsoleReporterTest
+{
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        ForkingConsoleReporter consoleReporter = new ForkingConsoleReporter( Boolean.TRUE );
+        setConsoleReporter( consoleReporter );
+    }
+
+}

Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/ForkingConsoleReporterTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"