From 861b8a0e58e5dbbf7d59789a4c8cda1661ff88e2 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 23 Jun 2017 22:12:39 +0300 Subject: [PATCH] testng: allow classes with single string param constructor (IDEA-174878) --- .../testng/model/TestClassFilter.java | 12 +++++++----- .../configuration/DetectClassesToRunTest.java | 13 +++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java index 83972ae6c9e1..b3c113c9dba3 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java @@ -20,8 +20,10 @@ import com.intellij.execution.configurations.ConfigurationUtil; import com.intellij.ide.util.ClassFilter; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.project.Project; +import com.intellij.psi.CommonClassNames; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiParameter; import com.intellij.psi.search.GlobalSearchScope; import com.theoryinpractice.testng.util.TestNGUtil; @@ -74,11 +76,11 @@ public class TestClassFilter implements ClassFilter.ClassFilterWithScope if (constructors.length > 0) { boolean canBeInstantiated = false; for (PsiMethod constructor : constructors) { - if (constructor.getParameterList().getParametersCount() == 0) { - canBeInstantiated = true; - break; - } - if (AnnotationUtil.isAnnotated(constructor, Arrays.asList(GUICE_INJECTION, FACTORY_INJECTION), true)) { + PsiParameter[] parameters = constructor.getParameterList().getParameters(); + if (parameters.length == 0 || + AnnotationUtil.isAnnotated(constructor, Arrays.asList(GUICE_INJECTION, FACTORY_INJECTION), true) || + parameters.length == 1 && parameters[0].getType().equalsToText(CommonClassNames.JAVA_LANG_STRING) + ) { canBeInstantiated = true; break; } diff --git a/plugins/testng/testSources/com/theoryinpractice/testng/configuration/DetectClassesToRunTest.java b/plugins/testng/testSources/com/theoryinpractice/testng/configuration/DetectClassesToRunTest.java index a7374415fe50..68c30d0b23c8 100644 --- a/plugins/testng/testSources/com/theoryinpractice/testng/configuration/DetectClassesToRunTest.java +++ b/plugins/testng/testSources/com/theoryinpractice/testng/configuration/DetectClassesToRunTest.java @@ -19,11 +19,13 @@ import com.intellij.execution.CantRunException; import com.intellij.execution.testframework.JavaTestLocator; import com.intellij.execution.testframework.TestSearchScope; import com.intellij.execution.testframework.sm.runner.SMTestProxy; +import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import com.theoryinpractice.testng.TestNGFramework; +import com.theoryinpractice.testng.model.TestClassFilter; import com.theoryinpractice.testng.model.TestData; import com.theoryinpractice.testng.model.TestNGTestObject; import com.theoryinpractice.testng.model.TestType; @@ -86,6 +88,17 @@ public class DetectClassesToRunTest extends LightCodeInsightFixtureTestCase { PsiClass aClass = myFixture.addClass("package a; @org.testng.annotations.Test public class MyTestClass {void testOne(){}}"); assertFalse(new TestNGFramework().isTestMethod(aClass.getMethods()[0], false)); } + + public void testClassWithSingleParameterConstructor() { + PsiClass aClass = myFixture.addClass("package a; @org.testng.annotations.Test " + + "public class MyTestClass {" + + "public MyTetClass(String defaultName){}\n" + + " public void testOne(){}" + + "}"); + Project project = getProject(); + TestClassFilter classFilter = new TestClassFilter(GlobalSearchScope.projectScope(project), project, false, true); + assertTrue(classFilter.isAccepted(aClass)); + } public void testOneMethodWithDependencies() throws Exception { final PsiClass aClass =