This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch SUREFIRE-2040
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit bce7dd6c6f85597a1aba5ae20d2ce0fba1f92cc7
Author: tibordigana <[email protected]>
AuthorDate: Sun Mar 20 23:01:45 2022 +0100

    [SUREFIRE-2040] No tests executed with junit-platform-suite and 
-Dtest=TestSuite
---
 .../src/site/apt/examples/junit-platform.apt.vm    | 37 +++++++++
 .../surefire/its/jiras/Surefire1787JUnit5IT.java   | 16 ++++
 .../src/test/resources/junit5-suite/pom.xml        | 94 ++++++++++++++++++++++
 .../src/test/java/pkg/JUnit5Tests.java             | 29 +++++++
 .../src/test/java/pkg/domain/AxTest.java           | 30 +++++++
 .../src/test/java/pkg/domain/BxTest.java           | 33 ++++++++
 .../junitplatform/JUnitPlatformProvider.java       | 12 +--
 .../junitplatform/JUnitPlatformProviderTest.java   | 61 ++++++++++++++
 8 files changed, 306 insertions(+), 6 deletions(-)

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..5c02c6d 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
@@ -294,6 +294,7 @@ Using JUnit 5 Platform
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
+                <version>${project.version}</version>
                 <dependencies>
                     <dependency>
                         <groupId>org.junit.jupiter</groupId>
@@ -334,6 +335,7 @@ Using JUnit 5 Platform
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
+                <version>${project.version}</version>
                 <dependencies>
                     <dependency>
                         <groupId>org.junit.vintage</groupId>
@@ -411,6 +413,41 @@ 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
 with surefire integration test}}
