mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[junit 5] avoid MethodSelector when the corresponding javaMethod doesn't exist (IDEA-284245)
GitOrigin-RevId: f3624b5d74489fd41ead9ee6b3a7c1f3fc8e9360
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0daaee3a96
commit
baf9b751bf
@@ -3,8 +3,13 @@ package com.intellij.junit5;
|
||||
|
||||
import org.junit.platform.commons.util.AnnotationUtils;
|
||||
import org.junit.platform.engine.DiscoverySelector;
|
||||
import org.junit.platform.engine.FilterResult;
|
||||
import org.junit.platform.engine.TestDescriptor;
|
||||
import org.junit.platform.engine.TestSource;
|
||||
import org.junit.platform.engine.discovery.*;
|
||||
import org.junit.platform.engine.support.descriptor.MethodSource;
|
||||
import org.junit.platform.launcher.LauncherDiscoveryRequest;
|
||||
import org.junit.platform.launcher.PostDiscoveryFilter;
|
||||
import org.junit.platform.launcher.TagFilter;
|
||||
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
|
||||
|
||||
@@ -71,14 +76,23 @@ public class JUnit5TestRunnerUtil {
|
||||
selectors.add(selector);
|
||||
}
|
||||
}
|
||||
if (hasBrokenSelector(selectors)) {
|
||||
builder.filters(createMethodFilter(new ArrayList<>(selectors)));
|
||||
for (int i = 0; i < selectors.size(); i++) {
|
||||
DiscoverySelector selector = selectors.get(i);
|
||||
if (selector instanceof MethodSelector) {
|
||||
selectors.set(i, DiscoverySelectors.selectClass(((MethodSelector)selector).getClassName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
packageNameRef[0] = packageName.length() == 0 ? "<default package>" : packageName;
|
||||
if (selectors.isEmpty()) {
|
||||
builder = builder.selectors(DiscoverySelectors.selectPackage(packageName));
|
||||
builder.selectors(DiscoverySelectors.selectPackage(packageName));
|
||||
}
|
||||
else {
|
||||
builder = builder.selectors(selectors);
|
||||
builder.selectors(selectors);
|
||||
if (!packageName.isEmpty()) {
|
||||
builder = builder.filters(PackageNameFilter.includePackageNames(packageName));
|
||||
builder.filters(PackageNameFilter.includePackageNames(packageName));
|
||||
}
|
||||
}
|
||||
if (filters != null && !filters.isEmpty()) {
|
||||
@@ -93,11 +107,10 @@ public class JUnit5TestRunnerUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
builder = builder.filters(ClassNameFilter.includeClassNamePatterns(classNames));
|
||||
builder.filters(ClassNameFilter.includeClassNamePatterns(classNames));
|
||||
}
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
builder = builder
|
||||
.filters(TagFilter.includeTags(tags.split(" ")));
|
||||
builder.filters(TagFilter.includeTags(tags.split(" ")));
|
||||
}
|
||||
return builder.filters(ClassNameFilter.excludeClassNamePatterns("com\\.intellij\\.rt.*", "com\\.intellij\\.junit3.*")).build();
|
||||
}
|
||||
@@ -117,6 +130,15 @@ public class JUnit5TestRunnerUtil {
|
||||
}
|
||||
|
||||
DiscoverySelector selector = createSelector(suiteClassNames[0], packageNameRef);
|
||||
if (selector instanceof MethodSelector) {
|
||||
try {
|
||||
((MethodSelector)selector).getJavaMethod();
|
||||
}
|
||||
catch (Throwable e) {
|
||||
builder.filters(createMethodFilter(Collections.singletonList(selector)));
|
||||
selector = DiscoverySelectors.selectClass(((MethodSelector)selector).getClassName());
|
||||
}
|
||||
}
|
||||
assert selector != null : "selector by class name is never null";
|
||||
return builder.selectors(selector).build();
|
||||
}
|
||||
@@ -124,6 +146,54 @@ public class JUnit5TestRunnerUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean hasBrokenSelector(List<DiscoverySelector> selectors) {
|
||||
for (DiscoverySelector selector : selectors) {
|
||||
if (selector instanceof MethodSelector) {
|
||||
try {
|
||||
((MethodSelector)selector).getJavaMethod();
|
||||
}
|
||||
catch (Throwable e) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static PostDiscoveryFilter createMethodFilter(List<DiscoverySelector> selectors) {
|
||||
return new PostDiscoveryFilter() {
|
||||
@Override
|
||||
public FilterResult apply(TestDescriptor descriptor) {
|
||||
return FilterResult.includedIf(shouldRun(descriptor),
|
||||
() -> descriptor.getDisplayName() + " matches",
|
||||
() -> descriptor.getDisplayName() + " doesn't match");
|
||||
}
|
||||
|
||||
private boolean shouldRun(TestDescriptor descriptor) {
|
||||
TestSource source = descriptor.getSource().orElse(null);
|
||||
if (source instanceof MethodSource) {
|
||||
for (DiscoverySelector selector : selectors) {
|
||||
if (selector instanceof MethodSelector &&
|
||||
((MethodSelector)selector).getClassName().equals(((MethodSource)source).getClassName()) &&
|
||||
((MethodSelector)selector).getMethodName().equals(((MethodSource)source).getMethodName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (DiscoverySelector selector : selectors) {
|
||||
if (selector instanceof ClassSelector &&
|
||||
((ClassSelector)selector).getClassName().equals(((MethodSource)source).getClassName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static String getDisabledConditionValue(String name) {
|
||||
int commaIdx = name.indexOf(",");
|
||||
String className = name.substring(0, commaIdx < 0 ? name.length() : commaIdx);
|
||||
|
||||
Reference in New Issue
Block a user