Skip to content

Commit

Permalink
[SUREFIRE-1716] JUnit5 Parameterized tests and re-run should see uniq…
Browse files Browse the repository at this point in the history
…ue test runs with different parameters
  • Loading branch information
Tibor17 committed Nov 12, 2019
1 parent c49623a commit 0c0d902
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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( "<testcase name=\"test(TestInfo)\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"0 + 1 = 1\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"1 + 2 = 3\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"49 + 51 = 100\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"1 + 100 = 101\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" );
}

@Test
Expand All @@ -145,11 +158,25 @@ public void testJQwikEngine()
@Test
public void testMultipleEngines()
{
unpack( "junit-platform-multiple-engines", "-" + junit5Version + "-" + jqwikVersion )
OutputValidator validator =
unpack( "junit-platform-multiple-engines", "-" + junit5Version + "-" + jqwikVersion )
.sysProp( "junit5.version", junit5Version )
.sysProp( "jqwik.version", jqwikVersion )
.executeTest()
.verifyErrorFree( 7 );


validator.getSurefireReportsFile( "TEST-junitplatformenginejupiter.BasicJupiterTest.xml", UTF_8 )
.assertContainsText( "<testcase name=\"test(TestInfo)\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"add(int, int, int)[1]\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"add(int, int, int)[2]\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"add(int, int, int)[3]\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" )
.assertContainsText( "<testcase name=\"add(int, int, int)[4]\" "
+ "classname=\"junitplatformenginejupiter.BasicJupiterTest\"" );
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
*/

import static java.util.Collections.emptyMap;
import static java.util.stream.Collectors.joining;
import static org.apache.maven.surefire.util.internal.ObjectUtils.systemProps;

import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.regex.Pattern;

import org.apache.maven.surefire.report.PojoStackTraceWriter;
import org.apache.maven.surefire.report.RunListener;
Expand All @@ -46,6 +48,8 @@
final class RunListenerAdapter
implements TestExecutionListener
{
private static final Pattern COMMA_PATTERN = Pattern.compile( "," );

private final ConcurrentMap<TestIdentifier, Long> testStartTime = new ConcurrentHashMap<>();
private final ConcurrentMap<TestIdentifier, TestExecutionResult> failures = new ConcurrentHashMap<>();
private final RunListener runListener;
Expand Down Expand Up @@ -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() )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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<ReportEntry> 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<ReportEntry> 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
Expand All @@ -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<ReportEntry> 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<ReportEntry> 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() );
Expand All @@ -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() );
Expand Down Expand Up @@ -715,7 +773,6 @@ private static TestsToRun newTestsToRun( Class<?>... testClasses )
private static class TestPlanSummaryListener
extends SummaryGeneratingListener
{

private final List<TestExecutionSummary> summaries = new ArrayList<>();

@Override
Expand Down Expand Up @@ -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
Expand All @@ -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()
{
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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() );
Expand Down Expand Up @@ -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();
Expand All @@ -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() )
Expand Down

0 comments on commit 0c0d902

Please sign in to comment.