diff --git a/java/execution/impl/src/com/intellij/execution/actions/AbstractAddToTestsPatternAction.java b/java/execution/impl/src/com/intellij/execution/actions/AbstractAddToTestsPatternAction.java index 73b4bf3a8889..1952363efa2d 100644 --- a/java/execution/impl/src/com/intellij/execution/actions/AbstractAddToTestsPatternAction.java +++ b/java/execution/impl/src/com/intellij/execution/actions/AbstractAddToTestsPatternAction.java @@ -54,14 +54,14 @@ public abstract class AbstractAddToTestsPatternAction("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 1 || - !getPatterns((T)configuration).contains(AbstractPatternBasedConfigurationProducer.getQName(foundClasses.iterator().next()))) { + !getPatterns((T)configuration).contains(getPatternBasedProducer().getQName(foundClasses.iterator().next()))) { foundConfigurations.add((T)configuration); } } diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java index 4208ac921e63..5da776039800 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -66,7 +66,7 @@ public class JUnitUtil { private static final Collection TEST_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST_ANNOTATION, TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION)); -private static final Collection TEST5_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION)); + public static final Collection TEST5_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION)); private static final List INSTANCE_CONFIGS = Arrays.asList(BEFORE_ANNOTATION_NAME, AFTER_ANNOTATION_NAME); private static final List INSTANCE_5_CONFIGS = Arrays.asList(BEFORE_EACH_ANNOTATION_NAME, AFTER_EACH_ANNOTATION_NAME); diff --git a/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java index bee7e6c58387..189f80bb6ed1 100644 --- a/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java @@ -222,7 +222,7 @@ public abstract class AbstractPatternBasedConfigurationProducer 1; } - private static PsiElement[] collectLocationElements(LinkedHashSet classes, DataContext dataContext) { + private PsiElement[] collectLocationElements(LinkedHashSet classes, DataContext dataContext) { final Location[] locations = Location.DATA_KEYS.getData(dataContext); if (locations != null) { List elements = new ArrayList<>(); @@ -238,11 +238,11 @@ public abstract class AbstractPatternBasedConfigurationProducer 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 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) + ")"; diff --git a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java index 102b0fa977e0..b3bf3013b197 100644 --- a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java @@ -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); diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java index 1fd2fe5f59ff..4639756cc8ca 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java @@ -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 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()))); + }); + } }