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: