junit: make it possible to start pattern configuration with parameter from @Parameterized (IDEA-144608)

This commit is contained in:
Anna Kozlova
2015-09-01 16:30:48 +03:00
parent 7afe375c69
commit d7f75583f9
7 changed files with 47 additions and 16 deletions
@@ -21,6 +21,7 @@ import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.execution.junit.JavaRunConfigurationProducerBase;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
@@ -193,7 +194,9 @@ public abstract class AbstractPatternBasedConfigurationProducer<T extends Module
}
else if (psiMember instanceof PsiMember) {
final PsiClass containingClass = location instanceof MethodLocation
? ((MethodLocation)location).getContainingClass(): ((PsiMember)psiMember).getContainingClass();
? ((MethodLocation)location).getContainingClass()
: location instanceof PsiMemberParameterizedLocation ? ((PsiMemberParameterizedLocation)location).getContainingClass()
: ((PsiMember)psiMember).getContainingClass();
assert containingClass != null;
return ClassUtil.getJVMClassName(containingClass) + "," + ((PsiMember)psiMember).getName();
} else if (psiMember instanceof PsiPackage) {
@@ -16,6 +16,9 @@
package com.intellij.execution.junit;
import com.intellij.execution.Location;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
@@ -61,6 +64,13 @@ public class PatternConfigurationProducer extends AbstractPatternBasedConfigurat
data.TEST_OBJECT = JUnitConfiguration.TEST_PATTERN;
data.setScope(setupPackageConfiguration(context, configuration, data.getScope()));
configuration.setGeneratedName();
final Location contextLocation = context.getLocation();
if (contextLocation instanceof PsiMemberParameterizedLocation) {
final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName();
if (paramSetName != null) {
configuration.setProgramParameters(paramSetName);
}
}
return true;
}
@@ -44,7 +44,7 @@ public class JUnit4TestRunnerUtil {
*/
private static final ResourceBundle ourBundle = ResourceBundle.getBundle("RuntimeBundle");
public static Request buildRequest(String[] suiteClassNames, String name, boolean notForked) {
public static Request buildRequest(String[] suiteClassNames, final String name, boolean notForked) {
if (suiteClassNames.length == 0) {
return null;
}
@@ -101,7 +101,15 @@ public class JUnit4TestRunnerUtil {
public boolean shouldRun(Description description) {
if (description.isTest()) {
final Set methods = (Set)classMethods.get(JUnit4ReflectionUtil.getClassName(description));
return methods == null || methods.contains(JUnit4ReflectionUtil.getMethodName(description));
if (methods == null) {
return true;
}
String methodName = JUnit4ReflectionUtil.getMethodName(description);
if (methods.contains(methodName)) {
return true;
}
return name != null && methodName.endsWith(name) &&
methods.contains(methodName.substring(0, methodName.length() - name.length()));
}
return true;
}
@@ -71,6 +71,15 @@ public abstract class TestNGConfigurationProducer extends JavaRunConfigurationPr
}
return false;
}
public static void setupConfigurationParamName(TestNGConfiguration configuration, Location contextLocation) {
if (contextLocation instanceof PsiMemberParameterizedLocation) {
final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName();
if (paramSetName != null) {
configuration.setProgramParameters(getInvocationNumber(paramSetName));
}
}
}
public static String getInvocationNumber(String str) {
return StringUtil.trimEnd(StringUtil.trimStart(str, "["), "]");
@@ -27,7 +27,6 @@ import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.junit.InheritorChooser;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
@@ -103,12 +102,7 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu
}
final Location contextLocation = context.getLocation();
if (contextLocation instanceof PsiMemberParameterizedLocation) {
final String paramSetName = getInvocationNumber(((PsiMemberParameterizedLocation)contextLocation).getParamSetName());
if (paramSetName != null) {
configuration.setProgramParameters(paramSetName);
}
}
setupConfigurationParamName(configuration, contextLocation);
PsiClass psiClass = null;
PsiElement element = context.getPsiLocation();
@@ -20,6 +20,8 @@
*/
package com.theoryinpractice.testng.configuration;
import com.intellij.execution.Location;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.openapi.module.Module;
@@ -65,6 +67,7 @@ public class TestNGPatternConfigurationProducer extends AbstractPatternBasedConf
data.TEST_OBJECT = TestType.PATTERN.getType();
data.setScope(setupPackageConfiguration(context, configuration, data.getScope()));
configuration.setGeneratedName();
TestNGConfigurationProducer.setupConfigurationParamName(configuration, context.getLocation());
return true;
}
@@ -113,14 +113,18 @@ public class RerunFailedTestsAction extends JavaRerunFailedTestsAction {
if (strings == null || strings.isEmpty()) {
strings = new ArrayList<String>();
}
if (location instanceof PsiMemberParameterizedLocation) {
final String paramSetName = ((PsiMemberParameterizedLocation)location).getParamSetName();
if (paramSetName != null) {
strings.add(TestNGConfigurationProducer.getInvocationNumber(paramSetName));
}
}
setupParameterName(location, strings);
psiMethods.put(psiMethod, strings);
}
}
}
private static void setupParameterName(Location location, List<String> strings) {
if (location instanceof PsiMemberParameterizedLocation) {
final String paramSetName = ((PsiMemberParameterizedLocation)location).getParamSetName();
if (paramSetName != null) {
strings.add(TestNGConfigurationProducer.getInvocationNumber(paramSetName));
}
}
}
}