junit pattern: forbid module chooser - use default module, or module containing all tests or project otherwise (IDEA-64384; IDEA-64386; IDEA-64387)

This commit is contained in:
anna
2011-01-20 16:27:59 +01:00
parent 13bbfcab2a
commit e58ea835ec
4 changed files with 46 additions and 8 deletions
@@ -88,6 +88,10 @@ public class JavaParametersUtil {
if (module == null) {
throw CantRunException.noModuleConfigured(runConfigurationModule.getModuleName());
}
configureModule(module, parameters, classPathType, jreHome);
}
public static void configureModule(Module module, JavaParameters parameters, int classPathType, String jreHome) throws CantRunException {
parameters.configureByModule(module, classPathType, createModuleJdk(module, jreHome));
}
@@ -75,7 +75,7 @@ copy.configuration.action.name=Copy Configuration
junit.configuration.display.name=JUnit
junit.configuration.description=JUnit test configuration
no.junit.error.message=No junit.jar
no.junit.in.scope.error.message=No junit.jar: {0}
no.junit.in.scope.error.message=No junit.jar in {0}
junit.not.found.in.module.error.message=JUnit not found in module ''{0}''
cannot.browse.test.inheritors.dialog.title=Can't Browse TestCase Inheritors
seaching.test.progress.title=Searching For Tests...
@@ -24,6 +24,8 @@ import com.intellij.execution.ExecutionException;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.configurations.*;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
@@ -35,6 +37,7 @@ import com.intellij.util.Function;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class TestsPattern extends TestObject {
@@ -49,22 +52,32 @@ public class TestsPattern extends TestObject {
protected void initialize() throws ExecutionException {
super.initialize();
final JUnitConfiguration.Data data = myConfiguration.getPersistentData();
RunConfigurationModule module = myConfiguration.getConfigurationModule();
JavaParametersUtil.configureModule(module, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS,
myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null);
final Project project = module.getProject();
final Project project = myConfiguration.getProject();
boolean isJUnit4 = false;
final ArrayList<String> classNames = new ArrayList<String>();
final Set<Module> modules = new HashSet<Module>();
for (String className : data.getPatterns()) {
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, className, GlobalSearchScope.allScope(project));
if (psiClass != null && JUnitUtil.isTestClass(psiClass)) {
classNames.add(className);
modules.add(ModuleUtil.findModuleForPsiElement(psiClass));
if (JUnitUtil.isJUnit4TestClass(psiClass)) {
isJUnit4 = true;
}
}
}
final String jreHome = myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null;
Module module = myConfiguration.getConfigurationModule().getModule();
if (module == null && modules.size() == 1 && modules.iterator().next() != null) {
module = modules.iterator().next();
}
if (module != null) {
JavaParametersUtil.configureModule(module, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome);
} else {
JavaParametersUtil.configureProject(project, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome);
}
addClassesListToJavaParameters(classNames, new Function.Self<String, String>(), "", true, isJUnit4);
}
@@ -22,6 +22,7 @@ import com.intellij.execution.junit.JUnitConfiguration;
import com.intellij.execution.junit.JUnitConfigurationType;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.junit.TestClassFilter;
import com.intellij.execution.testframework.SourceScope;
import com.intellij.execution.testframework.TestSearchScope;
import com.intellij.execution.ui.AlternativeJREPanel;
import com.intellij.execution.ui.ClassBrowser;
@@ -36,10 +37,12 @@ import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.ui.ex.MessagesEx;
import com.intellij.openapi.util.IconLoader;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.search.SearchScope;
import com.intellij.util.Icons;
import gnu.trove.TIntArrayList;
import org.jetbrains.annotations.NotNull;
@@ -260,8 +263,14 @@ public class JUnitConfigurable extends SettingsEditor<JUnitConfiguration> {
final TIntArrayList enabledFields = ourEnabledFields.get(newType);
for (int i = 0; i < myTestLocations.length; i++)
getTestLocation(i).setEnabled(enabledFields.contains(i));
if (newType != JUnitConfigurationModel.ALL_IN_PACKAGE) myModule.setEnabled(true);
else onScopeChanged();
if (newType == JUnitConfigurationModel.PATTERN) {
myModule.setEnabled(false);
} else if (newType != JUnitConfigurationModel.ALL_IN_PACKAGE) {
myModule.setEnabled(true);
}
else {
onScopeChanged();
}
}
private static class PackageChooserActionListener extends BrowseModuleValueActionListener {
@@ -287,6 +296,18 @@ public class JUnitConfigurable extends SettingsEditor<JUnitConfiguration> {
textField.setText(text + (text.length() > 0 ? "||" : "") + psiClass.getQualifiedName());
}
@Override
protected ClassFilter.ClassFilterWithScope getFilter() throws NoFilterException {
try {
return TestClassFilter.create(SourceScope.wholeProject(getProject()), null);
}
catch (JUnitUtil.NoJUnitException ignore) {
throw new NoFilterException(new MessagesEx.MessageInfo(getProject(),
ignore.getMessage(),
ExecutionBundle.message("cannot.browse.test.inheritors.dialog.title")));
}
}
@Override
public void actionPerformed(ActionEvent e) {
showDialog();