You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2017/08/03 14:37:59 UTC
[09/17] maven-surefire git commit: Move provider classes to maven
surefire package
Move provider classes to maven surefire package
Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/4b8c1a47
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/4b8c1a47
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/4b8c1a47
Branch: refs/heads/junit5
Commit: 4b8c1a47ab348e16f3f9ec0938d8312cb7546f4c
Parents: 78229d5
Author: Benedikt Ritter <br...@apache.org>
Authored: Mon Feb 6 19:14:53 2017 +0100
Committer: Benedikt Ritter <br...@apache.org>
Committed: Mon Jun 12 08:18:35 2017 +0200
----------------------------------------------------------------------
.../surefire/junit5/JUnitPlatformProvider.java | 202 ++++++++++++
.../surefire/junit5/RunListenerAdapter.java | 148 +++++++++
.../surefire/junit5/TestPlanScannerFilter.java | 64 ++++
.../provider/JUnitPlatformProvider.java | 202 ------------
.../surefire/provider/RunListenerAdapter.java | 148 ---------
.../provider/TestPlanScannerFilter.java | 64 ----
....maven.surefire.providerapi.SurefireProvider | 2 +-
.../junit5/JUnitPlatformProviderTests.java | 325 +++++++++++++++++++
.../junit5/RunListenerAdapterTests.java | 262 +++++++++++++++
.../junit5/TestPlanScannerFilterTests.java | 190 +++++++++++
.../provider/JUnitPlatformProviderTests.java | 325 -------------------
.../provider/RunListenerAdapterTests.java | 263 ---------------
.../provider/TestPlanScannerFilterTests.java | 190 -----------
13 files changed, 1192 insertions(+), 1193 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/JUnitPlatformProvider.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/JUnitPlatformProvider.java b/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/JUnitPlatformProvider.java
new file mode 100644
index 0000000..ee93165
--- /dev/null
+++ b/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/JUnitPlatformProvider.java
@@ -0,0 +1,202 @@
+package org.apache.maven.surefire.junit5;
+
+/*
+ * 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 org.apache.maven.surefire.providerapi.AbstractProvider;
+import org.apache.maven.surefire.providerapi.ProviderParameters;
+import org.apache.maven.surefire.report.ReporterException;
+import org.apache.maven.surefire.report.ReporterFactory;
+import org.apache.maven.surefire.report.RunListener;
+import org.apache.maven.surefire.report.SimpleReportEntry;
+import org.apache.maven.surefire.suite.RunResult;
+import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.apache.maven.surefire.util.TestsToRun;
+import org.junit.platform.engine.Filter;
+import org.junit.platform.launcher.Launcher;
+import org.junit.platform.launcher.LauncherDiscoveryRequest;
+import org.junit.platform.launcher.TagFilter;
+import org.junit.platform.launcher.core.LauncherFactory;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
+import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
+
+/**
+ * @since 1.0
+ */
+public class JUnitPlatformProvider
+ extends AbstractProvider
+{
+
+ // Parameter names processed to determine which @Tags should be executed.
+ static final String EXCLUDE_GROUPS = "excludedGroups";
+
+ static final String EXCLUDE_TAGS = "excludeTags";
+
+ static final String INCLUDE_GROUPS = "groups";
+
+ static final String INCLUDE_TAGS = "includeTags";
+
+ static final String EXCEPTION_MESSAGE_BOTH_NOT_ALLOWED = "The " + INCLUDE_GROUPS + " and " + INCLUDE_TAGS
+ + " parameters (or the " + EXCLUDE_GROUPS + " and " + EXCLUDE_TAGS + " parameters) are synonyms - "
+ + "only one of each is allowed (though neither is required).";
+
+ private final ProviderParameters parameters;
+
+ private final Launcher launcher;
+
+ final Filter<?>[] includeAndExcludeFilters;
+
+ public JUnitPlatformProvider( ProviderParameters parameters )
+ {
+ this( parameters, LauncherFactory.create() );
+ }
+
+ JUnitPlatformProvider( ProviderParameters parameters, Launcher launcher )
+ {
+ this.parameters = parameters;
+ this.launcher = launcher;
+ this.includeAndExcludeFilters = getIncludeAndExcludeFilters();
+ Logger.getLogger( "org.junit" ).setLevel( Level.WARNING );
+ }
+
+ @Override
+ public Iterable<Class<?>> getSuites()
+ {
+ return scanClasspath();
+ }
+
+ @Override
+ public RunResult invoke( Object forkTestSet )
+ throws TestSetFailedException, ReporterException, InvocationTargetException
+ {
+ if ( forkTestSet instanceof TestsToRun )
+ {
+ return invokeAllTests( (TestsToRun) forkTestSet );
+ }
+ else if ( forkTestSet instanceof Class )
+ {
+ return invokeAllTests( TestsToRun.fromClass( (Class<?>) forkTestSet ) );
+ }
+ else if ( forkTestSet == null )
+ {
+ return invokeAllTests( scanClasspath() );
+ }
+ else
+ {
+ throw new IllegalArgumentException( "Unexpected value of forkTestSet: " + forkTestSet );
+ }
+ }
+
+ private TestsToRun scanClasspath()
+ {
+ TestsToRun scannedClasses = parameters.getScanResult().applyFilter(
+ new TestPlanScannerFilter( launcher, includeAndExcludeFilters ), parameters.getTestClassLoader() );
+ return parameters.getRunOrderCalculator().orderTestClasses( scannedClasses );
+ }
+
+ private RunResult invokeAllTests( TestsToRun testsToRun )
+ {
+ RunResult runResult;
+ ReporterFactory reporterFactory = parameters.getReporterFactory();
+ try
+ {
+ RunListener runListener = reporterFactory.createReporter();
+ launcher.registerTestExecutionListeners( new RunListenerAdapter( runListener ) );
+
+ for ( Class<?> testClass : testsToRun )
+ {
+ invokeSingleClass( testClass, runListener );
+ }
+ }
+ finally
+ {
+ runResult = reporterFactory.close();
+ }
+ return runResult;
+ }
+
+ private void invokeSingleClass( Class<?> testClass, RunListener runListener )
+ {
+ SimpleReportEntry classEntry = new SimpleReportEntry( getClass().getName(), testClass.getName() );
+ runListener.testSetStarting( classEntry );
+
+ LauncherDiscoveryRequest discoveryRequest = request().selectors( selectClass( testClass ) ).filters(
+ includeAndExcludeFilters ).build();
+ launcher.execute( discoveryRequest );
+
+ runListener.testSetCompleted( classEntry );
+ }
+
+ private Filter<?>[] getIncludeAndExcludeFilters()
+ {
+ List<Filter<?>> filters = new ArrayList<>();
+
+ Optional<List<String>> includes = getGroupsOrTags( getPropertiesList( INCLUDE_GROUPS ),
+ getPropertiesList( INCLUDE_TAGS ) );
+ includes.map( TagFilter::includeTags ).ifPresent( filters::add );
+
+ Optional<List<String>> excludes = getGroupsOrTags( getPropertiesList( EXCLUDE_GROUPS ),
+ getPropertiesList( EXCLUDE_TAGS ) );
+ excludes.map( TagFilter::excludeTags ).ifPresent( filters::add );
+
+ return filters.toArray( new Filter<?>[filters.size()] );
+ }
+
+ private Optional<List<String>> getPropertiesList( String key )
+ {
+ List<String> compoundProperties = null;
+ String property = parameters.getProviderProperties().get( key );
+ if ( property != null )
+ {
+ compoundProperties = Arrays.asList( property.split( "[, ]+" ) );
+ }
+ return Optional.ofNullable( compoundProperties );
+ }
+
+ private Optional<List<String>> getGroupsOrTags( Optional<List<String>> groups, Optional<List<String>> tags )
+ {
+ Optional<List<String>> elements = Optional.empty();
+
+ if ( groups.isPresent() && tags.isPresent() )
+ {
+ throw new IllegalStateException( EXCEPTION_MESSAGE_BOTH_NOT_ALLOWED );
+ }
+
+ if ( groups.isPresent() )
+ {
+ elements = groups;
+ }
+ else if ( tags.isPresent() )
+ {
+ elements = tags;
+ }
+
+ return elements;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/RunListenerAdapter.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/RunListenerAdapter.java b/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/RunListenerAdapter.java
new file mode 100644
index 0000000..8e1a2e2
--- /dev/null
+++ b/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/RunListenerAdapter.java
@@ -0,0 +1,148 @@
+package org.apache.maven.surefire.junit5;
+
+/*
+ * 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 static org.apache.maven.surefire.report.SimpleReportEntry.ignored;
+import static org.junit.platform.engine.TestExecutionResult.Status.ABORTED;
+import static org.junit.platform.engine.TestExecutionResult.Status.FAILED;
+
+import java.util.Optional;
+
+import org.apache.maven.surefire.report.PojoStackTraceWriter;
+import org.apache.maven.surefire.report.RunListener;
+import org.apache.maven.surefire.report.SimpleReportEntry;
+import org.apache.maven.surefire.report.StackTraceWriter;
+import org.junit.platform.engine.TestExecutionResult;
+import org.junit.platform.engine.TestSource;
+import org.junit.platform.engine.support.descriptor.ClassSource;
+import org.junit.platform.engine.support.descriptor.MethodSource;
+import org.junit.platform.launcher.TestExecutionListener;
+import org.junit.platform.launcher.TestIdentifier;
+import org.junit.platform.launcher.TestPlan;
+
+/**
+ * @since 1.0
+ */
+final class RunListenerAdapter
+ implements TestExecutionListener
+{
+
+ private final RunListener runListener;
+
+ private Optional<TestPlan> testPlan = Optional.empty();
+
+ public RunListenerAdapter( RunListener runListener )
+ {
+ this.runListener = runListener;
+ }
+
+ @Override
+ public void testPlanExecutionStarted( TestPlan testPlan )
+ {
+ this.testPlan = Optional.of( testPlan );
+ }
+
+ @Override
+ public void testPlanExecutionFinished( TestPlan testPlan )
+ {
+ this.testPlan = Optional.empty();
+ }
+
+ @Override
+ public void executionStarted( TestIdentifier testIdentifier )
+ {
+ if ( testIdentifier.isTest() )
+ {
+ runListener.testStarting( createReportEntry( testIdentifier, Optional.empty() ) );
+ }
+ }
+
+ @Override
+ public void executionSkipped( TestIdentifier testIdentifier, String reason )
+ {
+ String source = getClassName( testIdentifier ).orElseGet( () -> parentDisplayName( testIdentifier ) );
+ runListener.testSkipped( ignored( source, testIdentifier.getDisplayName(), reason ) );
+ }
+
+ @Override
+ public void executionFinished( TestIdentifier testIdentifier, TestExecutionResult testExecutionResult )
+ {
+ if ( testExecutionResult.getStatus() == ABORTED )
+ {
+ runListener.testAssumptionFailure( createReportEntry( testIdentifier,
+ testExecutionResult.getThrowable() ) );
+ }
+ else if ( testExecutionResult.getStatus() == FAILED )
+ {
+ runListener.testFailed( createReportEntry( testIdentifier, testExecutionResult.getThrowable() ) );
+ }
+ else if ( testIdentifier.isTest() )
+ {
+ runListener.testSucceeded( createReportEntry( testIdentifier, Optional.empty() ) );
+ }
+ }
+
+ private SimpleReportEntry createReportEntry( TestIdentifier testIdentifier, Optional<Throwable> throwable )
+ {
+ Optional<String> className = getClassName( testIdentifier );
+ if ( className.isPresent() )
+ {
+ StackTraceWriter traceWriter = new PojoStackTraceWriter( className.get(),
+ getMethodName( testIdentifier ).orElse( "" ), throwable.orElse( null ) );
+ return new SimpleReportEntry( className.get(), testIdentifier.getDisplayName(), traceWriter, (Integer) null );
+ }
+ else
+ {
+ return new SimpleReportEntry( parentDisplayName( testIdentifier ), testIdentifier.getDisplayName(), (Integer) null );
+ }
+ }
+
+ private Optional<String> getClassName( TestIdentifier testIdentifier )
+ {
+ TestSource testSource = testIdentifier.getSource().orElse( null );
+ if ( testSource instanceof ClassSource )
+ {
+ return Optional.of( ( (ClassSource) testSource ).getJavaClass().getName() );
+ }
+ if ( testSource instanceof MethodSource )
+ {
+ return Optional.of( ( (MethodSource) testSource ).getClassName() );
+ }
+ return Optional.empty();
+ }
+
+ private Optional<String> getMethodName( TestIdentifier testIdentifier )
+ {
+ TestSource testSource = testIdentifier.getSource().orElse( null );
+ if ( testSource instanceof MethodSource )
+ {
+ return Optional.of( ( (MethodSource) testSource ).getMethodName() );
+ }
+ return Optional.empty();
+ }
+
+ private String parentDisplayName( TestIdentifier testIdentifier )
+ {
+ return testPlan
+ .flatMap( plan -> plan.getParent( testIdentifier ) )
+ .map( TestIdentifier::getDisplayName )
+ .orElseGet( testIdentifier::getUniqueId );
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/TestPlanScannerFilter.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/TestPlanScannerFilter.java b/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/TestPlanScannerFilter.java
new file mode 100644
index 0000000..123c58d
--- /dev/null
+++ b/surefire-providers/surefire-junit5/src/main/java/org/apache/maven/surefire/junit5/TestPlanScannerFilter.java
@@ -0,0 +1,64 @@
+package org.apache.maven.surefire.junit5;
+
+/*
+ * 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 static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
+import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
+
+import java.util.function.Predicate;
+
+import org.apache.maven.surefire.util.ScannerFilter;
+import org.junit.platform.engine.Filter;
+import org.junit.platform.launcher.Launcher;
+import org.junit.platform.launcher.LauncherDiscoveryRequest;
+import org.junit.platform.launcher.TestIdentifier;
+import org.junit.platform.launcher.TestPlan;
+
+/**
+ * @since 1.0
+ */
+final class TestPlanScannerFilter
+ implements ScannerFilter
+{
+
+ private static final Predicate<TestIdentifier> HAS_TESTS = testIdentifier -> testIdentifier.isTest()
+ || testIdentifier.isContainer();
+
+ private final Launcher launcher;
+
+ private final Filter<?>[] includeAndExcludeFilters;
+
+ public TestPlanScannerFilter( Launcher launcher, Filter<?>[] includeAndExcludeFilters )
+ {
+ this.launcher = launcher;
+ this.includeAndExcludeFilters = includeAndExcludeFilters;
+ }
+
+ @Override
+ @SuppressWarnings( "rawtypes" )
+ public boolean accept( Class testClass )
+ {
+ LauncherDiscoveryRequest discoveryRequest = request().selectors( selectClass( testClass ) ).filters(
+ includeAndExcludeFilters ).build();
+ TestPlan testPlan = launcher.discover( discoveryRequest );
+ return testPlan.countTestIdentifiers( HAS_TESTS ) > 0;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/JUnitPlatformProvider.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/JUnitPlatformProvider.java b/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/JUnitPlatformProvider.java
deleted file mode 100644
index 3ee8acb..0000000
--- a/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/JUnitPlatformProvider.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package org.junit.platform.surefire.provider;
-
-/*
- * 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 org.apache.maven.surefire.providerapi.AbstractProvider;
-import org.apache.maven.surefire.providerapi.ProviderParameters;
-import org.apache.maven.surefire.report.ReporterException;
-import org.apache.maven.surefire.report.ReporterFactory;
-import org.apache.maven.surefire.report.RunListener;
-import org.apache.maven.surefire.report.SimpleReportEntry;
-import org.apache.maven.surefire.suite.RunResult;
-import org.apache.maven.surefire.testset.TestSetFailedException;
-import org.apache.maven.surefire.util.TestsToRun;
-import org.junit.platform.engine.Filter;
-import org.junit.platform.launcher.Launcher;
-import org.junit.platform.launcher.LauncherDiscoveryRequest;
-import org.junit.platform.launcher.TagFilter;
-import org.junit.platform.launcher.core.LauncherFactory;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
-import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
-
-/**
- * @since 1.0
- */
-public class JUnitPlatformProvider
- extends AbstractProvider
-{
-
- // Parameter names processed to determine which @Tags should be executed.
- static final String EXCLUDE_GROUPS = "excludedGroups";
-
- static final String EXCLUDE_TAGS = "excludeTags";
-
- static final String INCLUDE_GROUPS = "groups";
-
- static final String INCLUDE_TAGS = "includeTags";
-
- static final String EXCEPTION_MESSAGE_BOTH_NOT_ALLOWED = "The " + INCLUDE_GROUPS + " and " + INCLUDE_TAGS
- + " parameters (or the " + EXCLUDE_GROUPS + " and " + EXCLUDE_TAGS + " parameters) are synonyms - "
- + "only one of each is allowed (though neither is required).";
-
- private final ProviderParameters parameters;
-
- private final Launcher launcher;
-
- final Filter<?>[] includeAndExcludeFilters;
-
- public JUnitPlatformProvider( ProviderParameters parameters )
- {
- this( parameters, LauncherFactory.create() );
- }
-
- JUnitPlatformProvider( ProviderParameters parameters, Launcher launcher )
- {
- this.parameters = parameters;
- this.launcher = launcher;
- this.includeAndExcludeFilters = getIncludeAndExcludeFilters();
- Logger.getLogger( "org.junit" ).setLevel( Level.WARNING );
- }
-
- @Override
- public Iterable<Class<?>> getSuites()
- {
- return scanClasspath();
- }
-
- @Override
- public RunResult invoke( Object forkTestSet )
- throws TestSetFailedException, ReporterException, InvocationTargetException
- {
- if ( forkTestSet instanceof TestsToRun )
- {
- return invokeAllTests( (TestsToRun) forkTestSet );
- }
- else if ( forkTestSet instanceof Class )
- {
- return invokeAllTests( TestsToRun.fromClass( (Class<?>) forkTestSet ) );
- }
- else if ( forkTestSet == null )
- {
- return invokeAllTests( scanClasspath() );
- }
- else
- {
- throw new IllegalArgumentException( "Unexpected value of forkTestSet: " + forkTestSet );
- }
- }
-
- private TestsToRun scanClasspath()
- {
- TestsToRun scannedClasses = parameters.getScanResult().applyFilter(
- new TestPlanScannerFilter( launcher, includeAndExcludeFilters ), parameters.getTestClassLoader() );
- return parameters.getRunOrderCalculator().orderTestClasses( scannedClasses );
- }
-
- private RunResult invokeAllTests( TestsToRun testsToRun )
- {
- RunResult runResult;
- ReporterFactory reporterFactory = parameters.getReporterFactory();
- try
- {
- RunListener runListener = reporterFactory.createReporter();
- launcher.registerTestExecutionListeners( new RunListenerAdapter( runListener ) );
-
- for ( Class<?> testClass : testsToRun )
- {
- invokeSingleClass( testClass, runListener );
- }
- }
- finally
- {
- runResult = reporterFactory.close();
- }
- return runResult;
- }
-
- private void invokeSingleClass( Class<?> testClass, RunListener runListener )
- {
- SimpleReportEntry classEntry = new SimpleReportEntry( getClass().getName(), testClass.getName() );
- runListener.testSetStarting( classEntry );
-
- LauncherDiscoveryRequest discoveryRequest = request().selectors( selectClass( testClass ) ).filters(
- includeAndExcludeFilters ).build();
- launcher.execute( discoveryRequest );
-
- runListener.testSetCompleted( classEntry );
- }
-
- private Filter<?>[] getIncludeAndExcludeFilters()
- {
- List<Filter<?>> filters = new ArrayList<>();
-
- Optional<List<String>> includes = getGroupsOrTags( getPropertiesList( INCLUDE_GROUPS ),
- getPropertiesList( INCLUDE_TAGS ) );
- includes.map( TagFilter::includeTags ).ifPresent( filters::add );
-
- Optional<List<String>> excludes = getGroupsOrTags( getPropertiesList( EXCLUDE_GROUPS ),
- getPropertiesList( EXCLUDE_TAGS ) );
- excludes.map( TagFilter::excludeTags ).ifPresent( filters::add );
-
- return filters.toArray( new Filter<?>[filters.size()] );
- }
-
- private Optional<List<String>> getPropertiesList( String key )
- {
- List<String> compoundProperties = null;
- String property = parameters.getProviderProperties().get( key );
- if ( property != null )
- {
- compoundProperties = Arrays.asList( property.split( "[, ]+" ) );
- }
- return Optional.ofNullable( compoundProperties );
- }
-
- private Optional<List<String>> getGroupsOrTags( Optional<List<String>> groups, Optional<List<String>> tags )
- {
- Optional<List<String>> elements = Optional.empty();
-
- if ( groups.isPresent() && tags.isPresent() )
- {
- throw new IllegalStateException( EXCEPTION_MESSAGE_BOTH_NOT_ALLOWED );
- }
-
- if ( groups.isPresent() )
- {
- elements = groups;
- }
- else if ( tags.isPresent() )
- {
- elements = tags;
- }
-
- return elements;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/RunListenerAdapter.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/RunListenerAdapter.java b/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/RunListenerAdapter.java
deleted file mode 100644
index 6319a14..0000000
--- a/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/RunListenerAdapter.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package org.junit.platform.surefire.provider;
-
-/*
- * 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 static org.apache.maven.surefire.report.SimpleReportEntry.ignored;
-import static org.junit.platform.engine.TestExecutionResult.Status.ABORTED;
-import static org.junit.platform.engine.TestExecutionResult.Status.FAILED;
-
-import java.util.Optional;
-
-import org.apache.maven.surefire.report.PojoStackTraceWriter;
-import org.apache.maven.surefire.report.RunListener;
-import org.apache.maven.surefire.report.SimpleReportEntry;
-import org.apache.maven.surefire.report.StackTraceWriter;
-import org.junit.platform.engine.TestExecutionResult;
-import org.junit.platform.engine.TestSource;
-import org.junit.platform.engine.support.descriptor.ClassSource;
-import org.junit.platform.engine.support.descriptor.MethodSource;
-import org.junit.platform.launcher.TestExecutionListener;
-import org.junit.platform.launcher.TestIdentifier;
-import org.junit.platform.launcher.TestPlan;
-
-/**
- * @since 1.0
- */
-final class RunListenerAdapter
- implements TestExecutionListener
-{
-
- private final RunListener runListener;
-
- private Optional<TestPlan> testPlan = Optional.empty();
-
- public RunListenerAdapter( RunListener runListener )
- {
- this.runListener = runListener;
- }
-
- @Override
- public void testPlanExecutionStarted( TestPlan testPlan )
- {
- this.testPlan = Optional.of( testPlan );
- }
-
- @Override
- public void testPlanExecutionFinished( TestPlan testPlan )
- {
- this.testPlan = Optional.empty();
- }
-
- @Override
- public void executionStarted( TestIdentifier testIdentifier )
- {
- if ( testIdentifier.isTest() )
- {
- runListener.testStarting( createReportEntry( testIdentifier, Optional.empty() ) );
- }
- }
-
- @Override
- public void executionSkipped( TestIdentifier testIdentifier, String reason )
- {
- String source = getClassName( testIdentifier ).orElseGet( () -> parentDisplayName( testIdentifier ) );
- runListener.testSkipped( ignored( source, testIdentifier.getDisplayName(), reason ) );
- }
-
- @Override
- public void executionFinished( TestIdentifier testIdentifier, TestExecutionResult testExecutionResult )
- {
- if ( testExecutionResult.getStatus() == ABORTED )
- {
- runListener.testAssumptionFailure( createReportEntry( testIdentifier,
- testExecutionResult.getThrowable() ) );
- }
- else if ( testExecutionResult.getStatus() == FAILED )
- {
- runListener.testFailed( createReportEntry( testIdentifier, testExecutionResult.getThrowable() ) );
- }
- else if ( testIdentifier.isTest() )
- {
- runListener.testSucceeded( createReportEntry( testIdentifier, Optional.empty() ) );
- }
- }
-
- private SimpleReportEntry createReportEntry( TestIdentifier testIdentifier, Optional<Throwable> throwable )
- {
- Optional<String> className = getClassName( testIdentifier );
- if ( className.isPresent() )
- {
- StackTraceWriter traceWriter = new PojoStackTraceWriter( className.get(),
- getMethodName( testIdentifier ).orElse( "" ), throwable.orElse( null ) );
- return new SimpleReportEntry( className.get(), testIdentifier.getDisplayName(), traceWriter, (Integer) null );
- }
- else
- {
- return new SimpleReportEntry( parentDisplayName( testIdentifier ), testIdentifier.getDisplayName(), (Integer) null );
- }
- }
-
- private Optional<String> getClassName( TestIdentifier testIdentifier )
- {
- TestSource testSource = testIdentifier.getSource().orElse( null );
- if ( testSource instanceof ClassSource )
- {
- return Optional.of( ( (ClassSource) testSource ).getJavaClass().getName() );
- }
- if ( testSource instanceof MethodSource )
- {
- return Optional.of( ( (MethodSource) testSource ).getClassName() );
- }
- return Optional.empty();
- }
-
- private Optional<String> getMethodName( TestIdentifier testIdentifier )
- {
- TestSource testSource = testIdentifier.getSource().orElse( null );
- if ( testSource instanceof MethodSource )
- {
- return Optional.of( ( (MethodSource) testSource ).getMethodName() );
- }
- return Optional.empty();
- }
-
- private String parentDisplayName( TestIdentifier testIdentifier )
- {
- return testPlan
- .flatMap( plan -> plan.getParent( testIdentifier ) )
- .map( TestIdentifier::getDisplayName )
- .orElseGet( testIdentifier::getUniqueId );
- }
-}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/TestPlanScannerFilter.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/TestPlanScannerFilter.java b/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/TestPlanScannerFilter.java
deleted file mode 100644
index 12edea0..0000000
--- a/surefire-providers/surefire-junit5/src/main/java/org/junit/platform/surefire/provider/TestPlanScannerFilter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.junit.platform.surefire.provider;
-
-/*
- * 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 static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
-import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
-
-import java.util.function.Predicate;
-
-import org.apache.maven.surefire.util.ScannerFilter;
-import org.junit.platform.engine.Filter;
-import org.junit.platform.launcher.Launcher;
-import org.junit.platform.launcher.LauncherDiscoveryRequest;
-import org.junit.platform.launcher.TestIdentifier;
-import org.junit.platform.launcher.TestPlan;
-
-/**
- * @since 1.0
- */
-final class TestPlanScannerFilter
- implements ScannerFilter
-{
-
- private static final Predicate<TestIdentifier> HAS_TESTS = testIdentifier -> testIdentifier.isTest()
- || testIdentifier.isContainer();
-
- private final Launcher launcher;
-
- private final Filter<?>[] includeAndExcludeFilters;
-
- public TestPlanScannerFilter( Launcher launcher, Filter<?>[] includeAndExcludeFilters )
- {
- this.launcher = launcher;
- this.includeAndExcludeFilters = includeAndExcludeFilters;
- }
-
- @Override
- @SuppressWarnings( "rawtypes" )
- public boolean accept( Class testClass )
- {
- LauncherDiscoveryRequest discoveryRequest = request().selectors( selectClass( testClass ) ).filters(
- includeAndExcludeFilters ).build();
- TestPlan testPlan = launcher.discover( discoveryRequest );
- return testPlan.countTestIdentifiers( HAS_TESTS ) > 0;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/main/resources/META-INF/services/org.apache.maven.surefire.providerapi.SurefireProvider
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/main/resources/META-INF/services/org.apache.maven.surefire.providerapi.SurefireProvider b/surefire-providers/surefire-junit5/src/main/resources/META-INF/services/org.apache.maven.surefire.providerapi.SurefireProvider
index bb76525..44861d6 100644
--- a/surefire-providers/surefire-junit5/src/main/resources/META-INF/services/org.apache.maven.surefire.providerapi.SurefireProvider
+++ b/surefire-providers/surefire-junit5/src/main/resources/META-INF/services/org.apache.maven.surefire.providerapi.SurefireProvider
@@ -1 +1 @@
-org.junit.platform.surefire.provider.JUnitPlatformProvider
+org.apache.maven.surefire.junit5.JUnitPlatformProvider
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/JUnitPlatformProviderTests.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/JUnitPlatformProviderTests.java b/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/JUnitPlatformProviderTests.java
new file mode 100644
index 0000000..cce0755
--- /dev/null
+++ b/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/JUnitPlatformProviderTests.java
@@ -0,0 +1,325 @@
+package org.apache.maven.surefire.junit5;
+
+/*
+ * 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 static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.surefire.providerapi.ProviderParameters;
+import org.apache.maven.surefire.report.ReporterFactory;
+import org.apache.maven.surefire.report.RunListener;
+import org.apache.maven.surefire.util.RunOrderCalculator;
+import org.apache.maven.surefire.util.ScanResult;
+import org.apache.maven.surefire.util.TestsToRun;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.commons.util.PreconditionViolationException;
+import org.junit.platform.launcher.Launcher;
+import org.junit.platform.launcher.TestPlan;
+import org.junit.platform.launcher.core.LauncherFactory;
+import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
+import org.junit.platform.launcher.listeners.TestExecutionSummary;
+
+/**
+ * Unit tests for {@link JUnitPlatformProvider}.
+ *
+ * @since 1.0
+ */
+class JUnitPlatformProviderTests
+{
+
+ @Test
+ void getSuitesReturnsScannedClasses()
+ throws Exception
+ {
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class, TestClass2.class );
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
+
+ assertThat( provider.getSuites() ).containsOnly( TestClass1.class, TestClass2.class );
+ }
+
+ @Test
+ void invokeThrowsForWrongForkTestSet()
+ throws Exception
+ {
+ ProviderParameters providerParameters = providerParametersMock( Integer.class );
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
+
+ assertThrows( IllegalArgumentException.class, () -> provider.invoke( "wrong forkTestSet" ) );
+ }
+
+ @Test
+ void allGivenTestsToRunAreInvoked()
+ throws Exception
+ {
+ Launcher launcher = LauncherFactory.create();
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock(), launcher );
+
+ TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
+ launcher.registerTestExecutionListeners( executionListener );
+
+ TestsToRun testsToRun = newTestsToRun( TestClass1.class, TestClass2.class );
+ provider.invoke( testsToRun );
+
+ assertThat( executionListener.summaries ).hasSize( 2 );
+ TestClass1.verifyExecutionSummary( executionListener.summaries.get( 0 ) );
+ TestClass2.verifyExecutionSummary( executionListener.summaries.get( 1 ) );
+ }
+
+ @Test
+ void singleTestClassIsInvoked()
+ throws Exception
+ {
+ Launcher launcher = LauncherFactory.create();
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock(), launcher );
+
+ TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
+ launcher.registerTestExecutionListeners( executionListener );
+
+ provider.invoke( TestClass1.class );
+
+ assertThat( executionListener.summaries ).hasSize( 1 );
+ TestClass1.verifyExecutionSummary( executionListener.summaries.get( 0 ) );
+ }
+
+ @Test
+ void allDiscoveredTestsAreInvokedForNullArgument()
+ throws Exception
+ {
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class, TestClass2.class );
+ Launcher launcher = LauncherFactory.create();
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters, launcher );
+
+ TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
+ launcher.registerTestExecutionListeners( executionListener );
+
+ provider.invoke( null );
+
+ assertThat( executionListener.summaries ).hasSize( 2 );
+ TestClass1.verifyExecutionSummary( executionListener.summaries.get( 0 ) );
+ TestClass2.verifyExecutionSummary( executionListener.summaries.get( 1 ) );
+ }
+
+ @Test
+ void bothGroupsAndIncludeTagsThrowsException()
+ {
+ Map<String, String> properties = new HashMap<>();
+ properties.put( JUnitPlatformProvider.INCLUDE_GROUPS, "groupOne, groupTwo" );
+ properties.put( JUnitPlatformProvider.INCLUDE_TAGS, "tagOne, tagTwo" );
+ verifyPreconditionViolationException( properties );
+ }
+
+ @Test
+ void bothExcludedGroupsAndExcludeTagsThrowsException() {
+ Map<String, String> properties = new HashMap<>();
+ properties.put(JUnitPlatformProvider.EXCLUDE_GROUPS, "groupOne, groupTwo");
+ properties.put(JUnitPlatformProvider.EXCLUDE_TAGS, "tagOne, tagTwo");
+ verifyPreconditionViolationException(properties);
+ }
+
+ @Test
+ void onlyGroupsIsDeclared()
+ throws Exception
+ {
+ Map<String, String> properties = new HashMap<>();
+ properties.put( JUnitPlatformProvider.INCLUDE_GROUPS, "groupOne, groupTwo" );
+
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
+ when( providerParameters.getProviderProperties() ).thenReturn( properties );
+
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
+
+ assertEquals( 1, provider.includeAndExcludeFilters.length );
+ }
+
+ @Test
+ void onlyExcludeTagsIsDeclared()
+ throws Exception
+ {
+ Map<String, String> properties = new HashMap<>();
+ properties.put( JUnitPlatformProvider.EXCLUDE_TAGS, "tagOne, tagTwo" );
+
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
+ when( providerParameters.getProviderProperties() ).thenReturn( properties );
+
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
+
+ assertEquals( 1, provider.includeAndExcludeFilters.length );
+ }
+
+ @Test
+ void bothIncludeAndExcludeAreAllowed()
+ throws Exception
+ {
+ Map<String, String> properties = new HashMap<>();
+ properties.put( JUnitPlatformProvider.INCLUDE_TAGS, "tagOne, tagTwo" );
+ properties.put( JUnitPlatformProvider.EXCLUDE_TAGS, "tagThree, tagFour" );
+
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
+ when( providerParameters.getProviderProperties() ).thenReturn( properties );
+
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
+
+ assertEquals( 2, provider.includeAndExcludeFilters.length );
+ }
+
+ @Test
+ void noFiltersAreCreatedIfNoPropertiesAreDeclared()
+ throws Exception
+ {
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
+
+ JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
+
+ assertEquals( 0, provider.includeAndExcludeFilters.length );
+ }
+
+ private void verifyPreconditionViolationException( Map<String, String> properties )
+ {
+ ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
+ when( providerParameters.getProviderProperties() ).thenReturn( properties );
+
+ Throwable throwable = assertThrows( PreconditionViolationException.class, () ->
+ new JUnitPlatformProvider(providerParameters) );
+
+ assertEquals( JUnitPlatformProvider.EXCEPTION_MESSAGE_BOTH_NOT_ALLOWED, throwable.getMessage() );
+ }
+
+ private static ProviderParameters providerParametersMock( Class<?>... testClasses )
+ {
+ TestsToRun testsToRun = newTestsToRun( testClasses );
+
+ ScanResult scanResult = mock( ScanResult.class );
+ when( scanResult.applyFilter( any(), any() ) ).thenReturn( testsToRun );
+
+ RunOrderCalculator runOrderCalculator = mock( RunOrderCalculator.class );
+ when( runOrderCalculator.orderTestClasses( any() ) ).thenReturn( testsToRun );
+
+ ReporterFactory reporterFactory = mock( ReporterFactory.class );
+ RunListener runListener = mock( RunListener.class );
+ when( reporterFactory.createReporter() ).thenReturn( runListener );
+
+ ProviderParameters providerParameters = mock( ProviderParameters.class );
+ when( providerParameters.getScanResult() ).thenReturn( scanResult );
+ when( providerParameters.getRunOrderCalculator() ).thenReturn( runOrderCalculator );
+ when( providerParameters.getReporterFactory() ).thenReturn( reporterFactory );
+
+ return providerParameters;
+ }
+
+ private static TestsToRun newTestsToRun( Class<?>... testClasses )
+ {
+ List<Class<?>> classesList = Arrays.asList( testClasses );
+ return new TestsToRun( new LinkedHashSet<>( classesList ) );
+ }
+
+ private class TestPlanSummaryListener
+ extends SummaryGeneratingListener
+ {
+
+ final List<TestExecutionSummary> summaries = new ArrayList<>();
+
+ @Override
+ public void testPlanExecutionFinished( TestPlan testPlan )
+ {
+ super.testPlanExecutionFinished( testPlan );
+ summaries.add( getSummary() );
+ }
+ }
+
+ private static class TestClass1
+ {
+
+ @Test
+ void test1()
+ {
+ }
+
+ @Test
+ void test2()
+ {
+ }
+
+ @Disabled
+ @Test
+ void test3()
+ {
+ }
+
+ @Test
+ void test4()
+ {
+ throw new RuntimeException();
+ }
+
+ static void verifyExecutionSummary( TestExecutionSummary summary )
+ {
+ assertEquals( 4, summary.getTestsFoundCount() );
+ assertEquals( 3, summary.getTestsStartedCount() );
+ assertEquals( 2, summary.getTestsSucceededCount() );
+ assertEquals( 1, summary.getTestsSkippedCount() );
+ assertEquals( 0, summary.getTestsAbortedCount() );
+ assertEquals( 1, summary.getTestsFailedCount() );
+ }
+ }
+
+ private static class TestClass2
+ {
+
+ @Test
+ void test1()
+ {
+ }
+
+ @Test
+ void test2()
+ {
+ throw new RuntimeException();
+ }
+
+ @Test
+ void test3()
+ {
+ assumeTrue( false );
+ }
+
+ static void verifyExecutionSummary( TestExecutionSummary summary )
+ {
+ assertEquals( 3, summary.getTestsFoundCount() );
+ assertEquals( 3, summary.getTestsStartedCount() );
+ assertEquals( 1, summary.getTestsSucceededCount() );
+ assertEquals( 0, summary.getTestsSkippedCount() );
+ assertEquals( 1, summary.getTestsAbortedCount() );
+ assertEquals( 1, summary.getTestsFailedCount() );
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/RunListenerAdapterTests.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/RunListenerAdapterTests.java b/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/RunListenerAdapterTests.java
new file mode 100644
index 0000000..5518b29
--- /dev/null
+++ b/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/RunListenerAdapterTests.java
@@ -0,0 +1,262 @@
+package org.apache.maven.surefire.junit5;
+
+/*
+ * 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 static java.util.Collections.singletonList;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Optional;
+
+import org.apache.maven.surefire.report.ReportEntry;
+import org.apache.maven.surefire.report.RunListener;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.engine.descriptor.ClassTestDescriptor;
+import org.junit.jupiter.engine.descriptor.MethodTestDescriptor;
+import org.junit.platform.engine.TestDescriptor;
+import org.junit.platform.engine.TestExecutionResult;
+import org.junit.platform.engine.UniqueId;
+import org.junit.platform.engine.support.descriptor.EngineDescriptor;
+import org.junit.platform.launcher.TestIdentifier;
+import org.junit.platform.launcher.TestPlan;
+import org.mockito.ArgumentCaptor;
+
+/**
+ * Unit tests for {@link RunListenerAdapter}.
+ *
+ * @since 1.0
+ */
+class RunListenerAdapterTests
+{
+
+ private RunListener listener;
+
+ private RunListenerAdapter adapter;
+
+ @BeforeEach
+ public void setUp()
+ {
+ listener = mock( RunListener.class );
+ adapter = new RunListenerAdapter( listener );
+ }
+
+ @Test
+ void notifiedWithCorrectNamesWhenMethodExecutionStarted()
+ throws Exception
+ {
+ ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
+
+ adapter.executionStarted( newMethodIdentifier() );
+ verify( listener ).testStarting( entryCaptor.capture() );
+
+ ReportEntry entry = entryCaptor.getValue();
+ assertEquals( MY_TEST_METHOD_NAME + "()", entry.getName() );
+ assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
+ assertNotNull( entry.getStackTraceWriter() );
+ }
+
+ @Test
+ void notNotifiedWhenClassExecutionStarted()
+ throws Exception
+ {
+ adapter.executionStarted( newClassIdentifier() );
+ verify( listener, never() ).testStarting( any() );
+ }
+
+ @Test
+ void notNotifiedWhenEngineExecutionStarted()
+ throws Exception
+ {
+ adapter.executionStarted( newEngineIdentifier() );
+ verify( listener, never() ).testStarting( any() );
+ }
+
+ @Test
+ void notifiedWhenMethodExecutionSkipped()
+ throws Exception
+ {
+ adapter.executionSkipped( newMethodIdentifier(), "test" );
+ verify( listener ).testSkipped( any() );
+ }
+
+ @Test
+ void notifiedWithCorrectNamesWhenClassExecutionSkipped()
+ throws Exception
+ {
+ ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
+
+ adapter.executionSkipped( newClassIdentifier(), "test" );
+ verify( listener ).testSkipped( entryCaptor.capture() );
+
+ ReportEntry entry = entryCaptor.getValue();
+ assertTrue( MyTestClass.class.getTypeName().contains( entry.getName() ) );
+ assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
+ }
+
+ @Test
+ void notifiedWhenEngineExecutionSkipped()
+ throws Exception
+ {
+ adapter.executionSkipped( newEngineIdentifier(), "test" );
+ verify( listener ).testSkipped( any() );
+ }
+
+ @Test
+ void notifiedWhenMethodExecutionAborted()
+ throws Exception
+ {
+ adapter.executionFinished( newMethodIdentifier(), TestExecutionResult.aborted( null ) );
+ verify( listener ).testAssumptionFailure( any() );
+ }
+
+ @Test
+ void notifiedWhenClassExecutionAborted()
+ throws Exception
+ {
+ adapter.executionFinished( newClassIdentifier(), TestExecutionResult.aborted( null ) );
+ verify( listener ).testAssumptionFailure( any() );
+ }
+
+ @Test
+ void notifiedWhenMethodExecutionFailed()
+ throws Exception
+ {
+ adapter.executionFinished( newMethodIdentifier(), TestExecutionResult.failed( new RuntimeException() ) );
+ verify( listener ).testFailed( any() );
+ }
+
+ @Test
+ void notifiedWithCorrectNamesWhenClassExecutionFailed()
+ throws Exception
+ {
+ ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
+
+ adapter.executionFinished( newClassIdentifier(), TestExecutionResult.failed( new RuntimeException() ) );
+ verify( listener ).testFailed( entryCaptor.capture() );
+
+ ReportEntry entry = entryCaptor.getValue();
+ assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
+ assertNotNull( entry.getStackTraceWriter() );
+ }
+
+ @Test
+ void notifiedWhenMethodExecutionSucceeded()
+ throws Exception
+ {
+ adapter.executionFinished( newMethodIdentifier(), TestExecutionResult.successful() );
+ verify( listener ).testSucceeded( any() );
+ }
+
+ @Test
+ void notNotifiedWhenClassExecutionSucceeded()
+ throws Exception
+ {
+ adapter.executionFinished( newClassIdentifier(), TestExecutionResult.successful() );
+ verify( listener, never() ).testSucceeded( any() );
+ }
+
+ @Test
+ void notifiedWithParentDisplayNameWhenTestClassUnknown()
+ throws Exception
+ {
+ // Set up a test plan
+ TestPlan plan = TestPlan.from( singletonList( new EngineDescriptor( newId(), "Luke's Plan" ) ) );
+ adapter.testPlanExecutionStarted( plan );
+
+ // Use the test plan to set up child with parent.
+ final String parentDisplay = "I am your father";
+ TestIdentifier child = newSourcelessIdentifierWithParent( plan, parentDisplay );
+ adapter.executionStarted( child );
+
+ // Check that the adapter has informed Surefire that the test has been invoked,
+ // with the parent name as source (since the test case itself had no source).
+ ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
+ verify( listener ).testStarting( entryCaptor.capture() );
+ assertEquals( parentDisplay, entryCaptor.getValue().getSourceName() );
+ }
+
+ private static TestIdentifier newMethodIdentifier()
+ throws Exception
+ {
+ TestDescriptor testDescriptor = new MethodTestDescriptor( newId(), MyTestClass.class,
+ MyTestClass.class.getDeclaredMethod( MY_TEST_METHOD_NAME ) );
+ return TestIdentifier.from( testDescriptor );
+ }
+
+ private static TestIdentifier newClassIdentifier()
+ {
+ TestDescriptor testDescriptor = new ClassTestDescriptor( newId(), MyTestClass.class );
+ return TestIdentifier.from( testDescriptor );
+ }
+
+ private static TestIdentifier newSourcelessIdentifierWithParent( TestPlan testPlan, String parentDisplay )
+ {
+ // A parent test identifier with a name.
+ TestDescriptor parent = mock( TestDescriptor.class );
+ when( parent.getUniqueId() ).thenReturn( newId() );
+ when( parent.getDisplayName() ).thenReturn( parentDisplay );
+ TestIdentifier parentId = TestIdentifier.from( parent );
+
+ // The (child) test case that is to be executed as part of a test plan.
+ TestDescriptor child = mock( TestDescriptor.class );
+ when( child.getUniqueId() ).thenReturn( newId() );
+ when( child.isTest() ).thenReturn( true );
+
+ // Ensure the child source is null yet that there is a parent -- the special case to be tested.
+ when( child.getSource() ).thenReturn( Optional.empty() );
+ when( child.getParent() ).thenReturn( Optional.of(parent) );
+ TestIdentifier childId = TestIdentifier.from( child );
+
+ testPlan.add( childId );
+ testPlan.add( parentId );
+
+ return childId;
+ }
+
+ private static TestIdentifier newEngineIdentifier()
+ {
+ TestDescriptor testDescriptor = new EngineDescriptor( newId(), "engine" );
+ return TestIdentifier.from( testDescriptor );
+ }
+
+ private static UniqueId newId()
+ {
+ return UniqueId.forEngine( "engine" );
+ }
+
+ private static final String MY_TEST_METHOD_NAME = "myTestMethod";
+
+ private static class MyTestClass {
+
+ @Test
+ void myTestMethod()
+ {
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/TestPlanScannerFilterTests.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/TestPlanScannerFilterTests.java b/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/TestPlanScannerFilterTests.java
new file mode 100644
index 0000000..aa52b78
--- /dev/null
+++ b/surefire-providers/surefire-junit5/src/test/java/org/apache/maven/surefire/junit5/TestPlanScannerFilterTests.java
@@ -0,0 +1,190 @@
+package org.apache.maven.surefire.junit5;
+
+/*
+ * 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 static java.util.Collections.emptyList;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
+import org.junit.platform.engine.Filter;
+import org.junit.platform.launcher.core.LauncherFactory;
+
+/**
+ * Unit tests for {@link TestPlanScannerFilter}.
+ *
+ * @since 1.0
+ */
+public class TestPlanScannerFilterTests
+{
+
+ @Test
+ void emptyClassAccepted()
+ {
+ assertTrue( newFilter().accept( EmptyClass.class ), "accepts empty class because it is a container" );
+ }
+
+ @Test
+ void classWithNoTestMethodsIsAccepted()
+ {
+ assertTrue( newFilter().accept( ClassWithMethods.class ),
+ "accepts class with no @Test methods because it is a container" );
+ }
+
+ @Test
+ void classWithTestMethodsIsAccepted()
+ {
+ assertTrue( newFilter().accept( ClassWithTestMethods.class ) );
+ }
+
+ @Test
+ void classWithNestedTestClassIsAccepted()
+ {
+ assertTrue( newFilter().accept( ClassWithNestedTestClass.class ) );
+ }
+
+ @Test
+ void classWithDeeplyNestedTestClassIsAccepted()
+ {
+ assertTrue( newFilter().accept( ClassWithDeeplyNestedTestClass.class ) );
+ }
+
+ @Test
+ void classWithTestFactoryIsAccepted()
+ {
+ assertTrue( newFilter().accept( ClassWithTestFactory.class ) );
+ }
+
+ @Test
+ void classWithNestedTestFactoryIsAccepted()
+ {
+ assertTrue( newFilter().accept( ClassWithNestedTestFactory.class ) );
+ }
+
+ private TestPlanScannerFilter newFilter()
+ {
+ return new TestPlanScannerFilter( LauncherFactory.create(), new Filter<?>[0] );
+ }
+
+ private static class EmptyClass
+ {
+ }
+
+ @SuppressWarnings("unused")
+ private static class ClassWithMethods
+ {
+
+ void method1()
+ {
+ }
+
+ void method2()
+ {
+ }
+ }
+
+ private static class ClassWithTestMethods
+ {
+
+ @Test
+ void test1()
+ {
+ }
+
+ @Test
+ public void test2()
+ {
+ }
+ }
+
+ private static class ClassWithNestedTestClass
+ {
+
+ @SuppressWarnings("unused")
+ void method()
+ {
+ }
+
+ @Nested
+ class TestClass
+ {
+
+ @Test
+ void test1()
+ {
+ }
+ }
+ }
+
+ private static class ClassWithDeeplyNestedTestClass
+ {
+
+ @Nested
+ class Level1
+ {
+
+ @Nested
+ class Level2
+ {
+
+ @Nested
+ class TestClass
+ {
+
+ @Test
+ void test1()
+ {
+ }
+ }
+ }
+ }
+ }
+
+ private static class ClassWithTestFactory
+ {
+
+ @TestFactory
+ Stream<DynamicTest> tests()
+ {
+ return Stream.empty();
+ }
+ }
+
+ private static class ClassWithNestedTestFactory
+ {
+
+ @Nested
+ class TestClass
+ {
+
+ @TestFactory
+ List<DynamicTest> tests()
+ {
+ return emptyList();
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/JUnitPlatformProviderTests.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/JUnitPlatformProviderTests.java b/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/JUnitPlatformProviderTests.java
deleted file mode 100644
index 9cc054d..0000000
--- a/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/JUnitPlatformProviderTests.java
+++ /dev/null
@@ -1,325 +0,0 @@
-package org.junit.platform.surefire.provider;
-
-/*
- * 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 static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assumptions.assumeTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.maven.surefire.providerapi.ProviderParameters;
-import org.apache.maven.surefire.report.ReporterFactory;
-import org.apache.maven.surefire.report.RunListener;
-import org.apache.maven.surefire.util.RunOrderCalculator;
-import org.apache.maven.surefire.util.ScanResult;
-import org.apache.maven.surefire.util.TestsToRun;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.junit.platform.commons.util.PreconditionViolationException;
-import org.junit.platform.launcher.Launcher;
-import org.junit.platform.launcher.TestPlan;
-import org.junit.platform.launcher.core.LauncherFactory;
-import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
-import org.junit.platform.launcher.listeners.TestExecutionSummary;
-
-/**
- * Unit tests for {@link JUnitPlatformProvider}.
- *
- * @since 1.0
- */
-class JUnitPlatformProviderTests
-{
-
- @Test
- void getSuitesReturnsScannedClasses()
- throws Exception
- {
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class, TestClass2.class );
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
-
- assertThat( provider.getSuites() ).containsOnly( TestClass1.class, TestClass2.class );
- }
-
- @Test
- void invokeThrowsForWrongForkTestSet()
- throws Exception
- {
- ProviderParameters providerParameters = providerParametersMock( Integer.class );
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
-
- assertThrows( IllegalArgumentException.class, () -> provider.invoke( "wrong forkTestSet" ) );
- }
-
- @Test
- void allGivenTestsToRunAreInvoked()
- throws Exception
- {
- Launcher launcher = LauncherFactory.create();
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock(), launcher );
-
- TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
- launcher.registerTestExecutionListeners( executionListener );
-
- TestsToRun testsToRun = newTestsToRun( TestClass1.class, TestClass2.class );
- provider.invoke( testsToRun );
-
- assertThat( executionListener.summaries ).hasSize( 2 );
- TestClass1.verifyExecutionSummary( executionListener.summaries.get( 0 ) );
- TestClass2.verifyExecutionSummary( executionListener.summaries.get( 1 ) );
- }
-
- @Test
- void singleTestClassIsInvoked()
- throws Exception
- {
- Launcher launcher = LauncherFactory.create();
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock(), launcher );
-
- TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
- launcher.registerTestExecutionListeners( executionListener );
-
- provider.invoke( TestClass1.class );
-
- assertThat( executionListener.summaries ).hasSize( 1 );
- TestClass1.verifyExecutionSummary( executionListener.summaries.get( 0 ) );
- }
-
- @Test
- void allDiscoveredTestsAreInvokedForNullArgument()
- throws Exception
- {
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class, TestClass2.class );
- Launcher launcher = LauncherFactory.create();
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters, launcher );
-
- TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
- launcher.registerTestExecutionListeners( executionListener );
-
- provider.invoke( null );
-
- assertThat( executionListener.summaries ).hasSize( 2 );
- TestClass1.verifyExecutionSummary( executionListener.summaries.get( 0 ) );
- TestClass2.verifyExecutionSummary( executionListener.summaries.get( 1 ) );
- }
-
- @Test
- void bothGroupsAndIncludeTagsThrowsException()
- {
- Map<String, String> properties = new HashMap<>();
- properties.put( JUnitPlatformProvider.INCLUDE_GROUPS, "groupOne, groupTwo" );
- properties.put( JUnitPlatformProvider.INCLUDE_TAGS, "tagOne, tagTwo" );
- verifyPreconditionViolationException( properties );
- }
-
- @Test
- void bothExcludedGroupsAndExcludeTagsThrowsException() {
- Map<String, String> properties = new HashMap<>();
- properties.put(JUnitPlatformProvider.EXCLUDE_GROUPS, "groupOne, groupTwo");
- properties.put(JUnitPlatformProvider.EXCLUDE_TAGS, "tagOne, tagTwo");
- verifyPreconditionViolationException(properties);
- }
-
- @Test
- void onlyGroupsIsDeclared()
- throws Exception
- {
- Map<String, String> properties = new HashMap<>();
- properties.put( JUnitPlatformProvider.INCLUDE_GROUPS, "groupOne, groupTwo" );
-
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
- when( providerParameters.getProviderProperties() ).thenReturn( properties );
-
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
-
- assertEquals( 1, provider.includeAndExcludeFilters.length );
- }
-
- @Test
- void onlyExcludeTagsIsDeclared()
- throws Exception
- {
- Map<String, String> properties = new HashMap<>();
- properties.put( JUnitPlatformProvider.EXCLUDE_TAGS, "tagOne, tagTwo" );
-
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
- when( providerParameters.getProviderProperties() ).thenReturn( properties );
-
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
-
- assertEquals( 1, provider.includeAndExcludeFilters.length );
- }
-
- @Test
- void bothIncludeAndExcludeAreAllowed()
- throws Exception
- {
- Map<String, String> properties = new HashMap<>();
- properties.put( JUnitPlatformProvider.INCLUDE_TAGS, "tagOne, tagTwo" );
- properties.put( JUnitPlatformProvider.EXCLUDE_TAGS, "tagThree, tagFour" );
-
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
- when( providerParameters.getProviderProperties() ).thenReturn( properties );
-
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
-
- assertEquals( 2, provider.includeAndExcludeFilters.length );
- }
-
- @Test
- void noFiltersAreCreatedIfNoPropertiesAreDeclared()
- throws Exception
- {
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
-
- JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParameters );
-
- assertEquals( 0, provider.includeAndExcludeFilters.length );
- }
-
- private void verifyPreconditionViolationException( Map<String, String> properties )
- {
- ProviderParameters providerParameters = providerParametersMock( TestClass1.class );
- when( providerParameters.getProviderProperties() ).thenReturn( properties );
-
- Throwable throwable = assertThrows( PreconditionViolationException.class, () ->
- new JUnitPlatformProvider(providerParameters) );
-
- assertEquals( JUnitPlatformProvider.EXCEPTION_MESSAGE_BOTH_NOT_ALLOWED, throwable.getMessage() );
- }
-
- private static ProviderParameters providerParametersMock( Class<?>... testClasses )
- {
- TestsToRun testsToRun = newTestsToRun( testClasses );
-
- ScanResult scanResult = mock( ScanResult.class );
- when( scanResult.applyFilter( any(), any() ) ).thenReturn( testsToRun );
-
- RunOrderCalculator runOrderCalculator = mock( RunOrderCalculator.class );
- when( runOrderCalculator.orderTestClasses( any() ) ).thenReturn( testsToRun );
-
- ReporterFactory reporterFactory = mock( ReporterFactory.class );
- RunListener runListener = mock( RunListener.class );
- when( reporterFactory.createReporter() ).thenReturn( runListener );
-
- ProviderParameters providerParameters = mock( ProviderParameters.class );
- when( providerParameters.getScanResult() ).thenReturn( scanResult );
- when( providerParameters.getRunOrderCalculator() ).thenReturn( runOrderCalculator );
- when( providerParameters.getReporterFactory() ).thenReturn( reporterFactory );
-
- return providerParameters;
- }
-
- private static TestsToRun newTestsToRun( Class<?>... testClasses )
- {
- List<Class<?>> classesList = Arrays.asList( testClasses );
- return new TestsToRun( new LinkedHashSet<>( classesList ) );
- }
-
- private class TestPlanSummaryListener
- extends SummaryGeneratingListener
- {
-
- final List<TestExecutionSummary> summaries = new ArrayList<>();
-
- @Override
- public void testPlanExecutionFinished( TestPlan testPlan )
- {
- super.testPlanExecutionFinished( testPlan );
- summaries.add( getSummary() );
- }
- }
-
- private static class TestClass1
- {
-
- @Test
- void test1()
- {
- }
-
- @Test
- void test2()
- {
- }
-
- @Disabled
- @Test
- void test3()
- {
- }
-
- @Test
- void test4()
- {
- throw new RuntimeException();
- }
-
- static void verifyExecutionSummary( TestExecutionSummary summary )
- {
- assertEquals( 4, summary.getTestsFoundCount() );
- assertEquals( 3, summary.getTestsStartedCount() );
- assertEquals( 2, summary.getTestsSucceededCount() );
- assertEquals( 1, summary.getTestsSkippedCount() );
- assertEquals( 0, summary.getTestsAbortedCount() );
- assertEquals( 1, summary.getTestsFailedCount() );
- }
- }
-
- private static class TestClass2
- {
-
- @Test
- void test1()
- {
- }
-
- @Test
- void test2()
- {
- throw new RuntimeException();
- }
-
- @Test
- void test3()
- {
- assumeTrue( false );
- }
-
- static void verifyExecutionSummary( TestExecutionSummary summary )
- {
- assertEquals( 3, summary.getTestsFoundCount() );
- assertEquals( 3, summary.getTestsStartedCount() );
- assertEquals( 1, summary.getTestsSucceededCount() );
- assertEquals( 0, summary.getTestsSkippedCount() );
- assertEquals( 1, summary.getTestsAbortedCount() );
- assertEquals( 1, summary.getTestsFailedCount() );
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4b8c1a47/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/RunListenerAdapterTests.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/RunListenerAdapterTests.java b/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/RunListenerAdapterTests.java
deleted file mode 100644
index e841b53..0000000
--- a/surefire-providers/surefire-junit5/src/test/java/org/junit/platform/surefire/provider/RunListenerAdapterTests.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package org.junit.platform.surefire.provider;
-
-/*
- * 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 static java.util.Collections.singletonList;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.Collections;
-import java.util.Optional;
-
-import org.apache.maven.surefire.report.ReportEntry;
-import org.apache.maven.surefire.report.RunListener;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.engine.descriptor.ClassTestDescriptor;
-import org.junit.jupiter.engine.descriptor.MethodTestDescriptor;
-import org.junit.platform.engine.TestDescriptor;
-import org.junit.platform.engine.TestExecutionResult;
-import org.junit.platform.engine.UniqueId;
-import org.junit.platform.engine.support.descriptor.EngineDescriptor;
-import org.junit.platform.launcher.TestIdentifier;
-import org.junit.platform.launcher.TestPlan;
-import org.mockito.ArgumentCaptor;
-
-/**
- * Unit tests for {@link RunListenerAdapter}.
- *
- * @since 1.0
- */
-class RunListenerAdapterTests
-{
-
- private RunListener listener;
-
- private RunListenerAdapter adapter;
-
- @BeforeEach
- public void setUp()
- {
- listener = mock( RunListener.class );
- adapter = new RunListenerAdapter( listener );
- }
-
- @Test
- void notifiedWithCorrectNamesWhenMethodExecutionStarted()
- throws Exception
- {
- ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
-
- adapter.executionStarted( newMethodIdentifier() );
- verify( listener ).testStarting( entryCaptor.capture() );
-
- ReportEntry entry = entryCaptor.getValue();
- assertEquals( MY_TEST_METHOD_NAME + "()", entry.getName() );
- assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
- assertNotNull( entry.getStackTraceWriter() );
- }
-
- @Test
- void notNotifiedWhenClassExecutionStarted()
- throws Exception
- {
- adapter.executionStarted( newClassIdentifier() );
- verify( listener, never() ).testStarting( any() );
- }
-
- @Test
- void notNotifiedWhenEngineExecutionStarted()
- throws Exception
- {
- adapter.executionStarted( newEngineIdentifier() );
- verify( listener, never() ).testStarting( any() );
- }
-
- @Test
- void notifiedWhenMethodExecutionSkipped()
- throws Exception
- {
- adapter.executionSkipped( newMethodIdentifier(), "test" );
- verify( listener ).testSkipped( any() );
- }
-
- @Test
- void notifiedWithCorrectNamesWhenClassExecutionSkipped()
- throws Exception
- {
- ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
-
- adapter.executionSkipped( newClassIdentifier(), "test" );
- verify( listener ).testSkipped( entryCaptor.capture() );
-
- ReportEntry entry = entryCaptor.getValue();
- assertTrue( MyTestClass.class.getTypeName().contains( entry.getName() ) );
- assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
- }
-
- @Test
- void notifiedWhenEngineExecutionSkipped()
- throws Exception
- {
- adapter.executionSkipped( newEngineIdentifier(), "test" );
- verify( listener ).testSkipped( any() );
- }
-
- @Test
- void notifiedWhenMethodExecutionAborted()
- throws Exception
- {
- adapter.executionFinished( newMethodIdentifier(), TestExecutionResult.aborted( null ) );
- verify( listener ).testAssumptionFailure( any() );
- }
-
- @Test
- void notifiedWhenClassExecutionAborted()
- throws Exception
- {
- adapter.executionFinished( newClassIdentifier(), TestExecutionResult.aborted( null ) );
- verify( listener ).testAssumptionFailure( any() );
- }
-
- @Test
- void notifiedWhenMethodExecutionFailed()
- throws Exception
- {
- adapter.executionFinished( newMethodIdentifier(), TestExecutionResult.failed( new RuntimeException() ) );
- verify( listener ).testFailed( any() );
- }
-
- @Test
- void notifiedWithCorrectNamesWhenClassExecutionFailed()
- throws Exception
- {
- ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
-
- adapter.executionFinished( newClassIdentifier(), TestExecutionResult.failed( new RuntimeException() ) );
- verify( listener ).testFailed( entryCaptor.capture() );
-
- ReportEntry entry = entryCaptor.getValue();
- assertEquals( MyTestClass.class.getName(), entry.getSourceName() );
- assertNotNull( entry.getStackTraceWriter() );
- }
-
- @Test
- void notifiedWhenMethodExecutionSucceeded()
- throws Exception
- {
- adapter.executionFinished( newMethodIdentifier(), TestExecutionResult.successful() );
- verify( listener ).testSucceeded( any() );
- }
-
- @Test
- void notNotifiedWhenClassExecutionSucceeded()
- throws Exception
- {
- adapter.executionFinished( newClassIdentifier(), TestExecutionResult.successful() );
- verify( listener, never() ).testSucceeded( any() );
- }
-
- @Test
- void notifiedWithParentDisplayNameWhenTestClassUnknown()
- throws Exception
- {
- // Set up a test plan
- TestPlan plan = TestPlan.from( singletonList( new EngineDescriptor( newId(), "Luke's Plan" ) ) );
- adapter.testPlanExecutionStarted( plan );
-
- // Use the test plan to set up child with parent.
- final String parentDisplay = "I am your father";
- TestIdentifier child = newSourcelessIdentifierWithParent( plan, parentDisplay );
- adapter.executionStarted( child );
-
- // Check that the adapter has informed Surefire that the test has been invoked,
- // with the parent name as source (since the test case itself had no source).
- ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
- verify( listener ).testStarting( entryCaptor.capture() );
- assertEquals( parentDisplay, entryCaptor.getValue().getSourceName() );
- }
-
- private static TestIdentifier newMethodIdentifier()
- throws Exception
- {
- TestDescriptor testDescriptor = new MethodTestDescriptor( newId(), MyTestClass.class,
- MyTestClass.class.getDeclaredMethod( MY_TEST_METHOD_NAME ) );
- return TestIdentifier.from( testDescriptor );
- }
-
- private static TestIdentifier newClassIdentifier()
- {
- TestDescriptor testDescriptor = new ClassTestDescriptor( newId(), MyTestClass.class );
- return TestIdentifier.from( testDescriptor );
- }
-
- private static TestIdentifier newSourcelessIdentifierWithParent( TestPlan testPlan, String parentDisplay )
- {
- // A parent test identifier with a name.
- TestDescriptor parent = mock( TestDescriptor.class );
- when( parent.getUniqueId() ).thenReturn( newId() );
- when( parent.getDisplayName() ).thenReturn( parentDisplay );
- TestIdentifier parentId = TestIdentifier.from( parent );
-
- // The (child) test case that is to be executed as part of a test plan.
- TestDescriptor child = mock( TestDescriptor.class );
- when( child.getUniqueId() ).thenReturn( newId() );
- when( child.isTest() ).thenReturn( true );
-
- // Ensure the child source is null yet that there is a parent -- the special case to be tested.
- when( child.getSource() ).thenReturn( Optional.empty() );
- when( child.getParent() ).thenReturn( Optional.of(parent) );
- TestIdentifier childId = TestIdentifier.from( child );
-
- testPlan.add( childId );
- testPlan.add( parentId );
-
- return childId;
- }
-
- private static TestIdentifier newEngineIdentifier()
- {
- TestDescriptor testDescriptor = new EngineDescriptor( newId(), "engine" );
- return TestIdentifier.from( testDescriptor );
- }
-
- private static UniqueId newId()
- {
- return UniqueId.forEngine( "engine" );
- }
-
- private static final String MY_TEST_METHOD_NAME = "myTestMethod";
-
- private static class MyTestClass {
-
- @Test
- void myTestMethod()
- {
- }
-
- }
-
-}