From 9dbea5277917752834cd86d726703ac3afd01298 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 28 Apr 2017 15:49:06 +0200 Subject: [PATCH] junit 5: warn if repetitions is 0 or negative (IDEA-172093) --- .../JUnit5MalformedRepeatedTestInspection.kt | 13 +++++++++---- .../codeInsight/JUnit5MalformedRepeatedTest.java | 3 ++- .../codeInsight/malformedRepeated/Malformed.java | 6 +++--- .../malformedRepeated/PositiveRepetitions.java | 6 ++++++ 4 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 plugins/junit/testData/codeInsight/malformedRepeated/PositiveRepetitions.java diff --git a/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTestInspection.kt b/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTestInspection.kt index ccd7cebbccce..1794984b4b7e 100644 --- a/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTestInspection.kt +++ b/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTestInspection.kt @@ -22,12 +22,10 @@ import com.intellij.execution.junit.JUnitUtil import com.intellij.openapi.projectRoots.JavaSdkVersion import com.intellij.openapi.projectRoots.JavaVersionService import com.intellij.openapi.util.text.StringUtil -import com.intellij.psi.JavaElementVisitor -import com.intellij.psi.JavaPsiFacade -import com.intellij.psi.PsiElementVisitor -import com.intellij.psi.PsiMethod +import com.intellij.psi.* import com.siyeh.InspectionGadgetsBundle import com.siyeh.ig.junit.JUnitCommonClassNames +import com.siyeh.ig.psiutils.ExpressionUtils import org.jetbrains.annotations.Nls class JUnit5MalformedRepeatedTestInspection : BaseJavaBatchLocalInspectionTool() { @@ -55,6 +53,13 @@ class JUnit5MalformedRepeatedTestInspection : BaseJavaBatchLocalInspectionTool() holder.registerProblem(testAnno, "Suspicious combination @Test and @RepeatedTest", DeleteElementFix(testAnno)) } + val repeatedNumber = repeatedAnno.findDeclaredAttributeValue("value") + if (repeatedNumber is PsiExpression) { + val constant = ExpressionUtils.computeConstantExpression(repeatedNumber) + if (constant is Int && constant <= 0) { + holder.registerProblem(repeatedNumber, "The number of repetitions must be greater than zero") + } + } } else { val repetitionInfo = JavaPsiFacade.getInstance(holder.project).findClass(JUnitCommonClassNames.ORG_JUNIT_JUPITER_API_REPETITION_INFO, file.resolveScope) diff --git a/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTest.java b/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTest.java index 5476606a0de2..a7b321ab1d01 100644 --- a/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTest.java +++ b/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedRepeatedTest.java @@ -32,7 +32,7 @@ public class JUnit5MalformedRepeatedTest extends LightInspectionTestCase { protected void setUp() throws Exception { super.setUp(); addEnvironmentClass("package org.junit.jupiter.api;\n" + - "public @interface RepeatedTest {}"); + "public @interface RepeatedTest {int value(); }"); addEnvironmentClass("package org.junit.jupiter.api;\n" + "public @interface Test {}"); addEnvironmentClass("package org.junit.jupiter.api;\n" + @@ -44,6 +44,7 @@ public class JUnit5MalformedRepeatedTest extends LightInspectionTestCase { } public void testMalformed() { doTest(); } + public void testPositiveRepetitions() { doTest(); } @Override protected String getBasePath() { diff --git a/plugins/junit/testData/codeInsight/malformedRepeated/Malformed.java b/plugins/junit/testData/codeInsight/malformedRepeated/Malformed.java index c55342adce46..7a75fe770d4f 100644 --- a/plugins/junit/testData/codeInsight/malformedRepeated/Malformed.java +++ b/plugins/junit/testData/codeInsight/malformedRepeated/Malformed.java @@ -12,10 +12,10 @@ class WithRepeatedInfoAndTest { } class WithRepeated { - @RepeatedTest() + @RepeatedTest(1) void repeatedTestNoParams() { } - @RepeatedTest() + @RepeatedTest(1) void repeatedTestWithRepetitionInfo(RepetitionInfo repetitionInfo) { } @BeforeAll @@ -27,6 +27,6 @@ class WithRepeated { class WithRepeatedAndTests { @Test - @RepeatedTest() + @RepeatedTest(1) void repeatedTestAndTest() { } } diff --git a/plugins/junit/testData/codeInsight/malformedRepeated/PositiveRepetitions.java b/plugins/junit/testData/codeInsight/malformedRepeated/PositiveRepetitions.java new file mode 100644 index 000000000000..478cf08a5ee5 --- /dev/null +++ b/plugins/junit/testData/codeInsight/malformedRepeated/PositiveRepetitions.java @@ -0,0 +1,6 @@ +import org.junit.jupiter.api.*; + +class WithRepeated { + @RepeatedTest(-1) + void repeatedTestNoParams() { } +}