mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 06:39:38 +07:00
[java] Fix run line marker for JUnit tests with Gradle config
#IDEA-353722 Fixed GitOrigin-RevId: b85f9a3ec7a15e4f72c5a0ae8ddce371e32b22f0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f39d73fa4d
commit
0be55e2dc4
@@ -21,9 +21,12 @@ import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.util.ClassUtil;
|
||||
import com.intellij.psi.util.PsiMethodUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
*/
|
||||
@@ -40,7 +43,11 @@ public class TestRunLineMarkerProvider extends RunLineMarkerContributor implemen
|
||||
if (!isTestClass(psiClass)) return null;
|
||||
String url = "java:suite://" + ClassUtil.getJVMClassName(psiClass);
|
||||
TestStateStorage.Record state = TestStateStorage.getInstance(e.getProject()).getState(url);
|
||||
if (isIgnoredForGradleConfiguration(psiClass, null)) return null;
|
||||
if (isGradleConfiguration(psiClass)) {
|
||||
List<PsiMethod> testMethods =
|
||||
ContainerUtil.filter(psiClass.getAllMethods(), method -> TestFrameworks.getInstance().isTestMethod(method));
|
||||
if (ContainerUtil.all(testMethods, method -> isIgnoredForGradleConfiguration(psiClass, method))) return null;
|
||||
}
|
||||
return getInfo(state, true, PsiMethodUtil.findMainInClass(psiClass) != null ? 1 : 0);
|
||||
}
|
||||
if (element instanceof PsiMethod psiMethod) {
|
||||
@@ -55,22 +62,29 @@ public class TestRunLineMarkerProvider extends RunLineMarkerContributor implemen
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean isIgnoredForGradleConfiguration(@Nullable PsiClass psiClass, @Nullable PsiMethod psiMethod) {
|
||||
if (psiClass == null) return false;
|
||||
RunnerAndConfigurationSettings currentConfiguration = RunManager.getInstance(psiClass.getProject()).getSelectedConfiguration();
|
||||
if (currentConfiguration == null) return false;
|
||||
ConfigurationType configurationType = currentConfiguration.getType();
|
||||
if (!configurationType.getId().equals("GradleRunConfiguration")) return false;
|
||||
/**
|
||||
* Gradle can't run ignored methods while IDEA runner can, so when using a Gradle configuration, we don't want to show the line marker for
|
||||
* ignored methods.
|
||||
*/
|
||||
private static boolean isIgnoredForGradleConfiguration(@NotNull PsiClass psiClass, @NotNull PsiMethod psiMethod) {
|
||||
if (!isGradleConfiguration(psiClass)) return false;
|
||||
//now gradle doesn't support dumb mode
|
||||
if (DumbService.getInstance(psiClass.getProject()).isDumb()) return true;
|
||||
for (TestFramework testFramework : TestFramework.EXTENSION_NAME.getExtensionList()) {
|
||||
if (testFramework.isTestClass(psiClass) && (psiMethod == null || testFramework.isIgnoredMethod(psiMethod))) {
|
||||
if (testFramework.isTestClass(psiClass) && testFramework.isIgnoredMethod(psiMethod)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isGradleConfiguration(@NotNull PsiClass psiClass) {
|
||||
RunnerAndConfigurationSettings currentConfiguration = RunManager.getInstance(psiClass.getProject()).getSelectedConfiguration();
|
||||
if (currentConfiguration == null) return false;
|
||||
ConfigurationType configurationType = currentConfiguration.getType();
|
||||
return configurationType.getId().equals("GradleRunConfiguration");
|
||||
}
|
||||
|
||||
private static boolean isTestClass(PsiClass clazz) {
|
||||
if (clazz == null) return false;
|
||||
try {
|
||||
|
||||
@@ -104,14 +104,78 @@ public class TestRunLineMarkerTest extends LineMarkerTestCase {
|
||||
}
|
||||
|
||||
public void testDisabledTestMethodWithGradleConfiguration() {
|
||||
doTestWithDisabledAnnotation(new MockGradleRunConfiguration(myFixture.getProject(), "DisabledMethodTest"), 0);
|
||||
doTestWithDisabledAnnotation(new MockGradleRunConfiguration(myFixture.getProject(), "DisabledMethodTest"), 0, """
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class DisabledMethodTest {
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDisabled<caret>() {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
public void testDisabledTestMethodWithJunitConfiguration() {
|
||||
doTestWithDisabledAnnotation(new JUnitConfiguration("DisabledMethodTest", myFixture.getProject()), 1);
|
||||
doTestWithDisabledAnnotation(new JUnitConfiguration("DisabledMethodTest", myFixture.getProject()), 1, """
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class DisabledMethodTest {
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDisabled<caret>() {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
private void doTestWithDisabledAnnotation(RunConfiguration configuration, int marksCount) {
|
||||
public void testDisabledTestClassWithGradleConfiguration() {
|
||||
doTestWithDisabledAnnotation(new MockGradleRunConfiguration(myFixture.getProject(), "DisabledMethodTest"), 0, """
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class Disabled<caret>MethodTest {
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDisabled() {}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testAlsoDisabled() {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
public void testDisabledTestClassWithNonDisabledTestGradleConfiguration() {
|
||||
doTestWithDisabledAnnotation(new MockGradleRunConfiguration(myFixture.getProject(), "DisabledMethodTest"), 1, """
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class Disabled<caret>MethodTest {
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDisabled() {}
|
||||
|
||||
@Test
|
||||
public void testNotDisabled() {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
public void testDisabledTestClassWithJunitConfiguration() {
|
||||
doTestWithDisabledAnnotation(new JUnitConfiguration("DisabledMethodTest", myFixture.getProject()), 1, """
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class Disabled<caret>MethodTest {
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDisabled() {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
private void doTestWithDisabledAnnotation(RunConfiguration configuration, int marksCount, String testClass) {
|
||||
JUnit5TestFrameworkSetupUtil.setupJUnit5Library(myFixture);
|
||||
myFixture.addClass("package org.junit.jupiter.api; public @interface Disabled {}");
|
||||
|
||||
@@ -122,15 +186,7 @@ public class TestRunLineMarkerTest extends LineMarkerTestCase {
|
||||
myTempSettings.add(runnerAndConfigurationSettings);
|
||||
manager.setSelectedConfiguration(runnerAndConfigurationSettings);
|
||||
|
||||
myFixture.configureByText("DisabledMethodTest.java", """
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
class DisabledMethodTest {
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDisabled<caret>() {}
|
||||
}
|
||||
""");
|
||||
myFixture.configureByText("DisabledMethodTest.java", testClass);
|
||||
List<GutterMark> marks = myFixture.findGuttersAtCaret();
|
||||
assertEquals(marksCount, marks.size());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user