diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java index aeb24576e0..7272f36286 100644 --- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java +++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java @@ -210,8 +210,25 @@ private String safeGetMessage( Throwable throwable ) @Override public void executionSkipped( TestIdentifier testIdentifier, String reason ) { - testStartTime.remove( testIdentifier ); - runListener.testSkipped( createReportEntry( testIdentifier, null, emptyMap(), reason, null ) ); + boolean isClass = testIdentifier.isContainer() + && testIdentifier.getSource().filter( ClassSource.class::isInstance ).isPresent(); + boolean isTest = testIdentifier.isTest(); + + if ( isClass ) + { + SimpleReportEntry report = createReportEntry( testIdentifier ); + runListener.testSetStarting( report ); + for ( TestIdentifier child : testPlan.getChildren( testIdentifier ) ) + { + runListener.testSkipped( createReportEntry( child, null, emptyMap(), reason, null ) ); + } + runListener.testSetCompleted( report ); + } + else if ( isTest ) + { + testStartTime.remove( testIdentifier ); + runListener.testSkipped( createReportEntry( testIdentifier, null, emptyMap(), reason, null ) ); + } } private SimpleReportEntry createReportEntry( TestIdentifier testIdentifier, diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java index 3c1e129054..e790bde1e8 100644 --- a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java +++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java @@ -48,6 +48,7 @@ import org.apache.maven.surefire.api.report.TestOutputReportEntry; import org.apache.maven.surefire.api.report.TestReportListener; +import org.apache.maven.surefire.api.report.TestSetReportEntry; import org.apache.maven.surefire.report.PojoStackTraceWriter; import org.apache.maven.surefire.api.report.ReportEntry; import org.apache.maven.surefire.api.report.SimpleReportEntry; @@ -394,28 +395,39 @@ public void notifiedWhenMethodExecutionSkipped() } @Test - public void notifiedWithCorrectNamesWhenClassExecutionSkipped() - { - ArgumentCaptor entryCaptor = ArgumentCaptor.forClass( ReportEntry.class ); - TestPlan testPlan = TestPlan.from( singletonList( new EngineDescriptor( newId(), "Luke's Plan" ) ) ); + public void notifiedWithCorrectNamesWhenClassExecutionSkipped() throws Exception + { + EngineDescriptor engineDescriptor = new EngineDescriptor( newId(), "Luke's Plan" ); + TestDescriptor classTestDescriptor = newClassDescriptor(); + TestDescriptor method1 = newMethodDescriptor(); + classTestDescriptor.addChild( method1 ); + TestDescriptor method2 = newMethodDescriptor(); + classTestDescriptor.addChild( method2 ); + engineDescriptor.addChild( classTestDescriptor ); + TestPlan testPlan = TestPlan.from( singletonList( engineDescriptor ) ); adapter.testPlanExecutionStarted( testPlan ); TestIdentifier classIdentifier = identifiersAsParentOnTestPlan( testPlan, newEngineDescriptor(), newClassDescriptor() ); - adapter.executionSkipped( classIdentifier, "test" ); - verify( listener ).testSkipped( entryCaptor.capture() ); - - ReportEntry entry = entryCaptor.getValue(); - assertNull( entry.getName() ); - assertEquals( MyTestClass.class.getTypeName(), entry.getSourceName() ); - } + ArgumentCaptor entryCaptor1 = ArgumentCaptor.forClass( TestSetReportEntry.class ); + ArgumentCaptor entryCaptor2 = ArgumentCaptor.forClass( ReportEntry.class ); + ArgumentCaptor entryCaptor3 = ArgumentCaptor.forClass( ReportEntry.class ); + ArgumentCaptor entryCaptor4 = ArgumentCaptor.forClass( TestSetReportEntry.class ); - @Test - public void notifiedWhenEngineExecutionSkipped() - { - adapter.executionSkipped( newEngineIdentifier(), "test" ); - verify( listener ).testSkipped( any() ); + adapter.executionSkipped( classIdentifier, "test" ); + verify( listener ).testSetStarting( entryCaptor1.capture() ); + verify( listener ).testSkipped( entryCaptor2.capture() ); + verify( listener ).testSkipped( entryCaptor3.capture() ); + verify( listener ).testSetCompleted( entryCaptor4.capture() ); + + ReportEntry entry1 = entryCaptor1.getValue(); + assertNull( entry1.getName() ); + assertEquals( MyTestClass.class.getTypeName(), entry1.getSourceName() ); + + ReportEntry entry4 = entryCaptor1.getValue(); + assertNull( entry4.getName() ); + assertEquals( MyTestClass.class.getTypeName(), entry4.getSourceName() ); } @Test