mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 09:19:13 +07:00
junit/testng: setup module for pattern based config (IDEA-102098)
This commit is contained in:
+10
-2
@@ -119,11 +119,19 @@ public abstract class JavaRuntimeConfigurationProducerBase extends RuntimeConfig
|
||||
configuration.setModule(predefinedModule);
|
||||
return true;
|
||||
}
|
||||
else if (configuration.getConfigurationModule().getModule() == null && contextModule != null) {
|
||||
configuration.setModule(contextModule);
|
||||
final Module module = findModule(configuration, contextModule);
|
||||
if (module != null) {
|
||||
configuration.setModule(module);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected Module findModule(ModuleBasedConfiguration configuration, Module contextModule) {
|
||||
if (configuration.getConfigurationModule().getModule() == null && contextModule != null) {
|
||||
return contextModule;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,9 @@ import com.intellij.execution.util.ExecutionErrorDialog;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
@@ -37,6 +39,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author spleaner
|
||||
@@ -62,6 +66,33 @@ public class JavaExecutionUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Module findModule(final Module contextModule, final Set<String> patterns, final Project project, Condition<PsiClass> isTestMethod) {
|
||||
final Set<Module> modules = new HashSet<Module>();
|
||||
for (String className : patterns) {
|
||||
final PsiClass psiClass = findMainClass(project,
|
||||
className.contains(",") ? className.substring(0, className.indexOf(',')) : className,
|
||||
GlobalSearchScope.allScope(project));
|
||||
if (psiClass != null && isTestMethod.value(psiClass)) {
|
||||
modules.add(ModuleUtilCore.findModuleForPsiElement(psiClass));
|
||||
}
|
||||
}
|
||||
|
||||
if (modules.size() == 1) {
|
||||
final Module nextModule = modules.iterator().next();
|
||||
if (nextModule != null) {
|
||||
return nextModule;
|
||||
}
|
||||
}
|
||||
if (contextModule != null && modules.size() > 1) {
|
||||
final HashSet<Module> moduleDependencies = new HashSet<Module>();
|
||||
ModuleUtilCore.getDependencies(contextModule, moduleDependencies);
|
||||
if (moduleDependencies.containsAll(modules)) {
|
||||
return contextModule;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static final class DefaultRunProfile implements RunProfile {
|
||||
private final JavaParameters myParameters;
|
||||
private final String myContentName;
|
||||
|
||||
@@ -32,10 +32,7 @@ import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.options.SettingsEditor;
|
||||
import com.intellij.openapi.options.SettingsEditorGroup;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
@@ -376,6 +373,13 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
|
||||
patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + methodSufiix);
|
||||
}
|
||||
myData.setPatterns(patterns);
|
||||
final Module module = PatternConfigurationProducer.findModule(this, getConfigurationModule().getModule(), patterns);
|
||||
if (module == null) {
|
||||
myData.setScope(TestSearchScope.WHOLE_PROJECT);
|
||||
setModule(null);
|
||||
} else {
|
||||
setModule(module);
|
||||
}
|
||||
setGeneratedName();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,15 +16,19 @@
|
||||
|
||||
package com.intellij.execution.junit;
|
||||
|
||||
import com.intellij.execution.JavaExecutionUtil;
|
||||
import com.intellij.execution.JavaRunConfigurationExtensionManager;
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.RunnerAndConfigurationSettings;
|
||||
import com.intellij.execution.actions.ConfigurationContext;
|
||||
import com.intellij.execution.configurations.ModuleBasedConfiguration;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -55,6 +59,21 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer {
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Module findModule(ModuleBasedConfiguration configuration, Module contextModule) {
|
||||
final Set<String> patterns = ((JUnitConfiguration)configuration).getPersistentData().getPatterns();
|
||||
return findModule(configuration, contextModule, patterns);
|
||||
}
|
||||
|
||||
public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set<String> patterns) {
|
||||
return JavaExecutionUtil.findModule(contextModule, patterns, configuration.getProject(), new Condition<PsiClass>() {
|
||||
@Override
|
||||
public boolean value(PsiClass psiClass) {
|
||||
return JUnitUtil.isTestClass(psiClass);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static Set<PsiMember> collectTestMembers(PsiElement[] psiElements) {
|
||||
final Set<PsiMember> foundMembers = new LinkedHashSet<PsiMember>();
|
||||
for (PsiElement psiElement : psiElements) {
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.intellij.execution.configurations.RuntimeConfigurationWarning;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.util.JavaParametersUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.progress.impl.BackgroundableProcessIndicator;
|
||||
@@ -121,29 +120,9 @@ public class TestsPattern extends TestPackage {
|
||||
}
|
||||
|
||||
protected void configureClasspath() throws CantRunException {
|
||||
final JUnitConfiguration.Data data = myConfiguration.getPersistentData();
|
||||
final Project project = myConfiguration.getProject();
|
||||
final Set<Module> modules = new HashSet<Module>();
|
||||
for (String className : data.getPatterns()) {
|
||||
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project,
|
||||
className.contains(",")
|
||||
? className.substring(0, className.indexOf(','))
|
||||
: className,
|
||||
GlobalSearchScope.allScope(project));
|
||||
if (psiClass != null && JUnitUtil.isTestClass(psiClass)) {
|
||||
modules.add(ModuleUtil.findModuleForPsiElement(psiClass));
|
||||
}
|
||||
}
|
||||
|
||||
final String jreHome = myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null;
|
||||
|
||||
Module module = myConfiguration.getConfigurationModule().getModule();
|
||||
if (module == null && modules.size() == 1) {
|
||||
final Module nextModule = modules.iterator().next();
|
||||
if (nextModule != null) {
|
||||
module = nextModule;
|
||||
}
|
||||
}
|
||||
final Module module = myConfiguration.getConfigurationModule().getModule();
|
||||
|
||||
if (module != null) {
|
||||
JavaParametersUtil.configureModule(module, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome);
|
||||
|
||||
@@ -29,6 +29,7 @@ import com.intellij.execution.configurations.*;
|
||||
import com.intellij.execution.junit.RefactoringListeners;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.testframework.SourceScope;
|
||||
import com.intellij.execution.testframework.TestSearchScope;
|
||||
import com.intellij.execution.util.JavaParametersUtil;
|
||||
import com.intellij.execution.util.ProgramParametersUtil;
|
||||
import com.intellij.openapi.components.PathMacroManager;
|
||||
@@ -275,6 +276,14 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
|
||||
patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + suffix);
|
||||
}
|
||||
data.setPatterns(patterns);
|
||||
final Module module = TestNGPatternConfigurationProducer.findModule(this, getConfigurationModule().getModule(), patterns);
|
||||
if (module == null) {
|
||||
data.setScope(TestSearchScope.WHOLE_PROJECT);
|
||||
setModule(null);
|
||||
}
|
||||
else {
|
||||
setModule(module);
|
||||
}
|
||||
setGeneratedName();
|
||||
}
|
||||
|
||||
|
||||
+19
@@ -20,15 +20,19 @@
|
||||
*/
|
||||
package com.theoryinpractice.testng.configuration;
|
||||
|
||||
import com.intellij.execution.JavaExecutionUtil;
|
||||
import com.intellij.execution.JavaRunConfigurationExtensionManager;
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.RunnerAndConfigurationSettings;
|
||||
import com.intellij.execution.actions.ConfigurationContext;
|
||||
import com.intellij.execution.configurations.ModuleBasedConfiguration;
|
||||
import com.intellij.execution.junit.JUnitUtil;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.*;
|
||||
import com.theoryinpractice.testng.model.TestData;
|
||||
import com.theoryinpractice.testng.model.TestType;
|
||||
@@ -114,6 +118,21 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu
|
||||
return myElements[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Module findModule(ModuleBasedConfiguration configuration, Module contextModule) {
|
||||
final Set<String> patterns = ((TestNGConfiguration)configuration).data.getPatterns();
|
||||
return findModule(configuration, contextModule, patterns);
|
||||
}
|
||||
|
||||
public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set<String> patterns) {
|
||||
return JavaExecutionUtil.findModule(contextModule, patterns, configuration.getProject(), new Condition<PsiClass>() {
|
||||
@Override
|
||||
public boolean value(PsiClass psiClass) {
|
||||
return TestNGUtil.hasTest(psiClass);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RunnerAndConfigurationSettings findExistingByElement(@NotNull Location location,
|
||||
@NotNull RunnerAndConfigurationSettings[] existingConfigurations,
|
||||
|
||||
Reference in New Issue
Block a user