From 918878ec4a5f5242066589a51fea741c8a269b96 Mon Sep 17 00:00:00 2001
From: Andreas Schmid <service@aaschmid.de>
Date: Fri, 14 Sep 2018 23:11:48 +0200
Subject: [PATCH] fix "rerun failing tests" Maven features if multiple test
 cases failed (#113)

Maven create a custom filter containing one or more valid test cases to
run. For one test case this works but for multiple test cases the
filter description contains an "OR". If this "OR" is found, the filter
request needs to be forwarded to the original `filter.shouldRun(...)`.

Signed-off-by: Andreas Schmid <service@aaschmid.de>
---
 build.gradle                                     |  2 +-
 .../junit/dataprovider/DataProviderFilter.java   |  6 ++++--
 .../dataprovider/DataProviderFilterTest.java     | 16 ++++++++++++++++
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/build.gradle b/build.gradle
index ea68880b..d2072e50 100644
--- a/build.gradle
+++ b/build.gradle
@@ -50,7 +50,7 @@ subprojects {
     apply plugin: 'osgi'
 
     group = 'com.tngtech.junit.dataprovider'
-    version = '2.3'
+    version = '2.4-SNAPSHOT'
 
     tasks.withType(JavaCompile) {
         options.encoding = 'UTF-8'
diff --git a/junit4/src/main/java/com/tngtech/java/junit/dataprovider/DataProviderFilter.java b/junit4/src/main/java/com/tngtech/java/junit/dataprovider/DataProviderFilter.java
index 910011f5..59998553 100644
--- a/junit4/src/main/java/com/tngtech/java/junit/dataprovider/DataProviderFilter.java
+++ b/junit4/src/main/java/com/tngtech/java/junit/dataprovider/DataProviderFilter.java
@@ -61,8 +61,10 @@ public DataProviderFilter(Filter filter) {
 
     @Override
     public boolean shouldRun(Description description) {
-        Matcher filterDescriptionMatcher = DESCRIPTION_PATTERN.matcher(filter.describe());
-        if (!filterDescriptionMatcher.find()) {
+        String filterDescription = filter.describe();
+
+        Matcher filterDescriptionMatcher = DESCRIPTION_PATTERN.matcher(filterDescription);
+        if (filterDescription.contains(" OR ") || !filterDescriptionMatcher.find()) {
             return filter.shouldRun(description);
         }
         String methodName = filterDescriptionMatcher.group(GROUP_METHOD_NAME);
diff --git a/junit4/src/test/java/com/tngtech/java/junit/dataprovider/DataProviderFilterTest.java b/junit4/src/test/java/com/tngtech/java/junit/dataprovider/DataProviderFilterTest.java
index 88f0af00..199dd476 100644
--- a/junit4/src/test/java/com/tngtech/java/junit/dataprovider/DataProviderFilterTest.java
+++ b/junit4/src/test/java/com/tngtech/java/junit/dataprovider/DataProviderFilterTest.java
@@ -71,6 +71,22 @@ public void testShouldRunShouldCallOriginalFilterShouldRunIfIsTestAndGivenDescri
         verifyNoMoreInteractions(filter);
     }
 
+    @Test
+    public void testShouldRunShouldCallOriginalFilterShouldRunIfGivenDescriptionContainsOr() {
+        // Given:
+        doReturn("Matching description Method failing1[0: 0](Test1) OR Method failing2[0: 0](Test2)").when(filter)
+                .describe();
+        Description description = setupDescription(true, "failing1[0: 0](Test1)");
+
+        // When:
+        underTest.shouldRun(description);
+
+        // Then:
+        verify(filter).describe();
+        verify(filter).shouldRun(description);
+        verifyNoMoreInteractions(filter);
+    }
+
     @Test
     public void testShouldRunShouldReturnFalseWhenDescriptionDoesNotHaveExpectedMethodName() {
         // Given: