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 df...@apache.org on 2008/01/24 08:06:44 UTC

svn commit: r614808 - in /maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report: ReportTestSuite.java SurefireReportParser.java TestSuiteXmlParser.java

Author: dfabulich
Date: Wed Jan 23 23:06:41 2008
New Revision: 614808

URL: http://svn.apache.org/viewvc?rev=614808&view=rev
Log:
Refactoring ReportTestSuite, extracting XML parsing logic into a separate TestSuiteXmlParser.  This is in preparation for fixing SUREFIRE-433; wanted to checkpoint before I plowed ahead.

Added:
    maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java
      - copied, changed from r612608, maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java
Modified:
    maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java
    maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java

Modified: maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java?rev=614808&r1=614807&r2=614808&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java (original)
+++ maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java Wed Jan 23 23:06:41 2008
@@ -19,25 +19,9 @@
  * under the License.
  */
 
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.File;
-import java.io.IOException;
-import java.text.NumberFormat;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
 
 public class ReportTestSuite
-    extends DefaultHandler
 {
     private List testCases;
 
@@ -56,159 +40,7 @@
     private String packageName;
 
     private float timeElapsed;
-
-    private NumberFormat numberFormat = NumberFormat.getInstance();
-
-    /**
-     * @noinspection StringBufferField
-     */
-    private StringBuffer currentElement;
-
-    private ReportTestCase testCase;
-
-    public void parse( String xmlPath )
-        throws ParserConfigurationException, SAXException, IOException
-    {
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-
-        SAXParser saxParser = factory.newSAXParser();
-
-        saxParser.parse( new File( xmlPath ), this );
-    }
-
-
-    private int getAttributeAsInt( Attributes attributes, String name )
-    {
-        // may or may not exist
-        String valueAsString = attributes.getValue( name );
-        if ( valueAsString != null )
-        {
-            return Integer.parseInt( valueAsString );
-        }
-        return 0;
-    }
-
-    public void startElement( String uri, String localName, String qName, Attributes attributes )
-        throws SAXException
-    {
-        try
-        {
-            if ( "testsuite".equals( qName ) )
-            {
-                numberOfErrors = getAttributeAsInt( attributes, "errors" );
-                numberOfFailures = getAttributeAsInt( attributes, "failures" );
-                numberOfSkipped = getAttributeAsInt( attributes, "skipped" );
-                numberOfTests = getAttributeAsInt( attributes, "tests" );
-
-                Number time = numberFormat.parse( attributes.getValue( "time" ) );
-
-                timeElapsed = time.floatValue();
-
-                //check if group attribute is existing
-                if ( attributes.getValue( "group" ) != null && !"".equals( attributes.getValue( "group" ) ) )
-                {
-                    packageName = attributes.getValue( "group" );
-
-                    name = attributes.getValue( "name" );
-
-                    fullClassName = packageName + "." + name;
-                }
-                else
-                {
-                    fullClassName = attributes.getValue( "name" );
-
-                    name = fullClassName.substring( fullClassName.lastIndexOf( "." ) + 1, fullClassName.length() );
-
-                    int lastDotPosition = fullClassName.lastIndexOf( "." );
-                    if ( lastDotPosition < 0 )
-                    {
-                        /* no package name */
-                        packageName = "";
-                    }
-                    else
-                    {
-                        packageName = fullClassName.substring( 0, lastDotPosition );
-                    }
-                }
-
-                testCases = new ArrayList();
-            }
-            else if ( "testcase".equals( qName ) )
-            {
-                currentElement = new StringBuffer();
-
-                testCase = new ReportTestCase();
-
-                testCase.setFullClassName( fullClassName );
-
-                testCase.setName( attributes.getValue( "name" ) );
-
-                testCase.setClassName( name );
-
-                String timeAsString = attributes.getValue( "time" );
-
-                Number time = new Integer( 0 );
-
-                if ( timeAsString != null )
-                {
-                    time = numberFormat.parse( timeAsString );
-                }
-
-                testCase.setTime( time.floatValue() );
-
-                testCase.setFullName( packageName + "." + name + "." + testCase.getName() );
-            }
-            else if ( "failure".equals( qName ) )
-            {
-                testCase.addFailure( attributes.getValue( "message" ), attributes.getValue( "type" ) );
-            }
-            else if ( "error".equals( qName ) )
-            {
-                testCase.addFailure( attributes.getValue( "message" ), attributes.getValue( "type" ) );
-            }
-            else if ( "skipped".equals( qName ) )
-            {
-                testCase.addFailure( "skipped", "skipped" ); // TODO extract real reasons
-            }
-        }
-        catch ( ParseException e )
-        {
-            throw new SAXException( e.getMessage(), e );
-        }
-    }
-
-    public void endElement( String uri, String localName, String qName )
-        throws SAXException
-    {
-        if ( "testcase".equals( qName ) )
-        {
-            testCases.add( testCase );
-        }
-        else if ( "failure".equals( qName ) )
-        {
-            Map failure = testCase.getFailure();
-
-            failure.put( "detail", parseCause( currentElement.toString() ) );
-        }
-        else if ( "error".equals( qName ) )
-        {
-            Map error = testCase.getFailure();
-
-            error.put( "detail", parseCause( currentElement.toString() ) );
-        }
-    }
-
-    public void characters( char[] ch, int start, int length )
-        throws SAXException
-    {
-        String s = new String( ch, start, length );
-
-        if ( !"".equals( s.trim() ) )
-        {
-            currentElement.append( s );
-        }
-    }
-
+    
     public List getTestCases()
     {
         return this.testCases;
@@ -264,14 +96,14 @@
         this.name = name;
     }
 
-    public String getFName()
+    public String getFullClassName()
     {
-        return name;
+        return fullClassName;
     }
 
-    public void setFName( String name )
+    public void setFullClassName( String fullClassName )
     {
-        this.name = name;
+        this.fullClassName = fullClassName;
     }
 
     public String getPackageName()
@@ -294,33 +126,8 @@
         this.timeElapsed = timeElapsed;
     }
 
-    private List parseCause( String detail )
-    {
-        String fullName = testCase.getFullName();
-        String name = fullName.substring( fullName.lastIndexOf( "." ) + 1 );
-        return parseCause( detail, name );
-    }
-
-    private List parseCause( String detail, String compareTo )
-    {
-        StringTokenizer stringTokenizer = new StringTokenizer( detail, "\n" );
-        List parsedDetail = new ArrayList( stringTokenizer.countTokens() );
-
-        while ( stringTokenizer.hasMoreTokens() )
-        {
-            String lineString = stringTokenizer.nextToken().trim();
-            parsedDetail.add( lineString );
-            if ( lineString.indexOf( compareTo ) >= 0 )
-            {
-                break;
-            }
-        }
-
-        return parsedDetail;
-    }
-
     public void setTestCases( List testCases )
     {
-        this.testCases = Collections.unmodifiableList( testCases );
+        this.testCases = testCases;
     }
 }

Modified: maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java?rev=614808&r1=614807&r2=614808&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java (original)
+++ maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java Wed Jan 23 23:06:41 2008
@@ -74,15 +74,16 @@
                 xmlReportFileList.add( xmlReport );
             }
         }
+        TestSuiteXmlParser parser = new TestSuiteXmlParser();
         for ( int index = 0; index < xmlReportFileList.size(); index++ )
         {
-            ReportTestSuite testSuite = new ReportTestSuite();
+            ReportTestSuite testSuite;
 
             File currentReport = (File) xmlReportFileList.get( index );
 
             try
             {
-                testSuite.parse( currentReport.getAbsolutePath() );
+                testSuite = parser.parse( currentReport.getAbsolutePath() );
             }
             catch ( ParserConfigurationException e )
             {

Copied: maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java (from r612608, maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java)
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java?p2=maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java&p1=maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java&r1=612608&r2=614808&rev=614808&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestSuite.java (original)
+++ maven/surefire/trunk/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java Wed Jan 23 23:06:41 2008
@@ -19,44 +19,27 @@
  * under the License.
  */
 
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
 import java.io.File;
 import java.io.IOException;
 import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 
-public class ReportTestSuite
-    extends DefaultHandler
-{
-    private List testCases;
-
-    private int numberOfErrors;
-
-    private int numberOfFailures;
-
-    private int numberOfSkipped;
-
-    private int numberOfTests;
-
-    private String name;
-
-    private String fullClassName;
-
-    private String packageName;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
 
-    private float timeElapsed;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
 
+public class TestSuiteXmlParser
+    extends DefaultHandler
+{
+    private ReportTestSuite suite;
     private NumberFormat numberFormat = NumberFormat.getInstance();
 
     /**
@@ -66,7 +49,7 @@
 
     private ReportTestCase testCase;
 
-    public void parse( String xmlPath )
+    public ReportTestSuite parse( String xmlPath )
         throws ParserConfigurationException, SAXException, IOException
     {
         SAXParserFactory factory = SAXParserFactory.newInstance();
@@ -74,6 +57,8 @@
         SAXParser saxParser = factory.newSAXParser();
 
         saxParser.parse( new File( xmlPath ), this );
+        
+        return suite;
     }
 
 
@@ -95,43 +80,48 @@
         {
             if ( "testsuite".equals( qName ) )
             {
-                numberOfErrors = getAttributeAsInt( attributes, "errors" );
-                numberOfFailures = getAttributeAsInt( attributes, "failures" );
-                numberOfSkipped = getAttributeAsInt( attributes, "skipped" );
-                numberOfTests = getAttributeAsInt( attributes, "tests" );
+                suite = new ReportTestSuite();
+                suite.setNumberOfErrors( getAttributeAsInt( attributes, "errors" ) );
+                suite.setNumberOfFailures( getAttributeAsInt( attributes, "failures" ) );
+                suite.setNumberOfSkipped( getAttributeAsInt( attributes, "skipped" ) );
+                suite.setNumberOfTests( getAttributeAsInt( attributes, "tests" ) );
 
                 Number time = numberFormat.parse( attributes.getValue( "time" ) );
 
-                timeElapsed = time.floatValue();
+                suite.setTimeElapsed( time.floatValue() );
 
                 //check if group attribute is existing
                 if ( attributes.getValue( "group" ) != null && !"".equals( attributes.getValue( "group" ) ) )
                 {
-                    packageName = attributes.getValue( "group" );
+                    String packageName = attributes.getValue( "group" );
+                    suite.setPackageName( packageName );
 
-                    name = attributes.getValue( "name" );
+                    String name = attributes.getValue( "name" );
+                    suite.setName( name );
 
-                    fullClassName = packageName + "." + name;
+                    suite.setFullClassName( packageName + "." + name );
                 }
                 else
                 {
-                    fullClassName = attributes.getValue( "name" );
-
-                    name = fullClassName.substring( fullClassName.lastIndexOf( "." ) + 1, fullClassName.length() );
+                    String fullClassName = attributes.getValue( "name" );
+                    suite.setFullClassName( fullClassName );
 
                     int lastDotPosition = fullClassName.lastIndexOf( "." );
+                    
+                    suite.setName( fullClassName.substring( lastDotPosition + 1, fullClassName.length() ) );
+                    
                     if ( lastDotPosition < 0 )
                     {
                         /* no package name */
-                        packageName = "";
+                        suite.setPackageName( "" );
                     }
                     else
                     {
-                        packageName = fullClassName.substring( 0, lastDotPosition );
+                        suite.setPackageName( fullClassName.substring( 0, lastDotPosition ) );
                     }
                 }
 
-                testCases = new ArrayList();
+                suite.setTestCases( new ArrayList() );
             }
             else if ( "testcase".equals( qName ) )
             {
@@ -139,11 +129,11 @@
 
                 testCase = new ReportTestCase();
 
-                testCase.setFullClassName( fullClassName );
+                testCase.setFullClassName( suite.getFullClassName() );
 
                 testCase.setName( attributes.getValue( "name" ) );
 
-                testCase.setClassName( name );
+                testCase.setClassName( suite.getName() );
 
                 String timeAsString = attributes.getValue( "time" );
 
@@ -156,7 +146,7 @@
 
                 testCase.setTime( time.floatValue() );
 
-                testCase.setFullName( packageName + "." + name + "." + testCase.getName() );
+                testCase.setFullName( suite.getFullClassName() + "." + testCase.getName() );
             }
             else if ( "failure".equals( qName ) )
             {
@@ -182,7 +172,7 @@
     {
         if ( "testcase".equals( qName ) )
         {
-            testCases.add( testCase );
+            suite.getTestCases().add( testCase );
         }
         else if ( "failure".equals( qName ) )
         {
@@ -209,91 +199,6 @@
         }
     }
 
-    public List getTestCases()
-    {
-        return this.testCases;
-    }
-
-    public int getNumberOfErrors()
-    {
-        return numberOfErrors;
-    }
-
-    public void setNumberOfErrors( int numberOfErrors )
-    {
-        this.numberOfErrors = numberOfErrors;
-    }
-
-    public int getNumberOfFailures()
-    {
-        return numberOfFailures;
-    }
-
-    public void setNumberOfFailures( int numberOfFailures )
-    {
-        this.numberOfFailures = numberOfFailures;
-    }
-
-    public int getNumberOfSkipped()
-    {
-        return numberOfSkipped;
-    }
-
-    public void setNumberOfSkipped( int numberOfSkipped )
-    {
-        this.numberOfSkipped = numberOfSkipped;
-    }
-
-    public int getNumberOfTests()
-    {
-        return numberOfTests;
-    }
-
-    public void setNumberOfTests( int numberOfTests )
-    {
-        this.numberOfTests = numberOfTests;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-
-    public void setName( String name )
-    {
-        this.name = name;
-    }
-
-    public String getFName()
-    {
-        return name;
-    }
-
-    public void setFName( String name )
-    {
-        this.name = name;
-    }
-
-    public String getPackageName()
-    {
-        return packageName;
-    }
-
-    public void setPackageName( String packageName )
-    {
-        this.packageName = packageName;
-    }
-
-    public float getTimeElapsed()
-    {
-        return this.timeElapsed;
-    }
-
-    public void setTimeElapsed( float timeElapsed )
-    {
-        this.timeElapsed = timeElapsed;
-    }
-
     private List parseCause( String detail )
     {
         String fullName = testCase.getFullName();
@@ -319,8 +224,4 @@
         return parsedDetail;
     }
 
-    public void setTestCases( List testCases )
-    {
-        this.testCases = Collections.unmodifiableList( testCases );
-    }
 }