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 2022/03/02 20:25:46 UTC

[maven-surefire] branch inc-exc-files updated (9c7c0d7 -> f2db6ba)

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

tibordigana pushed a change to branch inc-exc-files
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git.


    omit 9c7c0d7  unit tests
    omit 3fce813  Add some javadoc to includesFile and excludesFile
    omit 505d862  added ITs
    omit 1d3b483  fixed ITs
    omit 4dc5743  concatenated string in exception message
    omit dc5f743  throw new MojoFailureException( "Method filter prohibited in " + "includes|excludes parameter: " + pattern )
    omit 33a6fec  [SUREFIRE-1964] Support for method filtering on excludesFile and includesFile
     add 550f98a  [SUREFIRE-2005] Improved dump message "Boot Manifest-JAR contains absolute paths in classpath" with exception message
     add 9ba1733  Bump maven-reporting-api from 3.0 to 3.1.0 (#458)
     add 89cffc2  [SUREFIRE-1992] Do not abbreviate test error/failure messages to 78 characters
     add 8221223  [SUREFIRE-1945] crashed tests - unit tests with large logging output does not produce surefire report
     add d69d7ad  [SUREFIRE-2006] Don't use Services Transformer in shadefire
     add a5d3154  fixed typo in Javadoc
     add 6ea957e  [SUREFIRE-1993] Properly detect JPMS modules that "provide" a service
     add f243cd2  Remove unused import that triggers Checkstyle
     add 67abe59  [SUREFIRE-2008] Upgrade animal-sniffer-maven-plugin to 1.21
     add 93e0aea  [SUREFIRE-2009] Refactoring of surefire-junit3. JUnitTestSetExecutor and PojoTestSetExecutor should be stateless.
     add e8ac9b6  [SUREFIRE-2003] Upgrade Maven Reporting to 3.1.0
     add afd87d1  [SUREFIRE-2012] Use maven-shared-utils instead of surefire-shared-utils in Report Parser. Removed commons-lang in Report Plugin.
     add 0f92105  [SUREFIRE-2011] Updated abstractions which helps associating standard out/err with a test
     add 6b4ccdd  SUREFIRE-1909 Support JUnit 5 reflection access by changing add-exports to add-opens
     add 5f7da49  [SUREFIRE-2016] The MOJO parameter testSourceDirectory is used only in the TestNG HTML, and it should be optional. Javadoc and documentation should be fixed.
     add a6daea6  Could not move UmlautDirIT project dir.
     add c654885  [SUREFIRE-2017] Unstable build with ParallelParameterized
     add 892b9db  [SUREFIRE-2019] ThreadedStreamConsumer - use Thread.join() instead of CountDownLatch.await()
     add 9621bb6  [SUREFIRE-2020] Use addShutDownHook() from maven-shared-utils
     add 1c4e68e  [SUREFIRE-2021] Commands should be flushed immediately. Use Channels.newChannel() instead of newBufferedChannel(). Delete the old flushing mechanism on forked processes.
     add e916128  [jenkins] excludes h49-shared which caused UmlautDirIT.testUmlaut() build failure on dir renaming error && JDK18 && maven 3.2
     add d19f79f  [SUREFIRE-2023] The integration test Surefire946KillMainProcessInReusableForkIT hanged and timed out because SIGTERM happened before the first test has started. The plugin should be able to terminate itself whenever after SIGTERM.
     add fdf0228  [documentation] use *Nix paths
     add 3c207f5  Fix documentation: integration tests are in surefire-its now
     add 778de43  [SUREFIRE-2026] Improve assertions in Surefire1787JUnit5IT
     add 64f0fde  [SUREFIRE-2025] Updated abstractions which helps associating systemProperties() with a test context added Javadoc TestSetReportEntry already contains system properties and systemProperties() can be removed in MasterProcessChannelEncoder
     add c14aacb  Jenkins CI URL
     add 3050d2e  Bump maven-site-plugin from 3.8.2 to 3.10.0 (#466)
     add d50fee8  [SUREFIRE-2031] Both fields/parameters "includes" and "excludes" should be in target MOJO class. User names should be unique.
     new f2db6ba  [SUREFIRE-1964] Support for method filtering on excludesFile and includesFile

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (9c7c0d7)
            \
             N -- N -- N   refs/heads/inc-exc-files (f2db6ba)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .editorconfig                                      |   7 +
 Jenkinsfile                                        |   2 +-
 .../maven/plugin/failsafe/IntegrationTestMojo.java |  43 +-
 .../plugin/surefire/AbstractSurefireMojo.java      |  94 ++--
 .../plugin/surefire/InPluginVMSurefireStarter.java |   9 +-
 .../booterclient/ClasspathForkConfiguration.java   |   4 +-
 .../booterclient/DefaultForkConfiguration.java     |  14 +-
 .../surefire/booterclient/ForkConfiguration.java   |   8 +-
 .../plugin/surefire/booterclient/ForkStarter.java  | 208 ++++----
 .../booterclient/JarManifestForkConfiguration.java |  12 +-
 .../ModularClasspathForkConfiguration.java         |   6 +-
 .../plugin/surefire/booterclient/Platform.java     |  17 +
 .../lazytestprovider/AbstractCommandReader.java    |  34 +-
 ...mFlushableCommandline.java => Commandline.java} |  41 +-
 .../lazytestprovider/DefaultCommandReader.java     |   2 -
 .../DefferedChannelCommandSender.java              |  35 --
 .../lazytestprovider/FlushReceiver.java            |  38 --
 .../lazytestprovider/FlushReceiverProvider.java    |  34 --
 .../OutputStreamFlushReceiver.java                 |  47 --
 .../lazytestprovider/TestProvidingInputStream.java |   4 -
 .../surefire/booterclient/output/ForkClient.java   |  67 ++-
 .../output/ThreadedStreamConsumer.java             |  51 +-
 .../surefire/extensions/EventConsumerThread.java   |   7 +-
 .../junit5/JUnit5ConsoleOutputReporter.java        |   3 +-
 .../junit5/JUnit5Xml30StatelessReporter.java       |   2 +-
 .../surefire/report/ConsoleOutputFileReporter.java |   7 +-
 .../surefire/report/DefaultReporterFactory.java    |   4 +-
 .../surefire/report/DirectConsoleOutput.java       |  11 +-
 .../surefire/report/NullConsoleOutputReceiver.java |   3 +-
 .../plugin/surefire/report/TestSetRunListener.java |  27 +-
 .../report/TestcycleConsoleOutputReceiver.java     |   4 +-
 .../apache/maven/surefire/stream/EventDecoder.java |  12 +-
 .../AbstractSurefireMojoJava7PlusTest.java         |  14 +
 .../plugin/surefire/AbstractSurefireMojoTest.java  |  91 +++-
 .../maven/plugin/surefire/MojoMocklessTest.java    |  12 +
 .../booterclient/DefaultForkConfigurationTest.java |  18 +-
 .../booterclient/ForkConfigurationTest.java        |  25 +-
 .../surefire/booterclient/ForkStarterTest.java     |   6 +-
 .../booterclient/ForkingRunListenerTest.java       |  14 +-
 .../JarManifestForkConfigurationTest.java          |   2 +-
 .../plugin/surefire/booterclient/MockReporter.java |  14 +-
 .../ModularClasspathForkConfigurationTest.java     |   6 +-
 .../booterclient/TestSetMockReporterFactory.java   |   4 +-
 ...leCommandlineTest.java => CommandlineTest.java} |  35 +-
 .../booterclient/output/ForkClientTest.java        |  81 ++-
 .../maven/plugin/surefire/extensions/E2ETest.java  |  17 +-
 .../extensions/ForkedProcessEventNotifierTest.java | 104 +---
 .../report/DefaultReporterFactoryTest.java         |   5 +-
 .../report/ConsoleOutputFileReporterTest.java      |  12 +-
 .../maven/plugin/surefire/SurefirePlugin.java      |  49 +-
 .../src/site/apt/developing.apt.vm                 |   8 +-
 .../site/apt/examples/inclusion-exclusion.apt.vm   |   8 +-
 .../src/site/apt/examples/logging.apt.vm           |   2 +-
 maven-surefire-plugin/src/site/markdown/java9.md   |   2 +-
 maven-surefire-report-plugin/pom.xml               |  38 --
 pom.xml                                            |  42 +-
 .../surefire/api/booter/BaseProviderFactory.java   |  17 -
 .../api/booter/ForkingReporterFactory.java         |   4 +-
 .../surefire/api/booter/ForkingRunListener.java    |  39 +-
 .../api/booter/MasterProcessChannelEncoder.java    | 132 ++++-
 .../surefire/api/provider/ProviderParameters.java  |  11 -
 .../surefire/api/report/ConsoleOutputCapture.java  |  31 +-
 .../ConsoleOutputReceiverForCurrentThread.java     |   8 +-
 .../maven/surefire/api/report/ConsoleStream.java   |  28 -
 .../api/report/DefaultDirectConsoleReporter.java   |  42 --
 .../api/report/LegacyPojoStackTraceWriter.java     |  47 +-
 .../surefire/api/report/ReporterConfiguration.java |  25 -
 .../maven/surefire/api/report/ReporterFactory.java |   6 +-
 ...OutputReceiver.java => TestOutputReceiver.java} |   8 +-
 .../surefire/api/report/TestOutputReportEntry.java | 116 +++++
 .../surefire/api/report/TestReportListener.java    |  45 ++
 .../api/util/internal/ConcurrencyUtils.java        |  13 +-
 .../api/stream/AbstractStreamDecoderTest.java      |   2 +-
 .../api/util/internal/ConcurrencyUtilsTest.java    |  41 +-
 .../apache/maven/surefire/booter/ForkedBooter.java |  23 +-
 .../surefire/booter/spi/EventChannelEncoder.java   |  30 +-
 .../surefire/booter/stream/CommandDecoder.java     |  12 +-
 .../maven/surefire/booter/ForkedBooterTest.java    |   6 +-
 .../surefire/booter/SurefireReflectorTest.java     |   8 +-
 .../booter/spi/EventChannelEncoderTest.java        |  92 ++--
 .../maven/surefire/extensions/CommandReader.java   |   1 -
 .../ConsoleOutputReportEventListener.java          |   3 +-
 .../extensions/util/CommandlineStreams.java        |   3 +-
 .../extensions/util/LineConsumerThread.java        |  10 +-
 surefire-its/pom.xml                               | 568 ---------------------
 .../maven/surefire/its/AbstractFailFastIT.java     |  10 +-
 .../its/CheckTestNgListenerReporterIT.java         |  10 +-
 .../apache/maven/surefire/its/ConsoleOutputIT.java |   8 +-
 .../its/JUnit47RerunFailingTestWithCucumberIT.java |   8 +-
 .../maven/surefire/its/JUnit4VersionsIT.java       |   8 +-
 .../maven/surefire/its/JUnitPlatformEnginesIT.java |  10 +-
 .../apache/maven/surefire/its/JUnitPlatformIT.java |   8 +-
 .../{ModulePathIT.java => Junit5ModulePathIT.java} |   8 +-
 .../maven/surefire/its/TestMethodPatternIT.java    |  16 +-
 .../surefire/its/TestMultipleMethodPatternsIT.java |   8 +-
 .../its/TestMultipleMethodPatternsTestNGIT.java    |   8 +-
 .../maven/surefire/its/fixture/MavenLauncher.java  |  11 +-
 .../its/jiras/Surefire1158RemoveInfoLinesIT.java   |   8 +-
 .../Surefire1295AttributeJvmCrashesToTestsIT.java  |   8 +-
 .../surefire/its/jiras/Surefire1787JUnit5IT.java   |  42 +-
 ...urefire1914XmlReportingParameterizedTestIT.java |  10 +-
 ...ava => Surefire1993JpmsProvidingModulesIT.java} |  27 +-
 ...va => Surefire2006ShadefireTransformersIT.java} |  18 +-
 ...Surefire946KillMainProcessInReusableForkIT.java |  40 +-
 .../{modulepath => junit5-modulepath}/pom.xml      |   8 +-
 .../src/main/java/com/app/Main.java                |   3 -
 .../src/main/java/module-info.java                 |   0
 .../src/test/java/com/app/AppTest.java             |   9 +-
 .../src/test/java/examples/RootTest.java           |  10 +-
 .../src/test/java/examples/a/ATest.java            |   8 +-
 .../src/test/java/examples/b/BTest.java            |  10 +-
 .../src/test/resources/surefire-1490/pom.xml       |  16 +-
 .../application/pom.xml                            |  80 +++
 .../application/src/main/java/module-info.java     |  11 +-
 .../application/StudentServiceLoader.java          |  45 +-
 .../application/TrainingApplication.java           |  42 +-
 .../application/TrainingApplicationIT.java         |  25 +-
 .../surefire-1993-jpms-providing-modules/pom.xml   | 101 ++++
 .../studentservice-provider}/pom.xml               |  19 +-
 .../src/main/java/module-info.java                 |  13 +-
 .../provider/internal/InternalStudentService.java  |  31 +-
 .../provider/service/StudentServiceImpl.java       |  52 ++
 .../studentservice}/pom.xml                        |  13 +-
 .../studentservice}/src/main/java/module-info.java |   9 +-
 .../its/serviceloader/api/model/Student.java}      |  30 +-
 .../serviceloader/api/service/StudentService.java  |  17 +-
 .../pom.xml                                        |  18 +-
 .../src/test/java/PojoTest.java}                   |   9 +-
 .../surefire/report/SmartStackTraceParser.java     |  39 +-
 .../apache/maven/surefire/report/ATestClass.java   |   2 +-
 .../surefire/report/SmartStackTraceParserTest.java |   4 +-
 .../surefire/common/junit4/JUnit4RunListener.java  |  29 +-
 .../maven/surefire/common/junit4/Notifier.java     |   8 +-
 .../maven/surefire/common/junit4/MockReporter.java |  70 ++-
 .../junitplatform/JUnitPlatformProvider.java       |  15 +-
 .../surefire/junitplatform/RunListenerAdapter.java |  16 +-
 .../junitplatform/JUnitPlatformProviderTest.java   |  48 +-
 .../junitplatform/RunListenerAdapterTest.java      |   6 +-
 .../maven/surefire/junit/JUnit3Provider.java       |  54 +-
 ...JUnitTestSet.java => JUnitTestSetExecutor.java} |  30 +-
 .../{PojoTestSet.java => PojoTestSetExecutor.java} | 104 ++--
 ...reTestSet.java => SurefireTestSetExecutor.java} |   6 +-
 .../junit/TestListenerInvocationHandler.java       |  33 +-
 .../maven/surefire/junit/JUnitTestSetTest.java     |   4 +-
 .../maven/surefire/junit4/JUnit4Provider.java      |   9 +-
 surefire-providers/surefire-junit47/pom.xml        | 100 +---
 .../surefire-junit47/src/assembly/assembly.xml     |  35 --
 .../junitcore/ClassesParallelRunListener.java      |  16 +-
 .../surefire/junitcore/ConcurrentRunListener.java  | 138 +++--
 .../surefire/junitcore/JUnitCoreProvider.java      |  31 +-
 .../surefire/junitcore/JUnitCoreRunListener.java   |   6 +-
 .../maven/surefire/junitcore/JUnitCoreWrapper.java |  10 +-
 .../maven/surefire/junitcore/LogicalStream.java    |  29 +-
 .../junitcore/MethodsParallelRunListener.java      |  17 +-
 .../junitcore/NonConcurrentRunListener.java        |  15 +-
 .../maven/surefire/junitcore/TestMethod.java       |  15 +-
 .../apache/maven/surefire/junitcore/TestSet.java   |   8 +-
 .../junitcore/pc/AbstractThreadPoolStrategy.java   |   6 +-
 .../surefire/junitcore/pc/InvokerStrategy.java     |   4 +-
 .../junitcore/pc/NonSharedThreadPoolStrategy.java  |   4 +-
 .../junitcore/pc/ParallelComputerBuilder.java      |   8 +-
 .../maven/surefire/junitcore/pc/Scheduler.java     |  41 +-
 .../junitcore/pc/SchedulingStrategies.java         |  10 +-
 .../surefire/junitcore/pc/SchedulingStrategy.java  |  15 +-
 .../junitcore/pc/SharedThreadPoolStrategy.java     |   4 +-
 .../junitcore/pc/SingleThreadScheduler.java        |   6 +-
 .../junitcore/ConcurrentRunListenerTest.java       |  25 +-
 .../maven/surefire/junitcore/JUnitCoreTester.java  |  10 +-
 .../maven/surefire/junitcore/MockReporter.java     |  71 ++-
 .../maven/surefire/junitcore/Surefire746Test.java  |  22 +-
 .../junitcore/pc/ParallelComputerBuilderTest.java  |  14 +-
 .../junitcore/pc/ParallelComputerUtilTest.java     |  20 +-
 .../junitcore/pc/SchedulingStrategiesTest.java     |   6 +-
 .../maven/surefire/testng/TestNGExecutor.java      |  18 +-
 .../maven/surefire/testng/TestNGProvider.java      |   7 +-
 surefire-report-parser/pom.xml                     |  11 +-
 .../plugins/surefire/report/ReportTestCase.java    |   2 +-
 .../surefire/report/SurefireReportParser.java      |   4 +-
 .../surefire/report/TestSuiteXmlParser.java        |   6 +-
 surefire-shadefire/pom.xml                         |  27 +-
 ...refire.spi.MasterProcessChannelProcessorFactory |   6 +-
 ...he.maven.surefire.api.provider.SurefireProvider |   2 +-
 182 files changed, 2234 insertions(+), 2694 deletions(-)
 rename maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/{OutputStreamFlushableCommandline.java => Commandline.java} (65%)
 delete mode 100644 maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/DefferedChannelCommandSender.java
 delete mode 100644 maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/FlushReceiver.java
 delete mode 100644 maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/FlushReceiverProvider.java
 delete mode 100644 maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/OutputStreamFlushReceiver.java
 rename maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/{OutputStreamFlushableCommandlineTest.java => CommandlineTest.java} (71%)
 delete mode 100644 surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleStream.java
 delete mode 100644 surefire-api/src/main/java/org/apache/maven/surefire/api/report/DefaultDirectConsoleReporter.java
 rename surefire-api/src/main/java/org/apache/maven/surefire/api/report/{ConsoleOutputReceiver.java => TestOutputReceiver.java} (80%)
 create mode 100644 surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestOutputReportEntry.java
 create mode 100644 surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestReportListener.java
 copy surefire-its/src/test/java/org/apache/maven/surefire/its/{ModulePathIT.java => Junit5ModulePathIT.java} (96%)
 copy surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/{Surefire673MockitoIT.java => Surefire1993JpmsProvidingModulesIT.java} (59%)
 copy surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/{Surefire408ManualProviderSelectionIT.java => Surefire2006ShadefireTransformersIT.java} (71%)
 copy surefire-its/src/test/resources/{modulepath => junit5-modulepath}/pom.xml (87%)
 copy surefire-its/src/test/resources/{modulepath => junit5-modulepath}/src/main/java/com/app/Main.java (84%)
 copy surefire-its/src/test/resources/{modulepath => junit5-modulepath}/src/main/java/module-info.java (100%)
 copy surefire-its/src/test/resources/{modulepath => junit5-modulepath}/src/test/java/com/app/AppTest.java (90%)
 create mode 100644 surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/application/pom.xml
 copy maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/DataZT1A.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/application/src/main/java/module-info.java (86%)
 copy surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnitTestFailureListener.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/application/src/main/java/org/apache/failsafe/its/serviceloader/application/StudentServiceLoader.java (50%)
 copy surefire-api/src/test/java/org/apache/maven/surefire/api/util/ScanResultTest.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/application/src/main/java/org/apache/failsafe/its/serviceloader/application/TrainingApplication.java (53%)
 copy surefire-api/src/test/java/org/apache/maven/surefire/api/util/internal/ObjectUtilsTest.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/application/src/test/java/org/apache/failsafe/its/serviceloader/application/TrainingApplicationIT.java (65%)
 create mode 100644 surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/pom.xml
 copy surefire-its/src/test/resources/{fork-mode-multimodule/module-b => surefire-1993-jpms-providing-modules/studentservice-provider}/pom.xml (64%)
 copy surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/StackTraceFilter.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/studentservice-provider/src/main/java/module-info.java (80%)
 copy maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullFileReporter.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/studentservice-provider/src/main/java/org/apache/failsafe/its/serviceloader/provider/internal/InternalStudentService.java (61%)
 create mode 100644 surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/studentservice-provider/src/main/java/org/apache/failsafe/its/serviceloader/provider/service/StudentServiceImpl.java
 copy surefire-its/src/test/resources/{fork-mode-multimodule/module-a => surefire-1993-jpms-providing-modules/studentservice}/pom.xml (73%)
 copy surefire-its/src/test/resources/{maven-multimodule-project-with-jpms/com.foo.impl => surefire-1993-jpms-providing-modules/studentservice}/src/main/java/module-info.java (84%)
 copy surefire-its/src/test/resources/{surefire-1055-parallelTestCount/src/test/java/foo/Methods3Test.java => surefire-1993-jpms-providing-modules/studentservice/src/main/java/org/apache/failsafe/its/serviceloader/api/model/Student.java} (70%)
 copy surefire-grouper/src/main/java/org/apache/maven/surefire/group/match/GroupMatcher.java => surefire-its/src/test/resources/surefire-1993-jpms-providing-modules/studentservice/src/main/java/org/apache/failsafe/its/serviceloader/api/service/StudentService.java (71%)
 copy surefire-its/src/test/resources/{pojo-simple => surefire-2006-shadefire-transformers}/pom.xml (76%)
 copy surefire-its/src/test/resources/{failsafe-nofail/src/test/java/MyAT.java => surefire-2006-shadefire-transformers/src/test/java/PojoTest.java} (86%)
 rename surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/{JUnitTestSet.java => JUnitTestSetExecutor.java} (85%)
 rename surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/{PojoTestSet.java => PojoTestSetExecutor.java} (73%)
 rename surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/{SurefireTestSet.java => SurefireTestSetExecutor.java} (89%)
 delete mode 100644 surefire-providers/surefire-junit47/src/assembly/assembly.xml
 copy maven-failsafe-plugin/src/it/jetty-war-test-failing/invoker.properties => surefire-shadefire/src/main/resources/META-INF/services/org.apache.maven.shadefire.surefire.spi.MasterProcessChannelProcessorFactory (81%)
 copy maven-failsafe-plugin/src/it/multiple-summaries-failing/invoker.properties => surefire-shadefire/src/main/resources/META-INF/services/org.apache.maven.surefire.api.provider.SurefireProvider (93%)

[maven-surefire] 01/01: [SUREFIRE-1964] Support for method filtering on excludesFile and includesFile

Posted by ti...@apache.org.
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 <ti...@apache.org>
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" );
+    }
+}