Updated Branches:
  refs/heads/master 4221437cb -> a57b805f4

[SUREFIRE-970] Fix elapsed time time of failed and skipped tests

o time measurement is now limited to TestSetRunListener, except for concurrent 
junit tests


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/a57b805f
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/a57b805f
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/a57b805f

Branch: refs/heads/master
Commit: a57b805f4c079b40ae549e8a22be2f5de006d580
Parents: 4221437
Author: Andreas Gudian <[email protected]>
Authored: Mon Mar 25 20:37:20 2013 +0100
Committer: Andreas Gudian <[email protected]>
Committed: Mon Mar 25 20:37:20 2013 +0100

----------------------------------------------------------------------
 .../surefire/report/PrettyPrintXMLWriter.java      |    7 +-
 .../plugin/surefire/report/TestSetRunListener.java |   40 +++++--
 .../plugin/surefire/report/WrappedReportEntry.java |    3 +-
 .../maven/surefire/booter/ForkingRunListener.java  |   13 ++-
 .../its/jiras/Surefire943ReportContentIT.java      |   85 ++++++++++++---
 .../src/test/java/org/sample/module/My1Test.java   |   11 ++
 .../src/test/java/org/sample/module/My2Test.java   |   11 ++
 .../src/test/java/org/sample/module/My3Test.java   |    5 +-
 .../src/test/java/org/sample/module/My4Test.java   |   27 +++++
 .../junitcore/NonConcurrentRunListener.java        |   27 +++--
 .../maven/surefire/junitcore/TestMethod.java       |   18 ++--
 11 files changed, 187 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/PrettyPrintXMLWriter.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/PrettyPrintXMLWriter.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/PrettyPrintXMLWriter.java
index ddb4ed9..b0fea62 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/PrettyPrintXMLWriter.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/PrettyPrintXMLWriter.java
@@ -21,9 +21,8 @@ package org.apache.maven.plugin.surefire.report;
 
 import java.io.PrintWriter;
 import java.util.LinkedList;
-import org.apache.maven.shared.utils.xml.XMLWriter;
 
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+import org.apache.maven.shared.utils.xml.XMLWriter;
 
 public class PrettyPrintXMLWriter
     implements XMLWriter
@@ -69,12 +68,12 @@ public class PrettyPrintXMLWriter
 
     public void setEncoding( String encoding )
     {
-        throw new NotImplementedException();
+        throw new RuntimeException( "Not Implemented" );
     }
 
     public void setDocType( String docType )
     {
-        throw new NotImplementedException();
+        throw new RuntimeException( "Not Implemented" );
     }
 
     private PrettyPrintXMLWriter( PrintWriter writer, String encoding, String 
doctype )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
index 230e0e7..c366435 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
@@ -33,7 +33,7 @@ import org.apache.maven.surefire.util.internal.ByteBuffer;
 /**
  * Reports data for a single test set.
  * <p/>
- *
+ * 
  * @author Kristian Rosenvold
  */
 public class TestSetRunListener
