diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java index 5a26e0f674..765d1a71a7 100644 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformIT.java @@ -120,6 +120,19 @@ public void testJupiterEngineWithDisplayNames() .assertContainsText( "testcase name=\"73$71 ✔\" classname=\"<< ✨ >>\"" ) .assertContainsText( "testcase name=\"73$72 ✔\" classname=\"<< ✨ >>\"" ) .assertContainsText( XML_TESTSUITE_FRAGMENT ); + + + validator.getSurefireReportsFile( "TEST-junitplatformenginejupiter.BasicJupiterTest.xml", UTF_8 ) + .assertContainsText( " testStartTime = new ConcurrentHashMap<>(); private final ConcurrentMap failures = new ConcurrentHashMap<>(); private final RunListener runListener; @@ -236,15 +240,23 @@ private String[] toClassMethodName( TestIdentifier testIdentifier ) String realClassName = methodSource.getClassName(); String[] source = testPlan.getParent( testIdentifier ) - .map( i -> toClassMethodName( i ) ) + .map( this::toClassMethodName ) .map( s -> new String[] { s[0], s[1] } ) .orElse( new String[] { realClassName, realClassName } ); + String simpleClassNames = COMMA_PATTERN.splitAsStream( methodSource.getMethodParameterTypes() ) + .map( s -> s.substring( 1 + s.lastIndexOf( '.' ) ) ) + .collect( joining( "," ) ); + + boolean hasParams = !simpleClassNames.isEmpty(); String methodName = methodSource.getMethodName(); - boolean useMethod = display.equals( methodName ) || display.equals( methodName + "()" ); - String resolvedMethodName = useMethod ? methodName : display; + String methodSign = methodName + '(' + simpleClassNames + ')'; + String description = testIdentifier.getLegacyReportingName(); + boolean useDesc = description.startsWith( methodSign ); + String methodDesc = hasParams ? ( useDesc ? description : methodSign ) : methodName; + String methodDisp = methodSign.equals( display ) ? methodDesc : display; - return new String[] {source[0], source[1], methodName, resolvedMethodName}; + return new String[] {source[0], source[1], methodDesc, methodDisp}; } else if ( testSource.filter( ClassSource.class::isInstance ).isPresent() ) { diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java index 23e7ea7e99..16a7343a95 100644 --- a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java +++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java @@ -26,6 +26,7 @@ import static org.apache.maven.surefire.booter.ProviderParameterNames.TESTNG_GROUPS_PROP; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeFalse; @@ -64,6 +65,7 @@ import org.fest.assertions.Assertions; import org.junit.Test; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; import org.junit.platform.launcher.Launcher; import org.junit.platform.launcher.TestIdentifier; import org.junit.platform.launcher.TestPlan; @@ -296,6 +298,32 @@ public void rerunWithSuccess() assertEquals( 0, summary.getTestsFailedCount() ); } + @Test + public void runDisplayNameTest() throws Exception + { + Launcher launcher = LauncherFactory.create(); + ProviderParameters parameters = providerParametersMock(); + JUnitPlatformProvider provider = new JUnitPlatformProvider( parameters, launcher ); + + RunListener listener = mock( RunListener.class ); + ArgumentCaptor entryCaptor = ArgumentCaptor.forClass( ReportEntry.class ); + RunListenerAdapter adapter = new RunListenerAdapter( listener ); + + launcher.registerTestExecutionListeners( adapter ); + + invokeProvider( provider, DisplayNameTest.class ); + + verify( listener, times( 1 ) ).testStarting( entryCaptor.capture() ); + List reportEntries = entryCaptor.getAllValues(); + + assertEquals( 1, reportEntries.size() ); + + assertEquals( DisplayNameTest.class.getName(), reportEntries.get( 0 ).getSourceName() ); + assertEquals( "<< ✨ >>", reportEntries.get( 0 ).getSourceText() ); + assertEquals( "test1", reportEntries.get( 0 ).getName() ); + assertEquals( "73$71 ✔", reportEntries.get( 0 ).getNameText() ); + } + @Test public void rerunParameterized() throws Exception @@ -309,12 +337,42 @@ public void rerunParameterized() "forkCount = 1\nreuseForks = true" ) ); JUnitPlatformProvider provider = new JUnitPlatformProvider( parameters, launcher ); + TestPlanSummaryListener executionListener = new TestPlanSummaryListener(); - launcher.registerTestExecutionListeners( executionListener ); + + RunListener listener = mock( RunListener.class ); + ArgumentCaptor entryCaptor = ArgumentCaptor.forClass( ReportEntry.class ); + RunListenerAdapter adapter = new RunListenerAdapter( listener ); + + launcher.registerTestExecutionListeners( executionListener, adapter ); invokeProvider( provider, TestClass7.class ); assertThat( executionListener.summaries ).hasSize( 3 ); + + verify( listener, times( 4 ) ).testStarting( entryCaptor.capture() ); + List reportEntries = entryCaptor.getAllValues(); + + assertEquals( TestClass7.class.getName(), reportEntries.get( 0 ).getSourceName() ); + assertNull( reportEntries.get( 0 ).getSourceText() ); + assertEquals( "testParameterizedTestCases(String, boolean)[1]", reportEntries.get( 0 ).getName() ); + assertEquals( "[1] Always pass, true", reportEntries.get( 0 ).getNameText() ); + + assertEquals( TestClass7.class.getName(), reportEntries.get( 1 ).getSourceName() ); + assertNull( reportEntries.get( 1 ).getSourceText() ); + assertEquals( "testParameterizedTestCases(String, boolean)[2]", reportEntries.get( 1 ).getName() ); + assertEquals( "[2] Always fail, false", reportEntries.get( 1 ).getNameText() ); + + assertEquals( TestClass7.class.getName(), reportEntries.get( 2 ).getSourceName() ); + assertNull( reportEntries.get( 2 ).getSourceText() ); + assertEquals( "testParameterizedTestCases(String, boolean)[2]", reportEntries.get( 2 ).getName() ); + assertEquals( "[2] Always fail, false", reportEntries.get( 2 ).getNameText() ); + + assertEquals( TestClass7.class.getName(), reportEntries.get( 3 ).getSourceName() ); + assertNull( reportEntries.get( 3 ).getSourceText() ); + assertEquals( "testParameterizedTestCases(String, boolean)[2]", reportEntries.get( 3 ).getName() ); + assertEquals( "[2] Always fail, false", reportEntries.get( 3 ).getNameText() ); + TestExecutionSummary summary = executionListener.summaries.get( 0 ); assertEquals( 2, summary.getTestsFoundCount() ); assertEquals( 2, summary.getTestsStartedCount() ); @@ -327,7 +385,7 @@ public void rerunParameterized() assertEquals( 0, summary.getTestsSucceededCount() ); assertEquals( 1, summary.getTestsFailedCount() ); - summary = executionListener.summaries.get( 1 ); + summary = executionListener.summaries.get( 2 ); assertEquals( 1, summary.getTestsFoundCount() ); assertEquals( 1, summary.getTestsStartedCount() ); assertEquals( 0, summary.getTestsSucceededCount() ); @@ -715,7 +773,6 @@ private static TestsToRun newTestsToRun( Class... testClasses ) private static class TestPlanSummaryListener extends SummaryGeneratingListener { - private final List summaries = new ArrayList<>(); @Override @@ -950,14 +1007,6 @@ void testFailTwice1() count += 1; assertTrue( count >= 3 ); } - - /*@org.junit.jupiter.api.Test - @org.junit.jupiter.api.Order( 2 ) - void testFailTwice2() - { - count += 1; - assertTrue( count >= 3 ); - }*/ } static class TestClass7 @@ -975,4 +1024,14 @@ void testParameterizedTestCases( String testName, boolean value ) assertTrue( value ); } } + + @DisplayName( "<< ✨ >>" ) + static class DisplayNameTest + { + @org.junit.jupiter.api.Test + @DisplayName( "73$71 ✔" ) + void test1() + { + } + } } 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 bf859904e3..6e9eeeb6c2 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 @@ -128,8 +128,8 @@ public void notifiedWithCompatibleNameForMethodWithArguments() verify( listener ).testStarting( entryCaptor.capture() ); ReportEntry entry = entryCaptor.getValue(); - assertEquals( MY_TEST_METHOD_NAME, entry.getName() ); - assertEquals( MY_TEST_METHOD_NAME + "(String)", entry.getNameText() ); + assertEquals( MY_TEST_METHOD_NAME + "(String)", entry.getName() ); + assertNull( entry.getNameText() ); assertEquals( MyTestClass.class.getName(), entry.getSourceName() ); assertNull( entry.getSourceText() ); assertNull( entry.getStackTraceWriter() ); @@ -258,7 +258,7 @@ public void displayNamesInClassAndMethods() adapter.executionStarted( TestIdentifier.from( child2 ) ); inOrder.verify( listener ) .testStarting( new SimpleReportEntry( MyTestClass.class.getName(), "parent", - MY_TEST_METHOD_NAME, MY_TEST_METHOD_NAME + "(String)" ) ); + MY_TEST_METHOD_NAME + "(String)", null ) ); inOrder.verifyNoMoreInteractions(); Exception assumptionFailure = new Exception(); @@ -270,9 +270,9 @@ public void displayNamesInClassAndMethods() assertThat( report.getValue().getSourceText() ) .isEqualTo( "parent" ); assertThat( report.getValue().getName() ) - .isEqualTo( MY_TEST_METHOD_NAME ); - assertThat( report.getValue().getNameText() ) .isEqualTo( MY_TEST_METHOD_NAME + "(String)" ); + assertThat( report.getValue().getNameText() ) + .isNull(); assertThat( report.getValue().getElapsed() ) .isNotNull(); assertThat( report.getValue().getSystemProperties() )