This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch inc-exc-files in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit f2db6ba6e7c108fc16bf73dec316b00853477b4b Author: Tibor Digaňa <[email protected]> AuthorDate: Wed Jan 12 23:50:57 2022 +0100 [SUREFIRE-1964] Support for method filtering on excludesFile and includesFile --- .../plugin/surefire/AbstractSurefireMojo.java | 120 ++++++++------ .../plugin/surefire/AbstractSurefireMojoTest.java | 178 +++++++++++++++++++-- .../maven/plugin/surefire/MojoMocklessTest.java | 6 + .../maven/plugin/surefire/SurefirePlugin.java | 12 ++ .../its/AbstractTestMultipleMethodPatterns.java | 3 +- .../maven/surefire/its/jiras/Surefire1964IT.java | 55 +++++++ .../test/resources/surefire-1964/exclusions.txt | 1 + .../test/resources/surefire-1964/inclusions.txt | 1 + .../src/test/resources/surefire-1964/pom.xml | 58 +++++++ .../src/test/java/pkg/ExcludedTest.java | 12 ++ .../src/test/java/pkg/FilterTest.java | 24 +++ 11 files changed, 412 insertions(+), 58 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..6c38445 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 @@ -2194,78 +2194,110 @@ public abstract class AbstractSurefireMojo } } - private void maybeAppendList( List<String> base, List<String> list ) + @Nonnull + private List<String> getExcludedScanList() + throws MojoFailureException { - if ( list != null ) - { - base.addAll( list ); - } + return getExcludeList( true ); } - @Nonnull private List<String> getExcludeList() + @Nonnull + private List<String> getExcludeList() + throws MojoFailureException + { + return getExcludeList( false ); + } + + /** + * Computes a merge list of test exclusions. + * Used only in {@link #getExcludeList()} and {@link #getExcludedScanList()}. + * @param asScanList true if dependency or directory scanner + * @return list of patterns + * @throws MojoFailureException if the excludes breaks a pattern format + */ + @Nonnull + private List<String> getExcludeList( boolean asScanList ) throws MojoFailureException { - List<String> actualExcludes = null; + List<String> excludes; if ( isSpecificTestSpecified() ) { - actualExcludes = Collections.emptyList(); + excludes = Collections.emptyList(); } else { - if ( getExcludesFile() != null ) + excludes = new ArrayList<>(); + if ( asScanList ) { - actualExcludes = readListFromFile( getExcludesFile() ); + if ( getExcludes() != null ) + { + excludes.addAll( getExcludes() ); + } + checkMethodFilterInIncludesExcludes( excludes ); } - if ( actualExcludes == null ) - { - actualExcludes = getExcludes(); - } - else + if ( getExcludesFile() != null ) { - maybeAppendList( actualExcludes, getExcludes() ); + excludes.addAll( readListFromFile( getExcludesFile() ) ); } - checkMethodFilterInIncludesExcludes( actualExcludes ); - - if ( actualExcludes == null || actualExcludes.isEmpty() ) + if ( asScanList && excludes.isEmpty() ) { - actualExcludes = Collections.singletonList( getDefaultExcludes() ); + excludes = Collections.singletonList( getDefaultExcludes() ); } } - return filterNulls( actualExcludes ); + return filterNulls( excludes ); + } + + @Nonnull + private List<String> getIncludedScanList() + throws MojoFailureException + { + return getIncludeList( true ); } + @Nonnull private List<String> getIncludeList() throws MojoFailureException { - List<String> includes = null; + return getIncludeList( false ); + } + + /** + * Computes a merge list of test inclusions. + * Used only in {@link #getIncludeList()} and {@link #getIncludedScanList()}. + * @param asScanList true if dependency or directory scanner + * @return list of patterns + * @throws MojoFailureException if the includes breaks a pattern format + */ + @Nonnull + private List<String> getIncludeList( boolean asScanList ) + throws MojoFailureException + { + final List<String> includes = new ArrayList<>(); if ( isSpecificTestSpecified() ) { - includes = new ArrayList<>(); addAll( includes, split( getTest(), "," ) ); } else { - if ( getIncludesFile() != null ) + if ( asScanList ) { - includes = readListFromFile( getIncludesFile() ); + if ( getIncludes() != null ) + { + includes.addAll( getIncludes() ); + } + checkMethodFilterInIncludesExcludes( includes ); } - if ( includes == null ) - { - includes = getIncludes(); - } - else + if ( getIncludesFile() != null ) { - maybeAppendList( includes, getIncludes() ); + includes.addAll( readListFromFile( getIncludesFile() ) ); } - checkMethodFilterInIncludesExcludes( includes ); - - if ( includes == null || includes.isEmpty() ) + if ( asScanList && includes.isEmpty() ) { - includes = asList( getDefaultIncludes() ); + addAll( includes, getDefaultIncludes() ); } } @@ -2275,16 +2307,12 @@ public abstract class AbstractSurefireMojo private void checkMethodFilterInIncludesExcludes( Iterable<String> patterns ) throws MojoFailureException { - if ( patterns != null ) + for ( String pattern : patterns ) { - for ( String pattern : patterns ) + if ( pattern != null && pattern.contains( "#" ) ) { - if ( pattern != null && pattern.contains( "#" ) ) - { - throw new MojoFailureException( "Method filter prohibited in " - + "includes|excludes|includesFile|excludesFile parameter: " - + pattern ); - } + throw new MojoFailureException( "Method filter prohibited in includes|excludes parameter: " + + pattern ); } } } @@ -2294,16 +2322,18 @@ public abstract class AbstractSurefireMojo { if ( includedExcludedTests == null ) { - includedExcludedTests = new TestListResolver( getIncludeList(), getExcludeList() ); + includedExcludedTests = new TestListResolver( getIncludedScanList(), getExcludedScanList() ); + getConsoleLogger().debug( "Resolved included and excluded patterns: " + includedExcludedTests ); } return includedExcludedTests; } public TestListResolver getSpecificTests() + throws MojoFailureException { if ( specificTests == null ) { - specificTests = new TestListResolver( getTest() ); + specificTests = new TestListResolver( getIncludeList(), getExcludeList() ); } return specificTests; } 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..d8db23f 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 @@ -30,14 +30,17 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import org.apache.commons.io.FileUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.artifact.handler.ArtifactHandler; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; @@ -84,6 +87,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static java.io.File.separatorChar; +import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.file.Files.write; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -95,8 +99,8 @@ import static org.apache.maven.artifact.versioning.VersionRange.createFromVersio import static org.apache.maven.surefire.shared.lang3.JavaVersion.JAVA_9; import static org.apache.maven.surefire.shared.lang3.JavaVersion.JAVA_RECENT; import static org.apache.maven.surefire.shared.lang3.SystemUtils.IS_OS_WINDOWS; -import static org.codehaus.plexus.languages.java.jpms.ModuleNameSource.MODULEDESCRIPTOR; import static org.assertj.core.api.Assertions.assertThat; +import static org.codehaus.plexus.languages.java.jpms.ModuleNameSource.MODULEDESCRIPTOR; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; @@ -1990,6 +1994,12 @@ public class AbstractSurefireMojoTest private int failOnFlakeCount; private String[] includeJUnit5Engines; private String[] excludeJUnit5Engines; + private List<Artifact> projectTestArtifacts; + private File includesFile; + private File excludesFile; + private List<String> includes; + private List<String> excludes; + private String test; private JUnitPlatformProviderInfo createJUnitPlatformProviderInfo( Artifact junitPlatformArtifact, TestClassPath testClasspathWrapper ) @@ -1997,6 +2007,17 @@ public class AbstractSurefireMojoTest return new JUnitPlatformProviderInfo( junitPlatformArtifact, testClasspathWrapper ); } + void setProjectTestArtifacts( List<Artifact> projectTestArtifacts ) + { + this.projectTestArtifacts = projectTestArtifacts; + } + + @Override + List<Artifact> getProjectTestArtifacts() + { + return projectTestArtifacts; + } + @Override protected void logDebugOrCliShowErrors( String s ) { @@ -2114,43 +2135,48 @@ public class AbstractSurefireMojoTest @Override public String getTest() { - return null; + return test; } @Override public void setTest( String test ) { - + this.test = test; } @Override public List<String> getIncludes() { - return null; + return includes; } @Override - public File getIncludesFile() + public void setIncludes( List<String> includes ) { - return null; + this.includes = includes; } - @Override - public void setIncludes( List<String> includes ) + void setIncludesFile( File includesFile ) { + this.includesFile = includesFile; + } + @Override + public File getIncludesFile() + { + return includesFile; } @Override public List<String> getExcludes() { - return null; + return excludes; } @Override public void setExcludes( List<String> excludes ) { - + this.excludes = excludes; } @Override @@ -2309,10 +2335,15 @@ public class AbstractSurefireMojoTest return null; } + void setExcludesFile( File excludesFile ) + { + this.excludesFile = excludesFile; + } + @Override public File getExcludesFile() { - return null; + return excludesFile; } @Override @@ -2483,6 +2514,131 @@ public class AbstractSurefireMojoTest } } + @Test + public void shouldNotPerformMethodFilteringOnIncludes() throws Exception + { + Mojo plugin = new Mojo(); + + File includesExcludes = File.createTempFile( "surefire", "-includes" ); + FileUtils.write( includesExcludes, "AnotherTest#method" , UTF_8 ); + plugin.setIncludesFile( includesExcludes ); + + List<String> includes = new LinkedList<>(); + includes.add( "AnotherTest#method " ); + plugin.setIncludes( includes ); + + VersionRange version = VersionRange.createFromVersion( "1.0" ); + ArtifactHandler handler = new DefaultArtifactHandler(); + Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "jar", null, handler ); + File artifactFile = File.createTempFile( "surefire", ".jar" ); + artifactFile.deleteOnExit(); + testDeps.setFile( artifactFile ); + plugin.setProjectTestArtifacts( singletonList( testDeps ) ); + plugin.setDependenciesToScan( new String[] { "g:a" } ); + + try + { + plugin.scanDependencies(); + fail( "MojoFailureException expected" ); + } + catch ( MojoFailureException e ) + { + assertThat( e.getLocalizedMessage() ) + .isEqualTo( "Method filter prohibited in includes|excludes parameter: AnotherTest#method " ); + } + } + + @Test + public void shouldFilterTestsOnIncludesFile() throws Exception + { + Mojo plugin = new Mojo(); + + plugin.setLogger( mock( Logger.class ) ); + + File includes = File.createTempFile( "surefire", "-includes" ); + FileUtils.write( includes, "AnotherTest#method" , UTF_8 ); + plugin.setIncludesFile( includes ); + + VersionRange version = VersionRange.createFromVersion( "1.0" ); + ArtifactHandler handler = new DefaultArtifactHandler(); + Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler ); + File artifactFile = File.createTempFile( "surefire", "-classes" ); + String classDir = artifactFile.getCanonicalPath(); + assertThat( artifactFile.delete() ).isTrue(); + File classes = new File( classDir ); + assertThat( classes.mkdir() ).isTrue(); + testDeps.setFile( classes ); + assertThat( new File( classes, "AnotherTest.class" ).createNewFile() ) + .isTrue(); + plugin.setProjectTestArtifacts( singletonList( testDeps ) ); + plugin.setDependenciesToScan( new String[] { "g:a" } ); + + DefaultScanResult result = plugin.scanDependencies(); + assertThat ( result.getClasses() ).hasSize( 1 ); + assertThat ( result.getClasses().iterator().next() ).isEqualTo( "AnotherTest" ); + } + + @Test + public void shouldFilterTestsOnExcludesFile() throws Exception + { + Mojo plugin = new Mojo(); + + plugin.setLogger( mock( Logger.class ) ); + + File excludes = File.createTempFile( "surefire", "-excludes" ); + FileUtils.write( excludes, "AnotherTest" , UTF_8 ); + plugin.setExcludesFile( excludes ); + + VersionRange version = VersionRange.createFromVersion( "1.0" ); + ArtifactHandler handler = new DefaultArtifactHandler(); + Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler ); + File artifactFile = File.createTempFile( "surefire", "-classes" ); + String classDir = artifactFile.getCanonicalPath(); + assertThat( artifactFile.delete() ).isTrue(); + File classes = new File( classDir ); + assertThat( classes.mkdir() ).isTrue(); + testDeps.setFile( classes ); + assertThat( new File( classes, "AnotherTest.class" ).createNewFile() ) + .isTrue(); + plugin.setProjectTestArtifacts( singletonList( testDeps ) ); + plugin.setDependenciesToScan( new String[] { "g:a" } ); + + DefaultScanResult result = plugin.scanDependencies(); + assertThat ( result.getClasses() ) + .isEmpty(); + } + + @Test + public void shouldUseOnlySpecificTests() throws Exception + { + Mojo plugin = new Mojo(); + + plugin.setLogger( mock( Logger.class ) ); + + File includes = File.createTempFile( "surefire", "-includes" ); + FileUtils.write( includes, "AnotherTest" , UTF_8 ); + plugin.setIncludesFile( includes ); + plugin.setTest( "DifferentTest" ); + + VersionRange version = VersionRange.createFromVersion( "1.0" ); + ArtifactHandler handler = new DefaultArtifactHandler(); + Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler ); + File artifactFile = File.createTempFile( "surefire", "-classes" ); + String classDir = artifactFile.getCanonicalPath(); + assertThat( artifactFile.delete() ).isTrue(); + File classes = new File( classDir ); + assertThat( classes.mkdir() ).isTrue(); + testDeps.setFile( classes ); + assertThat( new File( classes, "AnotherTest.class" ).createNewFile() ) + .isTrue(); + plugin.setProjectTestArtifacts( singletonList( testDeps ) ); + plugin.setDependenciesToScan( new String[] { "g:a" } ); + + DefaultScanResult result = plugin.scanDependencies(); + assertThat ( result.getClasses() ) + .isEmpty(); + } + private static File mockFile( String absolutePath ) { File f = mock( File.class ); diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java index 1548dfd..6ad0416 100644 --- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java +++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java @@ -32,6 +32,7 @@ import org.apache.maven.surefire.extensions.ForkNodeFactory; import org.apache.maven.surefire.api.suite.RunResult; import org.apache.maven.surefire.api.util.DefaultScanResult; import org.apache.maven.toolchain.Toolchain; +import org.codehaus.plexus.logging.Logger; import org.junit.Test; import java.io.File; @@ -44,6 +45,7 @@ import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; import static org.powermock.reflect.Whitebox.invokeMethod; import static org.powermock.reflect.Whitebox.setInternalState; @@ -243,6 +245,7 @@ public class MojoMocklessTest List<Artifact> projectTestArtifacts = singletonList( testDeps ); String[] dependenciesToScan = { "g:a" }; Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan ); + mojo.setLogger( mock( Logger.class ) ); DefaultScanResult result = mojo.scanDependencies(); assertThat( result ) @@ -275,6 +278,7 @@ public class MojoMocklessTest List<Artifact> projectTestArtifacts = singletonList( testDeps ); String[] dependenciesToScan = { "g:a" }; Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan ); + mojo.setLogger( mock( Logger.class ) ); DefaultScanResult result = mojo.scanDependencies(); assertThat( result ) @@ -306,6 +310,7 @@ public class MojoMocklessTest List<Artifact> projectTestArtifacts = singletonList( testDeps ); String[] dependenciesToScan = { "g:a" }; Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan ); + mojo.setLogger( mock( Logger.class ) ); DefaultScanResult result = mojo.scanDependencies(); assertThat( result ) @@ -352,6 +357,7 @@ public class MojoMocklessTest List<Artifact> projectTestArtifacts = asList( testDep1, testDep2 ); String[] dependenciesToScan = { "g:a" }; Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan ); + mojo.setLogger( mock( Logger.class ) ); DefaultScanResult result = mojo.scanDependencies(); assertThat( result ) diff --git a/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java b/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java index 240d2a5..2ce8caa 100644 --- a/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java +++ b/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java @@ -355,6 +355,12 @@ public class SurefirePlugin * **{@literal /}NotIncludedByDefault.java * %regex[.*Test.*|.*Not.*] * </code></pre> + * + * Since 3.0.0-M6, method filtering support is provided in includes file. Example: + * <pre><code> + * foo.bar.SomeTest#test + * com.test.Test#testMethod + * </code></pre> * * @since 2.13 */ @@ -370,6 +376,12 @@ public class SurefirePlugin * %regex[.*Test.*|.*Not.*] * </code></pre> * + * Since 3.0.0-M6, method filtering support is provided in excludes file. Example: + * <pre><code> + * foo.bar.SomeTest#test + * com.test.Test#testMethod + * </code></pre> + * * @since 2.13 */ @Parameter( property = "surefire.excludesFile" ) diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/AbstractTestMultipleMethodPatterns.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/AbstractTestMultipleMethodPatterns.java index 6c458f5..055c407 100644 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/AbstractTestMultipleMethodPatterns.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/AbstractTestMultipleMethodPatterns.java @@ -483,7 +483,6 @@ public abstract class AbstractTestMultipleMethodPatterns prepare( pattern ) .failNever() .executeTest() - .verifyTextInLog( "Method filter prohibited in includes|excludes|includesFile|excludesFile parameter: " - + pattern ); + .verifyTextInLog( "Method filter prohibited in includes|excludes parameter: " + pattern ); } } diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1964IT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1964IT.java new file mode 100644 index 0000000..62f60d2 --- /dev/null +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1964IT.java @@ -0,0 +1,55 @@ +package org.apache.maven.surefire.its.jiras; + +/* + * 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.its.fixture.SurefireJUnit4IntegrationTestCase; +import org.junit.Test; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; + +/** + * + */ +public class Surefire1964IT extends SurefireJUnit4IntegrationTestCase +{ + @Test + public void shouldFilterTests() throws Exception + { + unpack( "surefire-1964" ) + .executeTest() + .assertTestSuiteResults( 1 ) + .assertThatLogLine( containsString( "executed testXYZ" ), is( 1 ) ) + .assertThatLogLine( containsString( "executed testABC" ), is( 0 ) ) + .assertThatLogLine( containsString( "executed dontRun" ), is( 0 ) ); + } + + @Test + public void shouldFilterTestsInPluginProcess() throws Exception + { + unpack( "surefire-1964" ) + .forkCount( 0 ) + .executeTest() + .assertTestSuiteResults( 1 ) + .assertThatLogLine( containsString( "executed testXYZ" ), is( 1 ) ) + .assertThatLogLine( containsString( "executed testABC" ), is( 0 ) ) + .assertThatLogLine( containsString( "executed dontRun" ), is( 0 ) ); + } +} diff --git a/surefire-its/src/test/resources/surefire-1964/exclusions.txt b/surefire-its/src/test/resources/surefire-1964/exclusions.txt new file mode 100644 index 0000000..5bacad2 --- /dev/null +++ b/surefire-its/src/test/resources/surefire-1964/exclusions.txt @@ -0,0 +1 @@ +FilterTest#testABC \ No newline at end of file diff --git a/surefire-its/src/test/resources/surefire-1964/inclusions.txt b/surefire-its/src/test/resources/surefire-1964/inclusions.txt new file mode 100644 index 0000000..50077e4 --- /dev/null +++ b/surefire-its/src/test/resources/surefire-1964/inclusions.txt @@ -0,0 +1 @@ +FilterTest#test* \ No newline at end of file diff --git a/surefire-its/src/test/resources/surefire-1964/pom.xml b/surefire-its/src/test/resources/surefire-1964/pom.xml new file mode 100644 index 0000000..8f3ba29 --- /dev/null +++ b/surefire-its/src/test/resources/surefire-1964/pom.xml @@ -0,0 +1,58 @@ +<?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>maven-surefire-excludefiles</artifactId> + <version>1.0-SNAPSHOT</version> + + <properties> + <maven.compiler.source>${java.specification.version}</maven.compiler.source> + <maven.compiler.target>${java.specification.version}</maven.compiler.target> + </properties> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.13.2</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>${surefire.version}</version> + <configuration> + <includesFile>inclusions.txt</includesFile> + <excludesFile>exclusions.txt</excludesFile> + </configuration> + </plugin> + </plugins> + </build> + +</project> diff --git a/surefire-its/src/test/resources/surefire-1964/src/test/java/pkg/ExcludedTest.java b/surefire-its/src/test/resources/surefire-1964/src/test/java/pkg/ExcludedTest.java new file mode 100644 index 0000000..b871231 --- /dev/null +++ b/surefire-its/src/test/resources/surefire-1964/src/test/java/pkg/ExcludedTest.java @@ -0,0 +1,12 @@ +package pkg; + +import org.junit.Test; + +public class ExcludedTest +{ + @Test + public void dontRun() + { + System.out.println( "executed dontRun" ); + } +} diff --git a/surefire-its/src/test/resources/surefire-1964/src/test/java/pkg/FilterTest.java b/surefire-its/src/test/resources/surefire-1964/src/test/java/pkg/FilterTest.java new file mode 100644 index 0000000..d93eca9 --- /dev/null +++ b/surefire-its/src/test/resources/surefire-1964/src/test/java/pkg/FilterTest.java @@ -0,0 +1,24 @@ +package pkg; + +import org.junit.Test; + +public class FilterTest +{ + @Test + public void testABC() + { + System.out.println( "executed testABC" ); + } + + @Test + public void dontRun() + { + System.out.println( "executed dontRun" ); + } + + @Test + public void testXYZ() + { + System.out.println( "executed testXYZ" ); + } +}