+  and the 
{{{https://junit.org/junit5/docs/current/user-guide/#junit-platform-suite-engine}tutorial}}.
+
++---+
+<dependencies>
+    <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-engine</artifactId>
+        <version>5.8.2</version>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.junit.platform</groupId>
+        <artifactId>junit-platform-suite-engine</artifactId>
+        <version>1.8.2</version>
+        <scope>test</scope>
+    </dependency>
+</dependencies>
+<build>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <version>${project.version}</version>
+            <configuration>
+                <test><!-- your test suite class name should be here --></test>
+            </configuration>
+        </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/jiras/Surefire1787JUnit5IT.java
 
b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1787JUnit5IT.java
index 3e7e056..f64ad70 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
@@ -22,6 +22,9 @@ package org.apache.maven.surefire.its.jiras;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.junit.Test;
 
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+
 /**
  *
  */
@@ -129,4 +132,17 @@ public class Surefire1787JUnit5IT extends 
SurefireJUnit4IntegrationTestCase
             .verifyTextInLog( "Running pkg.JUnit5Tests" )
             .verifyTextInLog( "Using auto detected provider 
org.apache.maven.surefire.junit4.JUnit4Provider" );
     }
+
+    @Test
+    public void junit5Suite() throws Exception
+    {
+        unpack( "junit5-suite" )
+            .executeTest()
+            .verifyErrorFree( 1 )
+            .verifyTextInLog(
+                "Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider" )
+            .verifyTextInLog( "Running pkg.JUnit5Test" )
+            .verifyTextInLog( "Running pkg.domain.AxTest" )
+            .assertThatLogLine( containsString( "Running pkg.domain.BxTest" ), 
equalTo( 0 ) );
+    }
 }
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..de764ef
--- /dev/null
+++ b/surefire-its/src/test/resources/junit5-suite/pom.xml
@@ -0,0 +1,94 @@
+<?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>
+      <!--
+      The engine uses version 5.8.2. Due to the JUnit5 modularity model splits 
api and implementation,
+      the implementations should be backwards compatible with older versions 
of api, we are testing this corner case
+      for internal Surefire requirements. The user may or may not split the 
api and impl and versions.
+      -->
+      <version>5.8.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-suite-api</artifactId>
+      <!--
+      The engine uses version 5.8.2. Due to the JUnit5 modularity model splits 
api and implementation,
+      the implementations should be backwards compatible with old versions of 
api, we are testing this corner case
+      for internal Surefire requirements. The user may or may not split the 
api and impl and versions.
+      -->
+      <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>
+            <test>JUnit5Tests</test>
+          </configuration>
+          <dependencies>
+            <!--
+            You may split the impl from api as follows. It avoids a situation 
where your tests have
+            direct access to the engine internals.
+            As an example, the impl:5.9.0 should be backwards with api:1.8.0 
and one limitation where you
+            would not observe features introduced in 1.9.0 and 5.9.0.
+            -->
+            <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</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..767ec07
--- /dev/null
+++ 
b/surefire-its/src/test/resources/junit5-suite/src/test/java/pkg/domain/BxTest.java
@@ -0,0 +1,33 @@
+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;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+public class BxTest
+{
+    @Test
+    void test()
+    {
+        fail();
+    }
+}
diff --git 
a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
 
b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
index 92385e5..ad2ec94 100644
--- 
a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
+++ 
b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
@@ -32,6 +32,7 @@ import static 
org.apache.maven.surefire.api.booter.ProviderParameterNames.TESTNG
 import static 
org.apache.maven.surefire.api.report.ConsoleOutputCapture.startCapture;
 import static org.apache.maven.surefire.api.report.RunMode.NORMAL_RUN;
 import static 
org.apache.maven.surefire.api.report.RunMode.RERUN_TEST_AFTER_FAILURE;
+import static 
org.apache.maven.surefire.api.testset.TestListResolver.optionallyWildcardFilter;
 import static org.apache.maven.surefire.api.util.TestsToRun.fromClass;
 import static org.apache.maven.surefire.shared.utils.StringUtils.isBlank;
 import static 
org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
@@ -55,7 +56,6 @@ import 
org.apache.maven.surefire.api.provider.ProviderParameters;
 import org.apache.maven.surefire.api.report.ReporterException;
 import org.apache.maven.surefire.api.report.ReporterFactory;
 import org.apache.maven.surefire.api.suite.RunResult;
-import org.apache.maven.surefire.api.testset.TestListResolver;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
 import org.apache.maven.surefire.api.util.ScanResult;
 import org.apache.maven.surefire.api.util.SurefireReflectionException;
@@ -275,11 +275,11 @@ public class JUnitPlatformProvider
                 .map( TagFilter::excludeTags )
                 .ifPresent( filters::add );
 
-        TestListResolver testListResolver = 
parameters.getTestRequest().getTestListResolver();
-        if ( !testListResolver.isEmpty() )
-        {
-            filters.add( new TestMethodFilter( testListResolver ) );
-        }
+        of( optionallyWildcardFilter( 
parameters.getTestRequest().getTestListResolver() ) )
+            .filter( f -> !f.isEmpty() )
+            .filter( f -> !f.isWildcard() )
+            .map( TestMethodFilter::new )
+            .ifPresent( filters::add );
 
         getPropertiesList( INCLUDE_JUNIT5_ENGINES_PROP )
             .map( EngineFilter::includeEngines )
diff --git 
a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
 
b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
index c0b5e7b..f734bab 100644
--- 
a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
+++ 
b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
@@ -29,6 +29,7 @@ import static 
org.apache.maven.surefire.api.booter.ProviderParameterNames.EXCLUD
 import static org.apache.maven.surefire.api.report.RunMode.NORMAL_RUN;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -43,6 +44,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.withSettings;
+import static org.powermock.reflect.Whitebox.getInternalState;
 
 import java.io.PrintStream;
 import java.util.ArrayList;
@@ -892,6 +894,65 @@ public class JUnitPlatformProviderTest
     }
 
     @Test
+    public void shouldFilterTestMethod()
+    {
+        ProviderParameters providerParameters = providerParametersMock();
+        TestListResolver testListResolver = new TestListResolver( 
"**/*Test#test*" );
+        assertFalse( testListResolver.isEmpty() );
+        assertFalse( testListResolver.isWildcard() );
+        TestRequest request = new TestRequest( null, null, testListResolver, 0 
);
+        when( providerParameters.getTestRequest() ).thenReturn( request );
+
+        JUnitPlatformProvider provider = new JUnitPlatformProvider( 
providerParameters );
+
+        assertThat( provider.getFilters() )
+            .hasSize( 1 );
+
+        assertThat( provider.getFilters()[0] )
+            .isInstanceOf( TestMethodFilter.class );
+
+        Object expectedTestListResolver = getInternalState( 
provider.getFilters()[0], "testListResolver" );
+
+        assertThat( expectedTestListResolver )
+            .isInstanceOf( TestListResolver.class );
+
+        assertThat( expectedTestListResolver  )
+            .isSameAs( testListResolver );
+    }
+
+    @Test
+    public void shouldNotFilterEmpty()
+    {
+        ProviderParameters providerParameters = providerParametersMock();
+        TestListResolver testListResolver = new TestListResolver( "" );
+        assertTrue( testListResolver.isEmpty() );
+        assertFalse( testListResolver.isWildcard() );
+        TestRequest request = new TestRequest( null, null, testListResolver, 0 
);
+        when( providerParameters.getTestRequest() ).thenReturn( request );
+
+        JUnitPlatformProvider provider = new JUnitPlatformProvider( 
providerParameters );
+
+        assertThat( provider.getFilters() )
+            .isEmpty();
+    }
+
+    @Test
+    public void shouldNotFilterWildcard()
+    {
+        ProviderParameters providerParameters = providerParametersMock();
+        TestListResolver testListResolver = new TestListResolver( "*.java" );
+        assertTrue( testListResolver.isWildcard() );
+        assertFalse( testListResolver.isEmpty() );
+        TestRequest request = new TestRequest( null, null, testListResolver, 0 
);
+        when( providerParameters.getTestRequest() ).thenReturn( request );
+
+        JUnitPlatformProvider provider = new JUnitPlatformProvider( 
providerParameters );
+
+        assertThat( provider.getFilters() )
+            .isEmpty();
+    }
+
+    @Test
     public void executesSingleTestIncludedByName()
                     throws Exception
     {

Reply via email to