This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch platform-runner-suite in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit 7bc91470e7f1c96e2556ceda5c2adf49903cc222 Author: tibordigana <tibordig...@apache.org> AuthorDate: Sat Mar 5 20:56:43 2022 +0100 Support junit-platform-runner and junit-platform-suite-engine in plugin dependencies --- .../plugin/surefire/AbstractSurefireMojo.java | 5 +- .../plugin/surefire/AbstractSurefireMojoTest.java | 48 +++++++++++++ .../src/site/apt/examples/junit-platform.apt.vm | 47 +++++++++++++ .../maven/surefire/its/JUnitPlatformEnginesIT.java | 11 +-- .../surefire/its/jiras/Surefire1787JUnit5IT.java | 11 +++ .../src/test/resources/junit5-runner/pom.xml | 4 +- .../src/test/resources/junit5-suite/pom.xml | 80 ++++++++++++++++++++++ .../src/test/java/pkg/JUnit5Tests.java | 29 ++++++++ .../src/test/java/pkg/domain/AxTest.java | 30 ++++++++ .../src/test/java/pkg/domain/BxTest.java | 30 ++++++++ 10 files changed, 286 insertions(+), 9 deletions(-) diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java index ed946b6..d0998e6 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java @@ -2385,7 +2385,8 @@ public abstract class AbstractSurefireMojo private Artifact getJUnit5Artifact() { - if ( getProjectArtifactMap().get( "org.junit.platform:junit-platform-runner" ) != null ) + if ( getProjectArtifactMap().containsKey( "org.junit.platform:junit-platform-runner" ) + || getPluginArtifactMap().containsKey( "org.junit.platform:junit-platform-runner" ) ) { return null; } @@ -2393,7 +2394,7 @@ public abstract class AbstractSurefireMojo Artifact artifact = getPluginArtifactMap().get( "org.junit.platform:junit-platform-engine" ); if ( artifact == null ) { - return getProjectArtifactMap().get( "org.junit.platform:junit-platform-commons" ); + artifact = getProjectArtifactMap().get( "org.junit.platform:junit-platform-commons" ); } return artifact; diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java index 4cce707..2810764 100644 --- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java +++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java @@ -775,6 +775,54 @@ public class AbstractSurefireMojoTest } @Test + public void shouldNotBeJunit5ArtifactInPluginDeps() throws Exception + { + Artifact testClasspathJupiter = new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-engine", + createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Artifact testClasspathPlatformEng = new DefaultArtifact( "org.junit.platform", "junit-platform-engine", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Artifact testClasspathCommons = new DefaultArtifact( "org.junit.platform", "junit-platform-commons", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + setProjectDepedenciesToMojo( testClasspathJupiter, testClasspathPlatformEng, testClasspathCommons ); + + Artifact pluginDep1 = new DefaultArtifact( "org.junit.platform", "junit-platform-runner", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Artifact pluginDep2 = new DefaultArtifact( "org.junit.platform", "junit-platform-commons", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + addPluginDependencies( pluginDep1, pluginDep2 ); + + Artifact junitPlatformArtifact = invokeMethod( mojo, "getJUnit5Artifact" ); + assertThat( junitPlatformArtifact ).isNull(); + } + + @Test + public void shouldNotBeJunit5ArtifactInProjectDeps() throws Exception + { + Artifact testClasspathJupiter = new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-engine", + createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Artifact testClasspathPlatformEng = new DefaultArtifact( "org.junit.platform", "junit-platform-engine", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Artifact testClasspathCommons = new DefaultArtifact( "org.junit.platform", "junit-platform-commons", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Artifact testClasspathRunner = new DefaultArtifact( "org.junit.platform", "junit-platform-runner", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + setProjectDepedenciesToMojo( testClasspathJupiter, testClasspathPlatformEng, testClasspathCommons, + testClasspathRunner ); + + Artifact junitPlatformArtifact = invokeMethod( mojo, "getJUnit5Artifact" ); + assertThat( junitPlatformArtifact ).isNull(); + } + + @Test public void shouldSmartlyResolveJUnit5ProviderWithJUnit4() throws Exception { MavenProject mavenProject = new MavenProject(); diff --git a/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm b/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm index e1426a6..d4e1317 100644 --- a/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm +++ b/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm @@ -411,6 +411,53 @@ Using JUnit 5 Platform </dependencies> +---+ +** JUnit5 Suite + + For more information see this + {{{https://github.com/apache/maven-surefire/tree/master/surefire-its/src/test/resources/junit5-suite}example}}. + ++---+ +<dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.8.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-suite-api</artifactId> + <version>1.8.0</version> + <scope>test</scope> + </dependency> +</dependencies> +<build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <includes> + <include>JUnit5Tests</include> + </includes> + </configuration> + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.8.2</version> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-suite-engine</artifactId> + <version>1.8.2</version> + </dependency> + </dependencies> + </plugin> + </plugins> +</build> ++---+ + * Provider Selection If nothing is configured, Surefire detects which JUnit version to use by the following algorithm: diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java index 02c2706..c176862 100644 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java @@ -77,13 +77,14 @@ public class JUnitPlatformEnginesIT extends SurefireJUnit4IntegrationTestCase { ArrayList<Object[]> args = new ArrayList<>(); args.add( new Object[] {"1.0.3", "5.0.3", "1.0.0", "1.0.0"} ); - args.add( new Object[] {"1.1.1", "5.1.1", "1.0.0", "1.0.0"} ); - args.add( new Object[] {"1.2.0", "5.2.0", "1.1.0", "1.0.0"} ); + //args.add( new Object[] {"1.1.1", "5.1.1", "1.0.0", "1.0.0"} ); + //args.add( new Object[] {"1.2.0", "5.2.0", "1.1.0", "1.0.0"} ); args.add( new Object[] {"1.3.2", "5.3.2", "1.1.1", "1.0.0"} ); - args.add( new Object[] {"1.4.2", "5.4.2", "1.1.1", "1.0.0"} ); - args.add( new Object[] {"1.5.2", "5.5.2", "1.2.0", "1.1.0"} ); + //args.add( new Object[] {"1.4.2", "5.4.2", "1.1.1", "1.0.0"} ); + //args.add( new Object[] {"1.5.2", "5.5.2", "1.2.0", "1.1.0"} ); args.add( new Object[] {"1.6.2", "5.6.2", "1.2.0", "1.1.0"} ); - //args.add( new Object[] { "1.6.0-SNAPSHOT", "5.6.0-SNAPSHOT", "1.2.0", "1.1.0" } ); + //args.add( new Object[] {"1.7.2", "5.7.2", "1.2.0", "1.1.0"} ); + args.add( new Object[] {"1.8.2", "5.8.2", "1.2.0", "1.1.2"} ); return args; } diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java index 3e7e056..5df769b 100644 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java @@ -129,4 +129,15 @@ public class Surefire1787JUnit5IT extends SurefireJUnit4IntegrationTestCase .verifyTextInLog( "Running pkg.JUnit5Tests" ) .verifyTextInLog( "Using auto detected provider org.apache.maven.surefire.junit4.JUnit4Provider" ); } + + @Test + public void junit5Suite() + { + unpack( "junit5-suite" ) + .executeTest() + .verifyErrorFree( 1 ) + .verifyTextInLog( "Running pkg.JUnit5Test" ) + .verifyTextInLog( + "Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider" ); + } } diff --git a/surefire-its/src/test/resources/junit5-runner/pom.xml b/surefire-its/src/test/resources/junit5-runner/pom.xml index c667e03..09b5300 100644 --- a/surefire-its/src/test/resources/junit5-runner/pom.xml +++ b/surefire-its/src/test/resources/junit5-runner/pom.xml @@ -37,13 +37,13 @@ <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> - <version>5.6.2</version> + <version>5.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-runner</artifactId> - <version>1.6.2</version> + <version>1.8.2</version> <scope>test</scope> </dependency> </dependencies> diff --git a/surefire-its/src/test/resources/junit5-suite/pom.xml b/surefire-its/src/test/resources/junit5-suite/pom.xml new file mode 100644 index 0000000..ee88bf5 --- /dev/null +++ b/surefire-its/src/test/resources/junit5-suite/pom.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.example</groupId> + <artifactId>junit5-suite</artifactId> + <version>1.0-SNAPSHOT</version> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>${java.specification.version}</maven.compiler.source> + <maven.compiler.target>${java.specification.version}</maven.compiler.target> + </properties> + + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.8.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-suite-api</artifactId> + <version>1.8.0</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>${surefire.version}</version> + <configuration> + <includes> + <include>JUnit5Tests</include> + </includes> + </configuration> + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.8.2</version> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-suite-engine</artifactId> + <version>1.8.2</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </pluginManagement> + </build> + +</project> diff --git a/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/JUnit5Tests.java b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/JUnit5Tests.java new file mode 100644 index 0000000..a9cb8d6 --- /dev/null +++ b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/JUnit5Tests.java @@ -0,0 +1,29 @@ +package pkg; + +/* + * 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.junit.platform.suite.api.SelectClasses; +import org.junit.platform.suite.api.Suite; + +@Suite +@SelectClasses({pkg.domain.AxTest.class}) +public class JUnit5Tests +{ +} diff --git a/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/AxTest.java b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/AxTest.java new file mode 100644 index 0000000..ca7c26c --- /dev/null +++ b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/AxTest.java @@ -0,0 +1,30 @@ +package pkg.domain; + +/* + * 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.junit.jupiter.api.Test; + +public class AxTest +{ + @Test + void test() + { + } +} diff --git a/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/BxTest.java b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/BxTest.java new file mode 100644 index 0000000..c1e1a16 --- /dev/null +++ b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/BxTest.java @@ -0,0 +1,30 @@ +package pkg.domain; + +/* + * 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.junit.jupiter.api.Test; + +public class BxTest +{ + @Test + void test() + { + } +}