testng U junit: delegation -> inheritance

This commit is contained in:
Anna Kozlova
2015-04-01 20:39:30 +02:00
parent 87afd9d285
commit e2bb7b8eb1
14 changed files with 70 additions and 73 deletions
@@ -15,10 +15,10 @@
*/
package com.intellij.execution;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
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.info.MethodLocation;
import com.intellij.execution.testframework.TestsUIUtil;
import com.intellij.openapi.actionSystem.CommonDataKeys;
@@ -35,10 +35,14 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public abstract class PatternConfigurationDelegate {
public abstract class PatternConfigurationDelegate<T extends ModuleBasedConfiguration> extends JavaRunConfigurationProducerBase<T> implements Cloneable{
protected abstract boolean isTestClass(PsiClass psiClass);
protected abstract boolean isTestMethod(boolean checkAbstract, PsiElement psiElement);
public PatternConfigurationDelegate(ConfigurationType configurationType) {
super(configurationType);
}
public Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set<String> patterns) {
return JavaExecutionUtil.findModule(contextModule, patterns, configuration.getProject(), new Condition<PsiClass>() {
@Override
@@ -190,12 +190,14 @@ public abstract class RunConfigurationProducer<T extends RunConfiguration> {
return RunManager.getInstance(context.getProject()).createRunConfiguration("", myConfigurationFactory);
}
public static RunConfigurationProducer getInstance(Class<? extends RunConfigurationProducer> aClass) {
@NotNull
public static <T extends RunConfigurationProducer> T getInstance(Class<? extends T> aClass) {
for (RunConfigurationProducer producer : Extensions.getExtensions(EP_NAME)) {
if (aClass.isInstance(producer)) {
return producer;
return (T)producer;
}
}
assert false : aClass;
return null;
}
}
@@ -64,7 +64,7 @@ public class TestClassGradleConfigurationProducer extends GradleTestRunConfigura
final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation);
if (location == null) return false;
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
PsiClass testClass = JUnitUtil.getTestClass(location);
@@ -99,7 +99,7 @@ public class TestClassGradleConfigurationProducer extends GradleTestRunConfigura
final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation);
if (location == null) return false;
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
@@ -55,7 +55,7 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur
protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
final Location contextLocation = context.getLocation();
@@ -82,7 +82,7 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur
if (configuration == null) return false;
if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false;
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
@@ -22,6 +22,7 @@ package com.intellij.execution.junit;
import com.intellij.execution.PatternConfigurationDelegate;
import com.intellij.execution.RunManager;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.project.Project;
@@ -41,7 +42,8 @@ public class AddToTestsPatternAction extends AnAction {
public void actionPerformed(AnActionEvent e) {
final DataContext dataContext = e.getDataContext();
final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
final Set<PsiElement> classes = PatternConfigurationProducer.collectTestMembers(psiElements, true);
final Set<PsiElement> classes = RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).collectTestMembers(psiElements,
true);
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
final List<JUnitConfiguration> patternConfigurations = collectPatternConfigurations(classes, project);
@@ -81,7 +83,7 @@ public class AddToTestsPatternAction extends AnAction {
final DataContext dataContext = e.getDataContext();
final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
if (psiElements != null) {
final Set<PsiElement> foundMembers = PatternConfigurationProducer.collectTestMembers(psiElements, true);
final Set<PsiElement> foundMembers = RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).collectTestMembers(psiElements, true);
if (foundMembers.isEmpty()) return;
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
if (project != null) {
@@ -18,6 +18,7 @@ package com.intellij.execution.junit;
import com.intellij.diagnostic.logging.LogConfigurationPanel;
import com.intellij.execution.*;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.configuration.EnvironmentVariablesComponent;
import com.intellij.execution.configurations.*;
import com.intellij.execution.executors.DefaultRunExecutor;
@@ -441,7 +442,8 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + methodSufiix);
}
myData.setPatterns(patterns);
final Module module = PatternConfigurationProducer.findModule(this, getConfigurationModule().getModule(), patterns);
final Module module = RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).findModule(this, getConfigurationModule()
.getModule(), patterns);
if (module == null) {
myData.setScope(TestSearchScope.WHOLE_PROJECT);
setModule(null);
@@ -22,6 +22,7 @@ import com.intellij.execution.RunManager;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.openapi.module.Module;
@@ -41,7 +42,7 @@ public abstract class JUnitConfigurationProducer extends JavaRunConfigurationPro
@Override
public boolean isConfigurationFromContext(JUnitConfiguration unitConfiguration, ConfigurationContext context) {
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
final RunConfiguration predefinedConfiguration = context.getOriginalConfiguration(JUnitConfigurationType.getInstance());
@@ -18,33 +18,43 @@ package com.intellij.execution.junit;
import com.intellij.execution.PatternConfigurationDelegate;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
import com.sun.media.sound.PCMtoPCMCodec;
import java.util.LinkedHashSet;
import java.util.Set;
public class PatternConfigurationProducer extends JUnitConfigurationProducer {
private static PatternConfigurationDelegate ourDelegate = new PatternConfigurationDelegate() {
@Override
protected boolean isTestClass(PsiClass psiClass) {
return JUnitUtil.isTestClass(psiClass);
}
public class PatternConfigurationProducer extends PatternConfigurationDelegate<JUnitConfiguration> {
protected PatternConfigurationProducer() {
super(JUnitConfigurationType.getInstance());
}
@Override
protected boolean isTestMethod(boolean checkAbstract, PsiElement psiElement) {
return JUnitUtil.getTestMethod(psiElement, checkAbstract) != null;
}
};
@Override
protected boolean isTestClass(PsiClass psiClass) {
return JUnitUtil.isTestClass(psiClass);
}
@Override
protected boolean isTestMethod(boolean checkAbstract, PsiElement psiElement) {
return JUnitUtil.getTestMethod(psiElement, checkAbstract) != null;
}
@Override
public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
return !other.isProducedBy(TestMethodConfigurationProducer.class);
}
@Override
protected boolean setupConfigurationFromContext(JUnitConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
final LinkedHashSet<String> classes = new LinkedHashSet<String>();
final PsiElement element = ourDelegate.checkPatterns(context, classes);
final PsiElement element = checkPatterns(context, classes);
if (element == null) {
return false;
}
@@ -68,20 +78,8 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer {
final TestObject testobject = unitConfiguration.getTestObject();
if (testobject instanceof TestsPattern) {
final Set<String> patterns = unitConfiguration.getPersistentData().getPatterns();
if (ourDelegate.isConfiguredFromContext(context, patterns)) return true;
if (isConfiguredFromContext(context, patterns)) return true;
}
return false;
}
public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set<String> patterns) {
return ourDelegate.findModule(configuration, contextModule, patterns);
}
public static boolean isMultipleElementsSelected(ConfigurationContext context) {
return ourDelegate.isMultipleElementsSelected(context);
}
public static Set<PsiElement> collectTestMembers(PsiElement[] elements, boolean checkAbstract) {
return ourDelegate.collectTestMembers(elements, checkAbstract);
}
}
@@ -20,6 +20,7 @@ import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Ref;
@@ -46,7 +47,7 @@ public class TestClassConfigurationProducer extends JUnitConfigurationProducer {
}
}
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
PsiClass testClass = JUnitUtil.getTestClass(location);
@@ -21,6 +21,7 @@ import com.intellij.execution.Location;
import com.intellij.execution.PsiLocation;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.openapi.module.Module;
@@ -38,7 +39,7 @@ public class TestMethodConfigurationProducer extends JUnitConfigurationProducer
protected boolean setupConfigurationFromContext(JUnitConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
final Location contextLocation = context.getLocation();
@@ -24,6 +24,7 @@ package com.theoryinpractice.testng.configuration;
import com.intellij.diagnostic.logging.LogConfigurationPanel;
import com.intellij.execution.*;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.configuration.EnvironmentVariablesComponent;
import com.intellij.execution.configurations.*;
import com.intellij.execution.junit.RefactoringListeners;
@@ -275,7 +276,8 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + suffix);
}
data.setPatterns(patterns);
final Module module = TestNGPatternConfigurationProducer.findModule(this, getConfigurationModule().getModule(), patterns);
final Module module = RunConfigurationProducer.getInstance(TestNGPatternConfigurationProducer.class)
.findModule(this, getConfigurationModule().getModule(), patterns);
if (module == null) {
data.setScope(TestSearchScope.WHOLE_PROJECT);
setModule(null);
@@ -44,7 +44,7 @@ public abstract class TestNGConfigurationProducer extends JavaRunConfigurationPr
@Override
public boolean isConfigurationFromContext(TestNGConfiguration testNGConfiguration, ConfigurationContext context) {
if (TestNGPatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(TestNGPatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
final RunConfiguration predefinedConfiguration = context.getOriginalConfiguration(TestNGConfigurationType.getInstance());
@@ -24,6 +24,7 @@ import com.intellij.execution.PsiLocation;
import com.intellij.execution.RunnerAndConfigurationSettings;
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.info.MethodLocation;
import com.intellij.openapi.module.Module;
@@ -95,7 +96,7 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu
protected boolean setupConfigurationFromContext(TestNGConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
if (TestNGPatternConfigurationProducer.isMultipleElementsSelected(context)) {
if (RunConfigurationProducer.getInstance(TestNGPatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
@@ -20,35 +20,27 @@
*/
package com.theoryinpractice.testng.configuration;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
import com.intellij.execution.PatternConfigurationDelegate;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.execution.testframework.TestsUIUtil;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifierListOwner;
import com.theoryinpractice.testng.model.TestData;
import com.theoryinpractice.testng.model.TestType;
import com.theoryinpractice.testng.util.TestNGUtil;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class TestNGPatternConfigurationProducer extends TestNGConfigurationProducer{
private static PatternConfigurationDelegate ourDelegate = new PatternConfigurationDelegate() {
@Override
public class TestNGPatternConfigurationProducer extends PatternConfigurationDelegate<TestNGConfiguration> {
public TestNGPatternConfigurationProducer() {
super(TestNGConfigurationType.getInstance());
}
@Override
protected boolean isTestClass(PsiClass psiClass) {
return TestNGUtil.hasTest(psiClass);
}
@@ -57,14 +49,13 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu
protected boolean isTestMethod(boolean checkAbstract, PsiElement psiElement) {
return psiElement instanceof PsiModifierListOwner && TestNGUtil.hasTest((PsiModifierListOwner)psiElement);
}
};
@Override
protected boolean setupConfigurationFromContext(TestNGConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
final LinkedHashSet<String> classes = new LinkedHashSet<String>();
final PsiElement element = ourDelegate.checkPatterns(context, classes);
final PsiElement element = checkPatterns(context, classes);
if (element == null) {
return false;
}
@@ -77,25 +68,17 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu
return true;
}
public static boolean isMultipleElementsSelected(ConfigurationContext context) {
return ourDelegate.isMultipleElementsSelected(context);
}
public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set<String> patterns) {
return ourDelegate.findModule(configuration, contextModule, patterns);
}
@Override
protected Module findModule(TestNGConfiguration configuration, Module contextModule) {
final Set<String> patterns = configuration.data.getPatterns();
return ourDelegate.findModule(configuration, contextModule, patterns);
return findModule(configuration, contextModule, patterns);
}
@Override
public boolean isConfigurationFromContext(TestNGConfiguration testNGConfiguration, ConfigurationContext context) {
final String type = testNGConfiguration.getPersistantData().TEST_OBJECT;
if (Comparing.equal(type, TestType.PATTERN.getType())) {
return ourDelegate.isConfiguredFromContext(context, testNGConfiguration.getPersistantData().getPatterns());
return isConfiguredFromContext(context, testNGConfiguration.getPersistantData().getPatterns());
}
return false;
}