testng: allow classes with single string param constructor (IDEA-174878)

This commit is contained in:
Anna Kozlova
2017-06-23 22:18:21 +03:00
parent 4565b4d3a7
commit 861b8a0e58
2 changed files with 20 additions and 5 deletions
@@ -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;
}
@@ -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 =