@@ -62,8 +62,8 @@ public class TestSetRunListener
     public TestSetRunListener( ConsoleReporter consoleReporter, FileReporter 
fileReporter,
                                StatelessXmlReporter simpleXMLReporter,
                                TestcycleConsoleOutputReceiver 
consoleOutputReceiver,
-                               StatisticsReporter statisticsReporter, 
RunStatistics globalStats, boolean trimStackTrace,
-                               boolean isPlainFormat, boolean 
briefOrPlainFormat )
+                               StatisticsReporter statisticsReporter, 
RunStatistics globalStats,
+                               boolean trimStackTrace, boolean isPlainFormat, 
boolean briefOrPlainFormat )
     {
         this.consoleReporter = consoleReporter;
         this.fileReporter = fileReporter;
@@ -115,7 +115,7 @@ public class TestSetRunListener
 
     public void testSetCompleted( ReportEntry report )
     {
-        WrappedReportEntry wrap = wrapTestSet( report, null );
+        WrappedReportEntry wrap = wrapTestSet( report );
         List<String> testResults = briefOrPlainFormat ? 
detailsForThis.getTestResults() : null;
         if ( consoleReporter != null )
         {
@@ -195,7 +195,6 @@ public class TestSetRunListener
 
     public void testSkipped( ReportEntry reportEntry )
     {
-
         WrappedReportEntry wrapped = wrap( reportEntry, 
ReportEntryType.skipped );
         detailsForThis.testSkipped( wrapped );
         if ( statisticsReporter != null )
@@ -225,16 +224,33 @@ public class TestSetRunListener
 
     private WrappedReportEntry wrap( ReportEntry other, ReportEntryType 
reportEntryType )
     {
-        return new WrappedReportEntry( other, reportEntryType, 
other.getElapsed() != null
-            ? other.getElapsed()
-            : detailsForThis.getElapsedSinceLastStart(), getAsString( 
testStdOut ), getAsString( testStdErr ) );
+        final int estimatedElapsed;
+        if ( reportEntryType != ReportEntryType.skipped )
+        {
+            if ( other.getElapsed() != null )
+            {
+                estimatedElapsed = other.getElapsed();
+            }
+            else
+            {
+                estimatedElapsed = detailsForThis.getElapsedSinceLastStart();
+            }
+        }
+        else
+        {
+            estimatedElapsed = 0;
+        }
+
+        return new WrappedReportEntry( other, reportEntryType, 
estimatedElapsed, getAsString( testStdOut ),
+                                       getAsString( testStdErr ) );
     }
 
-    private WrappedReportEntry wrapTestSet( ReportEntry other, ReportEntryType 
reportEntryType )
+    private WrappedReportEntry wrapTestSet( ReportEntry other )
     {
-        return new WrappedReportEntry( other, reportEntryType, 
other.getElapsed() != null
-            ? other.getElapsed()
-            : detailsForThis.getElapsedSinceTestSetStart(), getAsString( 
testStdOut ), getAsString( testStdErr ) );
+        return new WrappedReportEntry( other, null, other.getElapsed() != null 
+                        ? other.getElapsed()
+                        : detailsForThis.getElapsedSinceTestSetStart(), 
getAsString( testStdOut ),
+                                       getAsString( testStdErr ) );
     }
 
     public void close()

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
index c77867c..fa941f7 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
@@ -58,10 +58,9 @@ public class WrappedReportEntry
 
     public Integer getElapsed()
     {
-        return original.getElapsed() != null ? original.getElapsed() : elapsed;
+        return elapsed;
     }
 
-
     public ReportEntryType getReportEntryType()
     {
         return reportEntryType;

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
----------------------------------------------------------------------
diff --git 
a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
 
b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
index fa4e9cf..d20fcf2 100644
--- 
a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
+++ 
b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
@@ -132,7 +132,6 @@ public class ForkingRunListener
         target.print( toString( BOOTERCODE_TEST_ERROR, report, 
testSetChannelId ) );
     }
 
-
     public void testFailed( ReportEntry report )
     {
         target.print( toString( BOOTERCODE_TEST_FAILED, report, 
testSetChannelId ) );
@@ -233,8 +232,10 @@ public class ForkingRunListener
     private String toPropertyString( String key, String value )
     {
         StringBuffer stringBuffer = new StringBuffer();
-        append( stringBuffer, BOOTERCODE_SYSPROPS ).comma( stringBuffer );
-        append( stringBuffer, Integer.toHexString( testSetChannelId.intValue() 
) ).comma( stringBuffer );
+        append( stringBuffer, BOOTERCODE_SYSPROPS );
+        comma( stringBuffer );
+        append( stringBuffer, Integer.toHexString( testSetChannelId.intValue() 
) );
+        comma( stringBuffer );
         StringUtils.escapeJavaStyleString( stringBuffer, key );
         append( stringBuffer, "," );
         StringUtils.escapeJavaStyleString( stringBuffer, value );
@@ -245,8 +246,10 @@ public class ForkingRunListener
     private String toString( byte operationCode, ReportEntry reportEntry, 
Integer testSetChannelId )
     {
         StringBuffer stringBuffer = new StringBuffer();
-        append( stringBuffer, operationCode ).comma( stringBuffer );
-        append( stringBuffer, Integer.toHexString( testSetChannelId.intValue() 
) ).comma( stringBuffer );
+        append( stringBuffer, operationCode );
+        comma( stringBuffer );
+        append( stringBuffer, Integer.toHexString( testSetChannelId.intValue() 
) );
+        comma( stringBuffer );
         nullableEncoding( stringBuffer, reportEntry.getSourceName() );
         comma( stringBuffer );
         nullableEncoding( stringBuffer, reportEntry.getName() );

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire943ReportContentIT.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire943ReportContentIT.java
 
b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire943ReportContentIT.java
index 5568c48..fe72087 100644
--- 
a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire943ReportContentIT.java
+++ 
b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire943ReportContentIT.java
@@ -1,4 +1,5 @@
 package org.apache.maven.surefire.its.jiras;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -18,7 +19,6 @@ package org.apache.maven.surefire.its.jiras;
  * under the License.
  */
 
-
 import java.io.FileNotFoundException;
 import org.apache.maven.shared.utils.xml.Xpp3Dom;
 import org.apache.maven.shared.utils.xml.Xpp3DomBuilder;
@@ -33,26 +33,57 @@ public class Surefire943ReportContentIT
 {
 
     @Test
-    public void test()
+    public void test_noParallel()
         throws Exception
     {
-        OutputValidator validator = unpack( "surefire-943-report-content" 
).maven().withFailure().executeTest();
-        validator.assertTestSuiteResults( 6, 0, 3, 0 );
+        doTest( "none" );
+    }
 
-        validate( validator, "org.sample.module.My1Test" );
-        validate( validator, "org.sample.module.My2Test" );
-        validate( validator, "org.sample.module.My3Test" );
+    @Test
+    public void test_parallelBoth()
+        throws Exception
+    {
+        doTest( "both" );
     }
 
-    private void validate( OutputValidator validator, String className )
+    private void doTest( String parallelMode )
+        throws Exception
+    {
+        OutputValidator validator =
+            unpack( "surefire-943-report-content" ).maven().sysProp( 
"parallel", parallelMode ).withFailure().executeTest();
+        validator.assertTestSuiteResults( 9, 0, 3, 3 );
+
+        validate( validator, "org.sample.module.My1Test", 1 );
+        validate( validator, "org.sample.module.My2Test", 1 );
+        validate( validator, "org.sample.module.My3Test", 0 );
+        validateSkipped( validator, "org.sample.module.My4Test" );
+    }
+
+    private void validateSkipped( OutputValidator validator, String className )
         throws FileNotFoundException
     {
-        Xpp3Dom testResult =
-            Xpp3DomBuilder.build( validator.getSurefireReportsXmlFile( "TEST-" 
+ className + ".xml" ).getFileInputStream(),
-                                  "UTF-8" );
-        Xpp3Dom[] children = testResult.getChildren( "testcase" );
+        Xpp3Dom[] children = readTests( validator, className );
 
-        Assert.assertEquals( 2, children.length );
+        Assert.assertEquals( 1, children.length );
+
+        Xpp3Dom child = children[0];
+
+        Assert.assertEquals( className, child.getAttribute( "classname" ) );
+        Assert.assertEquals( className, child.getAttribute( "name" ) );
+
+        Assert.assertEquals( "Expected skipped tag for ignored method for " + 
className, 1,
+                             child.getChildren( "skipped" ).length );
+
+        Assert.assertTrue( "time for ignored test is expected to be zero",
+                           Double.compare( Double.parseDouble( 
child.getAttribute( "time" ) ), 0.0d ) == 0 );
+    }
+
+    private void validate( OutputValidator validator, String className, int 
ignored )
+        throws FileNotFoundException
+    {
+        Xpp3Dom[] children = readTests( validator, className );
+
+        Assert.assertEquals( 2 + ignored, children.length );
 
         for ( Xpp3Dom child : children )
         {
@@ -62,15 +93,39 @@ public class Surefire943ReportContentIT
             {
                 Assert.assertEquals( "Expected no failures for method 
alwaysSuccessful for " + className, 0,
                                      child.getChildCount() );
+
+                Assert.assertTrue( "time for successful test is expected to be 
positive",
+                                   Double.compare( Double.parseDouble( 
child.getAttribute( "time" ) ), 0.0d ) > 0 );
+            }
+            else if ( child.getAttribute( "name" ).contains( "Ignored" ) )
+            {
+                Assert.assertEquals( "Expected skipped-tag for ignored method 
for " + className, 1,
+                                     child.getChildren( "skipped" ).length );
+
+                Assert.assertTrue( "time for ignored test is expected to be 
zero",
+                                   Double.compare( Double.parseDouble( 
child.getAttribute( "time" ) ), 0.0d ) == 0 );
+
             }
             else
             {
-                Assert.assertEquals( "Expected methods \"alwaysSuccessful\" 
and \"fails\" in " + className, "fails",
-                                     child.getAttribute( "name" ) );
+                Assert.assertEquals( "Expected methods \"alwaysSuccessful\", 
\"*Ignored\" and \"fails\" in "
+                    + className, "fails", child.getAttribute( "name" ) );
                 Assert.assertEquals( "Expected failure description for method 
\"fails\" in " + className, 1,
                                      child.getChildren( "failure" ).length );
+                Assert.assertTrue( "time for failed test is expected to be 
positive",
+                                   Double.compare( Double.parseDouble( 
child.getAttribute( "time" ) ), 0.0d ) > 0 );
             }
         }
     }
 
+    private Xpp3Dom[] readTests( OutputValidator validator, String className )
+        throws FileNotFoundException
+    {
+        Xpp3Dom testResult =
+            Xpp3DomBuilder.build( validator.getSurefireReportsXmlFile( "TEST-" 
+ className + ".xml" ).getFileInputStream(),
+                                  "UTF-8" );
+        Xpp3Dom[] children = testResult.getChildren( "testcase" );
+        return children;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My1Test.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My1Test.java
 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My1Test.java
index b2a2919..a5b5b61 100644
--- 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My1Test.java
+++ 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My1Test.java
@@ -6,17 +6,28 @@ import java.lang.management.ManagementFactory;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.Ignore;
 
 public class My1Test
 {
     @Test
     public void fails()
+        throws Exception
     {
+        Thread.sleep( 100 );
         fail( "Always fails" );
     }
 
     @Test
     public void alwaysSuccessful()
+        throws Exception
+    {
+        Thread.sleep( 100 );
+    }
+
+    @Test
+    @Ignore( "Ignore-Message" )
+    public void alwaysIgnored()
     {
 
     }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My2Test.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My2Test.java
 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My2Test.java
index 7f70c76..a9b6a0a 100644
--- 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My2Test.java
+++ 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My2Test.java
@@ -6,16 +6,27 @@ import java.lang.management.ManagementFactory;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.Ignore;
 
 public class My2Test {
     @Test
     public void fails()
+        throws Exception
     {
+        Thread.sleep( 100 );
         fail( "Always fails" );
     }
 
     @Test
     public void alwaysSuccessful()
+        throws Exception
+    {
+        Thread.sleep( 100 );
+    }
+    
+    @Test
+    @Ignore
+    public void alwaysIgnored()
     {
 
     }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My3Test.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My3Test.java
 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My3Test.java
index bb2a06b..5f5b2cd 100644
--- 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My3Test.java
+++ 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My3Test.java
@@ -10,13 +10,16 @@ import org.junit.Test;
 public class My3Test {
     @Test
     public void fails()
+        throws Exception
     {
+        Thread.sleep( 100 );
         fail( "Always fails" );
     }
 
     @Test
     public void alwaysSuccessful()
+        throws Exception
     {
-
+        Thread.sleep( 100 );
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My4Test.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My4Test.java
 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My4Test.java
new file mode 100644
index 0000000..7124d61
--- /dev/null
+++ 
b/surefire-integration-tests/src/test/resources/surefire-943-report-content/src/test/java/org/sample/module/My4Test.java
@@ -0,0 +1,27 @@
+package org.sample.module;
+
+import static org.junit.Assert.fail;
+
+import java.lang.management.ManagementFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.Ignore;
+
+@Ignore( "Ignore-Message" )
+public class My4Test
+{
+
+    @Test
+    public void alsoIgnored()
+    {
+
+    }
+    
+    @Test
+    @Ignore
+    public void alwaysIgnored()
+    {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
index 240a40f..cf4d19d 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
@@ -30,18 +30,15 @@ import org.junit.runner.Result;
 import org.junit.runner.notification.Failure;
 
 /**
- * A class to be used when there is no JUnit parallelism (methods or/and 
class). This
- * allow to workaround JUnit limitation a la Junit4 provider. Specifically, we 
can redirect
- * properly the output even if we don't have class demarcation in JUnit. It 
works when
- * if there is a JVM instance per test run, i.e. with forkMode=always or 
perthread.
+ * A class to be used when there is no JUnit parallelism (methods or/and 
class). This allow to workaround JUnit
+ * limitation a la Junit4 provider. Specifically, we can redirect properly the 
output even if we don't have class
+ * demarcation in JUnit. It works when if there is a JVM instance per test 
run, i.e. with forkMode=always or perthread.
  */
 public class NonConcurrentRunListener
     extends JUnit4RunListener
     implements ConsoleOutputReceiver
 {
 
-    private long startTime = System.currentTimeMillis();
-
     private java.lang.Class<?> currentTestClass;
 
     private Description lastFinishedDescription;
@@ -60,20 +57,26 @@ public class NonConcurrentRunListener
 
     protected SimpleReportEntry createReportEntry( Description description )
     {
-        return new SimpleReportEntry( description.getClassName(), 
description.getDisplayName(),
-                                      (int) ( System.currentTimeMillis() - 
startTime ) );
+        return new SimpleReportEntry( description.getClassName(), 
description.getDisplayName()/*,
+                                       (int) ( System.currentTimeMillis() - 
startTime ) */);
     }
 
     protected SimpleReportEntry createReportEntryForTestSet( Description 
description )
     {
-        return new SimpleReportEntry( description.getClassName(), 
description.getClassName(),
-                                      (int) ( System.currentTimeMillis() - 
startTime ) );
+        return new SimpleReportEntry( description.getClassName(), 
description.getClassName() /*,
+                                       (int) ( System.currentTimeMillis() - 
startTime ) */);
     }
 
     @Override
     public void testStarted( Description description )
         throws Exception
     {
+        finishLastTestSetIfNeccessary( description );
+        super.testStarted( description );
+    }
+
+    private void finishLastTestSetIfNeccessary( Description description )
+    {
         if ( !description.getTestClass().equals( currentTestClass ) )
         {
             currentTestClass = description.getTestClass();
@@ -82,10 +85,8 @@ public class NonConcurrentRunListener
                 reporter.testSetCompleted( createReportEntryForTestSet( 
lastFinishedDescription ) );
                 lastFinishedDescription = null;
             }
-            startTime = System.currentTimeMillis();
             reporter.testSetStarting( createReportEntryForTestSet( description 
) );
         }
-        super.testStarted( description );
     }
 
     @Override
@@ -100,6 +101,8 @@ public class NonConcurrentRunListener
     public void testIgnored( Description description )
         throws Exception
     {
+        finishLastTestSetIfNeccessary( description );
+
         super.testIgnored( description );
         this.lastFinishedDescription = description;
     }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a57b805f/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
index 041db34..cad3fd5 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
@@ -98,11 +98,12 @@ class TestMethod
 
         if ( ignored != null )
         {
-            reporter.testSkipped( createReportEntry() );
+            reporter.testSkipped( createReportEntry( ignored ) );
             return;
         }
 
-        reporter.testStarting( createReportEntry() );
+        ReportEntry descriptionReport = createReportEntry( description );
+        reporter.testStarting( descriptionReport );
         if ( output != null )
         {
             output.writeDetails( ( (ConsoleOutputReceiver) reporter ) );
@@ -110,23 +111,22 @@ class TestMethod
 
         if ( testFailure != null )
         {
-            reporter.testFailed( testFailure );
+            reporter.testFailed( createReportEntry( testFailure ) );
         }
         else if ( testError != null )
         {
-            reporter.testError( testError );
+            reporter.testError( createReportEntry( testError ) );
         }
         else
         {
-            reporter.testSucceeded( createReportEntry() );
+            reporter.testSucceeded( descriptionReport );
         }
     }
 
-    private ReportEntry createReportEntry()
+    private ReportEntry createReportEntry( ReportEntry reportEntry )
     {
-        int elapsed = (int) ( endTime - startTime );
-        return new CategorizedReportEntry( description.getSourceName(), 
description.getName(), description.getGroup(),
-                                           description.getStackTraceWriter(), 
elapsed, description.getMessage() );
+        return new CategorizedReportEntry( reportEntry.getSourceName(), 
reportEntry.getName(), reportEntry.getGroup(),
+                                           reportEntry.getStackTraceWriter(), 
getElapsed(), reportEntry.getMessage() );
     }
 
     public void attachToThread()

Reply via email to