diff --git a/java/execution/impl/src/com/intellij/execution/JavaTestConfigurationBase.java b/java/execution/impl/src/com/intellij/execution/JavaTestConfigurationBase.java index bcb6eba45425..3f6d281bf439 100644 --- a/java/execution/impl/src/com/intellij/execution/JavaTestConfigurationBase.java +++ b/java/execution/impl/src/com/intellij/execution/JavaTestConfigurationBase.java @@ -45,6 +45,8 @@ public abstract class JavaTestConfigurationBase extends ModuleBasedConfiguration public abstract void beClassConfiguration(PsiClass aClass); public abstract boolean isConfiguredByElement(PsiElement element); + + public abstract String getTestType(); public String prepareParameterizedParameter(String paramSetName) { return paramSetName; diff --git a/java/execution/impl/src/com/intellij/execution/testframework/AbstractJavaTestConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/testframework/AbstractJavaTestConfigurationProducer.java index de370d23df6a..d50b2308e509 100644 --- a/java/execution/impl/src/com/intellij/execution/testframework/AbstractJavaTestConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testframework/AbstractJavaTestConfigurationProducer.java @@ -83,6 +83,10 @@ public abstract class AbstractJavaTestConfigurationProducer patterns = configuration.getPersistentData().getPatterns(); @@ -73,12 +78,9 @@ public class PatternConfigurationProducer extends AbstractPatternBasedConfigurat @Override public boolean isConfigurationFromContext(JUnitConfiguration unitConfiguration, ConfigurationContext context) { - final TestObject testobject = unitConfiguration.getTestObject(); - if (testobject instanceof TestsPattern) { - if (differentParamSet(unitConfiguration, context.getLocation())) return false; - final Set patterns = unitConfiguration.getPersistentData().getPatterns(); - if (isConfiguredFromContext(context, patterns)) return true; - } + if (differentParamSet(unitConfiguration, context.getLocation())) return false; + final Set patterns = unitConfiguration.getPersistentData().getPatterns(); + if (isConfiguredFromContext(context, patterns)) return true; return false; } } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestInClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestInClassConfigurationProducer.java index 627b3e450bce..2fb5bd589a1a 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestInClassConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestInClassConfigurationProducer.java @@ -42,10 +42,26 @@ public class TestInClassConfigurationProducer extends JUnitConfigurationProducer myDelegate.onFirstRun(configuration, fromContext, performRunnable); } + @Override + public boolean isConfigurationFromContext(JUnitConfiguration configuration, ConfigurationContext context) { + if (UniqueIdConfigurationProducer.getNodeIds(context) != null) return false; + return super.isConfigurationFromContext(configuration, context); + } + + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return myDelegate.isApplicableTestType(type, context); + } + private static class JUnitInClassConfigurationProducerDelegate extends AbstractInClassConfigurationProducer { public JUnitInClassConfigurationProducerDelegate() {super(JUnitConfigurationType.getInstance());} + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return JUnitConfiguration.TEST_CLASS.equals(type) || JUnitConfiguration.TEST_METHOD.equals(type); + } + @Override protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, ConfigurationContext context, Ref sourceElement) { return super.setupConfigurationFromContext(configuration, context, sourceElement); diff --git a/plugins/junit/src/com/intellij/execution/junit/UniqueIdConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/UniqueIdConfigurationProducer.java index 183426b63112..512f125f30b2 100644 --- a/plugins/junit/src/com/intellij/execution/junit/UniqueIdConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/UniqueIdConfigurationProducer.java @@ -8,7 +8,6 @@ import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.testframework.AbstractTestProxy; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiElement; import com.intellij.psi.search.GlobalSearchScope; @@ -28,28 +27,36 @@ public class UniqueIdConfigurationProducer extends JUnitConfigurationProducer { protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, ConfigurationContext context, Ref sourceElement) { - final Project project = configuration.getProject(); - DataContext dataContext = context.getDataContext(); - AbstractTestProxy[] testProxies = dataContext.getData(AbstractTestProxy.DATA_KEYS); - if (testProxies == null) return false; - RunConfiguration runConfiguration = dataContext.getData(RunConfiguration.DATA_KEY); - if (!(runConfiguration instanceof JUnitConfiguration)) return false; - Module module = ((JUnitConfiguration)runConfiguration).getConfigurationModule().getModule(); - configuration.setModule(module); - GlobalSearchScope searchScope = - module != null ? GlobalSearchScope.moduleWithDependenciesScope(module) : GlobalSearchScope.projectScope(project); - String[] nodeIds = - Arrays.stream(testProxies).map(testProxy -> TestUniqueId.getEffectiveNodeId(testProxy, project, searchScope)) - .filter(Objects::nonNull) - .toArray(String[]::new); + String[] nodeIds = getNodeIds(context); if (nodeIds == null || nodeIds.length == 0) return false; final JUnitConfiguration.Data data = configuration.getPersistentData(); data.setUniqueIds(nodeIds); data.TEST_OBJECT = JUnitConfiguration.TEST_UNIQUE_ID; configuration.setGeneratedName(); + setupConfigurationModule(context, configuration); return true; } + public static String[] getNodeIds(ConfigurationContext context) { + DataContext dataContext = context.getDataContext(); + AbstractTestProxy[] testProxies = dataContext.getData(AbstractTestProxy.DATA_KEYS); + if (testProxies == null) return null; + RunConfiguration runConfiguration = dataContext.getData(RunConfiguration.DATA_KEY); + if (!(runConfiguration instanceof JUnitConfiguration)) return null; + Module module = ((JUnitConfiguration)runConfiguration).getConfigurationModule().getModule(); + + GlobalSearchScope searchScope = + module != null ? GlobalSearchScope.moduleWithDependenciesScope(module) : GlobalSearchScope.projectScope(context.getProject()); + return + Arrays.stream(testProxies).map(testProxy -> TestUniqueId.getEffectiveNodeId(testProxy, context.getProject(), searchScope)) + .filter(Objects::nonNull) + .toArray(String[]::new); + } + + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return JUnitConfiguration.TEST_UNIQUE_ID.equals(type); + } //prefer to method @Override diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPackageConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPackageConfigurationProducer.java index 9a5a5727de04..ab92489b020d 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPackageConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPackageConfigurationProducer.java @@ -58,4 +58,8 @@ public abstract class AbstractTestNGPackageConfigurationProducer extends TestNGC return true; } + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return TestType.PACKAGE.getType().equals(type); + } } \ No newline at end of file diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPatternConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPatternConfigurationProducer.java index 54c9ca00f07c..eeb078f5394a 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPatternConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGPatternConfigurationProducer.java @@ -20,7 +20,6 @@ import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer; import com.intellij.openapi.module.Module; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiElement; import com.theoryinpractice.testng.model.TestData; @@ -61,11 +60,12 @@ public abstract class AbstractTestNGPatternConfigurationProducer extends Abstrac @Override public boolean isConfigurationFromContext(TestNGConfiguration testNGConfiguration, ConfigurationContext context) { - final String type = testNGConfiguration.getPersistantData().TEST_OBJECT; - if (Comparing.equal(type, TestType.PATTERN.getType())) { - if (differentParamSet(testNGConfiguration, context.getLocation())) return false; - return isConfiguredFromContext(context, testNGConfiguration.getPersistantData().getPatterns()); - } - return false; + if (differentParamSet(testNGConfiguration, context.getLocation())) return false; + return isConfiguredFromContext(context, testNGConfiguration.getPersistantData().getPatterns()); + } + + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return TestType.PATTERN.getType().equals(type); } } \ No newline at end of file diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java index fd7577764048..f2afa9b73467 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGSuiteConfigurationProducer.java @@ -55,4 +55,9 @@ public abstract class AbstractTestNGSuiteConfigurationProducer extends TestNGCon sourceElement.set(containingFile); return true; } + + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return TestType.SUITE.getType().equals(type); + } } \ No newline at end of file diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index e6b1c5feced3..74338dff9a32 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -211,6 +211,11 @@ public class TestNGConfiguration extends JavaTestConfigurationBase { return TestNGTestObject.fromConfig(this).isConfiguredByElement(element); } + @Override + public String getTestType() { + return getPersistantData().TEST_OBJECT; + } + @Override public String prepareParameterizedParameter(String paramSetName) { return TestNGConfigurationProducer.getInvocationNumber(paramSetName); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java index 328cc963f48a..90c97f5cf557 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java @@ -21,6 +21,7 @@ import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.testframework.AbstractInClassConfigurationProducer; import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiElement; +import com.theoryinpractice.testng.model.TestType; import org.jetbrains.annotations.NotNull; public class TestNGInClassConfigurationProducer extends TestNGConfigurationProducer { @@ -43,6 +44,11 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu return myDelegate.setupConfigurationFromContext(configuration, context, sourceElement); } + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return myDelegate.isApplicableTestType(type, context); + } + private static class TestNGInClassConfigurationProducerDelegate extends AbstractInClassConfigurationProducer { protected TestNGInClassConfigurationProducerDelegate(ConfigurationType configurationType) { super(configurationType); @@ -54,5 +60,10 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu Ref sourceElement) { return super.setupConfigurationFromContext(configuration, context, sourceElement); } + + @Override + protected boolean isApplicableTestType(String type, ConfigurationContext context) { + return TestType.CLASS.getType().equals(type) || TestType.METHOD.getType().equals(type); + } } }