mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
junit 5: discover test by method name with parameter types
This commit is contained in:
+3
-3
@@ -54,14 +54,14 @@ public abstract class AbstractAddToTestsPatternAction<T extends ModuleBasedConfi
|
||||
if (patternConfigurations.size() == 1) {
|
||||
final T configuration = patternConfigurations.get(0);
|
||||
for (PsiElement aClass : classes) {
|
||||
getPatterns(configuration).add(AbstractPatternBasedConfigurationProducer.getQName(aClass));
|
||||
getPatterns(configuration).add(getPatternBasedProducer().getQName(aClass));
|
||||
}
|
||||
} else {
|
||||
JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<T>("Choose suite to add", patternConfigurations) {
|
||||
@Override
|
||||
public PopupStep onChosen(T configuration, boolean finalChoice) {
|
||||
for (PsiElement aClass : classes) {
|
||||
getPatterns(configuration).add(AbstractPatternBasedConfigurationProducer.getQName(aClass));
|
||||
getPatterns(configuration).add(getPatternBasedProducer().getQName(aClass));
|
||||
}
|
||||
return FINAL_CHOICE;
|
||||
}
|
||||
@@ -110,7 +110,7 @@ public abstract class AbstractAddToTestsPatternAction<T extends ModuleBasedConfi
|
||||
for (RunConfiguration configuration : configurations) {
|
||||
if (isPatternBasedConfiguration((T)configuration)) {
|
||||
if (foundClasses.size() > 1 ||
|
||||
!getPatterns((T)configuration).contains(AbstractPatternBasedConfigurationProducer.getQName(foundClasses.iterator().next()))) {
|
||||
!getPatterns((T)configuration).contains(getPatternBasedProducer().getQName(foundClasses.iterator().next()))) {
|
||||
foundConfigurations.add((T)configuration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ public class JUnitUtil {
|
||||
private static final Collection<String> TEST_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST_ANNOTATION,
|
||||
TEST5_ANNOTATION,
|
||||
TEST5_FACTORY_ANNOTATION));
|
||||
private static final Collection<String> TEST5_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION));
|
||||
public static final Collection<String> TEST5_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION));
|
||||
|
||||
private static final List<String> INSTANCE_CONFIGS = Arrays.asList(BEFORE_ANNOTATION_NAME, AFTER_ANNOTATION_NAME);
|
||||
private static final List<String> INSTANCE_5_CONFIGS = Arrays.asList(BEFORE_EACH_ANNOTATION_NAME, AFTER_EACH_ANNOTATION_NAME);
|
||||
|
||||
+8
-4
@@ -222,7 +222,7 @@ public abstract class AbstractPatternBasedConfigurationProducer<T extends Module
|
||||
return classes.size() > 1;
|
||||
}
|
||||
|
||||
private static PsiElement[] collectLocationElements(LinkedHashSet<String> classes, DataContext dataContext) {
|
||||
private PsiElement[] collectLocationElements(LinkedHashSet<String> classes, DataContext dataContext) {
|
||||
final Location<?>[] locations = Location.DATA_KEYS.getData(dataContext);
|
||||
if (locations != null) {
|
||||
List<PsiElement> elements = new ArrayList<>();
|
||||
@@ -238,11 +238,11 @@ public abstract class AbstractPatternBasedConfigurationProducer<T extends Module
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getQName(PsiElement psiMember) {
|
||||
public String getQName(PsiElement psiMember) {
|
||||
return getQName(psiMember, null);
|
||||
}
|
||||
|
||||
public static String getQName(PsiElement psiMember, Location location) {
|
||||
public String getQName(PsiElement psiMember, Location location) {
|
||||
if (psiMember instanceof PsiClass) {
|
||||
return ClassUtil.getJVMClassName((PsiClass)psiMember);
|
||||
}
|
||||
@@ -252,11 +252,15 @@ public abstract class AbstractPatternBasedConfigurationProducer<T extends Module
|
||||
: location instanceof PsiMemberParameterizedLocation ? ((PsiMemberParameterizedLocation)location).getContainingClass()
|
||||
: ((PsiMember)psiMember).getContainingClass();
|
||||
assert containingClass != null;
|
||||
return ClassUtil.getJVMClassName(containingClass) + "," + ((PsiMember)psiMember).getName();
|
||||
return ClassUtil.getJVMClassName(containingClass) + "," + getMethodPresentation((PsiMember)psiMember);
|
||||
} else if (psiMember instanceof PsiPackage) {
|
||||
return ((PsiPackage)psiMember).getQualifiedName();
|
||||
}
|
||||
assert false;
|
||||
return null;
|
||||
}
|
||||
|
||||
protected String getMethodPresentation(PsiMember psiMember) {
|
||||
return psiMember.getName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.intellij.execution.junit;
|
||||
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.diagnostic.logging.LogConfigurationPanel;
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.actions.RunConfigurationProducer;
|
||||
@@ -42,6 +43,8 @@ import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiFormatUtilBase;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementListener;
|
||||
import com.intellij.rt.execution.junit.RepeatCount;
|
||||
import org.jdom.Element;
|
||||
@@ -452,7 +455,7 @@ public class JUnitConfiguration extends JavaTestConfigurationBase {
|
||||
final LinkedHashSet<String> patterns = new LinkedHashSet<>();
|
||||
final String methodSufiix;
|
||||
if (method != null) {
|
||||
myData.METHOD_NAME = method.getName();
|
||||
myData.METHOD_NAME = Data.getMethodPresentation(method);
|
||||
methodSufiix = "," + myData.METHOD_NAME;
|
||||
} else {
|
||||
methodSufiix = "";
|
||||
@@ -602,11 +605,19 @@ public class JUnitConfiguration extends JavaTestConfigurationBase {
|
||||
|
||||
public Module setTestMethod(final Location<PsiMethod> methodLocation) {
|
||||
final PsiMethod method = methodLocation.getPsiElement();
|
||||
METHOD_NAME = method.getName();
|
||||
METHOD_NAME = getMethodPresentation(method);
|
||||
TEST_OBJECT = TEST_METHOD;
|
||||
return setMainClass(methodLocation instanceof MethodLocation ? ((MethodLocation)methodLocation).getContainingClass() : method.getContainingClass());
|
||||
}
|
||||
|
||||
public static String getMethodPresentation(PsiMethod method) {
|
||||
return method.getParameterList().getParametersCount() > 0 && AnnotationUtil.isAnnotated(method, JUnitUtil.TEST5_ANNOTATIONS)
|
||||
? PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY,
|
||||
PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS,
|
||||
PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_FQ_CLASS_NAMES)
|
||||
: method.getName();
|
||||
}
|
||||
|
||||
public String getGeneratedName(final JavaRunConfigurationModule configurationModule) {
|
||||
if (TEST_PACKAGE.equals(TEST_OBJECT) || TEST_DIRECTORY.equals(TEST_OBJECT)) {
|
||||
final String moduleName = TEST_SEARCH_SCOPE.getScope() == TestSearchScope.WHOLE_PROJECT ? "" : configurationModule.getModuleName();
|
||||
@@ -625,8 +636,8 @@ public class JUnitConfiguration extends JavaTestConfigurationBase {
|
||||
if (TEST_PATTERN.equals(TEST_OBJECT)) {
|
||||
final int size = myPattern.size();
|
||||
if (size == 0) return "Temp suite";
|
||||
final String fqName = myPattern.iterator().next();
|
||||
return (fqName.contains("*") ? fqName : StringUtil.getShortName(fqName)) + (size > 1 ? " and " + (size - 1) + " more" : "");
|
||||
String fqName = myPattern.iterator().next();
|
||||
return (fqName.contains("*") ? fqName : StringUtil.getShortName(StringUtil.getPackageName(fqName, ','))) + (size > 1 ? " and " + (size - 1) + " more" : "");
|
||||
}
|
||||
if (TEST_CATEGORY.equals(TEST_OBJECT)) {
|
||||
return "@Category(" + (StringUtil.isEmpty(CATEGORY_NAME) ? "Invalid" : CATEGORY_NAME) + ")";
|
||||
|
||||
@@ -25,6 +25,8 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiMember;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
@@ -44,6 +46,12 @@ public class PatternConfigurationProducer extends AbstractPatternBasedConfigurat
|
||||
return JUnitUtil.getTestMethod(psiElement, checkAbstract) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMethodPresentation(PsiMember psiMember) {
|
||||
return psiMember instanceof PsiMethod ? JUnitConfiguration.Data.getMethodPresentation((PsiMethod)psiMember)
|
||||
: super.getMethodPresentation(psiMember);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
|
||||
return !other.isProducedBy(TestMethodConfigurationProducer.class);
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.intellij.junit5;
|
||||
|
||||
import com.intellij.codeInsight.TestFrameworks;
|
||||
import com.intellij.execution.junit.JUnit5Framework;
|
||||
import com.intellij.execution.junit.JUnitConfiguration;
|
||||
import com.intellij.execution.junit.JUnitUtil;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
@@ -25,10 +26,17 @@ import com.intellij.testFramework.TestRunnerUtil;
|
||||
import com.intellij.testFramework.fixtures.*;
|
||||
import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl;
|
||||
import com.intellij.testIntegration.TestFramework;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
@@ -80,4 +88,23 @@ class JUnit5AcceptanceTest {
|
||||
assertTrue(framework instanceof JUnit5Framework, framework.getName());
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void methodPresentations() {
|
||||
TestRunnerUtil.replaceIdeEventQueueSafely();
|
||||
EdtTestUtil.runInEdtAndWait(() -> {
|
||||
PsiClass aClass = myFixture.addClass("class MyTest {" +
|
||||
" @org.junit.jupiter.api.Test void method() {}" +
|
||||
" @org.junit.jupiter.api.Test void method(a.TestInfo info) {}" +
|
||||
" @org.junit.Test void method1() {}" +
|
||||
" @org.junit.Test void method1(a.TestInfo info) {}" +
|
||||
"}");
|
||||
assertNotNull(aClass);
|
||||
|
||||
Stream<String> expectedData = Arrays.stream(new String[]{"method", "method(a.TestInfo)", "method1", "method1"});
|
||||
StreamEx.of(aClass.getMethods())
|
||||
.zipWith(expectedData)
|
||||
.forEach(e -> assertEquals(e.getValue(), JUnitConfiguration.Data.getMethodPresentation(e.getKey())));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user