From 2d3312928a2a8f4f8b7beb702b279efc80ced309 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 14 Jun 2018 17:09:30 +0300 Subject: [PATCH] junit 5: malformed parameterized: check argumentsSources (IDEA-193925) --- .../src/com/siyeh/ig/junit/JUnitCommonClassNames.java | 4 +++- .../JUnit5MalformedParameterizedInspection.kt | 8 +++++++- .../codeInsight/JUnit5MalformedParameterizedTest.java | 5 +++++ .../malformedParameterized/MalformedSources.java | 10 ++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitCommonClassNames.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitCommonClassNames.java index b350fe1ca5f5..bec316f0d6f3 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitCommonClassNames.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/JUnitCommonClassNames.java @@ -37,12 +37,14 @@ public class JUnitCommonClassNames { public static final String ORG_JUNIT_JUPITER_PARAMS_PROVIDER_CSV_SOURCE = "org.junit.jupiter.params.provider.CsvSource"; public static final String ORG_JUNIT_JUPITER_PARAMS_PROVIDER_CSV_FILE_SOURCE = "org.junit.jupiter.params.provider.CsvFileSource"; public static final String ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCE = "org.junit.jupiter.params.provider.ArgumentsSource"; + public static final String ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCES = "org.junit.jupiter.params.provider.ArgumentsSources"; public static final Collection SOURCE_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList( ORG_JUNIT_JUPITER_PARAMS_PROVIDER_METHOD_SOURCE, ORG_JUNIT_JUPITER_PARAMS_VALUES_SOURCE, ORG_JUNIT_JUPITER_PARAMS_ENUM_SOURCE, ORG_JUNIT_JUPITER_PARAMS_PROVIDER_CSV_SOURCE, ORG_JUNIT_JUPITER_PARAMS_PROVIDER_CSV_FILE_SOURCE, - ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCE + ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCE, + ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCES )); public static final String ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS = "org.junit.jupiter.params.provider.Arguments"; public static final String ORG_JUNIT_JUPITER_PARAMS_CONVERTER_CONVERT_WITH = "org.junit.jupiter.params.converter.ConvertWith"; diff --git a/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedInspection.kt b/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedInspection.kt index 75f582655972..00a98e8e9429 100644 --- a/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedInspection.kt +++ b/plugins/junit/src/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedInspection.kt @@ -87,6 +87,12 @@ class JUnit5MalformedParameterizedInspection : AbstractBaseJavaLocalInspectionTo noMultiArgsProvider = false } } + JUnitCommonClassNames.ORG_JUNIT_JUPITER_PARAMS_PROVIDER_ARGUMENTS_SOURCES -> { + if (source == null) { + val attributes = it.findAttributeValue(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME) + noMultiArgsProvider = (attributes as? PsiArrayInitializerMemberValue)?.initializers?.isEmpty() ?: false + } + } } } @@ -323,7 +329,7 @@ class ChangeAnnotationFix(testAnnotation: PsiAnnotation, val targetAnnotation: S override fun getFamilyName(): String = "Replace annotation" override fun invoke(project: Project, file: PsiFile, editor: Editor?, startElement: PsiElement, endElement: PsiElement) { - val annotation = JavaPsiFacade.getElementFactory(project).createAnnotationFromText("@" + targetAnnotation, startElement) + val annotation = JavaPsiFacade.getElementFactory(project).createAnnotationFromText("@$targetAnnotation", startElement) JavaCodeStyleManager.getInstance(project).shortenClassReferences(startElement.replace(annotation)) } diff --git a/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedTest.java b/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedTest.java index 94c2677b68ad..0cf5ef8cd332 100644 --- a/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedTest.java +++ b/plugins/junit/test/com/intellij/execution/junit/codeInsight/JUnit5MalformedParameterizedTest.java @@ -67,6 +67,11 @@ public class JUnit5MalformedParameterizedTest extends LightInspectionTestCase { addEnvironmentClass("package org.junit.jupiter.params.provider;\n" + "public @interface ArgumentsSource {}"); + addEnvironmentClass("package org.junit.jupiter.params.provider;\n" + + "public @interface ArgumentsSources {\n" + + " ArgumentsSource[] value();\n" + + "}\n"); + addEnvironmentClass("package org.junit.jupiter.api;\n" + "public @interface TestInstance {\n" + "enum Lifecycle {PER_CLASS, PER_METHOD;}\n" + diff --git a/plugins/junit/testData/codeInsight/malformedParameterized/MalformedSources.java b/plugins/junit/testData/codeInsight/malformedParameterized/MalformedSources.java index 1150bf886fd6..afb0c7454072 100644 --- a/plugins/junit/testData/codeInsight/malformedParameterized/MalformedSources.java +++ b/plugins/junit/testData/codeInsight/malformedParameterized/MalformedSources.java @@ -84,4 +84,14 @@ class CustomArgProviderTest { @ParameterizedTest @CustomSource void jsonSourceTest(String param) { } +} + +class ArgSources { + @ParameterizedTest + @org.junit.jupiter.params.provider.ArgumentsSources({@org.junit.jupiter.params.provider.ArgumentsSource}) + void args(String param) { } + + @ParameterizedTest + @org.junit.jupiter.params.provider.ArgumentsSources({}) + void emptyArgs(String param) { } } \ No newline at end of file