Run single test after Gradle 4.7 update

This commit is contained in:
Nikolay Krasko
2018-06-15 17:58:58 +03:00
parent 960fba3c4e
commit ea3c4fd451
@@ -18,6 +18,7 @@ import org.junit.runner.notification.RunNotifier;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.jetbrains.kotlin.test.JUnit3RunnerWithInners.isTestMethod; import static org.jetbrains.kotlin.test.JUnit3RunnerWithInners.isTestMethod;
@@ -117,14 +118,30 @@ class JUnit3RunnerWithInnersForGradle extends Runner implements Filterable, Sort
} }
includePatternsField.setAccessible(true); includePatternsField.setAccessible(true);
@SuppressWarnings("unchecked") ArrayList<Pattern> includePatterns = @SuppressWarnings("unchecked") List<Object> includePatterns =
(ArrayList<Pattern>) includePatternsField.get(testSelectionMatcher); (ArrayList<Object>) includePatternsField.get(testSelectionMatcher);
if (includePatterns.size() != 1) { if (includePatterns.size() != 1) {
return null; return null;
} }
Pattern pattern = includePatterns.get(0); Object patternStorage = includePatterns.get(0);
Pattern pattern;
if (patternStorage instanceof Pattern) {
pattern = (Pattern) patternStorage;
} else {
try {
// TestSelectionMatcher.TestPattern is used since Gradle 4.7
Field patternField = patternStorage.getClass().getDeclaredField("pattern");
patternField.setAccessible(true);
pattern = (Pattern) patternField.get(patternStorage);
}
catch (NoSuchFieldException exception) {
return null;
}
}
String patternStr = pattern.pattern(); String patternStr = pattern.pattern();
if (patternStr.endsWith("*")) { if (patternStr.endsWith("*")) {