You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2013/01/08 15:55:18 UTC

[2/6] o Fixed testcase on windows. o Fixed 2.2.1 tests by splitting report parser to separate module

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestCaseTest.java
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestCaseTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestCaseTest.java
new file mode 100644
index 0000000..ecf529a
--- /dev/null
+++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestCaseTest.java
@@ -0,0 +1,82 @@
+package org.apache.maven.plugins.surefire.report;
+
+/*
+ * 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.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * @author Jontri
+ */
+public class ReportTestCaseTest
+    extends TestCase
+{
+    private ReportTestCase tCase;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        tCase = new ReportTestCase();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        tCase = null;
+    }
+
+    public void testSetName()
+    {
+        tCase.setName( "Test Case Name" );
+
+        assertEquals( "Test Case Name", tCase.getName() );
+    }
+
+    public void testSetTime()
+    {
+        tCase.setTime( .06f );
+
+        assertEquals( .06f, tCase.getTime(), 0.0 );
+    }
+
+    public void testSetFailure()
+    {
+        tCase.addFailure( "messageVal", "typeVal" );
+
+        assertEquals( "messageVal", tCase.getFailure().get( "message" ) );
+        assertEquals( "typeVal", tCase.getFailure().get( "type" ) );
+    }
+
+    public void testSetFullName()
+    {
+        tCase.setFullName( "Test Case Full Name" );
+
+        assertEquals( "Test Case Full Name", tCase.getFullName() );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestSuiteTest.java
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestSuiteTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestSuiteTest.java
new file mode 100644
index 0000000..63e6eac
--- /dev/null
+++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/ReportTestSuiteTest.java
@@ -0,0 +1,118 @@
+package org.apache.maven.plugins.surefire.report;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ */
+public class ReportTestSuiteTest
+    extends TestCase
+{
+    private ReportTestSuite tSuite;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        tSuite = new ReportTestSuite();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        tSuite = null;
+    }
+
+    public void testSetTestCases()
+    {
+        ReportTestCase tCase = new ReportTestCase();
+
+        List<ReportTestCase> tCaseList = new ArrayList<ReportTestCase>();
+
+        tCaseList.add( tCase );
+
+        tSuite.setTestCases( tCaseList );
+
+        assertEquals( tCase, tSuite.getTestCases().get( 0 ) );
+    }
+
+    public void testSetNumberdOfErrors()
+    {
+        tSuite.setNumberOfErrors( 9 );
+
+        assertEquals( 9, tSuite.getNumberOfErrors() );
+    }
+
+    public void testSetNumberOfFailures()
+    {
+        tSuite.setNumberOfFailures( 10 );
+
+        assertEquals( 10, tSuite.getNumberOfFailures() );
+    }
+
+    public void testSetNumberOfSkipped()
+    {
+        tSuite.setNumberOfSkipped( 5 );
+
+        assertEquals( 5, tSuite.getNumberOfSkipped() );
+    }
+
+    public void testSetNumberOfTests()
+    {
+        tSuite.setNumberOfTests( 11 );
+
+        assertEquals( 11, tSuite.getNumberOfTests() );
+    }
+
+    public void testSetName()
+    {
+        tSuite.setName( "Suite Name" );
+
+        assertEquals( "Suite Name", tSuite.getName() );
+    }
+
+    public void testSetPackageName()
+    {
+        tSuite.setPackageName( "Suite Package Name" );
+
+        assertEquals( "Suite Package Name", tSuite.getPackageName() );
+    }
+
+    public void testSetTimeElapsed()
+    {
+        tSuite.setTimeElapsed( .06f );
+
+        assertEquals( .06f, tSuite.getTimeElapsed(), 0.0 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java
new file mode 100644
index 0000000..2bd5248
--- /dev/null
+++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java
@@ -0,0 +1,242 @@
+package org.apache.maven.plugins.surefire.report;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import org.apache.maven.reporting.MavenReportException;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ */
+public class SurefireReportParserTest
+    extends TestCase
+{
+    private SurefireReportParser report;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        report = new SurefireReportParser();
+
+        report.setLocale( Locale.ENGLISH );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        report = null;
+    }
+
+    public void testParseXMLReportFiles()
+        throws MavenReportException, UnsupportedEncodingException
+    {
+        report.setReportsDirectory( getTestDir( "/test-reports" ) );
+
+        List<ReportTestSuite> suites = report.parseXMLReportFiles();
+
+        assertEquals( 8, suites.size() );
+
+        for ( ReportTestSuite suite : suites )
+        {
+            assertNotNull( suite.getName() + " was not correctly parsed", suite.getTestCases() );
+            assertNotNull( suite.getName() );
+            assertNotNull( suite.getPackageName() );
+        }
+    }
+
+    private File getTestDir( String path )
+        throws UnsupportedEncodingException
+    {
+        URL resource = getClass().getResource( path );
+        // URLDecoder.decode necessary for JDK 1.5+, where spaces are escaped to %20
+        return new File( URLDecoder.decode( resource.getPath(), "UTF-8" ) ).getAbsoluteFile();
+    }
+
+    public void testParseTestSuiteName()
+    {
+        assertEquals( "CircleTest", report.parseTestSuiteName( "Battery: com.shape.CircleTest" ) );
+    }
+
+    public void testParseTestSuitePackageName()
+    {
+        assertEquals( "com.shape", report.parseTestSuitePackageName( "Battery: com.shape.CircleTest" ) );
+    }
+
+    public void testParseTestCaseName()
+    {
+        assertEquals( "testCase", report.parseTestCaseName( "testCase(com.shape.CircleTest)" ) );
+    }
+
+    public void testGetSummary()
+        throws Exception
+    {
+        ReportTestSuite tSuite1 = new ReportTestSuite();
+
+        ReportTestSuite tSuite2 = new ReportTestSuite();
+
+        tSuite1.setNumberOfErrors( 10 );
+
+        tSuite1.setNumberOfFailures( 20 );
+
+        tSuite1.setNumberOfSkipped( 2 );
+
+        tSuite1.setTimeElapsed( 1.0f );
+
+        tSuite1.setNumberOfTests( 100 );
+
+        tSuite2.setNumberOfErrors( 10 );
+
+        tSuite2.setNumberOfFailures( 20 );
+
+        tSuite2.setNumberOfSkipped( 2 );
+
+        tSuite2.setTimeElapsed( 1.0f );
+
+        tSuite2.setNumberOfTests( 100 );
+
+        List<ReportTestSuite> suiteList = new ArrayList<ReportTestSuite>();
+
+        suiteList.add( tSuite1 );
+
+        suiteList.add( tSuite2 );
+
+        Map<String, String> testMap = report.getSummary( suiteList );
+
+        assertEquals( 20, Integer.parseInt( testMap.get( "totalErrors" ).toString() ) );
+
+        assertEquals( 40, Integer.parseInt( testMap.get( "totalFailures" ).toString() ) );
+
+        assertEquals( 200, Integer.parseInt( testMap.get( "totalTests" ).toString() ) );
+
+        assertEquals( 4, Integer.parseInt( testMap.get( "totalSkipped" ).toString() ) );
+
+        NumberFormat numberFormat = report.getNumberFormat();
+
+        assertEquals( 2.0f, numberFormat.parse( testMap.get( "totalElapsedTime" ).toString() ).floatValue(), 0.0f );
+
+        assertEquals( 68.00f, numberFormat.parse( (String) testMap.get( "totalPercentage" ) ).floatValue(), 0 );
+    }
+
+    public void testGetSuitesGroupByPackage()
+    {
+        ReportTestSuite tSuite1 = new ReportTestSuite();
+
+        ReportTestSuite tSuite2 = new ReportTestSuite();
+
+        ReportTestSuite tSuite3 = new ReportTestSuite();
+
+        tSuite1.setPackageName( "Package1" );
+
+        tSuite2.setPackageName( "Package1" );
+
+        tSuite3.setPackageName( "Package2" );
+
+        List<ReportTestSuite> suiteList = new ArrayList<ReportTestSuite>();
+
+        suiteList.add( tSuite1 );
+
+        suiteList.add( tSuite2 );
+
+        suiteList.add( tSuite3 );
+
+        Map<String, List<ReportTestSuite>> groupMap = report.getSuitesGroupByPackage( suiteList );
+
+        assertEquals( 2, groupMap.size() );
+
+        assertEquals( tSuite1, groupMap.get( "Package1" ).get( 0 ) );
+
+        assertEquals( tSuite2, groupMap.get( "Package1" ).get( 1 ) );
+
+        assertEquals( tSuite3, groupMap.get( "Package2" ).get( 0 ) );
+    }
+
+    public void testComputePercentage()
+        throws Exception
+    {
+        NumberFormat numberFormat = report.getNumberFormat();
+
+        assertEquals( 70.00f, numberFormat.parse( report.computePercentage( 100, 20, 10, 0 ) ).floatValue(), 0 );
+    }
+
+    public void testGetFailureDetails()
+    {
+        ReportTestSuite tSuite1 = new ReportTestSuite();
+
+        ReportTestSuite tSuite2 = new ReportTestSuite();
+
+        ReportTestCase tCase1 = new ReportTestCase();
+
+        ReportTestCase tCase2 = new ReportTestCase();
+
+        ReportTestCase tCase3 = new ReportTestCase();
+
+        tCase1.addFailure( null, null );
+
+        tCase3.addFailure( null, null );
+
+        List<ReportTestCase> tCaseList = new ArrayList<ReportTestCase>();
+
+        List<ReportTestCase> tCaseList2 = new ArrayList<ReportTestCase>();
+
+        tCaseList.add( tCase1 );
+
+        tCaseList.add( tCase2 );
+
+        tCaseList2.add( tCase3 );
+
+        tSuite1.setTestCases( tCaseList );
+
+        tSuite2.setTestCases( tCaseList2 );
+
+        List<ReportTestSuite> suiteList = new ArrayList<ReportTestSuite>();
+
+        suiteList.add( tSuite1 );
+
+        suiteList.add( tSuite2 );
+
+        List<ReportTestCase> failList = report.getFailureDetails( suiteList );
+
+        assertEquals( 2, failList.size() );
+
+        assertEquals( tCase1, failList.get( 0 ) );
+
+        assertEquals( tCase3, failList.get( 1 ) );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
new file mode 100644
index 0000000..beaf1b2
--- /dev/null
+++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java
@@ -0,0 +1,136 @@
+package org.apache.maven.plugins.surefire.report;
+
+/*
+ * 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.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Collection;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import junit.framework.TestCase;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class TestSuiteXmlParserTest
+    extends TestCase
+{
+    public void testParse()
+        throws Exception
+    {
+        TestSuiteXmlParser testSuiteXmlParser = new TestSuiteXmlParser();
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
+            "<testsuite failures=\"4\" time=\"0.005\" errors=\"0\" skipped=\"0\" tests=\"4\" name=\"wellFormedXmlFailures.TestSurefire3\">\n"
+            +
+            "  <properties>\n" +
+            "    <property name=\"java.runtime.name\" value=\"Java(TM) SE Runtime Environment\"/>\n" +
+            "    <property name=\"sun.cpu.isalist\" value=\"amd64\"/>\n" +
+            "  </properties>\n" +
+            "  <testcase time=\"0.005\" classname=\"wellFormedXmlFailures.TestSurefire3\" name=\"testLower\">\n" +
+            "    <failure message=\"&lt;\" type=\"junit.framework.AssertionFailedError\"><![CDATA[junit.framework.AssertionFailedError: <\n"
+            +
+            "\tat junit.framework.Assert.fail(Assert.java:47)\n" +
+            "\tat wellFormedXmlFailures.TestSurefire3.testLower(TestSurefire3.java:30)\n" +
+            "]]></failure>\n" +
+            "  </testcase>\n" +
+            "  <testcase time=\"0\" classname=\"wellFormedXmlFailures.TestSurefire3\" name=\"testU0000\">\n" +
+            "    <failure message=\"&amp;0#;\" type=\"junit.framework.AssertionFailedError\">junit.framework.AssertionFailedError:  \n"
+            +
+            "\tat junit.framework.Assert.fail(Assert.java:47)\n" +
+            "\tat wellFormedXmlFailures.TestSurefire3.testU0000(TestSurefire3.java:40)\n" +
+            "</failure>\n" +
+            "  </testcase>\n" +
+            "  <testcase time=\"0\" classname=\"wellFormedXmlFailures.TestSurefire3\" name=\"testGreater\">\n" +
+            "    <failure message=\"&gt;\" type=\"junit.framework.AssertionFailedError\">junit.framework.AssertionFailedError: >\n"
+            +
+            "\tat junit.framework.Assert.fail(Assert.java:47)\n" +
+            "\tat wellFormedXmlFailures.TestSurefire3.testGreater(TestSurefire3.java:35)\n" +
+            "</failure>\n" +
+            "  </testcase>\n" +
+            "  <testcase time=\"0\" classname=\"wellFormedXmlFailures.TestSurefire3\" name=\"testQuote\">\n" +
+            "    <failure message=\"&quot;\" type=\"junit.framework.AssertionFailedError\">junit.framework.AssertionFailedError: \"\n"
+            +
+            "\tat junit.framework.Assert.fail(Assert.java:47)\n" +
+            "\tat wellFormedXmlFailures.TestSurefire3.testQuote(TestSurefire3.java:25)\n" +
+            "</failure>\n" +
+            "  </testcase>\n" +
+            "</testsuite>";
+        InputStream byteArrayIs = new ByteArrayInputStream( xml.getBytes() );
+        Collection<ReportTestSuite> parse = testSuiteXmlParser.parse( new InputStreamReader(byteArrayIs, "UTF-8") );
+    }
+
+    public void testParser()
+        throws IOException, SAXException, ParserConfigurationException
+    {
+        TestSuiteXmlParser parser = new TestSuiteXmlParser();
+
+        Collection<ReportTestSuite> oldResult = parser.parse(
+            "src/test/resources/fixture/testsuitexmlparser/TEST-org.apache.maven.surefire.test.FailingTest.xml" );
+
+        assertNotNull( oldResult );
+
+        assertEquals( 1, oldResult.size() );
+        ReportTestSuite next = oldResult.iterator().next();
+        assertEquals( 2, next.getNumberOfTests() );
+
+
+    }
+
+    public void noTestParserBadFile() // Determine problem with xml file.
+        throws IOException, SAXException, ParserConfigurationException
+    {
+        TestSuiteXmlParser parser = new TestSuiteXmlParser();
+
+        File file = new File( "../surefire-integration-tests/target/UmlautDirIT/junit-pathWith\u00DCmlaut/target/surefire-reports/TEST-umlautTest.BasicTest.xml"  );
+        assertTrue(file.exists());
+        Collection<ReportTestSuite> oldResult = parser.parse(
+            "..\\surefire-integration-tests\\target\\UmlautDirIT\\junit-pathWith\u00DCmlaut\\target\\surefire-reports\\TEST-umlautTest.BasicTest.xml" );
+
+        assertNotNull( oldResult );
+
+        assertEquals( 1, oldResult.size() );
+        ReportTestSuite next = oldResult.iterator().next();
+        assertEquals( 2, next.getNumberOfTests() );
+
+
+    }
+
+    public void testParserHitsFailsafeSummary()
+        throws IOException, SAXException, ParserConfigurationException
+    {
+        TestSuiteXmlParser parser = new TestSuiteXmlParser();
+
+        parser.parse( "src/test/resources/fixture/testsuitexmlparser/failsafe-summary.xml" );
+
+        assertFalse( parser.isValid() );
+
+        parser.parse(
+            "src/test/resources/fixture/testsuitexmlparser/TEST-org.apache.maven.surefire.test.FailingTest.xml" );
+
+        assertTrue( parser.isValid() );
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.apache.maven.surefire.test.FailingTest.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.apache.maven.surefire.test.FailingTest.xml b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.apache.maven.surefire.test.FailingTest.xml
new file mode 100644
index 0000000..09c9c6d
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.apache.maven.surefire.test.FailingTest.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite failures="2" time="0.014" errors="0" skipped="0" tests="2" name="org.apache.maven.surefire.test.FailingTest">
+  <properties>
+    <property name="surefire.version" value="2.13-SNAPSHOT"/>
+    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
+    <property name="sun.boot.library.path" value="c:\java\jdk1.7.0_09\jre\bin"/>
+    <property name="java.vm.version" value="23.5-b02"/>
+    <property name="user.country.format" value="NO"/>
+    <property name="java.vm.vendor" value="Oracle Corporation"/>
+    <property name="java.vendor.url" value="http://java.oracle.com/"/>
+    <property name="path.separator" value=";"/>
+    <property name="guice.disable.misplaced.annotation.check" value="true"/>
+    <property name="java.vm.name" value="Java HotSpot(TM) 64-Bit Server VM"/>
+    <property name="file.encoding.pkg" value="sun.io"/>
+    <property name="user.script" value=""/>
+    <property name="user.country" value="US"/>
+    <property name="sun.java.launcher" value="SUN_STANDARD"/>
+    <property name="sun.os.patch.level" value="Service Pack 1"/>
+    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+    <property name="user.dir" value="c:\workspace\maven-surefire\surefire-integration-tests\src\test\resources\surefire-803-multiFailsafeExec-failureInFirst"/>
+    <property name="java.runtime.version" value="1.7.0_09-b05"/>
+    <property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/>
+    <property name="java.endorsed.dirs" value="c:\java\jdk1.7.0_09\jre\lib\endorsed"/>
+    <property name="os.arch" value="amd64"/>
+    <property name="java.io.tmpdir" value="C:\Users\krose\AppData\Local\Temp\"/>
+    <property name="line.separator" value="
+"/>
+    <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
+    <property name="user.variant" value=""/>
+    <property name="os.name" value="Windows 7"/>
+    <property name="classworlds.conf" value="c:/java/apache-maven-3.0.4/bin/m2.conf"/>
+    <property name="sun.jnu.encoding" value="Cp1252"/>
+    <property name="java.library.path" value="c:\java\jdk1.7.0_09\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;x:\bin;.;C:\java\Git\local\bin;C:\java\Git\mingw\bin;C:\java\Git\bin;c:\java\jdk1.7.0_09\bin;c:\java\Subversion;c:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;c:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;c:\Windows\system32;c:\Windows;c:\Windows\System32\Wbem;c:\Windows\System32\WindowsPowerShell\v1.0\;c:\java\jdk1.7.0_09\bin;c:\java\Subversion;c:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;c:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;c:\Windows\system32;c:\Windows;c:\Windows\System32\Wbem;c:\Windows\System32\WindowsPowerShell\v1.0\;c:\java\bin;."/>
+    <property name="java.specification.name" value="Java Platform API Specification"/>
+    <property name="java.class.version" value="51.0"/>
+    <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
+    <property name="os.version" value="6.1"/>
+    <property name="user.home" value="C:\Users\krose"/>
+    <property name="user.timezone" value="Europe/Paris"/>
+    <property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/>
+    <property name="java.specification.version" value="1.7"/>
+    <property name="file.encoding" value="Cp1252"/>
+    <property name="user.name" value="krose"/>
+    <property name="java.class.path" value="c:/java/apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar"/>
+    <property name="java.vm.specification.version" value="1.7"/>
+    <property name="sun.arch.data.model" value="64"/>
+    <property name="java.home" value="c:\java\jdk1.7.0_09\jre"/>
+    <property name="sun.java.command" value="org.codehaus.plexus.classworlds.launcher.Launcher -Dsurefire.version=2.13-SNAPSHOT clean verify"/>
+    <property name="java.specification.vendor" value="Oracle Corporation"/>
+    <property name="user.language" value="en"/>
+    <property name="user.language.format" value="no"/>
+    <property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
+    <property name="java.vm.info" value="mixed mode"/>
+    <property name="java.version" value="1.7.0_09"/>
+    <property name="java.ext.dirs" value="c:\java\jdk1.7.0_09\jre\lib\ext;C:\Windows\Sun\Java\lib\ext"/>
+    <property name="sun.boot.class.path" value="c:\java\jdk1.7.0_09\jre\lib\resources.jar;c:\java\jdk1.7.0_09\jre\lib\rt.jar;c:\java\jdk1.7.0_09\jre\lib\sunrsasign.jar;c:\java\jdk1.7.0_09\jre\lib\jsse.jar;c:\java\jdk1.7.0_09\jre\lib\jce.jar;c:\java\jdk1.7.0_09\jre\lib\charsets.jar;c:\java\jdk1.7.0_09\jre\lib\jfr.jar;c:\java\jdk1.7.0_09\jre\classes"/>
+    <property name="java.vendor" value="Oracle Corporation"/>
+    <property name="maven.home" value="c:\java\apache-maven-3.0.4"/>
+    <property name="file.separator" value="\"/>
+    <property name="java.vendor.url.bug" value="http://bugreport.sun.com/bugreport/"/>
+    <property name="sun.cpu.endian" value="little"/>
+    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+    <property name="sun.desktop" value="windows"/>
+    <property name="sun.cpu.isalist" value="amd64"/>
+  </properties>
+  <testcase time="0.013" classname="org.apache.maven.surefire.test.FailingTest" name="defaultTestValueIs_Value">
+    <failure message="
+Expected: &quot;wrong&quot;
+     got: &quot;value&quot;
+" type="java.lang.AssertionError">java.lang.AssertionError: 
+Expected: &quot;wrong&quot;
+     got: &quot;value&quot;
+
+	at org.junit.Assert.assertThat(Assert.java:778)
+	at org.junit.Assert.assertThat(Assert.java:736)
+	at org.apache.maven.surefire.test.FailingTest.defaultTestValueIs_Value(FailingTest.java:23)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:601)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
+	at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48)
+	at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:151)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:122)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:601)
+	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
+	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
+	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
+	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:128)
+	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:88)
+</failure>
+  </testcase>
+  <testcase time="0.001" classname="org.apache.maven.surefire.test.FailingTest" name="setTestAndRetrieveValue">
+    <failure message="
+Expected: &quot;bar&quot;
+     got: &quot;foo&quot;
+" type="java.lang.AssertionError">java.lang.AssertionError: 
+Expected: &quot;bar&quot;
+     got: &quot;foo&quot;
+
+	at org.junit.Assert.assertThat(Assert.java:778)
+	at org.junit.Assert.assertThat(Assert.java:736)
+	at org.apache.maven.surefire.test.FailingTest.setTestAndRetrieveValue(FailingTest.java:34)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:601)
+	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
+	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
+	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
+	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
+	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
+	at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48)
+	at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
+	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:151)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:122)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:601)
+	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
+	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
+	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
+	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:128)
+	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:88)
+</failure>
+  </testcase>
+</testsuite>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary-old.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary-old.xml b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary-old.xml
new file mode 100644
index 0000000..6839aa9
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary-old.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<failsafe-summary timeout="false">
+  <completed>1</completed>
+  <errors>0</errors>
+  <failures>1</failures>
+  <skipped>0</skipped>
+  <failureMessage/>
+</failsafe-summary>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary.xml b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary.xml
new file mode 100644
index 0000000..1bc82d9
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/failsafe-summary.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<failsafe-summary timeout="false">
+  <completed>4</completed>
+  <errors>0</errors>
+  <failures>2</failures>
+  <skipped>0</skipped>
+  <failureMessage/>
+</failsafe-summary>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/test-reports/TEST-AntUnit.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/test-reports/TEST-AntUnit.xml b/surefire-report-parser/src/test/resources/test-reports/TEST-AntUnit.xml
new file mode 100644
index 0000000..71e5342
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/test-reports/TEST-AntUnit.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite buildFile="/home/pjanes/devel/maven/client/tools/tests/changebase.xml" hostname="merope"
+           name="tests.changebase_xml" timestamp="2008-04-23T13:25:46">
+  <testcase name="testNegativeValue">
+    <time>0.378</time>
+  </testcase>
+  <tests>1</tests>
+  <failures>0</failures>
+  <errors>0</errors>
+  <time>0.378</time>
+</testsuite>

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/test-reports/TEST-NoPackageTest.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/test-reports/TEST-NoPackageTest.xml b/surefire-report-parser/src/test/resources/test-reports/TEST-NoPackageTest.xml
new file mode 100644
index 0000000..4c0f831
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/test-reports/TEST-NoPackageTest.xml
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<testsuite errors="0" tests="3" time="0.047" failures="3" name="NoPackageTest">
+  <properties>
+    <property value="Java(TM) 2 Runtime Environment, Standard Edition" name="java.runtime.name"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre\bin" name="sun.boot.library.path"/>
+    <property value="1.5.0_06-b05" name="java.vm.version"/>
+    <property value="Sun Microsystems Inc." name="java.vm.vendor"/>
+    <property value="http://java.sun.com/" name="java.vendor.url"/>
+    <property value=";" name="path.separator"/>
+    <property value="Java HotSpot(TM) Client VM" name="java.vm.name"/>
+    <property value="sun.io" name="file.encoding.pkg"/>
+    <property value="US" name="user.country"/>
+    <property value="Service Pack 2" name="sun.os.patch.level"/>
+    <property value="Java Virtual Machine Specification" name="java.vm.specification.name"/>
+    <property value="C:\dev\maven\plugins\maven-surefire-plugin\src\it\test3" name="user.dir"/>
+    <property value="1.5.0_06-b05" name="java.runtime.version"/>
+    <property value="sun.awt.Win32GraphicsEnvironment" name="java.awt.graphicsenv"/>
+    <property value="C:\dev\maven\plugins\maven-surefire-plugin\src\it\test3" name="basedir"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre\lib\endorsed" name="java.endorsed.dirs"/>
+    <property value="x86" name="os.arch"/>
+    <property value="c:\DOCUME~1\csanchez\LOCALS~1\Temp\" name="java.io.tmpdir"/>
+    <property value="
+" name="line.separator"/>
+    <property value="Sun Microsystems Inc." name="java.vm.specification.vendor"/>
+    <property value="" name="user.variant"/>
+    <property value="Windows XP" name="os.name"/>
+    <property value="c:\apps\maven-2.1-SNAPSHOT/bin/m2.conf" name="classworlds.conf"/>
+    <property value="Cp1252" name="sun.jnu.encoding"/>
+    <property
+        value="c:\Program Files\Java\jdk1.5.0_06\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\apps\cygwin\usr\local\bin;C:\apps\cygwin\bin;C:\apps\cygwin\bin;C:\apps\cygwin\usr\X11R6\bin;c:\Program Files\ThinkPad\Utilities;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\ATI Technologies\ATI Control Panel;c:\WINDOWS\Downloaded Program Files;c:\Program Files\PC-Doctor for Windows\services;c:\Program Files\Subversion\bin;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\IBM ThinkVantage\Client Security Solution;c:\apps\jwsdp-1.6\jwsdp-shared\bin;c:\apps\apache-ant-1.6.5\bin;c:\apps\maven-1.1-beta-2\bin;c:\apps\maven-2.1-SNAPSHOT\bin;c:\Program Files\Java\jdk1.5.0_06\bin;c:\Program Files\putty;c:\Program Files\ThinkPad\Utilities;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\ATI Technologies\ATI Control Panel;c:\WINDOWS\Download
 ed Program Files;c:\Program Files\PC-Doctor for Windows\services;c:\Program Files\Subversion\bin;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\IBM ThinkVantage\Client Security Solution"
+        name="java.library.path"/>
+    <property value="Java Platform API Specification" name="java.specification.name"/>
+    <property value="49.0" name="java.class.version"/>
+    <property value="HotSpot Client Compiler" name="sun.management.compiler"/>
+    <property value="true" name="maven.test.failure.ignore"/>
+    <property value="5.1" name="os.version"/>
+    <property value="C:\Documents and Settings\csanchez" name="user.home"/>
+    <property value="America/Los_Angeles" name="user.timezone"/>
+    <property value="sun.awt.windows.WPrinterJob" name="java.awt.printerjob"/>
+    <property value="Cp1252" name="file.encoding"/>
+    <property value="1.5" name="java.specification.version"/>
+    <property value="csanchez" name="user.name"/>
+    <property value="c:\apps\maven-2.1-SNAPSHOT/core/boot/classworlds-1.1.jar" name="java.class.path"/>
+    <property value="1.0" name="java.vm.specification.version"/>
+    <property value="32" name="sun.arch.data.model"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre" name="java.home"/>
+    <property value="Sun Microsystems Inc." name="java.specification.vendor"/>
+    <property value="en" name="user.language"/>
+    <property value="sun.awt.windows.WToolkit" name="awt.toolkit"/>
+    <property value="mixed mode, sharing" name="java.vm.info"/>
+    <property value="1.5.0_06" name="java.version"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre\lib\ext" name="java.ext.dirs"/>
+    <property
+        value="c:\Program Files\Java\jdk1.5.0_06\jre\lib\rt.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\i18n.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\sunrsasign.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\jsse.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\jce.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\charsets.jar;c:\Program Files\Java\jdk1.5.0_06\jre\classes"
+        name="sun.boot.class.path"/>
+    <property value="Sun Microsystems Inc." name="java.vendor"/>
+    <property value="c:\apps\maven-2.1-SNAPSHOT" name="maven.home"/>
+    <property value="C:\Documents and Settings\csanchez\.m2\repository" name="localRepository"/>
+    <property value="\" name="file.separator"/>
+    <property value="http://java.sun.com/cgi-bin/bugreport.cgi" name="java.vendor.url.bug"/>
+    <property value="little" name="sun.cpu.endian"/>
+    <property value="UnicodeLittle" name="sun.io.unicode.encoding"/>
+    <property value="windows" name="sun.desktop"/>
+    <property value="pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86" name="sun.cpu.isalist"/>
+  </properties>
+  <testcase time="0" name="testQuote">
+    <failure type="junit.framework.AssertionFailedError" message="&quot;">junit.framework.AssertionFailedError: &quot;
+      at junit.framework.Assert.fail(Assert.java:47)
+      at NoPackageTest.testQuote(NoPackageTest.java:23)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at junit.framework.TestCase.runTest(TestCase.java:154)
+      at junit.framework.TestCase.runBare(TestCase.java:127)
+      at junit.framework.TestResult$1.protect(TestResult.java:106)
+      at junit.framework.TestResult.runProtected(TestResult.java:124)
+      at junit.framework.TestResult.run(TestResult.java:109)
+      at junit.framework.TestCase.run(TestCase.java:118)
+      at junit.framework.TestSuite.runTest(TestSuite.java:208)
+      at junit.framework.TestSuite.run(TestSuite.java:203)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.apache.maven.surefire.battery.JUnitBattery.executeJUnit(JUnitBattery.java:242)
+      at org.apache.maven.surefire.battery.JUnitBattery.execute(JUnitBattery.java:216)
+      at org.apache.maven.surefire.Surefire.executeBattery(Surefire.java:215)
+      at org.apache.maven.surefire.Surefire.run(Surefire.java:163)
+      at org.apache.maven.surefire.Surefire.run(Surefire.java:87)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.apache.maven.surefire.SurefireBooter.runTestsInProcess(SurefireBooter.java:300)
+      at org.apache.maven.surefire.SurefireBooter.run(SurefireBooter.java:216)
+      at org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java:369)
+      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:415)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:867)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:739)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:510)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:493)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:463)
+      at
+      org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:274)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
+      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
+      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
+      at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
+      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
+      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
+      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
+    </failure>
+  </testcase>
+  <testcase time="0" name="testLower">
+    <failure type="junit.framework.AssertionFailedError" message="&lt;">junit.framework.AssertionFailedError: &lt;
+      at junit.framework.Assert.fail(Assert.java:47)
+      at NoPackageTest.testLower(NoPackageTest.java:28)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at junit.framework.TestCase.runTest(TestCase.java:154)
+      at junit.framework.TestCase.runBare(TestCase.java:127)
+      at junit.framework.TestResult$1.protect(TestResult.java:106)
+      at junit.framework.TestResult.runProtected(TestResult.java:124)
+      at junit.framework.TestResult.run(TestResult.java:109)
+      at junit.framework.TestCase.run(TestCase.java:118)
+      at junit.framework.TestSuite.runTest(TestSuite.java:208)
+      at junit.framework.TestSuite.run(TestSuite.java:203)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.apache.maven.surefire.battery.JUnitBattery.executeJUnit(JUnitBattery.java:242)
+      at org.apache.maven.surefire.battery.JUnitBattery.execute(JUnitBattery.java:216)
+      at org.apache.maven.surefire.Surefire.executeBattery(Surefire.java:215)
+      at org.apache.maven.surefire.Surefire.run(Surefire.java:163)
+      at org.apache.maven.surefire.Surefire.run(Surefire.java:87)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.apache.maven.surefire.SurefireBooter.runTestsInProcess(SurefireBooter.java:300)
+      at org.apache.maven.surefire.SurefireBooter.run(SurefireBooter.java:216)
+      at org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java:369)
+      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:415)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:867)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:739)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:510)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:493)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:463)
+      at
+      org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:274)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
+      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
+      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
+      at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
+      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
+      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
+      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
+    </failure>
+  </testcase>
+  <testcase time="0" name="testGreater">
+    <failure type="junit.framework.AssertionFailedError" message="&gt;">junit.framework.AssertionFailedError: &gt;
+      at junit.framework.Assert.fail(Assert.java:47)
+      at NoPackageTest.testGreater(NoPackageTest.java:33)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at junit.framework.TestCase.runTest(TestCase.java:154)
+      at junit.framework.TestCase.runBare(TestCase.java:127)
+      at junit.framework.TestResult$1.protect(TestResult.java:106)
+      at junit.framework.TestResult.runProtected(TestResult.java:124)
+      at junit.framework.TestResult.run(TestResult.java:109)
+      at junit.framework.TestCase.run(TestCase.java:118)
+      at junit.framework.TestSuite.runTest(TestSuite.java:208)
+      at junit.framework.TestSuite.run(TestSuite.java:203)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.apache.maven.surefire.battery.JUnitBattery.executeJUnit(JUnitBattery.java:242)
+      at org.apache.maven.surefire.battery.JUnitBattery.execute(JUnitBattery.java:216)
+      at org.apache.maven.surefire.Surefire.executeBattery(Surefire.java:215)
+      at org.apache.maven.surefire.Surefire.run(Surefire.java:163)
+      at org.apache.maven.surefire.Surefire.run(Surefire.java:87)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.apache.maven.surefire.SurefireBooter.runTestsInProcess(SurefireBooter.java:300)
+      at org.apache.maven.surefire.SurefireBooter.run(SurefireBooter.java:216)
+      at org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java:369)
+      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:415)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:867)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:739)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:510)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:493)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:463)
+      at
+      org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:274)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
+      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
+      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
+      at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
+      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
+      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
+      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
+    </failure>
+  </testcase>
+</testsuite>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/test-reports/TEST-NoTimeTestCaseTest.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/test-reports/TEST-NoTimeTestCaseTest.xml b/surefire-report-parser/src/test/resources/test-reports/TEST-NoTimeTestCaseTest.xml
new file mode 100644
index 0000000..a36a19a
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/test-reports/TEST-NoTimeTestCaseTest.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<testsuite errors="0" tests="8" time="0.563" failures="0" name="NoTimeTestCaseTest">
+  <properties>
+    <property value="Java(TM) 2 Runtime Environment, Standard Edition" name="java.runtime.name"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre\bin" name="sun.boot.library.path"/>
+    <property value="1.5.0_06-b05" name="java.vm.version"/>
+    <property value="Sun Microsystems Inc." name="java.vm.vendor"/>
+    <property value="http://java.sun.com/" name="java.vendor.url"/>
+    <property value=";" name="path.separator"/>
+    <property value="Java HotSpot(TM) Client VM" name="java.vm.name"/>
+    <property value="sun.io" name="file.encoding.pkg"/>
+    <property value="US" name="user.country"/>
+    <property value="Service Pack 2" name="sun.os.patch.level"/>
+    <property value="Java Virtual Machine Specification" name="java.vm.specification.name"/>
+    <property value="c:\dev\test" name="user.dir"/>
+    <property value="1.5.0_06-b05" name="java.runtime.version"/>
+    <property value="sun.awt.Win32GraphicsEnvironment" name="java.awt.graphicsenv"/>
+    <property value="c:\dev\test" name="basedir"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre\lib\endorsed" name="java.endorsed.dirs"/>
+    <property value="x86" name="os.arch"/>
+    <property value="c:\DOCUME~1\csanchez\LOCALS~1\Temp\" name="java.io.tmpdir"/>
+    <property value="
+" name="line.separator"/>
+    <property value="Sun Microsystems Inc." name="java.vm.specification.vendor"/>
+    <property value="" name="user.variant"/>
+    <property value="Windows XP" name="os.name"/>
+    <property value="c:\apps\maven-2.0.5-SNAPSHOT/bin/m2.conf" name="classworlds.conf"/>
+    <property value="Cp1252" name="sun.jnu.encoding"/>
+    <property
+        value="c:\Program Files\Java\jdk1.5.0_06\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\apps\cygwin\usr\local\bin;C:\apps\cygwin\bin;C:\apps\cygwin\bin;C:\apps\cygwin\usr\X11R6\bin;c:\Program Files\ThinkPad\Utilities;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\ATI Technologies\ATI Control Panel;c:\WINDOWS\Downloaded Program Files;c:\Program Files\PC-Doctor for Windows\services;c:\Program Files\Subversion\bin;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\IBM ThinkVantage\Client Security Solution;c:\Program Files\ThinkPad\ConnectUtilities;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\TortoiseCVS;c:\apps\graphviz-2.8\bin;c:\apps\jwsdp-1.6\jwsdp-shared\bin;c:\apps\apache-ant-1.6.5\bin;c:\apps\maven-1.1-beta-2\bin;c:\apps\maven-2.0.5-SNAPSHOT\bin;c:\Program Files\Java\jdk1.5.0_06\bin;c:\Program Files\putty;c:\Program Files\ThinkPad\Utilities;c:\WINDOWS\system32;c:\WINDO
 WS;c:\WINDOWS\System32\Wbem;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\ATI Technologies\ATI Control Panel;c:\WINDOWS\Downloaded Program Files;c:\Program Files\PC-Doctor for Windows\services;c:\Program Files\Subversion\bin;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\Intel\Wireless\Bin\;c:\Program Files\IBM ThinkVantage\Client Security Solution;c:\Program Files\ThinkPad\ConnectUtilities;c:\Program Files\Intel\Wireless\Bin\"
+        name="java.library.path"/>
+    <property value="Java Platform API Specification" name="java.specification.name"/>
+    <property value="49.0" name="java.class.version"/>
+    <property value="HotSpot Client Compiler" name="sun.management.compiler"/>
+    <property value="5.1" name="os.version"/>
+    <property value="C:\Documents and Settings\csanchez" name="user.home"/>
+    <property value="America/Los_Angeles" name="user.timezone"/>
+    <property value="sun.awt.windows.WPrinterJob" name="java.awt.printerjob"/>
+    <property value="Cp1252" name="file.encoding"/>
+    <property value="1.5" name="java.specification.version"/>
+    <property value="csanchez" name="user.name"/>
+    <property value="c:\apps\maven-2.0.5-SNAPSHOT/core/boot/classworlds-1.1.jar" name="java.class.path"/>
+    <property value="1.0" name="java.vm.specification.version"/>
+    <property value="32" name="sun.arch.data.model"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre" name="java.home"/>
+    <property value="Sun Microsystems Inc." name="java.specification.vendor"/>
+    <property value="en" name="user.language"/>
+    <property value="sun.awt.windows.WToolkit" name="awt.toolkit"/>
+    <property value="mixed mode" name="java.vm.info"/>
+    <property value="1.5.0_06" name="java.version"/>
+    <property value="c:\Program Files\Java\jdk1.5.0_06\jre\lib\ext" name="java.ext.dirs"/>
+    <property
+        value="c:\Program Files\Java\jdk1.5.0_06\jre\lib\rt.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\i18n.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\sunrsasign.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\jsse.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\jce.jar;c:\Program Files\Java\jdk1.5.0_06\jre\lib\charsets.jar;c:\Program Files\Java\jdk1.5.0_06\jre\classes"
+        name="sun.boot.class.path"/>
+    <property value="Sun Microsystems Inc." name="java.vendor"/>
+    <property value="c:\apps\maven-2.0.5-SNAPSHOT" name="maven.home"/>
+    <property value="C:\Documents and Settings\csanchez\.m2\repository" name="localRepository"/>
+    <property value="\" name="file.separator"/>
+    <property value="http://java.sun.com/cgi-bin/bugreport.cgi" name="java.vendor.url.bug"/>
+    <property value="little" name="sun.cpu.endian"/>
+    <property value="UnicodeLittle" name="sun.io.unicode.encoding"/>
+    <property value="windows" name="sun.desktop"/>
+    <property value="pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86" name="sun.cpu.isalist"/>
+  </properties>
+  <testcase time="0" name="test1"/>
+  <testcase time="0" name="test2"/>
+  <testcase time="0" name="test3"/>
+  <testcase time="0" name="test4"/>
+  <testcase time="0" name="test5"/>
+  <testcase name="test7"/>
+  <testcase name="testResults"/>
+  <testcase time="0.5" name="test6"/>
+</testsuite>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/test-reports/TEST-classWithNoTests.NoMethodsTestCase.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/test-reports/TEST-classWithNoTests.NoMethodsTestCase.xml b/surefire-report-parser/src/test/resources/test-reports/TEST-classWithNoTests.NoMethodsTestCase.xml
new file mode 100644
index 0000000..31f7ea5
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/test-reports/TEST-classWithNoTests.NoMethodsTestCase.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" skipped="0" tests="0" time="0" failures="0" name="classWithNoTests.NoMethodsTestCase">
+  <properties>
+    <property value="Java(TM) 2 Runtime Environment, Standard Edition" name="java.runtime.name"/>
+    <property value="C:\devtools\jdk1.5.0_12\jre\bin" name="sun.boot.library.path"/>
+    <property value="1.5.0_12-b04" name="java.vm.version"/>
+    <property value="Sun Microsystems Inc." name="java.vm.vendor"/>
+    <property value="http://java.sun.com/" name="java.vendor.url"/>
+    <property value=";" name="path.separator"/>
+    <property value="Java HotSpot(TM) Client VM" name="java.vm.name"/>
+    <property value="sun.io" name="file.encoding.pkg"/>
+    <property value="US" name="user.country"/>
+    <property value="SUN_STANDARD" name="sun.java.launcher"/>
+    <property value="Service Pack 2" name="sun.os.patch.level"/>
+    <property value="Java Virtual Machine Specification" name="java.vm.specification.name"/>
+    <property
+        value="C:\svn\maven\trunks\surefire\surefire-integration-tests\src\test\resources\default-configuration-classWithNoTests"
+        name="user.dir"/>
+    <property value="1.5.0_12-b04" name="java.runtime.version"/>
+    <property value="sun.awt.Win32GraphicsEnvironment" name="java.awt.graphicsenv"/>
+    <property
+        value="C:\svn\maven\trunks\surefire\surefire-integration-tests\src\test\resources\default-configuration-classWithNoTests"
+        name="basedir"/>
+    <property value="C:\devtools\jdk1.5.0_12\jre\lib\endorsed" name="java.endorsed.dirs"/>
+    <property value="x86" name="os.arch"/>
+    <property value="C:\DOCUME~1\DAN~1.FAB\LOCALS~1\Temp\" name="java.io.tmpdir"/>
+    <property value="
+" name="line.separator"/>
+    <property value="Sun Microsystems Inc." name="java.vm.specification.vendor"/>
+    <property value="" name="user.variant"/>
+    <property value="Windows XP" name="os.name"/>
+    <property value="C:\devtools\maven-2.0.8\bin\m2.conf" name="classworlds.conf"/>
+    <property value="Cp1252" name="sun.jnu.encoding"/>
+    <property
+        value="C:\devtools\jdk1.5.0_12\bin;.;C:\WINDOWS\system32;C:\WINDOWS;c:\devtools\apache-ant-1.7.0\bin;C:\Python25;C:\Perl\bin;C:\devtools\php-5.2.3\;c:\devtools\ruby-1.8.6-25\bin;C:\devtools\jdk1.5.0_12\bin;C:\devtools\maven-2.0.8\bin;c:\dan\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\IDM Computer Solutions\UltraEdit-32;C:\Program Files\Subversion\bin;C:\Program Files\cvsnt;C:\Program Files\GNU\GnuPG\pub;c:\cygwin\bin;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\PostgreSQL\8.2\bin;C:\Program Files\Perforce;"
+        name="java.library.path"/>
+    <property
+        value="C:\svn\maven\trunks\surefire\surefire-integration-tests\src\test\resources\default-configuration-classWithNoTests\target\test-classes;C:\svn\maven\trunks\surefire\surefire-integration-tests\src\test\resources\default-configuration-classWithNoTests\target\classes;c:\weirdlocalrepo\junit\junit\3.8.1\junit-3.8.1.jar;"
+        name="surefire.test.class.path"/>
+    <property value="Java Platform API Specification" name="java.specification.name"/>
+    <property value="49.0" name="java.class.version"/>
+    <property value="HotSpot Client Compiler" name="sun.management.compiler"/>
+    <property value="5.1" name="os.version"/>
+    <property value="C:\Documents and Settings\dan.fabulich" name="user.home"/>
+    <property value="America/Los_Angeles" name="user.timezone"/>
+    <property value="sun.awt.windows.WPrinterJob" name="java.awt.printerjob"/>
+    <property value="1.5" name="java.specification.version"/>
+    <property value="Cp1252" name="file.encoding"/>
+    <property value="dan.fabulich" name="user.name"/>
+    <property value="C:\devtools\maven-2.0.8\boot\classworlds-1.1.jar" name="java.class.path"/>
+    <property value="1.0" name="java.vm.specification.version"/>
+    <property value="32" name="sun.arch.data.model"/>
+    <property value="C:\devtools\jdk1.5.0_12\jre" name="java.home"/>
+    <property value="Sun Microsystems Inc." name="java.specification.vendor"/>
+    <property value="en" name="user.language"/>
+    <property value="sun.awt.windows.WToolkit" name="awt.toolkit"/>
+    <property value="mixed mode" name="java.vm.info"/>
+    <property value="1.5.0_12" name="java.version"/>
+    <property value="C:\devtools\jdk1.5.0_12\jre\lib\ext" name="java.ext.dirs"/>
+    <property
+        value="C:\devtools\jdk1.5.0_12\jre\lib\rt.jar;C:\devtools\jdk1.5.0_12\jre\lib\i18n.jar;C:\devtools\jdk1.5.0_12\jre\lib\sunrsasign.jar;C:\devtools\jdk1.5.0_12\jre\lib\jsse.jar;C:\devtools\jdk1.5.0_12\jre\lib\jce.jar;C:\devtools\jdk1.5.0_12\jre\lib\charsets.jar;C:\devtools\jdk1.5.0_12\jre\classes"
+        name="sun.boot.class.path"/>
+    <property value="Sun Microsystems Inc." name="java.vendor"/>
+    <property value="C:\devtools\maven-2.0.8" name="maven.home"/>
+    <property value="c:\weirdlocalrepo" name="localRepository"/>
+    <property value="\" name="file.separator"/>
+    <property value="http://java.sun.com/cgi-bin/bugreport.cgi" name="java.vendor.url.bug"/>
+    <property value="little" name="sun.cpu.endian"/>
+    <property value="UnicodeLittle" name="sun.io.unicode.encoding"/>
+    <property value="windows" name="sun.desktop"/>
+    <property value="pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86" name="sun.cpu.isalist"/>
+  </properties>
+</testsuite>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4dfdb08c/surefire-report-parser/src/test/resources/test-reports/TEST-com.shape.CircleTest.xml
----------------------------------------------------------------------
diff --git a/surefire-report-parser/src/test/resources/test-reports/TEST-com.shape.CircleTest.xml b/surefire-report-parser/src/test/resources/test-reports/TEST-com.shape.CircleTest.xml
new file mode 100644
index 0000000..1ce1d3d
--- /dev/null
+++ b/surefire-report-parser/src/test/resources/test-reports/TEST-com.shape.CircleTest.xml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<testsuite errors="1" tests="8" time="0.201" failures="1" name="com.shape.CircleTest">
+  <properties>
+    <property value="Java(TM) 2 Runtime Environment, Standard Edition" name="java.runtime.name"/>
+    <property value="c:\japps\jdk1.5.0_04\jre\bin" name="sun.boot.library.path"/>
+    <property value="1.5.0_04-b05" name="java.vm.version"/>
+    <property value="Sun Microsystems Inc." name="java.vm.vendor"/>
+    <property value="http://java.sun.com/" name="java.vendor.url"/>
+    <property value=";" name="path.separator"/>
+    <property value="Java HotSpot(TM) Client VM" name="java.vm.name"/>
+    <property value="sun.io" name="file.encoding.pkg"/>
+    <property value="US" name="user.country"/>
+    <property value="Service Pack 2" name="sun.os.patch.level"/>
+    <property value="Java Virtual Machine Specification" name="java.vm.specification.name"/>
+    <property value="C:\JAppsCode\mergere-maven\plugins\sample-projects\junit-report-tester" name="user.dir"/>
+    <property value="1.5.0_04-b05" name="java.runtime.version"/>
+    <property value="sun.awt.Win32GraphicsEnvironment" name="java.awt.graphicsenv"/>
+    <property value="C:\JAppsCode\mergere-maven\plugins\sample-projects\junit-report-tester" name="basedir"/>
+    <property value="c:\japps\jdk1.5.0_04\jre\lib\endorsed" name="java.endorsed.dirs"/>
+    <property value="x86" name="os.arch"/>
+    <property value="C:\DOCUME~1\Jontri\LOCALS~1\Temp\" name="java.io.tmpdir"/>
+    <property value="
+" name="line.separator"/>
+    <property value="Sun Microsystems Inc." name="java.vm.specification.vendor"/>
+    <property value="" name="user.variant"/>
+    <property value="Windows XP" name="os.name"/>
+    <property value="C:\JApps\maven-2.0-beta-1\bin\m2.conf" name="classworlds.conf"/>
+    <property value="Cp1252" name="sun.jnu.encoding"/>
+    <property
+        value="c:\japps\jdk1.5.0_04\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\JApps\maven-2.0-beta-1\bin;C:\JApps\maven-1.0.2\bin;c:\BatchFile;C:\Program Files\cvsnt;C:\JApps\svn-1.1.4\bin;C:\JApps\ant-1.6.2\bin;"
+        name="java.library.path"/>
+    <property value="Java Platform API Specification" name="java.specification.name"/>
+    <property value="49.0" name="java.class.version"/>
+    <property value="HotSpot Client Compiler" name="sun.management.compiler"/>
+    <property value="5.1" name="os.version"/>
+    <property value="C:\Documents and Settings\Jontri" name="user.home"/>
+    <property value="Asia/Shanghai" name="user.timezone"/>
+    <property value="sun.awt.windows.WPrinterJob" name="java.awt.printerjob"/>
+    <property value="Cp1252" name="file.encoding"/>
+    <property value="1.5" name="java.specification.version"/>
+    <property value="Jontri" name="user.name"/>
+    <property value="C:\JApps\maven-2.0-beta-1\core\boot\classworlds-1.1-alpha-2.jar" name="java.class.path"/>
+    <property value="1.0" name="java.vm.specification.version"/>
+    <property value="32" name="sun.arch.data.model"/>
+    <property value="c:\japps\jdk1.5.0_04\jre" name="java.home"/>
+    <property value="Sun Microsystems Inc." name="java.specification.vendor"/>
+    <property value="en" name="user.language"/>
+    <property value="sun.awt.windows.WToolkit" name="awt.toolkit"/>
+    <property value="mixed mode, sharing" name="java.vm.info"/>
+    <property value="1.5.0_04" name="java.version"/>
+    <property value="c:\japps\jdk1.5.0_04\jre\lib\ext" name="java.ext.dirs"/>
+    <property
+        value="c:\japps\jdk1.5.0_04\jre\lib\rt.jar;c:\japps\jdk1.5.0_04\jre\lib\i18n.jar;c:\japps\jdk1.5.0_04\jre\lib\sunrsasign.jar;c:\japps\jdk1.5.0_04\jre\lib\jsse.jar;c:\japps\jdk1.5.0_04\jre\lib\jce.jar;c:\japps\jdk1.5.0_04\jre\lib\charsets.jar;c:\japps\jdk1.5.0_04\jre\classes"
+        name="sun.boot.class.path"/>
+    <property value="Sun Microsystems Inc." name="java.vendor"/>
+    <property value="C:\JApps\maven-2.0-beta-1" name="maven.home"/>
+    <property value="C:\Documents and Settings\Jontri\.m2\repository" name="localRepository"/>
+    <property value="\" name="file.separator"/>
+    <property value="http://java.sun.com/cgi-bin/bugreport.cgi" name="java.vendor.url.bug"/>
+    <property value="little" name="sun.cpu.endian"/>
+    <property value="UnicodeLittle" name="sun.io.unicode.encoding"/>
+    <property value="windows" name="sun.desktop"/>
+    <property value="pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86" name="sun.cpu.isalist"/>
+  </properties>
+  <testcase time="0.01" name="testX"/>
+  <testcase time="0" name="testY"/>
+  <testcase time="0" name="testXY"/>
+  <testcase time="0.01" name="testRadius">
+    <failure type="junit.framework.AssertionFailedError" message="expected:&lt;20&gt; but was:&lt;10&gt;">
+      junit.framework.AssertionFailedError: expected:&lt;20&gt; but was:&lt;10&gt;
+      at junit.framework.Assert.fail(Assert.java:47)
+      at junit.framework.Assert.failNotEquals(Assert.java:282)
+      at junit.framework.Assert.assertEquals(Assert.java:64)
+      at junit.framework.Assert.assertEquals(Assert.java:201)
+      at junit.framework.Assert.assertEquals(Assert.java:207)
+      at com.shape.CircleTest.testRadius(CircleTest.java:34)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at junit.framework.TestCase.runTest(TestCase.java:154)
+      at junit.framework.TestCase.runBare(TestCase.java:127)
+      at junit.framework.TestResult$1.protect(TestResult.java:106)
+      at junit.framework.TestResult.runProtected(TestResult.java:124)
+      at junit.framework.TestResult.run(TestResult.java:109)
+      at junit.framework.TestCase.run(TestCase.java:118)
+      at junit.framework.TestSuite.runTest(TestSuite.java:208)
+      at junit.framework.TestSuite.run(TestSuite.java:203)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.surefire.battery.JUnitBattery.executeJUnit(JUnitBattery.java:246)
+      at org.codehaus.surefire.battery.JUnitBattery.execute(JUnitBattery.java:220)
+      at org.codehaus.surefire.Surefire.executeBattery(Surefire.java:203)
+      at org.codehaus.surefire.Surefire.run(Surefire.java:152)
+      at org.codehaus.surefire.Surefire.run(Surefire.java:76)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.surefire.SurefireBooter.run(SurefireBooter.java:104)
+      at org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java:241)
+      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:357)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:479)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:452)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:438)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:131)
+      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:186)
+      at org.apache.maven.cli.MavenCli.main(MavenCli.java:316)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
+      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
+      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
+      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
+    </failure>
+    <system-out>[OUT] : Getting the diameter
+    </system-out>
+    <system-err>[ERR] : Getting the Circumference
+    </system-err>
+  </testcase>
+  <testcase time="0.02" name="testProperties">
+    <error type="java.lang.ArithmeticException" message="/ by zero">java.lang.ArithmeticException: / by zero
+      at com.shape.CircleTest.testProperties(CircleTest.java:44)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at junit.framework.TestCase.runTest(TestCase.java:154)
+      at junit.framework.TestCase.runBare(TestCase.java:127)
+      at junit.framework.TestResult$1.protect(TestResult.java:106)
+      at junit.framework.TestResult.runProtected(TestResult.java:124)
+      at junit.framework.TestResult.run(TestResult.java:109)
+      at junit.framework.TestCase.run(TestCase.java:118)
+      at junit.framework.TestSuite.runTest(TestSuite.java:208)
+      at junit.framework.TestSuite.run(TestSuite.java:203)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.surefire.battery.JUnitBattery.executeJUnit(JUnitBattery.java:246)
+      at org.codehaus.surefire.battery.JUnitBattery.execute(JUnitBattery.java:220)
+      at org.codehaus.surefire.Surefire.executeBattery(Surefire.java:203)
+      at org.codehaus.surefire.Surefire.run(Surefire.java:152)
+      at org.codehaus.surefire.Surefire.run(Surefire.java:76)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.surefire.SurefireBooter.run(SurefireBooter.java:104)
+      at org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java:241)
+      at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:357)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:479)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:452)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:438)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
+      at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:131)
+      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:186)
+      at org.apache.maven.cli.MavenCli.main(MavenCli.java:316)
+      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+      at java.lang.reflect.Method.invoke(Method.java:585)
+      at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
+      at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
+      at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
+      at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
+    </error>
+    <system-out>[OUT] : Getting the diameter
+    </system-out>
+    <system-err>[ERR] : Getting the Circumference
+    </system-err>
+  </testcase>
+  <testcase time="0" name="testPI"/>
+  <testcase time="0.01" name="testCircumference"/>
+  <testcase time="0" name="testDiameter"/>
+</testsuite>
\ No newline at end of file